Path: blob/main/contrib/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S
35269 views
// The content of this file is AArch64-only:1#if defined(__aarch64__)23#include "sanitizer_common/sanitizer_asm.h"4#include "builtins/assembly.h"56#if !defined(__APPLE__)7.section .text8#else9.section __TEXT,__text10.align 311#endif1213ASM_HIDDEN(__tsan_setjmp)14.comm _ZN14__interception11real_setjmpE,8,815.globl ASM_SYMBOL_INTERCEPTOR(setjmp)16ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))17ASM_SYMBOL_INTERCEPTOR(setjmp):18CFI_STARTPROC19BTI_C2021// Save frame/link register22stp x29, x30, [sp, -32]!23CFI_DEF_CFA_OFFSET (32)24CFI_OFFSET (29, -32)25CFI_OFFSET (30, -24)2627// Adjust the SP for previous frame28add x29, sp, 029CFI_DEF_CFA_REGISTER (29)3031// Save env parameter32str x0, [sp, 16]33CFI_OFFSET (0, -16)3435// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`36add x0, x29, 323738// call tsan interceptor39bl ASM_SYMBOL(__tsan_setjmp)4041// Restore env parameter42ldr x0, [sp, 16]43CFI_RESTORE (0)4445// Restore frame/link register46ldp x29, x30, [sp], 3247CFI_RESTORE (29)48CFI_RESTORE (30)49CFI_DEF_CFA (31, 0)5051// tail jump to libc setjmp52#if !defined(__APPLE__)53adrp x1, :got:_ZN14__interception11real_setjmpE54ldr x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]55ldr x1, [x1]56#else57adrp x1, _setjmp@GOTPAGE58ldr x1, [x1, _setjmp@GOTPAGEOFF]59#endif60br x16162CFI_ENDPROC63ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))6465.comm _ZN14__interception12real__setjmpE,8,866.globl ASM_SYMBOL_INTERCEPTOR(_setjmp)67ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))68ASM_SYMBOL_INTERCEPTOR(_setjmp):69CFI_STARTPROC70BTI_C7172// Save frame/link register73stp x29, x30, [sp, -32]!74CFI_DEF_CFA_OFFSET (32)75CFI_OFFSET (29, -32)76CFI_OFFSET (30, -24)7778// Adjust the SP for previous frame79add x29, sp, 080CFI_DEF_CFA_REGISTER (29)8182// Save env parameter83str x0, [sp, 16]84CFI_OFFSET (0, -16)8586// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`87add x0, x29, 328889// call tsan interceptor90bl ASM_SYMBOL(__tsan_setjmp)9192// Restore env parameter93ldr x0, [sp, 16]94CFI_RESTORE (0)9596// Restore frame/link register97ldp x29, x30, [sp], 3298CFI_RESTORE (29)99CFI_RESTORE (30)100CFI_DEF_CFA (31, 0)101102// tail jump to libc setjmp103#if !defined(__APPLE__)104adrp x1, :got:_ZN14__interception12real__setjmpE105ldr x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]106ldr x1, [x1]107#else108adrp x1, __setjmp@GOTPAGE109ldr x1, [x1, __setjmp@GOTPAGEOFF]110#endif111br x1112113CFI_ENDPROC114ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))115116.comm _ZN14__interception14real_sigsetjmpE,8,8117.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)118ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))119ASM_SYMBOL_INTERCEPTOR(sigsetjmp):120CFI_STARTPROC121BTI_C122123// Save frame/link register124stp x29, x30, [sp, -32]!125CFI_DEF_CFA_OFFSET (32)126CFI_OFFSET (29, -32)127CFI_OFFSET (30, -24)128129// Adjust the SP for previous frame130add x29, sp, 0131CFI_DEF_CFA_REGISTER (29)132133// Save env and savesigs parameter134stp x0, x1, [sp, 16]135CFI_OFFSET (0, -16)136CFI_OFFSET (1, -8)137138// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`139add x0, x29, 32140141// call tsan interceptor142bl ASM_SYMBOL(__tsan_setjmp)143144// Restore env and savesigs parameter145ldp x0, x1, [sp, 16]146CFI_RESTORE (0)147CFI_RESTORE (1)148149// Restore frame/link register150ldp x29, x30, [sp], 32151CFI_RESTORE (29)152CFI_RESTORE (30)153CFI_DEF_CFA (31, 0)154155// tail jump to libc sigsetjmp156#if !defined(__APPLE__)157adrp x2, :got:_ZN14__interception14real_sigsetjmpE158ldr x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]159ldr x2, [x2]160#else161adrp x2, _sigsetjmp@GOTPAGE162ldr x2, [x2, _sigsetjmp@GOTPAGEOFF]163#endif164br x2165CFI_ENDPROC166ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))167168#if !defined(__APPLE__)169.comm _ZN14__interception16real___sigsetjmpE,8,8170.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)171ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))172ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):173CFI_STARTPROC174BTI_C175176// Save frame/link register177stp x29, x30, [sp, -32]!178CFI_DEF_CFA_OFFSET (32)179CFI_OFFSET (29, -32)180CFI_OFFSET (30, -24)181182// Adjust the SP for previous frame183add x29, sp, 0184CFI_DEF_CFA_REGISTER (29)185186// Save env and savesigs parameter187stp x0, x1, [sp, 16]188CFI_OFFSET (0, -16)189CFI_OFFSET (1, -8)190191// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`192add x0, x29, 32193194// call tsan interceptor195bl ASM_SYMBOL(__tsan_setjmp)196197// Restore env and savesigs parameter198ldp x0, x1, [sp, 16]199CFI_RESTORE (0)200CFI_RESTORE (1)201202// Restore frame/link register203ldp x29, x30, [sp], 32204CFI_RESTORE (29)205CFI_RESTORE (30)206CFI_DEF_CFA (31, 0)207208// tail jump to libc __sigsetjmp209#if !defined(__APPLE__)210adrp x2, :got:_ZN14__interception16real___sigsetjmpE211ldr x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]212ldr x2, [x2]213#else214adrp x2, ASM_SYMBOL(__sigsetjmp)@page215add x2, x2, ASM_SYMBOL(__sigsetjmp)@pageoff216#endif217br x2218CFI_ENDPROC219ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))220#endif221222NO_EXEC_STACK_DIRECTIVE223224GNU_PROPERTY_BTI_PAC225226#endif227228229