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
This commit is contained in:
Sebastian Sumpf 2023-05-15 21:27:01 +02:00 committed by Christian Helmuth
parent a12fcfea0d
commit e64f2eaff9

View File

@ -35,6 +35,12 @@ _jmp_slot:
stp x6, x7, [sp, #-16]! stp x6, x7, [sp, #-16]!
stp x8, xzr, [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 */ /* GOT[1] = Dependency */
ldr x0, [x16, #-8] /* arg 0 */ ldr x0, [x16, #-8] /* arg 0 */
@ -52,6 +58,10 @@ _jmp_slot:
mov x17, x0 mov x17, x0
/* restore arguments */ /* 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 x8, xzr, [sp], #16
ldp x6, x7, [sp], #16 ldp x6, x7, [sp], #16
ldp x4, x5, [sp], #16 ldp x4, x5, [sp], #16