avoid referencing address of extern function from vdprintf
authorRich Felker <dalias@aerifal.cx>
Mon, 21 Feb 2011 03:24:28 +0000 (22:24 -0500)
committerRich Felker <dalias@aerifal.cx>
Mon, 21 Feb 2011 03:24:28 +0000 (22:24 -0500)
this change is in preparation for upcoming PIC/shared library support.
the intent is to avoid going through the GOT, mainly so that dprintf
is operable immediately, prior to processing of relocations. having
dprintf accessible from the dynamic linker will make writing and
debugging the dynamic linker much easier.

src/stdio/vdprintf.c

index bfb1b0a9d8c4a3c566dd7e5a97c44ea0b8e05d84..35ed6e0b6c737dfe75d5b9e86a65e57b19749038 100644 (file)
@@ -1,11 +1,16 @@
 #include "stdio_impl.h"
 
+static size_t wrap_write(FILE *f, const unsigned char *buf, size_t len)
+{
+       return __stdio_write(f, buf, len);
+}
+
 int vdprintf(int fd, const char *fmt, va_list ap)
 {
        int r;
        char buf[BUFSIZ];
        FILE f = {
-               .fd = fd, .lbf = EOF, .write = __stdio_write,
+               .fd = fd, .lbf = EOF, .write = wrap_write,
                .buf = buf+UNGET, .buf_size = sizeof buf - UNGET
        };
        r = vfprintf(&f, fmt, ap);