diff -ruN kozos14/i386-stub.c kozos15/i386-stub.c --- kozos14/i386-stub.c Mon Nov 12 19:16:51 2007 +++ kozos15/i386-stub.c Mon Nov 12 19:22:58 2007 @@ -964,6 +964,7 @@ otherwise as a quick means to stop program execution and "break" into the debugger. */ +#undef asm void breakpoint (void) { diff -ruN kozos14/kozos.h kozos15/kozos.h --- kozos14/kozos.h Mon Nov 12 19:16:51 2007 +++ kozos15/kozos.h Mon Nov 12 19:19:38 2007 @@ -24,6 +24,7 @@ /* library */ void kz_start(kz_func func, char *name, int pri, int argc, char *argv[]); +void kz_trap(); void kz_break(); /* general thread */ diff -ruN kozos14/stubd.c kozos15/stubd.c --- kozos14/stubd.c Mon Nov 12 19:16:51 2007 +++ kozos15/stubd.c Mon Nov 12 19:19:21 2007 @@ -67,12 +67,7 @@ */ kz_break(); -#if 1 /* Ctrl-C対応 */ kz_send(extintr_id, s, NULL); - /* write(s, "+", 1); */ - /* write(s, "$O7465#25", 9); */ - /* write(s, "$X0b#ea", 7); */ - /* write(s, "$W00#b7", 7); */ while (1) { int size, i; char *p; @@ -85,16 +80,8 @@ fprintf(stderr, "\'%c\'", p[i]); } } -#if 0 - if (strncmp(p, "$Hc-1#", 6)) { - write(s, "+$#00", 5); - } -#endif kz_memfree(p); } -#else - kz_sleep(); -#endif close(s); close(sockt); diff -ruN kozos14/telnetd.c kozos15/telnetd.c --- kozos14/telnetd.c Mon Nov 12 19:16:51 2007 +++ kozos15/telnetd.c Mon Nov 12 19:24:16 2007 @@ -45,6 +45,8 @@ } else if (!strncmp(buffer, "down", 4)) { int *nullp = NULL; *nullp = 1; + } else if (!strncmp(buffer, "trap", 4)) { + kz_trap(); } else if (!strncmp(buffer, "break", 5)) { kz_break(); } else if (!strncmp(buffer, "date", 4)) { diff -ruN kozos14/thread.c kozos15/thread.c --- kozos14/thread.c Mon Nov 12 19:16:51 2007 +++ kozos15/thread.c Mon Nov 12 19:23:27 2007 @@ -498,11 +498,13 @@ abort(); } -void kz_break() +void kz_trap() { - /* - * スタブ付属の breakpoint() でうまくブレークできないので, - * トラップシグナルを上げてブレークする. - */ kill(getpid(), SIGTRAP); +} + +void kz_break() +{ + void breakpoint(); + breakpoint(); }