mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:17:44 +00:00
LibC: Fix sigsetjmp on x86_64
Registers were clobbered, offset values into __jmp_buf were wrong...
This commit is contained in:
parent
c87aa6d908
commit
295e89af04
1 changed files with 9 additions and 6 deletions
|
@ -16,17 +16,20 @@ setjmp:
|
||||||
|
|
||||||
.global sigsetjmp
|
.global sigsetjmp
|
||||||
sigsetjmp:
|
sigsetjmp:
|
||||||
mov %esi, 60(%rdi) // Store val into did_save_signal_mask
|
mov %esi, 64(%rdi) // Store val into did_save_signal_mask
|
||||||
movl $0, 64(%rdi) // Clear saved_signal_mask
|
movl $0, 68(%rdi) // Clear saved_signal_mask
|
||||||
test %esi, %esi
|
test %esi, %esi
|
||||||
jz .Lsaveregs
|
jz .Lsaveregs
|
||||||
|
|
||||||
mov %rdi, %r12 // Preserve sigjmp_buf argument
|
push %rbp // Prepare ABI-compliant call to sigprocmask
|
||||||
mov $0, %rdi // Set argument how
|
mov %rsp, %rbp
|
||||||
|
push %rdi
|
||||||
|
lea 68(%rdi), %rdx // Set argument oldset
|
||||||
mov $0, %rsi // Set argument set
|
mov $0, %rsi // Set argument set
|
||||||
lea 64(%rdi), %rdx // Set argument oldset
|
mov $0, %rdi // Set argument how
|
||||||
call sigprocmask@plt
|
call sigprocmask@plt
|
||||||
mov %r12, %rdi // Restore sigjmp_buf argument
|
pop %rdi
|
||||||
|
pop %rbp
|
||||||
|
|
||||||
.Lsaveregs:
|
.Lsaveregs:
|
||||||
mov %rbx, (0 * 8)(%rdi) // Save registers
|
mov %rbx, (0 * 8)(%rdi) // Save registers
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue