diff options
| author | Yury Khrustalev <yury.khrustalev@arm.com> | 2025-10-28 11:01:50 +0000 |
|---|---|---|
| committer | Yury Khrustalev <yury.khrustalev@arm.com> | 2025-11-10 11:31:05 +0000 |
| commit | 5bf8ee7ad559fd60bedd3f5ec831d0b12b5000b8 (patch) | |
| tree | 0ccdc8ccdd181a474dd6403c5feb61f5ebf130e8 | |
| parent | e4ffcf32b9213352917dcf7dc43adcaa0ff76503 (diff) | |
aarch64: fix cfi directives around __libc_arm_za_disable
Incorrect CFI directive corrupted call stack information
and prevented debuggers from correctly displaying call
stack information.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
(cherry picked from commit 2f77aec043f61e8533487850b11941a640ae2dea)
(cherry picked from commit de1fe81f471496366580ad728b8986a3424b2fd7)
| -rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/sysdep.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h index b220c6febd..048fe11ad7 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h @@ -155,11 +155,12 @@ that allows to call it without stack manipulation and preserving most of the registers. */ .macro CALL_LIBC_ARM_ZA_DISABLE + cfi_remember_state mov x13, x30 - .cfi_register x30, x13 + cfi_register(x30, x13) bl __libc_arm_za_disable mov x30, x13 - .cfi_register x13, x30 + cfi_restore_state .endm #else /* not __ASSEMBLER__ */ @@ -255,11 +256,12 @@ ({ \ unsigned long int __tmp; \ asm volatile ( \ + " .cfi_remember_state\n" \ " mov %0, x30\n" \ - " .cfi_register x30, %0\n" \ + " .cfi_register x30, %0\n" \ " bl __libc_arm_za_disable\n" \ " mov x30, %0\n" \ - " .cfi_register %0, x30\n" \ + " .cfi_restore_state\n" \ : "=r" (__tmp) \ : \ : "x14", "x15", "x16", "x17", "x18", "memory" ); \ |
