diff options
| author | Wilco Dijkstra <wilco.dijkstra@arm.com> | 2025-01-02 17:31:39 +0000 |
|---|---|---|
| committer | Wilco Dijkstra <wilco.dijkstra@arm.com> | 2025-02-24 14:17:57 +0000 |
| commit | eb7ac024d9e5ac71f6c9695703c3db6b05744b86 (patch) | |
| tree | b2b2c847dd801f603a01aec611f82568016da2b4 /sysdeps/unix/sysv | |
| parent | 19860fd42e39cfa03ba3c3c8becf27229eabc597 (diff) | |
| download | glibc-eb7ac024d9e5ac71f6c9695703c3db6b05744b86.tar.xz glibc-eb7ac024d9e5ac71f6c9695703c3db6b05744b86.zip | |
AArch64: Cleanup pointer mangling
Cleanup pointer mangling.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/unix/sysv')
| -rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/pointer_guard.h | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/pointer_guard.h b/sysdeps/unix/sysv/linux/aarch64/pointer_guard.h index ca2b23f16b..fd4501ba33 100644 --- a/sysdeps/unix/sysv/linux/aarch64/pointer_guard.h +++ b/sysdeps/unix/sysv/linux/aarch64/pointer_guard.h @@ -24,18 +24,11 @@ || (!defined SHARED && (IS_IN (libc) \ || IS_IN (libpthread)))) # ifdef __ASSEMBLER__ -/* Note, dst, src, guard, and tmp are all register numbers rather than - register names so they will work with both ILP32 and LP64. */ -# define PTR_MANGLE(dst, src, guard, tmp) \ - LDST_PCREL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); \ - PTR_MANGLE2 (dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard)\ - eor x##dst, x##src, x##guard -# define PTR_DEMANGLE(dst, src, guard, tmp)\ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard)\ - PTR_MANGLE2 (dst, src, guard) +# define PTR_MANGLE(dst, src, tmp) \ + adrp tmp, C_SYMBOL_NAME(__pointer_chk_guard_local); \ + ldr tmp, [tmp, :lo12:C_SYMBOL_NAME(__pointer_chk_guard_local)]; \ + eor dst, src, tmp +# define PTR_DEMANGLE(dst, src, tmp) PTR_MANGLE (dst, src, tmp) # else extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; # define PTR_MANGLE(var) \ @@ -44,18 +37,12 @@ extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; # endif #else # ifdef __ASSEMBLER__ -/* Note, dst, src, guard, and tmp are all register numbers rather than - register names so they will work with both ILP32 and LP64. */ -# define PTR_MANGLE(dst, src, guard, tmp) \ - LDST_GLOBAL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard)); \ - PTR_MANGLE2 (dst, src, guard) -/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ -# define PTR_MANGLE2(dst, src, guard)\ - eor x##dst, x##src, x##guard -# define PTR_DEMANGLE(dst, src, guard, tmp)\ - PTR_MANGLE (dst, src, guard, tmp) -# define PTR_DEMANGLE2(dst, src, guard)\ - PTR_MANGLE2 (dst, src, guard) +# define PTR_MANGLE(dst, src, tmp) \ + adrp tmp, :got:C_SYMBOL_NAME(__pointer_chk_guard); \ + ldr tmp, [tmp, :got_lo12:C_SYMBOL_NAME(__pointer_chk_guard)]; \ + ldr tmp, [tmp]; \ + eor dst, src, tmp; +# define PTR_DEMANGLE(dst, src, tmp) PTR_MANGLE (dst, src, tmp) # else # include <stdint.h> extern uintptr_t __pointer_chk_guard attribute_relro; |
