diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-06-04 13:09:32 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-06-04 13:09:32 -0400 |
commit | ea6cb2d3bb1796aef2c195079fe91311a43f4b82 (patch) | |
tree | 05849e82b3791e6b8132a34d5fe04e98b2665ba7 /src/setjmp/___setjmp.x86-64.s | |
parent | 9c1836f093bf18db12eef6d437ee856b4c888c95 (diff) |
implement jmp_buf tracking and disallow setjmp macro suppression
Diffstat (limited to 'src/setjmp/___setjmp.x86-64.s')
-rw-r--r-- | src/setjmp/___setjmp.x86-64.s | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/setjmp/___setjmp.x86-64.s b/src/setjmp/___setjmp.x86-64.s new file mode 100644 index 00000000..00b139b1 --- /dev/null +++ b/src/setjmp/___setjmp.x86-64.s @@ -0,0 +1,26 @@ +.global ___setjmp +___setjmp: + /* setjmp() in C sets env[0] to 0 */ + mov %rbx, 0x08(%rdi) + mov %rcx, 0x10(%rdi) + mov %rdx, 0x18(%rdi) + mov %rsp, 0x20(%rdi) + mov %rbp, 0x28(%rdi) + mov %rsi, 0x30(%rdi) + mov %rdi, 0x38(%rdi) + mov %r8, 0x40(%rdi) + mov %r9, 0x48(%rdi) + mov %r10, 0x50(%rdi) + mov %r11, 0x58(%rdi) + mov %r12, 0x60(%rdi) + mov %r13, 0x68(%rdi) + mov %r14, 0x70(%rdi) + mov %r15, 0x78(%rdi) + mov 0x00(%rbp), %rax + mov %rax, 0x80(%rdi) + mov 0x08(%rbp), %rax + mov %rax, 0x88(%rdi) + mov 0x00(%rsp), %rax + mov %rax, 0x90(%rdi) + xor %rax, %rax + ret |