diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-01-21 22:21:27 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-01-21 22:21:27 +0100 |
commit | 8b08ef255bd6e37c4f29e99d45a156bd5c007aa6 (patch) | |
tree | 427536f9380e1647b1aaf6178db3c701d1932f19 | |
parent | f1eac182405b9540c9ddecc9d72459fe82aa3f61 (diff) | |
download | gcc-8b08ef255bd6e37c4f29e99d45a156bd5c007aa6.zip gcc-8b08ef255bd6e37c4f29e99d45a156bd5c007aa6.tar.gz gcc-8b08ef255bd6e37c4f29e99d45a156bd5c007aa6.tar.bz2 |
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
4 files changed, 17 insertions, 4 deletions
diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index cb0f98c..de7c633 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -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 diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc index 7ea8706..199a842 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc @@ -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); diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h index 139fe0a..631983a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h @@ -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; diff --git a/libsanitizer/sanitizer_common/sanitizer_posix.cc b/libsanitizer/sanitizer_common/sanitizer_posix.cc index 229870e..adb1b2a 100644 --- a/libsanitizer/sanitizer_common/sanitizer_posix.cc +++ b/libsanitizer/sanitizer_common/sanitizer_posix.cc @@ -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 |