diff options
author | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:00 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-03-07 17:28:32 -0500 |
commit | bd5969fc876a10b18613302db7087ef3c40f18e1 (patch) | |
tree | 7c2b8619afe902abf99570df2873fbdf40a4d1a1 /lib/mlibc/options/rtdl/x86_64/runtime.S | |
parent | a95b38b1b92b172e6cc4e8e56a88a30cc65907b0 (diff) |
lib: Add mlibc
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'lib/mlibc/options/rtdl/x86_64/runtime.S')
-rw-r--r-- | lib/mlibc/options/rtdl/x86_64/runtime.S | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/mlibc/options/rtdl/x86_64/runtime.S b/lib/mlibc/options/rtdl/x86_64/runtime.S new file mode 100644 index 0000000..d8593c4 --- /dev/null +++ b/lib/mlibc/options/rtdl/x86_64/runtime.S @@ -0,0 +1,36 @@ + +.global pltRelocateStub +pltRelocateStub: + # we need to save / restore all registers than can hold function arguments + # we do not need to save callee-saved registers as they will not be trashed by lazyRelocate + # TODO: save floating point argument registers + + push %rsi + push %rdi + mov 16(%rsp), %rdi + mov 24(%rsp), %rsi + + push %rax + push %rcx + push %rdx + push %r8 + push %r9 + push %r10 + + call lazyRelocate + mov %rax, %r11 + + pop %r10 + pop %r9 + pop %r8 + pop %rdx + pop %rcx + pop %rax + + pop %rdi + pop %rsi + add $16, %rsp + jmp *%r11 + +.section .note.GNU-stack,"",%progbits + |