Hi
Can someone please review the attached patch.
This patch is needed for us in AARCH64 - Restore "x0" and "x1" registers
because they contain exception pointer and selector.
Thanks
diff --git a/src/aarch64/Gresume.c b/src/aarch64/Gresume.c
index 07f2f2b..99c4211 100644
--- a/src/aarch64/Gresume.c
+++ b/src/aarch64/Gresume.c
@@ -38,20 +38,22 @@ aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
if (c->sigcontext_format == AARCH64_SCF_NONE)
{
- /* Since there are no signals involved here we restore the non scratch
+ /* Since there are no signals involved here we restore EH and non scratch
registers only. */
- unsigned long regs[11];
- regs[0] = uc->uc_mcontext.regs[19];
- regs[1] = uc->uc_mcontext.regs[20];
- regs[2] = uc->uc_mcontext.regs[21];
- regs[3] = uc->uc_mcontext.regs[22];
- regs[4] = uc->uc_mcontext.regs[23];
- regs[5] = uc->uc_mcontext.regs[24];
- regs[6] = uc->uc_mcontext.regs[25];
- regs[7] = uc->uc_mcontext.regs[26];
- regs[8] = uc->uc_mcontext.regs[27];
- regs[9] = uc->uc_mcontext.regs[28];
- regs[10] = uc->uc_mcontext.regs[30]; /* LR */
+ unsigned long regs[13];
+ regs[0] = uc->uc_mcontext.regs[0];
+ regs[1] = uc->uc_mcontext.regs[1];
+ regs[2] = uc->uc_mcontext.regs[19];
+ regs[3] = uc->uc_mcontext.regs[20];
+ regs[4] = uc->uc_mcontext.regs[21];
+ regs[5] = uc->uc_mcontext.regs[22];
+ regs[6] = uc->uc_mcontext.regs[23];
+ regs[7] = uc->uc_mcontext.regs[24];
+ regs[8] = uc->uc_mcontext.regs[25];
+ regs[9] = uc->uc_mcontext.regs[26];
+ regs[10] = uc->uc_mcontext.regs[27];
+ regs[11] = uc->uc_mcontext.regs[28];
+ regs[12] = uc->uc_mcontext.regs[30]; /* LR */
unsigned long sp = uc->uc_mcontext.sp;
struct regs_overlay {
@@ -59,13 +61,16 @@ aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
};
asm volatile (
- "ldp x19, x20, [%0]\n"
- "ldp x21, x22, [%0,16]\n"
- "ldp x23, x24, [%0,32]\n"
- "ldp x25, x26, [%0,48]\n"
- "ldp x27, x28, [%0,64]\n"
- "ldr x30, [%0,80]\n"
- "mov sp, %1\n"
+ "mov x2, %0\n"
+ "mov x3, %1\n"
+ "ldp x0, x1, [x2]\n"
+ "ldp x19, x20, [x2,16]\n"
+ "ldp x21, x22, [x2,32]\n"
+ "ldp x23, x24, [x2,48]\n"
+ "ldp x25, x26, [x2,64]\n"
+ "ldp x27, x28, [x2,80]\n"
+ "ldr x30, [x2,96]\n"
+ "mov sp, x3\n"
"ret \n"
:
: "r" (regs),
_______________________________________________
Libunwind-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/libunwind-devel