From 215afa30b782970479e956b7bb96dca7cd9325ea Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Wed, 28 Apr 2010 16:32:30 -0700 Subject: [PATCH 1/2] Add unwind descriptors to getcontext.S --- src/x86/getcontext-freebsd.S | 2 ++ src/x86/getcontext-linux.S | 2 ++ src/x86_64/getcontext.S | 4 ++++ tests/run-ptrace-mapper | 2 +- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/x86/getcontext-freebsd.S b/src/x86/getcontext-freebsd.S index 92ae26f4..eb435394 100644 --- a/src/x86/getcontext-freebsd.S +++ b/src/x86/getcontext-freebsd.S @@ -27,6 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .global _Ux86_getcontext .type _Ux86_getcontext, @function _Ux86_getcontext: + .cfi_startproc pushl %eax mov 8(%esp),%eax /* ucontext_t* */ popl FREEBSD_UC_MCONTEXT_EAX_OFF(%eax) @@ -81,6 +82,7 @@ _Ux86_getcontext: xorl %eax, %eax ret + .cfi_endproc .size _Ux86_getcontext, . - _Ux86_getcontext /* We do not need executable stack. */ diff --git a/src/x86/getcontext-linux.S b/src/x86/getcontext-linux.S index a0714cd1..c469dadb 100644 --- a/src/x86/getcontext-linux.S +++ b/src/x86/getcontext-linux.S @@ -36,6 +36,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .global _Ux86_getcontext .type _Ux86_getcontext, @function _Ux86_getcontext: + .cfi_startproc mov 4(%esp),%eax /* ucontext_t* */ /* EAX is not preserved. */ @@ -66,6 +67,7 @@ _Ux86_getcontext: xor %eax, %eax ret + .cfi_endproc .size _Ux86_getcontext, . - _Ux86_getcontext /* We do not need executable stack. */ diff --git a/src/x86_64/getcontext.S b/src/x86_64/getcontext.S index a0df6f15..15fff283 100644 --- a/src/x86_64/getcontext.S +++ b/src/x86_64/getcontext.S @@ -37,6 +37,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ .global _Ux86_64_getcontext .type _Ux86_64_getcontext, @function _Ux86_64_getcontext: + .cfi_startproc /* Callee saved: RBX, RBP, R12-R15 */ movq %r12, UC_MCONTEXT_GREGS_R12(%rdi) @@ -70,7 +71,9 @@ _Ux86_64_getcontext: /* Save rflags and segment registers, so that sigreturn(2) does not complain. */ pushfq + .cfi_adjust_cfa_offset 8 popq UC_MCONTEXT_RFLAGS(%rdi) + .cfi_adjust_cfa_offset -8 movl $0, UC_MCONTEXT_FLAGS(%rdi) movw %cs, UC_MCONTEXT_CS(%rdi) movw %ss, UC_MCONTEXT_SS(%rdi) @@ -95,6 +98,7 @@ _Ux86_64_getcontext: xorq %rax, %rax retq + .cfi_endproc .size _Ux86_64_getcontext, . - _Ux86_64_getcontext /* We do not need executable stack. */ diff --git a/tests/run-ptrace-mapper b/tests/run-ptrace-mapper index f51cf9a1..dc3010d4 100755 --- a/tests/run-ptrace-mapper +++ b/tests/run-ptrace-mapper @@ -1,2 +1,2 @@ #!/bin/sh -./test-ptrace -c -n -t ./mapper +./test-ptrace -c -n -t ./mapper $* From fdc534ccb05d1e6c0438345d292203343a811701 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Wed, 28 Apr 2010 16:38:27 -0700 Subject: [PATCH 2/2] Silence a compiler warning --- src/x86_64/Gos-linux.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/x86_64/Gos-linux.c b/src/x86_64/Gos-linux.c index e2929beb..b7f832ca 100644 --- a/src/x86_64/Gos-linux.c +++ b/src/x86_64/Gos-linux.c @@ -87,6 +87,7 @@ unw_is_signal_frame (unw_cursor_t *cursor) PROTECTED int unw_handle_signal_frame (unw_cursor_t *cursor) { +#if UNW_DEBUG /* To silence compiler warnings */ /* Should not get here because we now use kernel-provided dwarf information for the signal trampoline and dwarf_step() works. Hence dwarf_step() should never call this function. Maybe @@ -98,6 +99,7 @@ unw_handle_signal_frame (unw_cursor_t *cursor) assert(c->sigcontext_format == X86_64_SCF_LINUX_RT_SIGFRAME); assert(c->sigcontext_addr == c->dwarf.cfa); assert(0); +#endif return 1; }