diff options
author | Konstantin Belousov <kostik@pooma.home> | 2010-03-08 15:51:39 +0200 |
---|---|---|
committer | Konstantin Belousov <kostik@pooma.home> | 2010-03-08 15:51:39 +0200 |
commit | 0f1c0f5f664004f0e812e7c2d939bc21fc5e89df (patch) | |
tree | 95378610ab66fe450ef5d28e83fd3af13caaea04 /src/x86_64/Gresume.c | |
parent | 43ed5b3e56279999382b10acf9f3dfaab3257aef (diff) | |
download | libunwind-0f1c0f5f664004f0e812e7c2d939bc21fc5e89df.tar.gz |
Fix resume.
Diffstat (limited to 'src/x86_64/Gresume.c')
-rw-r--r-- | src/x86_64/Gresume.c | 8 |
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 { |