Semihosting as an additional debug mechanism
QEMU implements some semihosted operations which can be triggered from the app. For instance, messages can be printed to stderr with the following code:
SYS_WRITE0
void debug_write(char *buf)
{
asm volatile (
"movs r0, #0x04\n"
"movs r1, %0\n"
"svc 0xab\n"
:: "r"(buf) : "r0", "r1"
);
}
The operation number must be passed in r0
(here SYS_WRITE0
operation is
defined to 0x04
) and arguments are in r1
, r2
and r3
.
Usage:
debug_write("magic!\n");