Make akaros_vfprintf() take a stream (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 24 Mar 2016 16:45:16 +0000 (12:45 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 31 Mar 2016 20:53:42 +0000 (16:53 -0400)
We were implying stdout, but the caller could use something else.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/parlib-compat.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/printf.c
user/parlib/debug.c
user/parlib/include/parlib/stdio.h

index 5b5e328..ac4864f 100644 (file)
@@ -63,7 +63,7 @@ libc {
     __vcoreid;
     __vcore_context;
     akaros_printf;
-    akaros_vprintf;
+    akaros_vfprintf;
     print_user_context;
     _assert_failed;
   }
index 24dd3f2..4d5c1ab 100644 (file)
@@ -31,12 +31,12 @@ int __akaros_printf(const char *format, ...)
 }
 weak_alias(__akaros_printf, akaros_printf)
 
-int __akaros_vprintf(const char *fmt, va_list ap)
+int __akaros_vfprintf(FILE *stream, const char *fmt, va_list ap)
 {
        assert(0);
        return -1;
 }
-weak_alias(__akaros_vprintf, akaros_vprintf)
+weak_alias(__akaros_vfprintf, akaros_vfprintf)
 
 void __print_user_context(struct user_context *ctx)
 {
index 20598c6..b2f17b0 100644 (file)
@@ -33,7 +33,7 @@ int __printf(const char *format, ...)
 
        va_start(ap, format);
        if (in_vcore_context())
-               ret = akaros_vprintf(format, ap);
+               ret = akaros_vfprintf(stdout, format, ap);
        else
                ret = vfprintf(stdout, format, ap);
        va_end(ap);
index 6d2bbfe..cb2088f 100644 (file)
@@ -21,6 +21,7 @@ typedef struct debugbuf {
        size_t  idx;    // current buffer index
        size_t  cnt;    // total bytes printed so far
        uint8_t buf[BUF_SIZE];
+       int     stream_fd;
 } debugbuf_t;
 
 
@@ -28,21 +29,22 @@ static void putch(int ch, debugbuf_t **b)
 {
        (*b)->buf[(*b)->idx++] = ch;
        if ((*b)->idx == BUF_SIZE) {
-               write(1, (*b)->buf, (*b)->idx);
+               write((*b)->stream_fd, (*b)->buf, (*b)->idx);
                (*b)->idx = 0;
        }
        (*b)->cnt++;
 }
 
-int akaros_vprintf(const char *fmt, va_list ap)
+int akaros_vfprintf(FILE *stream, const char *fmt, va_list ap)
 {
        debugbuf_t b;
        debugbuf_t *bp = &b;
 
        b.idx = 0;
        b.cnt = 0;
+       b.stream_fd = fileno(stream);
        akaros_vprintfmt((void*)putch, (void*)&bp, fmt, ap);
-       write(1, b.buf, b.idx);
+       write(b.stream_fd, b.buf, b.idx);
 
        return b.cnt;
 }
@@ -54,7 +56,7 @@ int akaros_printf(const char *format, ...)
 
        va_start(ap, format);
        if (in_vcore_context())
-               ret = akaros_vprintf(format, ap);
+               ret = akaros_vprintf(stdout, format, ap);
        else
                ret = vprintf(format, ap);
        va_end(ap);
index 366bf21..ca62b75 100644 (file)
@@ -13,7 +13,7 @@ __BEGIN_DECLS
 
 void akaros_vprintfmt(void (*putch)(int, void**), void **putdat,
                       const char *fmt, va_list);
-int akaros_vprintf(const char *fmt, va_list);
+int akaros_vfprintf(FILE *stream, const char *fmt, va_list);
 /* This is the same as our sysdep for glibc's printf.  We use this to print in
  * a few places in glibc that can't link directly against printf.  (the
  * 'multiple libcs' problem). */