diff options
author | andrew <andrew@FreeBSD.org> | 2015-06-23 10:32:26 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-06-23 10:32:26 +0000 |
commit | be30841cf6f841fb5ceb44ef841244240a1e3950 (patch) | |
tree | ce42f248a21206a8b91b8adfb7fb70b8324ab9b3 | |
parent | 0e319d99460df717d30dca8595fa7d65c0055dd8 (diff) | |
download | FreeBSD-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.S | 4 |
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 |