This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] PR bootstrap/65176: config.guess failed to guess machine with 64-bit kernel and 32-bit user space
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org, GNU C Library <libc-alpha at sourceware dot org>
- Cc: binutils at sourceware dot org, config-patches at gnu dot org
- Date: Mon, 23 Feb 2015 09:17:43 -0800
- Subject: [PATCH] PR bootstrap/65176: config.guess failed to guess machine with 64-bit kernel and 32-bit user space
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
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