Commit 8b08ef25 by Jakub Jelinek Committed by Jakub Jelinek

re PR sanitizer/64435 (Bootstrap failure in libsanitizer on AArch64 with Linux kernel <= 3.15)

	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
parent f1eac182
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> 2015-01-20 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/64632 PR sanitizer/64632
......
...@@ -1059,7 +1059,13 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid); ...@@ -1059,7 +1059,13 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
CHECK_SIZE_AND_OFFSET(ipc_perm, gid); CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
CHECK_SIZE_AND_OFFSET(ipc_perm, cuid); CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
CHECK_SIZE_AND_OFFSET(ipc_perm, cgid); 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); CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
#endif
CHECK_TYPE_SIZE(shmid_ds); CHECK_TYPE_SIZE(shmid_ds);
CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm); CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm);
......
...@@ -167,7 +167,7 @@ namespace __sanitizer { ...@@ -167,7 +167,7 @@ namespace __sanitizer {
unsigned __seq; unsigned __seq;
u64 __unused1; u64 __unused1;
u64 __unused2; u64 __unused2;
#elif defined(__mips__) #elif defined(__mips__) || defined(__aarch64__)
unsigned int mode; unsigned int mode;
unsigned short __seq; unsigned short __seq;
unsigned short __pad1; unsigned short __pad1;
......
...@@ -76,16 +76,15 @@ static uptr GetKernelAreaSize() { ...@@ -76,16 +76,15 @@ static uptr GetKernelAreaSize() {
uptr GetMaxVirtualAddress() { uptr GetMaxVirtualAddress() {
#if SANITIZER_WORDSIZE == 64 #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. // 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 // We somehow need to figure out which one we are using now and choose
// one of 0x00000fffffffffffUL and 0x00003fffffffffffUL. // one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
// Note that with 'ulimit -s unlimited' the stack is moved away from the top // 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. // of the address space, so simply checking the stack address is not enough.
// This should (does) work for both PowerPC64 Endian modes. // 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; return (1ULL << (MostSignificantSetBitIndex(GET_CURRENT_FRAME()) + 1)) - 1;
# elif defined(__aarch64__)
return (1ULL << 39) - 1;
# elif defined(__mips64) # elif defined(__mips64)
return (1ULL << 40) - 1; return (1ULL << 40) - 1;
# else # else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment