From c2c33d6808ce3bee7fffc28d356ab7ed474398ae Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 2 Apr 2019 20:06:02 +0200 Subject: [PATCH] base: save FPU registers in '_jmp_slot' function (x86_64) Issue #3355 --- repos/base/src/lib/ldso/spec/x86_64/jmp_slot.s | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/repos/base/src/lib/ldso/spec/x86_64/jmp_slot.s b/repos/base/src/lib/ldso/spec/x86_64/jmp_slot.s index 2d7569f523..3d6ee292bd 100644 --- a/repos/base/src/lib/ldso/spec/x86_64/jmp_slot.s +++ b/repos/base/src/lib/ldso/spec/x86_64/jmp_slot.s @@ -27,16 +27,21 @@ _jmp_slot: pushq %r9 pushq %r10 pushq %r11 + subq $0x200, %rsp + fxsave (%rsp) /* obj pointer */ - movq 0x58(%rsp), %rdi + movq 0x258(%rsp), %rdi /* relocation index */ - movq 0x60(%rsp), %rsi + movq 0x260(%rsp), %rsi call jmp_slot@PLT - /* rax now contains target symbol address */ - movq %rax, 0x60(%rsp) + /* rax now contains target symbol address */ + movq %rax, 0x260(%rsp) + + fxrstor (%rsp) + addq $0x200, %rsp popq %r11 popq %r10 popq %r9