1*2e1cacfbSAlex Bennée /*
2*2e1cacfbSAlex Bennée * Non-libc syscall hello world for Aarch64 BE
3*2e1cacfbSAlex Bennée *
4*2e1cacfbSAlex Bennée * SPDX-License-Identifier: GPL-2.0-or-later
5*2e1cacfbSAlex Bennée */
6*2e1cacfbSAlex Bennée
7*2e1cacfbSAlex Bennée #define __NR_write 64
8*2e1cacfbSAlex Bennée #define __NR_exit 93
9*2e1cacfbSAlex Bennée
write(int fd,char * buf,int len)10*2e1cacfbSAlex Bennée int write(int fd, char *buf, int len)
11*2e1cacfbSAlex Bennée {
12*2e1cacfbSAlex Bennée register int x0 __asm__("x0") = fd;
13*2e1cacfbSAlex Bennée register char *x1 __asm__("x1") = buf;
14*2e1cacfbSAlex Bennée register int x2 __asm__("x2") = len;
15*2e1cacfbSAlex Bennée register int x8 __asm__("x8") = __NR_write;
16*2e1cacfbSAlex Bennée
17*2e1cacfbSAlex Bennée asm volatile("svc #0" : : "r"(x0), "r"(x1), "r"(x2), "r"(x8));
18*2e1cacfbSAlex Bennée
19*2e1cacfbSAlex Bennée return len;
20*2e1cacfbSAlex Bennée }
21*2e1cacfbSAlex Bennée
exit(int ret)22*2e1cacfbSAlex Bennée void exit(int ret)
23*2e1cacfbSAlex Bennée {
24*2e1cacfbSAlex Bennée register int x0 __asm__("x0") = ret;
25*2e1cacfbSAlex Bennée register int x8 __asm__("x8") = __NR_exit;
26*2e1cacfbSAlex Bennée
27*2e1cacfbSAlex Bennée asm volatile("svc #0" : : "r"(x0), "r"(x8));
28*2e1cacfbSAlex Bennée __builtin_unreachable();
29*2e1cacfbSAlex Bennée }
30*2e1cacfbSAlex Bennée
_start(void)31*2e1cacfbSAlex Bennée void _start(void)
32*2e1cacfbSAlex Bennée {
33*2e1cacfbSAlex Bennée write(1, "Hello World\n", 12);
34*2e1cacfbSAlex Bennée exit(0);
35*2e1cacfbSAlex Bennée }
36