summaryrefslogtreecommitdiff
path: root/src/x86_64/Gresume.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kostik@pooma.home>2010-03-08 15:51:39 +0200
committerKonstantin Belousov <kostik@pooma.home>2010-03-08 15:51:39 +0200
commit0f1c0f5f664004f0e812e7c2d939bc21fc5e89df (patch)
tree95378610ab66fe450ef5d28e83fd3af13caaea04 /src/x86_64/Gresume.c
parent43ed5b3e56279999382b10acf9f3dfaab3257aef (diff)
downloadlibunwind-0f1c0f5f664004f0e812e7c2d939bc21fc5e89df.tar.gz
Fix resume.
Diffstat (limited to 'src/x86_64/Gresume.c')
-rw-r--r--src/x86_64/Gresume.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/x86_64/Gresume.c b/src/x86_64/Gresume.c
index a7822344..13c8059a 100644
--- a/src/x86_64/Gresume.c
+++ b/src/x86_64/Gresume.c
@@ -45,7 +45,6 @@ my_rt_sigreturn (void *new_sp)
"syscall"
:: "r"(new_sp), "i"(SYS_rt_sigreturn)
: "memory");
- abort ();
}
#endif
@@ -63,17 +62,20 @@ x86_64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
if (unlikely (c->sigcontext_format != X86_64_SCF_NONE))
{
+#if defined __linux__
struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr;
Debug (8, "resuming at ip=%llx via sigreturn(%p)\n",
(unsigned long long) c->dwarf.ip, sc);
-#if defined __linux__
my_rt_sigreturn (sc);
#elif defined __FreeBSD__
- sigreturn((char *)(c->uc) - FREEBSD_UC_MCONTEXT_OFF);
+ Debug (8, "resuming at ip=%llx via sigreturn(%p)\n",
+ (unsigned long long) c->dwarf.ip, uc);
+ sigreturn(uc);
#else
#error Port me
#endif
+ abort();
}
else
{