summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2015-06-23 10:32:26 +0000
committerandrew <andrew@FreeBSD.org>2015-06-23 10:32:26 +0000
commitbe30841cf6f841fb5ceb44ef841244240a1e3950 (patch)
treece42f248a21206a8b91b8adfb7fb70b8324ab9b3
parent0e319d99460df717d30dca8595fa7d65c0055dd8 (diff)
downloadFreeBSD-src-be30841cf6f841fb5ceb44ef841244240a1e3950.zip
FreeBSD-src-be30841cf6f841fb5ceb44ef841244240a1e3950.tar.gz
Also save x8. It may be passed into a function as the indirect result
location pointer when the return value doesn't fit in a register, e.g. when returning a struct. Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation
-rw-r--r--libexec/rtld-elf/aarch64/rtld_start.S4
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/aarch64/rtld_start.S b/libexec/rtld-elf/aarch64/rtld_start.S
index e34b172..a5e0df5 100644
--- a/libexec/rtld-elf/aarch64/rtld_start.S
+++ b/libexec/rtld-elf/aarch64/rtld_start.S
@@ -68,6 +68,7 @@ ENTRY(_rtld_bind_start)
stp x2, x3, [sp, #-16]!
stp x4, x5, [sp, #-16]!
stp x6, x7, [sp, #-16]!
+ stp x8, xzr, [sp, #-16]!
/* Calculate reloff */
ldr x2, [x17, #0] /* Get the address of the entry */
@@ -84,12 +85,13 @@ ENTRY(_rtld_bind_start)
bl _rtld_bind
/* Restore the registers saved by the plt code */
- ldp xzr, x30, [sp, #(4 * 16)]
+ ldp xzr, x30, [sp, #(5 * 16)]
/* Backup the address to branch to */
mov x16, x0
/* restore the arguments */
+ ldp x8, xzr, [sp], #16
ldp x6, x7, [sp], #16
ldp x4, x5, [sp], #16
ldp x2, x3, [sp], #16
OpenPOWER on IntegriCloud