summaryrefslogtreecommitdiff
path: root/autoconf
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2009-09-29 05:40:45 +0000
committerNick Lewycky <nicholas@mxc.ca>2009-09-29 05:40:45 +0000
commit558aef86c2d923e2c4bb62a7cf328dd5869525de (patch)
tree6c3105edc31fa3f0b8c9220b2ffbb21c1f9d4a98 /autoconf
parent0475c9170e9621292a48c688c3976031be5650bb (diff)
downloadllvm-558aef86c2d923e2c4bb62a7cf328dd5869525de.tar.gz
llvm-558aef86c2d923e2c4bb62a7cf328dd5869525de.tar.bz2
llvm-558aef86c2d923e2c4bb62a7cf328dd5869525de.tar.xz
On Linux, uname -m reports the kernel type. Some Linux systems are 32-bit but
with a 64-bit kernel, which confuses LLVM. Make LLVM double-check this by checking which defines the system gcc actually sets. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83047 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'autoconf')
-rw-r--r--autoconf/configure.ac8
-rw-r--r--autoconf/m4/linux_mixed_64_32.m417
2 files changed, 25 insertions, 0 deletions
diff --git a/autoconf/configure.ac b/autoconf/configure.ac
index e305869342..bdd665ccd6 100644
--- a/autoconf/configure.ac
+++ b/autoconf/configure.ac
@@ -284,6 +284,14 @@ if test "$llvm_cv_target_arch" = "Unknown" ; then
AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
fi
+dnl Handle 32-bit linux systems running a 64-bit kernel.
+if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
+ AC_IS_LINUX_MIXED
+ if test "$llvm_cv_linux_mixed" = "yes"; then
+ llvm_cv_target_arch="x86"
+ fi
+fi
+
# Determine the LLVM native architecture for the target
case "$llvm_cv_target_arch" in
x86) LLVM_NATIVE_ARCH="X86" ;;
diff --git a/autoconf/m4/linux_mixed_64_32.m4 b/autoconf/m4/linux_mixed_64_32.m4
new file mode 100644
index 0000000000..123491f87e
--- /dev/null
+++ b/autoconf/m4/linux_mixed_64_32.m4
@@ -0,0 +1,17 @@
+#
+# Some Linux machines run a 64-bit kernel with a 32-bit userspace. 'uname -m'
+# shows these as x86_64. Ask the system 'gcc' what it thinks.
+#
+AC_DEFUN([AC_IS_LINUX_MIXED],
+[AC_CACHE_CHECK(for 32-bit userspace on 64-bit system,llvm_cv_linux_mixed,
+[ AC_LANG_PUSH([C])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[#ifndef __x86_64__
+ error: Not x86-64 even if uname says so!
+ #endif
+ ]])],
+ [llvm_cv_linux_mixed=no],
+ [llvm_cv_linux_mixed=yes])
+ AC_LANG_POP([C])
+])
+])