Hello,
I have committed the changes here [0] as of today 8th November 2026.
The simple bare metal example is this
#include <stdint.h>
#define MACH_TRAP_PRINT (-30)
static void mach_print(const char *msg)
{
register long x0 asm ("x0") = (long)msg;
register long x8 asm ("x8") = MACH_TRAP_PRINT;
asm volatile ("svc 0"
: "+r"(x0)
: "r"(x8)
: "memory");
}
void _start(void)
{
mach_print("Hello from Mach bare-metal example!\n");
while (1) {
asm volatile ("yield");
}
}
which I compiled with
aarch64-linux-gnu-gcc -nostdlib -static example.c -o example.elf
and I have finally run GNU Mach with the following QEMU command
qemu-system-aarch64 -machine virt -cpu cortex-a53 -m 1G -nographic
-kernel ./gnumach -append "gnumach -H" -device
guest-loader,addr=0x42000000,kernel=./example.elf,bootargs='example
--host-priv-port=${host-port} --device-master-port=${device-port}
$(task-create) $(task-resume)' -s -S
[0]: https://github.com/aculnaig/gnumach/commits/aarch64/