|
@@ -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);
|
|
|
+}
|