ajhahn.de
← FlashOS
Flash 26 lines
// dmesg — kernel-log dumper for /bin/dmesg.
//
// Reads the retained kernel boot log in a single snapshot and writes it to fd
// 1, so the log can be inspected over the console without a serial adapter. The
// buffer is a stack array sized to the ring, so one read captures the whole
// retained log with no cursor and no tearing.
//
// The first Flash port to use control flow: an `if n > 0 { … }` guard around
// the write, plus a fixed-size array declaration (`[flibc.KLOG_SIZE]u8`). Like
// the other coreutils it pulls in the flibc _start shim and flibc_mem so a later
// change that introduces a libcall cannot regress the link.

use flibc

link "flibc_start"
link "flibc_mem"

export fn main(_ usize, _ argv) noreturn {
    var buf [flibc.KLOG_SIZE]u8 = undefined
    n := flibc.sys.klog_read(&buf, buf.len)
    if n > 0 {
        _ = flibc.sys.write_fd(1, &buf, #intCast(n))
    }
    flibc.exit()
}