[PATCH] PR bootstrap/65176: config.guess failed to guess machine with 64-bit kernel and 32-bit user space
H.J. Lu
hongjiu.lu@intel.com
Mon Feb 23 17:45:00 GMT 2015
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
More information about the Gcc-patches
mailing list