From a3c101a613481ecc7286e1949e6aa97474c7a4fe Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sun, 3 Nov 2024 06:35:49 +0100 Subject: [PATCH] examples: fix building on arm64 Commit f9886bc60f42 ("Added arm64 assembly for examples/api crt0") tried to add arm64 support to the examples but crt0.S does not even build for qemu_arm64_defconfig with CONFIG_API=y, CONFIG_EXAMPLES=y: examples/api/crt0.S: Assembler messages: examples/api/crt0.S:32: Error: expected a register at operand 1 -- `ldr ip,=search_hint' examples/api/crt0.S:33: Error: unexpected register type at operand 1 -- `str sp,[ip]' make[2]: *** [scripts/Makefile.build:292: examples/api/crt0.o] Error 1 Do not define _start twice. Use valid register names. Move syscall_ptr and search_hint to the data section to avoid an invalid relocation. Fixes: f9886bc60f42 ("Added arm64 assembly for examples/api crt0") Signed-off-by: Heinrich Schuchardt --- examples/api/crt0.S | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/examples/api/crt0.S b/examples/api/crt0.S index 06f6d1f9ad..f1b88ed8a3 100644 --- a/examples/api/crt0.S +++ b/examples/api/crt0.S @@ -24,7 +24,7 @@ syscall: mtctr %r11 bctr -#elif defined(CONFIG_ARM) +#elif defined(CONFIG_ARM) && !defined(CONFIG_ARM64) .text .globl _start @@ -33,26 +33,27 @@ _start: str sp, [ip] b main -#elif defined(CONFIG_ARM64) - - .text - .globl _start -_start: - ldr ip0, =search_hint - str sp_el2, [ip0] - b main - - .globl syscall + .globl syscall syscall: - ldr ip0, =syscall_ptr - ldr pc_el2, [ip0] + ldr ip, =syscall_ptr + ldr pc, [ip] +#elif defined(CONFIG_ARM64) + + .text + .globl _start +_start: + ldr x17, =search_hint + mov x16, sp + str x16, [x17] + b main .globl syscall syscall: - ldr ip, =syscall_ptr - ldr pc, [ip] + ldr x16, =syscall_ptr + ldr x16, [x16] + br x16 #elif defined(CONFIG_MIPS) #include @@ -83,6 +84,8 @@ return_addr: #error No support for this arch! #endif +.section .data + .globl syscall_ptr syscall_ptr: .align 8 @@ -90,4 +93,4 @@ syscall_ptr: .globl search_hint search_hint: - .long 0 + .long 0 -- 2.39.5