[RFC PATCH 14/18] tests: add aarch64 arm to start.S

Paulo Duarte <[email protected]>
Newsgroups gmane.os.hurd.bugs
Message-ID <[email protected]>
The userland test stubs run as freestanding multiboot modules: the
kernel exec path hands them control at _start with argc/argv/envp
laid out sysv-style on the stack, and they call c_start(sp) to find
their arguments.  The i386 and x86_64 arms already implement this;
add the aarch64 equivalent (mov x0, sp; bl c_start) so test modules
can be cross-compiled with aarch64-unknown-none-elf-gcc and entered
by Bugaev's pcb/exec path.

bl rather than a tail-call b keeps the saved-LR contract intact in
case anything unwinds out of the userland prelude.
---
 tests/start.S | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tests/start.S b/tests/start.S
index 15970fb9..71e055ab 100644
--- a/tests/start.S
+++ b/tests/start.S
@@ -26,5 +26,15 @@ _start:
         movq    %rsp,%rdi
         callq   c_start
 #endif /* __x86_64__ */
+#ifdef __aarch64__
+        /*
+         * Kernel hands us argc/argv/envp on the stack (sysv-style);
+         * pass sp through x0 as c_start's first argument (per AAPCS).
+         * bl rather than a tail-call keeps the saved-LR contract
+         * intact in case anything unwinds.
+         */
+        mov     x0, sp
+        bl      c_start
+#endif /* __aarch64__ */
 
 	.section .note.GNU-stack,"",%progbits
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.