diff -u gcc-5-5.4.0/debian/changelog gcc-5-5.4.0/debian/changelog --- gcc-5-5.4.0/debian/changelog +++ gcc-5-5.4.0/debian/changelog @@ -1,3 +1,9 @@ +gcc-5 (5.4.0-6ubuntu1~16.04.4+arm64asan.1) xenial; urgency=medium + + * Fix hang w/ asan binaries on arm64. LP: #1709727. + + -- dann frazier Wed, 09 Aug 2017 19:19:44 -0400 + gcc-5 (5.4.0-6ubuntu1~16.04.4) xenial-security; urgency=medium * SRU diff -u gcc-5-5.4.0/debian/rules.patch gcc-5-5.4.0/debian/rules.patch --- gcc-5-5.4.0/debian/rules.patch +++ gcc-5-5.4.0/debian/rules.patch @@ -107,6 +107,8 @@ $(if $(with_linaro_branch),vulcan-cpu-linaro) \ pr71709 \ pr72863 \ + sanitizer-Fix-a-crash-in-SizeClassAllocator32-with-a \ + asan-Enable-48-bit-VMA-support-on-aarch64 \ # this is still needed on powerpc, e.g. firefox and insighttoolkit4 will ftbfs. ifneq (,$(filter $(DEB_TARGET_ARCH),powerpc)) only in patch2: unchanged: --- gcc-5-5.4.0.orig/debian/patches/asan-Enable-48-bit-VMA-support-on-aarch64.diff +++ gcc-5-5.4.0/debian/patches/asan-Enable-48-bit-VMA-support-on-aarch64.diff @@ -0,0 +1,27 @@ +Description: [asan] Enable 48-bit VMA support on aarch64 + This patch adds 48-bits VMA support for asan on aarch64. The current + 47-bit mask is not suffice since on aarch64 kernel with 48-bit vma + (default on ubuntu 16.04) the process may use full VMA range as: + . + [...] + ffffa39a7000-ffffa39a8000 r--p 00000000 00:00 0 [vvar] + ffffa39a8000-ffffa39a9000 r-xp 00000000 00:00 0 [vdso] + ffffa39a9000-ffffa39aa000 r--p 0001c000 08:02 13631554 /lib/aarch64-linux-gnu/ld-2.23.so + ffffa39aa000-ffffa39ac000 rw-p 0001d000 08:02 13631554 /lib/aarch64-linux-gnu/ld-2.23.so + ffffc2227000-ffffc2248000 rw-p 00000000 00:00 0 [stack] +Author: Adhemerval Zanella +Origin: http://llvm.org/svn/llvm-project/compiler-rt/trunk@275792 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1709727 +Applied-Upstream: svn://gcc.gnu.org/svn/gcc/trunk@241977 + +--- a/src/libsanitizer/sanitizer_common/sanitizer_platform.h 2015-05-12 07:02:09.000000000 +0000 ++++ b/src/libsanitizer/sanitizer_common/sanitizer_platform.h 2017-08-09 23:23:59.391444591 +0000 +@@ -91,7 +91,7 @@ + // e.g. on AArch64 it is most likely (1ULL << 39). Larger values will still work + // but will consume more memory for TwoLevelByteMap. + #if defined(__aarch64__) +-# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 39) ++# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 48) + #else + # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47) + #endif only in patch2: unchanged: --- gcc-5-5.4.0.orig/debian/patches/sanitizer-Fix-a-crash-in-SizeClassAllocator32-with-a.diff +++ gcc-5-5.4.0/debian/patches/sanitizer-Fix-a-crash-in-SizeClassAllocator32-with-a.diff @@ -0,0 +1,22 @@ +Description: [sanitizer] Fix a crash in SizeClassAllocator32 with an out-of-range pointer + . + This happens on a 64-bit platform that uses SizeClassAllocator32 (e.g. ASan on AArch64). When querying a large invalid pointer, `__sanitizer_get_allocated_size(0xdeadbeefdeadbeef)`, an assertion will fail. This patch changes PointerIsMine to return false if the pointer is outside of [kSpaceBeg, kSpaceBeg + kSpaceSize). + . + Differential Revision: http://reviews.llvm.org/D15008 +Author: Kuba Brecka +Origin: http://llvm.org/svn/llvm-project/compiler-rt/trunk@268243 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1709727 +Applied-Upstream: svn://gcc.gnu.org/svn/gcc/trunk@241977 + +--- a/src/libsanitizer/sanitizer_common/sanitizer_allocator.h 2015-10-21 01:32:45.340398000 -0600 ++++ b/src/libsanitizer/sanitizer_common/sanitizer_allocator.h 2017-08-09 11:58:12.564883000 -0600 +@@ -747,6 +747,9 @@ + } + + bool PointerIsMine(const void *p) { ++ uptr mem = reinterpret_cast(p); ++ if (mem < kSpaceBeg || mem >= kSpaceBeg + kSpaceSize) ++ return false; + return GetSizeClass(p) != 0; + } +