Skip to content

Commit c8b08eb

Browse files
authored
Merge pull request #306 from da-x/probestack-frame-pointer
probestack: add frame pointers for easier traceback
2 parents 79a6a16 + 985a430 commit c8b08eb

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/probestack.rs

+7
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ pub unsafe extern "C" fn __rust_probestack() {
5353
// The ABI here is that the stack frame size is located in `%eax`. Upon
5454
// return we're not supposed to modify `%esp` or `%eax`.
5555
asm!("
56+
pushq %rbp
57+
movq %rsp, %rbp
58+
5659
mov %rax,%r11 // duplicate %rax as we're clobbering %r11
5760
5861
// Main loop, taken in one page increments. We're decrementing rsp by
@@ -89,6 +92,7 @@ pub unsafe extern "C" fn __rust_probestack() {
8992
// return.
9093
add %rax,%rsp
9194
95+
leave
9296
ret
9397
" ::: "memory" : "volatile");
9498
::core::intrinsics::unreachable();
@@ -104,6 +108,8 @@ pub unsafe extern "C" fn __rust_probestack() {
104108
//
105109
// The ABI here is the same as x86_64, except everything is 32-bits large.
106110
asm!("
111+
push %ebp
112+
mov %esp, %ebp
107113
push %ecx
108114
mov %eax,%ecx
109115
@@ -122,6 +128,7 @@ pub unsafe extern "C" fn __rust_probestack() {
122128
123129
add %eax,%esp
124130
pop %ecx
131+
leave
125132
ret
126133
" ::: "memory" : "volatile");
127134
::core::intrinsics::unreachable();

0 commit comments

Comments
 (0)