Browse Source
We didn't notice breakage of aarch64_be because we don't have any TCG tests for it. However while the existing aarch64 compiler can target big-endian builds no one packages a BE libc. Instead we bang some rocks together to do the most basic of hello world with a nostdlib syscall test. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20241023113406.1284676-14-alex.bennee@linaro.org>pull/275/head
4 changed files with 63 additions and 1 deletions
@ -0,0 +1,17 @@ |
|||||
|
# -*- Mode: makefile -*-
|
||||
|
#
|
||||
|
# A super basic AArch64 BE makefile. As we don't have any big-endian
|
||||
|
# libc available the best we can do is a basic Hello World.
|
||||
|
|
||||
|
AARCH64BE_SRC=$(SRC_PATH)/tests/tcg/aarch64_be |
||||
|
VPATH += $(AARCH64BE_SRC) |
||||
|
|
||||
|
AARCH64BE_TEST_SRCS=$(notdir $(wildcard $(AARCH64BE_SRC)/*.c)) |
||||
|
AARCH64BE_TESTS=$(AARCH64BE_TEST_SRCS:.c=) |
||||
|
#MULTIARCH_TESTS = $(MULTIARCH_SRCS:.c=)
|
||||
|
|
||||
|
# We need to specify big-endian cflags
|
||||
|
CFLAGS +=-mbig-endian -ffreestanding |
||||
|
LDFLAGS +=-nostdlib |
||||
|
|
||||
|
TESTS += $(AARCH64BE_TESTS) |
||||
@ -0,0 +1,35 @@ |
|||||
|
/*
|
||||
|
* Non-libc syscall hello world for Aarch64 BE |
||||
|
* |
||||
|
* SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
*/ |
||||
|
|
||||
|
#define __NR_write 64 |
||||
|
#define __NR_exit 93 |
||||
|
|
||||
|
int write(int fd, char *buf, int len) |
||||
|
{ |
||||
|
register int x0 __asm__("x0") = fd; |
||||
|
register char *x1 __asm__("x1") = buf; |
||||
|
register int x2 __asm__("x2") = len; |
||||
|
register int x8 __asm__("x8") = __NR_write; |
||||
|
|
||||
|
asm volatile("svc #0" : : "r"(x0), "r"(x1), "r"(x2), "r"(x8)); |
||||
|
|
||||
|
return len; |
||||
|
} |
||||
|
|
||||
|
void exit(int ret) |
||||
|
{ |
||||
|
register int x0 __asm__("x0") = ret; |
||||
|
register int x8 __asm__("x8") = __NR_exit; |
||||
|
|
||||
|
asm volatile("svc #0" : : "r"(x0), "r"(x8)); |
||||
|
__builtin_unreachable(); |
||||
|
} |
||||
|
|
||||
|
void _start(void) |
||||
|
{ |
||||
|
write(1, "Hello World\n", 12); |
||||
|
exit(0); |
||||
|
} |
||||
Loading…
Reference in new issue