re PR sanitizer/64435 (Bootstrap failure in libsanitizer on AArch64 with Linux kernel...
authorJakub Jelinek <jakub@redhat.com>
Wed, 21 Jan 2015 21:21:27 +0000 (22:21 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 21 Jan 2015 21:21:27 +0000 (22:21 +0100)
PR sanitizer/64435
* sanitizer_common/sanitizer_platform_limits_posix.h: Cherry pick
upstream r226637.
* sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
* sanitizer_common/sanitizer_posix.cc: Cherry pick upstream r226639.

From-SVN: r219968

libsanitizer/ChangeLog
libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
libsanitizer/sanitizer_common/sanitizer_posix.cc

index cb0f98c7e834d0819fff255a03793a2ef9ad7e35..de7c633c6d7dbff458ebd1d417a72e7b1301c481 100644 (file)
@@ -1,3 +1,11 @@
+2015-01-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/64435
+       * sanitizer_common/sanitizer_platform_limits_posix.h: Cherry pick
+       upstream r226637.
+       * sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
+       * sanitizer_common/sanitizer_posix.cc: Cherry pick upstream r226639.
+
 2015-01-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/64632
index 7ea8706dfc69c26322baca117add0e1f9a40a780..199a842447a52a7365886894c23ea1e4dd5091f6 100644 (file)
@@ -1059,7 +1059,13 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
 CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
 CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
 CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
+#ifndef __GLIBC_PREREQ
+#define __GLIBC_PREREQ(x, y) 0
+#endif
+#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)
+/* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
 CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
+#endif
 
 CHECK_TYPE_SIZE(shmid_ds);
 CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm);
index 139fe0a1821563ee44a15cd3334e1c0c05ab85c5..631983a5fdb1963a2bc1d5dfe549ce27569de1c0 100644 (file)
@@ -167,7 +167,7 @@ namespace __sanitizer {
     unsigned __seq;
     u64 __unused1;
     u64 __unused2;
-#elif defined(__mips__)
+#elif defined(__mips__) || defined(__aarch64__)
     unsigned int mode;
     unsigned short __seq;
     unsigned short __pad1;
index 229870e00dc34db6d3d9ede7ff7978afb33cd2ff..adb1b2a9d6801ac326f9ba139bf99d8b1c86e598 100644 (file)
@@ -76,16 +76,15 @@ static uptr GetKernelAreaSize() {
 
 uptr GetMaxVirtualAddress() {
 #if SANITIZER_WORDSIZE == 64
-# if defined(__powerpc64__)
+# if defined(__powerpc64__) || defined(__aarch64__)
   // On PowerPC64 we have two different address space layouts: 44- and 46-bit.
   // We somehow need to figure out which one we are using now and choose
   // one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
   // Note that with 'ulimit -s unlimited' the stack is moved away from the top
   // of the address space, so simply checking the stack address is not enough.
   // This should (does) work for both PowerPC64 Endian modes.
+  // Similarly, aarch64 has multiple address space layouts: 39, 42 and 47-bit.
   return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
-# elif defined(__aarch64__)
-  return (1ULL << 39) - 1;
 # elif defined(__mips64)
   return (1ULL << 40) - 1;
 # else