stp x2, x3, [sp, #16]
stp x4, x5, [sp, #32]
stp x6, x7, [sp, #48]
- stp x8, x9, [sp, #64]
- stp x10, x11, [sp, #80]
- stp x12, x13, [sp, #96]
- stp x14, x15, [sp, #112]
stp x18, x19, [sp, #144]
stp x20, x21, [sp, #160]
stp x22, x23, [sp, #176]
add x0, x20, #REGDUMP_GPSIZE
str x0, [x20, #31*8]
- // Capture the status flags.
- mrs x0, nzcv
- str x0, [x20, #8*REGIX_NZCV]
-
// Set the return address as our PC.
str x30, [x20, #8*REGIX_PC]
// Make space for the register save area.
sub sp, sp, #REGDUMP_GPSIZE
- // Save flags and general-purpose registers.
- stp x16, x17, [sp, #8*16]
+ // Save flags and general-purpose registers. The PLT linkage code
+ // makes free with x8--x17, so we must save those here.
+ mrs x30, nzcv
+ str x30, [sp, #8*REGIX_NZCV]
+ stp x8, x9, [sp, #64]
+ stp x10, x11, [sp, #80]
+ stp x12, x13, [sp, #96]
+ stp x14, x15, [sp, #112]
+ stp x16, x17, [sp, #128]
bl regdump_gpsave
// Make space for the extended registers.