parlib: Make parlib printfs safe
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 25 Apr 2017 17:40:38 +0000 (13:40 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 3 May 2017 16:13:02 +0000 (12:13 -0400)
commit31d6cdd4922be821405e0c482cd1dee4884be5e4
tree0511a80799f4fb3da9fbc3d3495b5138de746bad
parentbf430f110329132a6575d0c7628e49f94305e2f6
parlib: Make parlib printfs safe

You can't call glibc's printf from certain contexts: notably vcore context
or when a uthread disabled notifications.  If you do, you'll grab a mutex
in glibc (the IO lock, which is changing in an upcoming patch), and we'll
panic - you can't block in those contexts.

But there's no need to manually call __vc_ctx_fprintf() - we can catch it
with a macro.  Yes, it's nasty.  And it works for both printf() and
fprintf(), but only for stdout and stderr streams.

Also, for this to work, any code that could be called from vcore context
should include parlib/stdio.h, not stdio.h.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/hello.c
user/parlib/include/parlib/ros_debug.h
user/parlib/include/parlib/stdio.h
user/parlib/panic.c
user/parlib/x86/vcore.c