X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fmonitor.c;h=0856db7cf1fdd36e6e755f3277729e193afb4476;hb=f82850855bab2cdaaf51c4e92d506b365866e65f;hp=b59bf4e65342053eda7cd8e635bd0bc489e6b269;hpb=d411bb9c10af8fb568a4a23274090ede67f738dd;p=sbcl.git diff --git a/src/runtime/monitor.c b/src/runtime/monitor.c index b59bf4e..0856db7 100644 --- a/src/runtime/monitor.c +++ b/src/runtime/monitor.c @@ -9,16 +9,19 @@ * files for more information. */ +#include "sbcl.h" + #include #include #include #include #include +#ifndef LISP_FEATURE_WIN32 #include +#endif #include #include -#include "sbcl.h" #include "runtime.h" #include "parse.h" #include "vars.h" @@ -177,7 +180,9 @@ print_cmd(char **ptr) static void kill_cmd(char **ptr) { +#ifndef LISP_FEATURE_WIN32 kill(getpid(), parse_number(ptr)); +#endif } static void @@ -352,31 +357,31 @@ print_context(os_context_t *context) static void print_context_cmd(char **ptr) { - int free; + int free_ici; struct thread *thread=arch_os_get_current_thread(); - free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)>>2; + free_ici = fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)); if (more_p(ptr)) { int index; index = parse_number(ptr); - if ((index >= 0) && (index < free)) { - printf("There are %d interrupt contexts.\n", free); + if ((index >= 0) && (index < free_ici)) { + printf("There are %d interrupt contexts.\n", free_ici); printf("printing context %d\n", index); print_context(thread->interrupt_contexts[index]); } else { printf("There aren't that many/few contexts.\n"); - printf("There are %d interrupt contexts.\n", free); + printf("There are %d interrupt contexts.\n", free_ici); } } else { - if (free == 0) + if (free_ici == 0) printf("There are no interrupt contexts!\n"); else { - printf("There are %d interrupt contexts.\n", free); - printf("printing context %d\n", free - 1); - print_context(thread->interrupt_contexts[free - 1]); + printf("There are %d interrupt contexts.\n", free_ici); + printf("printing context %d\n", free_ici - 1); + print_context(thread->interrupt_contexts[free_ici - 1]); } } } @@ -444,7 +449,11 @@ sub_monitor(void) int ambig; if (!ldb_in) { +#ifndef LISP_FEATURE_WIN32 ldb_in = fopen("/dev/tty","r+"); +#else + ldb_in = stdin; +#endif ldb_in_fd = fileno(ldb_in); } @@ -453,14 +462,7 @@ sub_monitor(void) fflush(stdout); line = fgets(buf, sizeof(buf), ldb_in); if (line == NULL) { - if (isatty(ldb_in_fd)) { - putchar('\n'); - continue; - } - else { - fprintf(stderr, "\nEOF on something other than a tty.\n"); - exit(0); - } + exit(1); } ptr = line; if ((token = parse_token(&ptr)) == NULL) @@ -498,7 +500,7 @@ ldb_monitor() bcopy(curbuf, oldbuf, sizeof(oldbuf)); - printf("LDB monitor\n"); + printf("Welcome to LDB, a low-level debugger for the Lisp runtime environment.\n"); setjmp(curbuf);