2626 ldp x1 , x2 , [ sp ], # 16
2727.endm
2828
29+ .macro LOAD_HANDLER_ADDR reg handler
30+ #if !defined(XRAY_PIC)
31+ adrp \reg , ASM_SYMBOL(\handler)
32+ ldr \reg , [ \reg , :lo12:ASM_SYMBOL(\handler) ]
33+ #else
34+ adrp \reg , :got:ASM_SYMBOL(\handler)
35+ ldr \reg , [ \reg , :got_lo12:ASM_SYMBOL(\handler) ]
36+ ldr \reg , [ \reg ]
37+ #endif
38+ .endm
39+
2940.text
3041.p2align 2
3142. global ASM_SYMBOL(__xray_FunctionEntry)
@@ -42,8 +53,7 @@ ASM_SYMBOL(__xray_FunctionEntry):
4253 SAVE_REGISTERS
4354
4455 // Load the handler function pointer.
45- adrp x2 , ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
46- ldr x2 , [ x2 , #:lo12:ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE) ]
56+ LOAD_HANDLER_ADDR x2 , _ZN6__xray19XRayPatchedFunctionE
4757 cbz x2 , 1f
4858 // Set w0 to the function ID (w17). Set x1 to XRayEntryType::ENTRY = 0 .
4959 mov w0 , w17
@@ -69,8 +79,7 @@ ASM_SYMBOL(__xray_FunctionExit):
6979 SAVE_REGISTERS
7080
7181 // Load the handler function pointer into x2.
72- adrp x2 , ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
73- ldr x2 , [ x2 , #:lo12:ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE) ]
82+ LOAD_HANDLER_ADDR x2 , _ZN6__xray19XRayPatchedFunctionE
7483 cbz x2 , 1f
7584 // Set w0 to the function ID (w17). Set x1 to XRayEntryType::EXIT = 1 .
7685 mov w0 , w17
@@ -96,8 +105,7 @@ ASM_SYMBOL(__xray_FunctionTailExit):
96105 // Save the registers which may be modified by the handler function.
97106 SAVE_REGISTERS
98107 // Load the handler function pointer into x2.
99- adrp x2 , ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
100- ldr x2 , [ x2 , #:lo12:ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE) ]
108+ LOAD_HANDLER_ADDR x2 , _ZN6__xray19XRayPatchedFunctionE
101109 cbz x2 , 1f
102110 // Set w0 to the function ID (w17). Set x1 to XRayEntryType::TAIL = 2 .
103111 mov w0 , w17
@@ -118,13 +126,11 @@ ASM_SYMBOL(__xray_ArgLoggerEntry):
118126 // Push the registers which may be modified by the handler function.
119127 SAVE_REGISTERS
120128
121- adrp x8 , ASM_SYMBOL(_ZN6__xray13XRayArgLoggerE)
122- ldr x8 , [ x8 , #:lo12:ASM_SYMBOL(_ZN6__xray13XRayArgLoggerE) ]
129+ LOAD_HANDLER_ADDR x8 , _ZN6__xray13XRayArgLoggerE
123130 cbnz x8 , 2f
124131
125132 // Load the handler function pointer.
126- adrp x8 , ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)
127- ldr x8 , [ x8 , #:lo12:ASM_SYMBOL(_ZN6__xray19XRayPatchedFunctionE) ]
133+ LOAD_HANDLER_ADDR x8 , _ZN6__xray19XRayPatchedFunctionE
128134 cbz x8 , 1f
129135
1301362 :
@@ -144,8 +150,7 @@ ASM_SIZE(__xray_ArgLoggerEntry)
144150ASM_TYPE_FUNCTION(__xray_CustomEvent)
145151ASM_SYMBOL(__xray_CustomEvent):
146152 SAVE_REGISTERS
147- adrp x8 , ASM_SYMBOL(_ZN6__xray22XRayPatchedCustomEventE)
148- ldr x8 , [ x8 , #:lo12:ASM_SYMBOL(_ZN6__xray22XRayPatchedCustomEventE) ]
153+ LOAD_HANDLER_ADDR x8 , _ZN6__xray22XRayPatchedCustomEventE
149154 cbz x8 , 1f
150155 blr x8
1511561 :
@@ -157,8 +162,7 @@ ASM_SIZE(__xray_CustomEvent)
157162ASM_TYPE_FUNCTION(__xray_TypedEvent)
158163ASM_SYMBOL(__xray_TypedEvent):
159164 SAVE_REGISTERS
160- adrp x8 , ASM_SYMBOL(_ZN6__xray21XRayPatchedTypedEventE)
161- ldr x8 , [ x8 , #:lo12:ASM_SYMBOL(_ZN6__xray21XRayPatchedTypedEventE) ]
165+ LOAD_HANDLER_ADDR x8 , _ZN6__xray21XRayPatchedTypedEventE
162166 cbz x8 , 1f
163167 blr x8
1641681 :
0 commit comments