]> git.ipfire.org Git - thirdparty/gcc.git/commit
libgcc: Fix uninitialized RA signing on AArch64 [PR107678]
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Tue, 3 Jan 2023 15:57:46 +0000 (15:57 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 18 Jan 2023 12:20:35 +0000 (12:20 +0000)
commitc98cd1df22fbe0829149e346a1ba9bf1f0be8a40
tree45010a30ec72b60645974866c31b0d9c7b604c01
parentf54e31ddefe3ea7146624eabcb75b1c90dc59f1a
libgcc: Fix uninitialized RA signing on AArch64 [PR107678]

A recent change only initializes the regs.how[] during Dwarf unwinding
which resulted in an uninitialized offset used in return address signing
and random failures during unwinding.  The fix is to encode the return
address signing state in REG_UNSAVED and a new state REG_UNSAVED_ARCHEXT.

libgcc/
PR target/107678
* unwind-dw2.h (REG_UNSAVED_ARCHEXT): Add new enum.
* unwind-dw2.c (uw_update_context_1): Add REG_UNSAVED_ARCHEXT case.
* unwind-dw2-execute_cfa.h: Use REG_UNSAVED_ARCHEXT/REG_UNSAVED to
encode the return address signing state.
* config/aarch64/aarch64-unwind.h (aarch64_demangle_return_addr)
Check current return address signing state.
(aarch64_frob_update_contex): Remove.
libgcc/config/aarch64/aarch64-unwind.h
libgcc/unwind-dw2-execute_cfa.h
libgcc/unwind-dw2.c
libgcc/unwind-dw2.h