diff options
author | Heinrich Schuchardt <heinrich.schuchardt@canonical.com> | 2024-11-03 06:35:49 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-11-14 10:51:07 -0600 |
commit | a3c101a613481ecc7286e1949e6aa97474c7a4fe (patch) | |
tree | 379f232f57eb3da4c6809d0f0b79f87730f661bb /examples/api | |
parent | e2635570e08199bb5644ce164def2a46d1dee9c0 (diff) |
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 <heinrich.schuchardt@canonical.com>
Diffstat (limited to 'examples/api')
-rw-r--r-- | examples/api/crt0.S | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/examples/api/crt0.S b/examples/api/crt0.S index 06f6d1f9ad4..f1b88ed8a3d 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 <asm/asm.h> @@ -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 |