32-bit and x32 user-space environments may be running under Linux/x86-64 kernel. Using "uname -m" isn't sufficient to properly detect the canonical system name for 32-bit and x32 user-space environments. This patch checks if compiler is configured for 64-bit, 32-bit or x32 objects under Linux/x86-64 kernel.
Tested with 64-bit, 32-bit and x32 user-space environments under Linux/x86-64 kernel. I am not sure if this will ever be accepted in upstream since the config.guess maintainer doesn't want to add a new use of set_cc_for_build to config.guess. set_cc_for_build is used for Linux: case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; Adding another use for Linux/x86-64 solves this issue. I'd like to see this fixed in gcc, binutils and glibc even if it won't be fixed in upstream. Thanks. H.J. --- PR bootstrap/65176 * config.guess (x86_64:Linux:*:*): Check if compiler is configured for 64-bit, 32-bit or x32 objects. --- config.guess | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/config.guess b/config.guess index dbfb978..e5a2d41 100755 --- a/config.guess +++ b/config.guess @@ -1021,7 +1021,26 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + eval $set_cc_for_build + LINUX_MACHINE="i686" + LINUX_LIBC=${LIBC} + # If there is a compiler, see if it is configured for 64-bit, + # 32-bit or x32 objects. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __x86_64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + LINUX_MACHINE="x86_64" + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LINUX_LIBC=gnux32 + fi + fi + fi + echo ${LINUX_MACHINE}-unknown-linux-${LINUX_LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -- 1.9.3 _______________________________________________ config-patches mailing list config-patches@gnu.org https://lists.gnu.org/mailman/listinfo/config-patches