]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/kern/subr_prf.c
xnu-4570.20.62.tar.gz
[apple/xnu.git] / bsd / kern / subr_prf.c
index d14302bec1194eec06d693ada7b21bdb6a7f5d39..840fd1e7576f6fd2406e88abd06de162256021a3 100644 (file)
@@ -98,8 +98,8 @@
 #include <sys/subr_prf.h>
 
 #include <kern/cpu_number.h>   /* for cpu_number() */
-#include <machine/spl.h>
 #include <libkern/libkern.h>
+#include <os/log_private.h>
 
 /* for vaddlog(): the following are implemented in osfmk/kern/printf.c  */
 extern void bsd_log_lock(void);
@@ -116,10 +116,10 @@ struct snprintf_arg {
 
 /*
  * In case console is off,
- * panicstr contains argument to last
+ * debugger_panic_str contains argument to last
  * call to panic.
  */
-extern const char      *panicstr;
+extern const char      *debugger_panic_str;
 
 extern void cnputc(char);              /* standard console putc */
 void   (*v_putc)(char) = cnputc;       /* routine to putc on virtual console */
@@ -136,9 +136,8 @@ extern int  __doprnt(const char *fmt,
 /*
  *     Record cpu that panic'd and lock around panic data
  */
-static void printn(uint32_t n, int b, int flags, struct tty *ttyp, int zf, int fld_size);
 
-extern void logwakeup(void);
+extern void logwakeup(struct msgbuf *);
 extern void halt_cpu(void);
 
 static void
@@ -214,36 +213,35 @@ void
 tprintf(tpr_t tpr, const char *fmt, ...)
 {
        struct session *sess = (struct session *)tpr;
-       struct tty *tp = TTY_NULL;
-       int flags = TOLOG;
+       struct tty *tp;
        va_list ap;
        struct putchar_args pca;
 
-       logpri(LOG_INFO);
-
        if (sess && (tp = SESSION_TP(sess)) != TTY_NULL) {
                /* ttycheckoutq(), tputchar() require a locked tp */
                tty_lock(tp);
                if(ttycheckoutq(tp, 0)) {
-                       flags |= TOTTY;
+                       pca.flags = TOTTY;
                        /* going to the tty; leave locked */
-               } else {
-                       /* not going to the tty... */
-                       tty_unlock(tp);
-                       tp = TTY_NULL;
+                       pca.tty = tp;
+                       va_start(ap, fmt);
+                       __doprnt(fmt, ap, putchar, &pca, 10, FALSE);
+                       va_end(ap);
                }
+               tty_unlock(tp);
        }
-       
-       pca.flags = flags;
-       pca.tty   = tp;
+
+       pca.flags = TOLOG;
+       pca.tty   = TTY_NULL;
        va_start(ap, fmt);
-       __doprnt(fmt, ap, putchar, &pca, 10, FALSE);
+       __doprnt(fmt, ap, putchar, &pca, 10, TRUE);
        va_end(ap);
 
-       if (tp != NULL)
-               tty_unlock(tp); /* lock/unlock is guarded by tp, above */
+       logwakeup(msgbufp);
 
-       logwakeup();
+       va_start(ap, fmt);
+       os_log_with_args(OS_LOG_DEFAULT, OS_LOG_TYPE_DEFAULT, fmt, ap, __builtin_return_address(0));
+       va_end(ap);
 }
 
 /*
@@ -271,55 +269,39 @@ ttyprintf(struct tty *tp, const char *fmt, ...)
        }
 }
 
-
-extern int log_open;
-
-
 void
-logpri(int level)
+logtime(time_t secs)
 {
-       struct putchar_args pca;
-       pca.flags = TOLOG;
-       pca.tty   = NULL;
-       
-       putchar('<', &pca);
-       printn((uint32_t)level, 10, TOLOG, (struct tty *)0, 0, 0);
-       putchar('>', &pca);
+       printf("Time %ld Message ", secs);
 }
 
 static void
-_logtime(const char *fmt, ...)
+putchar_asl(int c, void *arg)
 {
-       va_list ap;
-       va_start(ap, fmt);
-       vaddlog(fmt, ap);
-       va_end(ap);
-}
+       struct putchar_args *pca = arg;
 
-void
-logtime(time_t secs)
-{
-       _logtime("         0 [Time %ld] [Message ", secs);
+       if ((pca->flags & TOLOGLOCKED) && c != '\0' && c != '\r' && c != 0177)
+               log_putc_locked(aslbufp, c);
+       putchar(c, arg);
 }
 
+/*
+ * Vestigial support for kern_asl_msg() via /dev/klog
+ */
 int
 vaddlog(const char *fmt, va_list ap)
 {
-       struct putchar_args pca;
-
-       pca.flags = TOLOGLOCKED;
-       pca.tty   = NULL;
-
-       if (!log_open) {
-               pca.flags |= TOCONS;
-       }
+       struct putchar_args pca = {
+               .flags = TOLOGLOCKED,
+               .tty = NULL,
+       };
 
        bsd_log_lock();
-       __doprnt(fmt, ap, putchar, &pca, 10, TRUE);
+       __doprnt(fmt, ap, putchar_asl, &pca, 10, TRUE);
        bsd_log_unlock();
-       
-       logwakeup();
-       return 0;
+       logwakeup(NULL);
+
+       return (0);
 }
 
 void
@@ -355,43 +337,6 @@ prf(const char *fmt, va_list ap, int flags, struct tty *ttyp)
        return 0;
 }
 
-/*
- * Printn prints a number n in base b.
- * We don't use recursion to avoid deep kernel stacks.
- */
-static void
-printn(uint32_t n, int b, int flags, struct tty *ttyp, int zf, int fld_size)
-{
-       char prbuf[11];
-       char *cp;
-       struct putchar_args pca;
-
-       pca.flags = flags;
-       pca.tty   = ttyp;
-
-       if (b == 10 && (int)n < 0) {
-               putchar('-', &pca);
-               n = (unsigned)(-(int)n);
-       }
-       cp = prbuf;
-       do {
-               *cp++ = "0123456789abcdef"[n%b];
-               n /= b;
-       } while (n);
-       if (fld_size) {
-               for (fld_size -= cp - prbuf; fld_size > 0; fld_size--)
-                       if (zf)
-                               putchar('0', &pca);
-                       else
-                               putchar(' ', &pca);
-       }
-       do
-               putchar(*--cp, &pca);
-       while (cp > prbuf);
-}
-
-
-
 /*
  * Warn that a system table is full.
  */
@@ -415,7 +360,7 @@ putchar(int c, void *arg)
        struct putchar_args *pca = arg;
        char **sp = (char**) pca->tty;
 
-       if (panicstr)
+       if (debugger_panic_str)
                constty = 0;
        if ((pca->flags & TOCONS) && pca->tty == NULL && constty) {
                pca->tty = constty;
@@ -427,7 +372,7 @@ putchar(int c, void *arg)
        if ((pca->flags & TOLOG) && c != '\0' && c != '\r' && c != 0177)
                log_putc(c);
        if ((pca->flags & TOLOGLOCKED) && c != '\0' && c != '\r' && c != 0177)
-               log_putc_locked(c);
+               log_putc_locked(msgbufp, c);
        if ((pca->flags & TOCONS) && constty == 0 && c != '\0')
                (*v_putc)(c);
        if (pca->flags & TOSTR) {
@@ -437,16 +382,17 @@ putchar(int c, void *arg)
 }
 
 int
-vprintf(const char *fmt, va_list ap)
+vprintf_log_locked(const char *fmt, va_list ap)
 {
        struct putchar_args pca;
 
-       pca.flags = TOLOG | TOCONS;
+       pca.flags = TOLOGLOCKED;
        pca.tty   = NULL;
        __doprnt(fmt, ap, putchar, &pca, 10, TRUE);
        return 0;
 }
 
+#if !CONFIG_EMBEDDED
 
 /*
  * Scaled down version of vsprintf(3).
@@ -469,6 +415,7 @@ vsprintf(char *buf, const char *cfmt, va_list ap)
        }
        return 0;
 }
+#endif /* !CONFIG_EMBEDDED */
 
 /*
  * Scaled down version of snprintf(3).