[compiler-rt] r366225 - [TSan] Improve handling of stack pointer mangling in {set, long}jmp, pt.10
Julian Lettner via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 16 09:22:05 PDT 2019
Author: yln
Date: Tue Jul 16 09:22:04 2019
New Revision: 366225
URL: http://llvm.org/viewvc/llvm-project?rev=366225&view=rev
Log:
[TSan] Improve handling of stack pointer mangling in {set,long}jmp, pt.10
Remove now-unused assembly code for determining xor key on
Linux/AArch64. This is the final commit of this refactoring.
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_aarch64.S
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc?rev=366225&r1=366224&r2=366225&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform_linux.cc Tue Jul 16 09:22:04 2019
@@ -67,11 +67,6 @@ extern "C" void *__libc_stack_end;
void *__libc_stack_end = 0;
#endif
-#if SANITIZER_LINUX && defined(__aarch64__)
-__tsan::uptr InitializeGuardPtr() __attribute__((visibility("hidden")));
-extern "C" __tsan::uptr _tsan_pointer_chk_guard;
-#endif
-
#if SANITIZER_LINUX && defined(__aarch64__) && !SANITIZER_GO
# define INIT_LONGJMP_XOR_KEY 1
#else
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_aarch64.S
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_aarch64.S?rev=366225&r1=366224&r2=366225&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_aarch64.S (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_aarch64.S Tue Jul 16 09:22:04 2019
@@ -3,14 +3,6 @@
#include "sanitizer_common/sanitizer_asm.h"
-#if !defined(__APPLE__)
-.section .bss
-.type __tsan_pointer_chk_guard, %object
-ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__tsan_pointer_chk_guard))
-__tsan_pointer_chk_guard:
-.zero 8
-#endif
-
#if defined(__APPLE__)
.align 2
@@ -40,57 +32,6 @@ _sigsetjmp$non_lazy_ptr:
.align 3
#endif
-#if !defined(__APPLE__)
-// GLIBC mangles the function pointers in jmp_buf (used in {set,long}*jmp
-// functions) by XORing them with a random guard pointer. For AArch64 it is a
-// global variable rather than a TCB one (as for x86_64/powerpc) and althought
-// its value is exported by the loader, it lies within a private GLIBC
-// namespace (meaning it should be only used by GLIBC itself and the ABI is
-// not stable). So InitializeGuardPtr obtains the pointer guard value by
-// issuing a setjmp and checking the resulting pointers values against the
-// original ones.
-ASM_HIDDEN(_Z18InitializeGuardPtrv)
-.global _Z18InitializeGuardPtrv
-ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_Z18InitializeGuardPtrv))
-_Z18InitializeGuardPtrv:
- CFI_STARTPROC
- // Allocates a jmp_buf for the setjmp call.
- stp x29, x30, [sp, -336]!
- CFI_DEF_CFA_OFFSET (336)
- CFI_OFFSET (29, -336)
- CFI_OFFSET (30, -328)
- add x29, sp, 0
- CFI_DEF_CFA_REGISTER (29)
- add x0, x29, 24
-
- // Call libc setjmp that mangle the stack pointer value
- adrp x1, :got:_ZN14__interception12real__setjmpE
- ldr x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
- ldr x1, [x1]
- blr x1
-
- // glibc setjmp mangles both the frame pointer (FP, pc+4 on blr) and the
- // stack pointer (SP). FP will be placed on ((uintptr*)jmp_buf)[11] and
- // SP at ((uintptr*)jmp_buf)[13].
- // The mangle operation is just 'value' xor 'pointer guard value' and
- // if we know the original value (SP) and the expected one, we can derive
- // the guard pointer value.
- mov x0, sp
-
- // Loads the mangled SP pointer.
- ldr x1, [x29, 128]
- eor x0, x0, x1
- adrp x2, __tsan_pointer_chk_guard
- str x0, [x2, #:lo12:__tsan_pointer_chk_guard]
- ldp x29, x30, [sp], 336
- CFI_RESTORE (30)
- CFI_RESTORE (19)
- CFI_DEF_CFA (31, 0)
- ret
- CFI_ENDPROC
-ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_Z18InitializeGuardPtrv))
-#endif
-
ASM_HIDDEN(__tsan_setjmp)
.comm _ZN14__interception11real_setjmpE,8,8
.globl ASM_SYMBOL_INTERCEPTOR(setjmp)
More information about the llvm-commits
mailing list