Fix a couple of inaccuracies in the VxWorks signal handler trampoline
for aarch64:
- REGNO_PC_OFFSET, used as the cfi return column number, is better
sync'ed with the back-end's DWARF_ALT_FRAME_RETURN_COLUMN.
- R18 is used by VxWorks for internal purposes so is best left out of
the CFI notes telling the unwinder where to find values to restore.
Figured out of code reading after observing failures of tests attempting
to catch exceptions expected to be raised out of signals triggered on
purpose. The tests pass after the change.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sigtramp-vxworks-target.inc (__aarch64__): Sync
REGNO_PC_OFFSET with the back-end DWARF_ALT_FRAME_RETURN_COLUMN.
In CFI_COMMON_REGS, leave r18 alone, VxWorks private.
diff --git a/gcc/ada/sigtramp-vxworks-target.inc b/gcc/ada/sigtramp-vxworks-target.inc
--- a/gcc/ada/sigtramp-vxworks-target.inc
+++ b/gcc/ada/sigtramp-vxworks-target.inc
@@ -100,7 +100,7 @@
#define FUNCTION "%function"
#ifdef __aarch64__
-#define REGNO_PC_OFFSET 80 /* aka V16, a scratch register */
+#define REGNO_PC_OFFSET 96 /* DWARF_ALT_FRAME_RETURN_COLUMN */
#else
#define REGNO_PC_OFFSET 15 /* PC_REGNUM */
#endif
@@ -375,7 +375,7 @@ TCR(COMMON_CFI(G_REG_OFFSET(14))) \
TCR(COMMON_CFI(G_REG_OFFSET(15))) \
TCR(COMMON_CFI(G_REG_OFFSET(16))) \
TCR(COMMON_CFI(G_REG_OFFSET(17))) \
-TCR(COMMON_CFI(G_REG_OFFSET(18))) \
+CR("# Leave alone R18, VxWorks reserved\n") \
TCR(COMMON_CFI(G_REG_OFFSET(19))) \
TCR(COMMON_CFI(G_REG_OFFSET(20))) \
TCR(COMMON_CFI(G_REG_OFFSET(21))) \