fix structure stack allocation for high-debug code
[sbcl.git] / src / runtime / print.c
index e50da2e..67a7c20 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdarg.h>
 #include "thread.h"              /* genesis/primitive-objects.h needs this */
 #include <errno.h>
+#include <stdlib.h>
 
 /* FSHOW and odxprint provide debugging output for low-level information
  * (signal handling, exceptions, safepoints) which is hard to debug by
@@ -69,10 +70,16 @@ dyndebug_init()
     dyndebug_init1(misc,           "MISC");
     dyndebug_init1(pagefaults,     "PAGEFAULTS");
 
+    int n_output_flags = n;
+    dyndebug_init1(backtrace_when_lost, "BACKTRACE_WHEN_LOST");
+    dyndebug_init1(sleep_when_lost,     "SLEEP_WHEN_LOST");
+
     if (n != DYNDEBUG_NFLAGS)
         fprintf(stderr, "Bug in dyndebug_init\n");
 
+#if defined(LISP_FEATURE_GENCGC)
     gencgc_verbose = dyndebug_config.dyndebug_gencgc_verbose;
+#endif
 
     char *featurelist = getenv("SBCL_DYNDEBUG");
     if (featurelist) {
@@ -84,7 +91,7 @@ dyndebug_init()
             if (!token) break;
             unsigned i;
             if (!strcmp(token, "all"))
-                for (i = 0; i < DYNDEBUG_NFLAGS; i++)
+                for (i = 0; i < n_output_flags; i++)
                     *ptrs[i] = 1;
             else {
                 for (i = 0; i < DYNDEBUG_NFLAGS; i++)
@@ -104,8 +111,11 @@ dyndebug_init()
             fprintf(stderr, "Valid flags are:\n");
             fprintf(stderr, "  all  ;enables all of the following:\n");
             unsigned i;
-            for (i = 0; i < DYNDEBUG_NFLAGS; i++)
+            for (i = 0; i < DYNDEBUG_NFLAGS; i++) {
+                if (i == n_output_flags)
+                    fprintf(stderr, "Additional options:\n");
                 fprintf(stderr, "  %s\n", names[i]);
+            }
         }
     }
 
@@ -118,6 +128,8 @@ dyndebug_init()
  * be restored to its full win32 branch functionality, where output to a
  * file or to the debugger can be selected at runtime. */
 
+void vodxprint_fun(const char *, va_list);
+
 void
 odxprint_fun(const char *fmt, ...)
 {
@@ -203,6 +215,9 @@ fshow_fun(void __attribute__((__unused__)) *ignored,
 #ifdef LISP_FEATURE_GENCGC
 #include "gencgc-alloc-region.h" /* genesis/thread.h needs this */
 #endif
+#if defined(LISP_FEATURE_WIN32)
+# include "win32-thread-private-events.h" /* genesis/thread.h needs this */
+#endif
 #include "genesis/static-symbols.h"
 #include "genesis/primitive-objects.h"
 #include "genesis/static-symbols.h"