]> git.lizzy.rs Git - rust.git/commitdiff
rt: Fix 64-bit linux __morestack
authorBrian Anderson <banderson@mozilla.com>
Fri, 2 Dec 2011 04:56:05 +0000 (20:56 -0800)
committerBrian Anderson <banderson@mozilla.com>
Fri, 2 Dec 2011 04:56:05 +0000 (20:56 -0800)
src/rt/arch/x86_64/morestack.S

index 9b8f2fe9180865cbb87e6aad024ff95aaa7849bb..652cf09806893c0da7ea04864f6c18bcbb15d1fe 100644 (file)
 
 #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