X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fprint.c;h=7d0c97e4c9a1620e6a12325a8a9381dc94edc433;hb=37d3828773e2f847bb1ed7522b0af4fb8e736fc8;hp=e50da2ec5aaa2df376a1ec004b2acdec5bfd41b7;hpb=ebb604b4422ba886e70ce2e531c1f4d28d44e721;p=sbcl.git diff --git a/src/runtime/print.c b/src/runtime/print.c index e50da2e..7d0c97e 100644 --- a/src/runtime/print.c +++ b/src/runtime/print.c @@ -27,6 +27,7 @@ #include #include "thread.h" /* genesis/primitive-objects.h needs this */ #include +#include /* FSHOW and odxprint provide debugging output for low-level information * (signal handling, exceptions, safepoints) which is hard to debug by @@ -68,11 +69,19 @@ dyndebug_init() dyndebug_init1(seh, "SEH"); dyndebug_init1(misc, "MISC"); dyndebug_init1(pagefaults, "PAGEFAULTS"); + dyndebug_init1(io, "IO"); + dyndebug_init1(runtime_link, "RUNTIME_LINK"); + + 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 +93,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 +113,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 +130,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, ...) { @@ -132,9 +146,8 @@ vodxprint_fun(const char *fmt, va_list args) { #ifdef LISP_FEATURE_WIN32 DWORD lastError = GetLastError(); -#else - int original_errno = errno; #endif + int original_errno = errno; QSHOW_BLOCK; @@ -171,9 +184,8 @@ vodxprint_fun(const char *fmt, va_list args) #ifdef LISP_FEATURE_WIN32 SetLastError(lastError); -#else - errno = original_errno; #endif + errno = original_errno; } /* Translate the rather awkward syntax @@ -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"