Merge patch series "examples: fix building on arm64"

Heinrich Schuchardt <heinrich.schuchardt@canonical.com> says:

Commit f9886bc60f42 ("Added arm64 assembly for examples/api crt0") added
the arm64 architecture but the code does not even build.

With the changes the 'demo' program runs on qemu_arm64_defconfig using

    setenv autostart no
    dhcp demo
    setenv autostart yes
    bootelf $loadaddr

Link: https://lore.kernel.org/r/20241103053551.52715-1-heinrich.schuchardt@canonical.com
This commit is contained in:
Tom Rini 2024-11-14 10:51:13 -06:00
commit 2b14d12067
4 changed files with 30 additions and 24 deletions

View File

@ -9,8 +9,12 @@ ifeq ($(ARCH),powerpc)
LOAD_ADDR = 0x40000
endif
ifeq ($(ARCH),arm)
ifdef CONFIG_64BIT
LOAD_ADDR = 0x40400000
else
LOAD_ADDR = 0x1000000
endif
endif
ifeq ($(ARCH),mips)
ifdef CONFIG_64BIT
LOAD_ADDR = 0xffffffff80200000

View File

@ -24,7 +24,7 @@ syscall:
mtctr %r11
bctr
#elif defined(CONFIG_ARM)
#elif defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
.text
.globl _start
@ -33,27 +33,28 @@ _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
syscall:
ldr ip0, =syscall_ptr
ldr pc_el2, [ip0]
.globl syscall
syscall:
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 x16, =syscall_ptr
ldr x16, [x16]
br x16
#elif defined(CONFIG_MIPS)
#include <asm/asm.h>
.text
@ -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

View File

@ -43,12 +43,11 @@ int main(int argc, char *const argv[])
if (sig->version > API_SIG_VERSION)
return -3;
printf("API signature found @%x\n", (unsigned int)sig);
printf("API signature found @%p\n", sig);
test_dump_sig(sig);
printf("\n*** Consumer API test ***\n");
printf("syscall ptr 0x%08x@%08x\n", (unsigned int)syscall_ptr,
(unsigned int)&syscall_ptr);
printf("syscall ptr 0x%p@%p\n", syscall_ptr, &syscall_ptr);
/* console activities */
ub_putc('B');
@ -203,7 +202,7 @@ void test_dump_sig(struct api_signature *sig)
printf("signature:\n");
printf(" version\t= %d\n", sig->version);
printf(" checksum\t= 0x%08x\n", sig->checksum);
printf(" sc entry\t= 0x%08x\n", (unsigned int)sig->syscall);
printf(" sc entry\t= 0x%p\n", sig->syscall);
}
void test_dump_si(struct sys_info *si)
@ -296,7 +295,7 @@ void test_dump_di(int handle)
struct device_info *di = ub_dev_get(handle);
printf("device info (%d):\n", handle);
printf(" cookie\t= 0x%08x\n", (uint32_t)di->cookie);
printf(" cookie\t= 0x%p\n", di->cookie);
printf(" type\t\t= 0x%08x\n", di->type);
if (di->type == DEV_TYP_NET) {

View File

@ -41,8 +41,8 @@ static int valid_sig(struct api_signature *sig)
int api_search_sig(struct api_signature **sig)
{
unsigned char *sp;
uint32_t search_start = 0;
uint32_t search_end = 0;
uintptr_t search_start = 0;
uintptr_t search_end = 0;
if (sig == NULL)
return 0;