From e64f2eaff94caff2293d683168394d0d981071b9 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 15 May 2023 21:27:01 +0200 Subject: [PATCH] ldso: save floating point arguments on arm_v8a (GCC 12) Apparently we need to save the floating point arguments when entering the linker in case "-fno-tree-vectorize" is at work. Otherwise this registers get corrupted during jump slot relocation. Fixes #4879 --- repos/base/src/lib/ldso/spec/arm_64/jmp_slot.s | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/repos/base/src/lib/ldso/spec/arm_64/jmp_slot.s b/repos/base/src/lib/ldso/spec/arm_64/jmp_slot.s index 7dcccfe2ae..68b1c5cb3c 100644 --- a/repos/base/src/lib/ldso/spec/arm_64/jmp_slot.s +++ b/repos/base/src/lib/ldso/spec/arm_64/jmp_slot.s @@ -35,6 +35,12 @@ _jmp_slot: stp x6, x7, [sp, #-16]! stp x8, xzr, [sp, #-16]! + /* save floating-point arguments */ + stp q0, q1, [sp, #-32]! + stp q2, q3, [sp, #-32]! + stp q4, q5, [sp, #-32]! + stp q6, q7, [sp, #-32]! + /* GOT[1] = Dependency */ ldr x0, [x16, #-8] /* arg 0 */ @@ -52,6 +58,10 @@ _jmp_slot: mov x17, x0 /* restore arguments */ + ldp q6, q7, [sp], #32 + ldp q4, q5, [sp], #32 + ldp q2, q3, [sp], #32 + ldp q0, q1, [sp], #32 ldp x8, xzr, [sp], #16 ldp x6, x7, [sp], #16 ldp x4, x5, [sp], #16