Move parlib's assert guts into a C file
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 21 Oct 2015 17:31:40 +0000 (13:31 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Oct 2015 16:05:13 +0000 (12:05 -0400)
Having the machinery of the print and abort in the header file is
problematic for #include loops.  First, we need stdlib included, which
isn't a big deal.  Second, and more troublesome, is we need vcore.h.
That will cause problems with a later commit, where I have all parlib
code use parlib's assert.

ucq.c was relying on a transitive #include for printd.

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

index 8bd24d5..8e3e363 100644 (file)
@@ -4,8 +4,6 @@
 #define PARLIB_RASSERT_H
 
 #include <assert.h>
-#include <parlib/vcore.h>
-#include <parlib/ros_debug.h>
 
 __BEGIN_DECLS
 
@@ -14,18 +12,16 @@ __BEGIN_DECLS
 
 void _warn(const char*, int, const char*, ...);
 void _panic(const char*, int, const char*, ...) __attribute__((noreturn));
+void _assert_failed(const char *file, int line, const char *msg)
+     __attribute__((noreturn));
 
 #define warn(...) _warn(__FILE__, __LINE__, __VA_ARGS__)
 #define panic(...) _panic(__FILE__, __LINE__, __VA_ARGS__)
 
 #define assert(x)                                                                 \
        do {                                                                       \
-               if (!(x)) {                                                            \
-                       ros_debug("[user] %s:%d, vcore %d, Assertion failed: %s\n",        \
-                                 __FILE__, __LINE__, vcore_id(), #x);                     \
-                       breakpoint();                                                      \
-                       abort();                                                           \
-               }                                                                      \
+               if (!(x))                                                              \
+                       _assert_failed(__FILE__, __LINE__, #x);                            \
        } while (0)
 
 // static_assert(x) will generate a compile-time error if 'x' is false.
index d7e293d..07f1c74 100644 (file)
@@ -1,6 +1,9 @@
 #include <parlib/arch/arch.h>
 #include <stdio.h>
 #include <stdarg.h>
+#include <parlib/rassert.h>
+#include <stdlib.h>
+#include <parlib/ros_debug.h>
 
 char *argv0;
 
@@ -28,3 +31,10 @@ _panic(const char *file, int line, const char *fmt,...)
                breakpoint();
 }
 
+void _assert_failed(const char *file, int line, const char *msg)
+{
+       ros_debug("[user] %s:%d, vcore %d, Assertion failed: %s\n",
+                 file, line, vcore_id(), msg);
+       breakpoint();
+       abort();
+}
index 1c29107..bc7e932 100644 (file)
@@ -16,6 +16,7 @@
 #include <stdlib.h>
 #include <parlib/rassert.h> /* for the static_assert() */
 #include <parlib/vcore.h>
+#include <parlib/ros_debug.h> /* for printd() */
 
 /* Initializes a ucq.  You pass in addresses of mmaped pages for the main page
  * (prod_idx) and the spare page.  I recommend mmaping a big chunk and breaking