From 691b517fb9e18e190763a8ac83e09f1cffa6cf11 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 1 Dec 2011 20:56:05 -0800 Subject: [PATCH] rt: Fix 64-bit linux __morestack --- src/rt/arch/x86_64/morestack.S | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/rt/arch/x86_64/morestack.S b/src/rt/arch/x86_64/morestack.S index 9b8f2fe91808..652cf0980689 100644 --- a/src/rt/arch/x86_64/morestack.S +++ b/src/rt/arch/x86_64/morestack.S @@ -50,10 +50,20 @@ #if defined(__linux__) || defined(__APPLE__) MORESTACK: - - # Set up a normal backtrace +#if defined(__ELF__) + .cfi_startproc +#endif + + // Set up a normal backtrace +#if defined(__ELF__) pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 +#endif movq %rsp, %rbp +#if defined(__ELF__) + .cfi_def_cfa_register %rbp +#endif // FIXME: libgcc also saves rax. not sure if we need to @@ -77,7 +87,12 @@ MORESTACK: movq UPCALL_NEW_STACK@GOTPCREL(%rip), %rsi movq %rsp, %rdi +#ifdef __APPLE__ call UPCALL_CALL_C@GOTPCREL +#endif +#ifdef __linux__ + call UPCALL_CALL_C@PLT +#endif // Pop the new_stack_args struct addq $24, %rsp @@ -104,12 +119,21 @@ MORESTACK: movq UPCALL_DEL_STACK@GOTPCREL(%rip), %rsi movq $0, %rdi +#ifdef __APPLE__ call UPCALL_CALL_C@GOTPCREL +#endif +#ifdef __linux__ + call UPCALL_CALL_C@PLT +#endif addq $8, %rsp popq %rbp ret +#if defined(__ELF__) + .cfi_endproc +#endif + #else MORESTACK: ret