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/

Reply via email to