
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>
36 lines
708 B
C
36 lines
708 B
C
/*
|
|
* 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);
|
|
}
|