Index: arch/ia64/kdb/kdba_bp.c =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/arch/ia64/kdb/Attic/kdba_bp.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 kdba_bp.c --- arch/ia64/kdb/kdba_bp.c 2001/05/04 20:40:51 1.1.2.1 +++ arch/ia64/kdb/kdba_bp.c 2001/05/04 22:34:22 @@ -174,7 +174,7 @@ kdb_machreg_t pc = ef->cr_iip + ia64_psr(ef)->ri * 6; kdb_printf("SS trap at "); kdb_symbol_print(pc, NULL, KDB_SP_DEFAULT|KDB_SP_NEWLINE); - kdb_id1(ef->cr_iip); + kdb_id1(pc); KDB_STATE_CLEAR(DOING_SS); } Index: arch/ia64/kdb/kdba_id.c =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/arch/ia64/kdb/Attic/kdba_id.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 kdba_id.c --- arch/ia64/kdb/kdba_id.c 2001/05/04 20:40:51 1.1.2.1 +++ arch/ia64/kdb/kdba_id.c 2001/05/08 20:46:50 @@ -244,11 +244,19 @@ { int ret; int byte=0; + int off = 0; + + dip->fprintf_func = dip->fprintf_dummy; + off = pc & 0xf; kdba_check_pc(&pc); while (byte < 16) { + if (byte == off) + dip->fprintf_func = kdb_dis_fprintf; + else + dip->fprintf_func = dip->fprintf_dummy; kdba_dis_printaddr(pc+byte, dip); ret = print_insn_ia64((kdb_machreg_t)(pc+byte), dip); - kdb_printf("\n"); + dip->fprintf_func(dip->stream, "\n"); if (ret < 0) break; byte += ret; Index: include/linux/dis-asm.h =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/include/linux/Attic/dis-asm.h,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 dis-asm.h --- include/linux/dis-asm.h 2001/05/04 20:41:03 1.1.2.1 +++ include/linux/dis-asm.h 2001/05/08 20:44:52 @@ -67,6 +67,7 @@ typedef struct disassemble_info { fprintf_ftype fprintf_func; + fprintf_ftype fprintf_dummy; PTR stream; PTR application_data; Index: include/linux/kdbprivate.h =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/include/linux/Attic/kdbprivate.h,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 kdbprivate.h --- include/linux/kdbprivate.h 2001/05/04 20:41:03 1.1.2.1 +++ include/linux/kdbprivate.h 2001/05/08 20:41:01 @@ -284,6 +284,7 @@ /* * General Disassembler interfaces */ +extern int kdb_dis_fprintf(PTR, const char *, ...) __attribute__ ((format (printf, 2, 3))); extern int kdb_dis_fprintf_dummy(PTR, const char *, ...) __attribute__ ((format (printf, 2, 3))); extern disassemble_info kdb_di; Index: kdb/kdb_id.c =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/kdb/Attic/kdb_id.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 kdb_id.c --- kdb/kdb_id.c 2001/05/04 20:41:04 1.1.2.1 +++ kdb/kdb_id.c 2001/05/08 20:55:40 @@ -99,6 +99,8 @@ if (diag) return diag; + dip->fprintf_dummy = kdb_dis_fprintf; + mode = kdbgetenv("IDMODE"); diag = kdba_id_parsemode(mode, dip); if (diag) { @@ -141,6 +143,9 @@ * Allow the user to specify that this instruction * should be treated differently. */ + + kdb_di.fprintf_dummy = kdb_dis_fprintf_dummy; + mode = kdbgetenv("IDMODE"); diag = kdba_id_parsemode(mode, &kdb_di); if (diag) { @@ -167,10 +172,7 @@ * Result of format conversion cannot exceed 255 bytes. */ -static int -kdb_dis_fprintf(PTR file, const char *fmt, ...) - __attribute__ ((format (printf, 2, 3))); -static int +int kdb_dis_fprintf(PTR file, const char *fmt, ...) { char buffer[256]; Index: kdb/kdbmain.c =================================================================== RCS file: /trillian/src/cvs_root/linux-2.4/kdb/Attic/kdbmain.c,v retrieving revision 1.1.2.1 diff -u -r1.1.2.1 kdbmain.c --- kdb/kdbmain.c 2001/05/04 20:41:04 1.1.2.1 +++ kdb/kdbmain.c 2001/05/05 20:36:26 @@ -535,6 +535,17 @@ kdb_printf("Unknown diag %d\n", -diag); } +/* The command history feature is not functional at the moment. It + * will be replaced by something that understands editting keys, + * including left, right, insert, delete as well as up, down. + * Keith Owens, November 18 2000 + */ +#define KDB_CMD_HISTORY_COUNT 32 +#define CMD_BUFLEN 200 /* kdb_printf: max printline size == 256 */ +static unsigned int cmd_head, cmd_tail; +static unsigned int cmdptr; +static char cmd_hist[KDB_CMD_HISTORY_COUNT][CMD_BUFLEN]; + /* * kdb_parse * @@ -569,9 +580,10 @@ static int kdb_parse(char *cmdstr, kdb_eframe_t ef) { - char *argv[MAXARGC]; - int argc=0; - char *cp; + static char *argv[MAXARGC]; + static int argc = 0; + static char cbuf[CMD_BUFLEN]; + char *cp, *cpp; kdbtab_t *tp; int i; @@ -579,22 +591,21 @@ * First tokenize the command string. */ cp = cmdstr; - - /* - * If a null statement is provided, do nothing. - */ - if ((*cp == '\n') || (*cp == '\0')) - return 0; - while (*cp) { - /* skip whitespace */ - while (isspace(*cp)) cp++; - if ((*cp == '\0') || (*cp == '\n')) - break; - argv[argc++] = cp; - /* Skip to next whitespace */ - for(; *cp && (!isspace(*cp) && (*cp != '=')); cp++); - *cp++ = '\0'; /* Squash a ws or '=' character */ + if (*cp != '\n' && *cp != '\0') { + argc = 0; + cpp = cbuf; + while (*cp) { + /* skip whitespace */ + while (isspace(*cp)) cp++; + if ((*cp == '\0') || (*cp == '\n')) + break; + argv[argc++] = cpp; + /* Skip to next whitespace */ + while (*cp && !isspace(*cp) && (*cp != '=')) + *cpp++ = *cp++; + *cpp++ = '\0'; /* Squash a ws or '=' character */ + } } if (!argc) return 0; @@ -661,17 +672,6 @@ } } -/* The command history feature is not functional at the moment. It - * will be replaced by something that understands editting keys, - * including left, right, insert, delete as well as up, down. - * Keith Owens, November 18 2000 - */ -#define KDB_CMD_HISTORY_COUNT 32 -#define CMD_BUFLEN 200 /* kdb_printf: max printline size == 256 */ -static unsigned int cmd_head, cmd_tail; -static unsigned int cmdptr; -static char cmd_hist[KDB_CMD_HISTORY_COUNT][CMD_BUFLEN]; - static int handle_ctrl_cmd(char *cmd) @@ -734,7 +734,6 @@ char *cmdbuf; char cmd[CMD_BUFLEN]; int diag; - int parsed_once=0; /* if false don't repeat last cmd on CR */ typeof (*ef) local_ef; if (reason != KDB_REASON_DEBUG && @@ -879,20 +878,14 @@ * Fetch command from keyboard */ cmdbuf = kdb_getstr(cmdbuf, CMD_BUFLEN,""); - if (*cmdbuf < 32) { - int not_cr = *cmdbuf == '\n' ? 0 : 1; - - if (!(not_cr || parsed_once) - || handle_ctrl_cmd(cmdbuf)) goto do_full_getstr; - - if (not_cr) goto get_again; - } + if (*cmdbuf < 32 && *cmdbuf != '\n') + if (handle_ctrl_cmd(cmdbuf)) + goto do_full_getstr; if (*cmdbuf != '\n') { cmd_head = (cmd_head+1) % KDB_CMD_HISTORY_COUNT; if (cmd_head == cmd_tail) cmd_tail = (cmd_tail+1) % KDB_CMD_HISTORY_COUNT; - parsed_once = 1; } cmdptr = cmd_head;