Add a parlib debug_print helper
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 26 Apr 2016 20:28:31 +0000 (16:28 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 2 May 2016 21:11:15 +0000 (17:11 -0400)
Calling printf from vcore context is currently dangerous.  Both call into
glibc, which is what we want, but glibc's locking isn't PDR.  If a uthread
is doing a lot of printing, then we try to print from that vcore in a
handler, then we'll deadlock.  That needs to get fixed.  Until then, we
have this helper.  It also might be useful for other debugging.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/parlib/ros_debug.h

index 9de59b4..5a7c259 100644 (file)
@@ -3,12 +3,19 @@
 #include <parlib/common.h>
 #include <parlib/parlib.h>
 #include <parlib/vcore.h>
+#include <unistd.h>
 
 __BEGIN_DECLS
 
 #define I_AM_HERE printf("Vcore %d is in %s() at %s:%d\n", vcore_id(), \
                          __FUNCTION__, __FILE__, __LINE__);
 
+#define debug_printf(...) {                                                    \
+       char buf[128];                                                             \
+       int ret = snprintf(buf, sizeof(buf), __VA_ARGS__);                         \
+       write(2, buf, ret);                                                        \
+}
+
 /* For a poor-mans function tracer (can add these with spatch) */
 void __print_func_entry(const char *func, const char *file);
 void __print_func_exit(const char *func, const char *file);