Index: subr_log.c =================================================================== RCS file: /cvsroot/src/sys/kern/subr_log.c,v retrieving revision 1.57 diff -u -u -r1.57 subr_log.c --- subr_log.c 31 Mar 2018 23:12:01 -0000 1.57 +++ subr_log.c 31 Mar 2018 23:37:05 -0000 @@ -404,6 +404,35 @@ } } +static void +logaddchar(struct kern_msgbuf *mbp, int c) +{ + mbp->msg_bufc[mbp->msg_bufx++] = c; + if (mbp->msg_bufx < 0 || mbp->msg_bufx >= mbp->msg_bufs) + mbp->msg_bufx = 0; + + /* If the buffer is full, keep the most recent data. */ + if (mbp->msg_bufr == mbp->msg_bufx) + logskip(mbp); +} + +static int logneedtstamp; + +static void +logaddtstamp(struct kern_msgbuf *mbp) +{ + char buf[64]; + struct timespec ts; + int n; + + getnanouptime(&ts); + n = snprintf(buf, sizeof(buf), "[%jd.%ld] ", + (intptr_t)ts.tv_sec, ts.tv_nsec); + + for (int i = 0; i < n; i++) + logaddchar(mbp, buf[i]); +} + void logputchar(int c) { @@ -430,14 +459,14 @@ goto out; } + if (logneedtstamp) { + logaddtstamp(mbp); + logneedtstamp = 0; + } + if (c == '\n') + logneedtstamp++; - mbp->msg_bufc[mbp->msg_bufx++] = c; - if (mbp->msg_bufx < 0 || mbp->msg_bufx >= mbp->msg_bufs) - mbp->msg_bufx = 0; - - /* If the buffer is full, keep the most recent data. */ - if (mbp->msg_bufr == mbp->msg_bufx) - logskip(mbp); + logaddchar(mbp, c); out: if (!cold)