Skip to content

Commit fdf9ad2

Browse files
committed
Only store lr once, fixup an off-by-one in the trampoline
1 parent f9e7966 commit fdf9ad2

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

unwind/src/glue/aarch64.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,25 @@ extern "C" {
1414
pub unsafe extern fn unwind_trampoline(_payload: *mut UnwindPayload) {
1515
asm!("
1616
mov x1, sp
17-
sub sp, sp, 0xB0
18-
.cfi_adjust_cfa_offset 0xB0
19-
str lr, [sp, #0x60]
20-
.cfi_rel_offset lr, 0x60
17+
sub sp, sp, 0xA0
18+
.cfi_adjust_cfa_offset 0xA0
2119
stp x19, x20, [sp, #0x00]
2220
stp x21, x22, [sp, #0x10]
2321
stp x23, x24, [sp, #0x20]
2422
stp x25, x26, [sp, #0x30]
2523
stp x27, x28, [sp, #0x40]
2624
stp x29, lr, [sp, #0x50]
27-
stp d8, d9, [sp, #0x70]
28-
stp d10, d11, [sp, #0x80]
29-
stp d12, d13, [sp, #0x90]
30-
stp d14, d15, [sp, #0xA0]
25+
.cfi_rel_offset lr, 0x58
26+
stp d8, d9, [sp, #0x60]
27+
stp d10, d11, [sp, #0x70]
28+
stp d12, d13, [sp, #0x80]
29+
stp d14, d15, [sp, #0x90]
3130
mov x2, sp
3231
bl unwind_recorder
33-
ldr lr, [sp, #0x60]
32+
ldr lr, [sp, #0x58]
3433
.cfi_restore lr
35-
add sp, sp, 0xB0
36-
.cfi_adjust_cfa_offset -0xB0
34+
add sp, sp, 0xA0
35+
.cfi_adjust_cfa_offset -0xA0
3736
ret
3837
");
3938
::std::hint::unreachable_unchecked();

0 commit comments

Comments
 (0)