summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Arslan <ararslan@comcast.net>2021-08-28 12:43:43 -0700
committerDave Watson <dade.watson@gmail.com>2021-11-30 09:14:09 -0800
commitea65026c7567e6450828ead325498d98833b6360 (patch)
tree3eb423e095390a4f0c3f81b1ace139f1536b3b8d
parent25edebc066ca90e87a0fddee747ec3e118870ccf (diff)
downloadlibunwind-ea65026c7567e6450828ead325498d98833b6360.tar.gz
Remove vestigial local cursor self-reference on FreeBSD
Commit debb6128d17b782552d53efa8869a392d1f40a83 removed the self-reference from the cursor on x86_64 but only did so on Linux; FreeBSD was still relying on being able to self-reference. This commit applies a change to FreeBSD analogous to that made on Linux.
-rw-r--r--src/x86_64/Gos-freebsd.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/x86_64/Gos-freebsd.c b/src/x86_64/Gos-freebsd.c
index 8f28d1d8..91a465c6 100644
--- a/src/x86_64/Gos-freebsd.c
+++ b/src/x86_64/Gos-freebsd.c
@@ -192,23 +192,23 @@ x86_64_sigreturn (unw_cursor_t *cursor)
ucontext_t *uc = (ucontext_t *)(c->sigcontext_addr +
offsetof(struct sigframe, sf_uc));
- uc->uc_mcontext.mc_r8 = c->uc->uc_mcontext.mc_r8;
- uc->uc_mcontext.mc_r9 = c->uc->uc_mcontext.mc_r9;
- uc->uc_mcontext.mc_r10 = c->uc->uc_mcontext.mc_r10;
- uc->uc_mcontext.mc_r11 = c->uc->uc_mcontext.mc_r11;
- uc->uc_mcontext.mc_r12 = c->uc->uc_mcontext.mc_r12;
- uc->uc_mcontext.mc_r13 = c->uc->uc_mcontext.mc_r13;
- uc->uc_mcontext.mc_r14 = c->uc->uc_mcontext.mc_r14;
- uc->uc_mcontext.mc_r15 = c->uc->uc_mcontext.mc_r15;
- uc->uc_mcontext.mc_rdi = c->uc->uc_mcontext.mc_rdi;
- uc->uc_mcontext.mc_rsi = c->uc->uc_mcontext.mc_rsi;
- uc->uc_mcontext.mc_rbp = c->uc->uc_mcontext.mc_rbp;
- uc->uc_mcontext.mc_rbx = c->uc->uc_mcontext.mc_rbx;
- uc->uc_mcontext.mc_rdx = c->uc->uc_mcontext.mc_rdx;
- uc->uc_mcontext.mc_rax = c->uc->uc_mcontext.mc_rax;
- uc->uc_mcontext.mc_rcx = c->uc->uc_mcontext.mc_rcx;
- uc->uc_mcontext.mc_rsp = c->uc->uc_mcontext.mc_rsp;
- uc->uc_mcontext.mc_rip = c->uc->uc_mcontext.mc_rip;
+ uc->uc_mcontext.mc_r8 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r8;
+ uc->uc_mcontext.mc_r9 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r9;
+ uc->uc_mcontext.mc_r10 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r10;
+ uc->uc_mcontext.mc_r11 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r11;
+ uc->uc_mcontext.mc_r12 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r12;
+ uc->uc_mcontext.mc_r13 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r13;
+ uc->uc_mcontext.mc_r14 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r14;
+ uc->uc_mcontext.mc_r15 = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_r15;
+ uc->uc_mcontext.mc_rdi = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rdi;
+ uc->uc_mcontext.mc_rsi = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rsi;
+ uc->uc_mcontext.mc_rbp = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rbp;
+ uc->uc_mcontext.mc_rbx = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rbx;
+ uc->uc_mcontext.mc_rdx = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rdx;
+ uc->uc_mcontext.mc_rax = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rax;
+ uc->uc_mcontext.mc_rcx = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rcx;
+ uc->uc_mcontext.mc_rsp = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rsp;
+ uc->uc_mcontext.mc_rip = dwarf_get_uc(&c->dwarf)->uc_mcontext.mc_rip;
Debug (8, "resuming at ip=%llx via sigreturn(%p)\n",
(unsigned long long) c->dwarf.ip, uc);