From d5336fc5a4a32554ea7e5fde89522f3f0e25ffb0 Mon Sep 17 00:00:00 2001 From: Kung Hsu Date: Fri, 22 Apr 1994 21:36:59 +0000 Subject: [PATCH] Modified Files: ChangeLog remote-os9k.c os9kread.c stabsread.c * remote-os9k.c (rombug_fetch_registers): set trace mode correctly. * remote-os9k.c (rombug_read_inferior_memory): cache data in buffer. * os9kread,c (read_os9k_psymtab): process file symbol to truncate extra info. * os9kread.c (os9k_read_ofile_symtab): proper casting of args passed to process_one_symbol. * stabsread.c (read_type): process os9k functio prototype. --- gdb/ChangeLog | 12 +++++++++++ gdb/os9kread.c | 23 +++++++++++++------- gdb/remote-os9k.c | 53 ++++++++++++++++++++++++++++++++--------------- gdb/stabsread.c | 10 ++++++--- 4 files changed, 71 insertions(+), 27 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9c5b8114f06..21207117493 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +Fri Apr 22 14:25:36 1994 Kung Hsu (kung@mexican.cygnus.com) + + * remote-os9k.c (rombug_fetch_registers): set trace mode + correctly. + * remote-os9k.c (rombug_read_inferior_memory): cache data in + buffer. + * os9kread,c (read_os9k_psymtab): process file symbol to truncate + extra info. + * os9kread.c (os9k_read_ofile_symtab): proper casting of args + passed to process_one_symbol. + * stabsread.c (read_type): process os9k functio prototype. + Fri Apr 22 11:27:39 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * solib.c (symbol_add_stub): If so->textsection is NULL, don't diff --git a/gdb/os9kread.c b/gdb/os9kread.c index 4a1f3653866..f1d79128628 100644 --- a/gdb/os9kread.c +++ b/gdb/os9kread.c @@ -719,34 +719,43 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size) { unsigned long valu; enum language tmp_language; + char *str, *p; + int n; valu = CUR_SYMBOL_VALUE; if (valu) valu += ANOFFSET (section_offsets, SECT_OFF_TEXT); past_first_source_file = 1; + p = strchr(namestring, ':'); + if (p) n = p-namestring; + else n = strlen(namestring); + str = alloca(n+1); + strncpy(str, namestring, n); + str[n] = '\0'; + if (psymfile_depth == 0) { if (!pst) pst = os9k_start_psymtab (objfile, section_offsets, - namestring, valu, + str, valu, cursymoffset, symnum-1, objfile -> global_psymbols.next, objfile -> static_psymbols.next); } else { /* this is a include file */ - tmp_language = deduce_language_from_filename (namestring); + tmp_language = deduce_language_from_filename (str); if (tmp_language != language_unknown && (tmp_language != language_c || psymtab_language != language_cplus)) psymtab_language = tmp_language; /* - if (pst && STREQ (namestring, pst->filename)) + if (pst && STREQ (str, pst->filename)) continue; { register int i; for (i = 0; i < includes_used; i++) - if (STREQ (namestring, psymtab_include_list[i])) + if (STREQ (str, psymtab_include_list[i])) { i = -1; break; @@ -756,7 +765,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size) } */ - psymtab_include_list[includes_used++] = namestring; + psymtab_include_list[includes_used++] = str; if (includes_used >= includes_allocated) { char **orig = psymtab_include_list; @@ -1397,8 +1406,8 @@ os9k_read_ofile_symtab (pst) bufp = symbuf; type = bufp->n_type; - os9k_process_one_symbol (type, bufp->n_desc, bufp->n_value, - bufp->n_strx, section_offsets, objfile); + os9k_process_one_symbol ((int)type, (int)bufp->n_desc, + (CORE_ADDR)bufp->n_value, bufp->n_strx, section_offsets, objfile); /* We skip checking for a new .o or -l file; that should never happen in this routine. */ diff --git a/gdb/remote-os9k.c b/gdb/remote-os9k.c index abeb1b599d1..798e2ebf7e9 100644 --- a/gdb/remote-os9k.c +++ b/gdb/remote-os9k.c @@ -1,4 +1,4 @@ - /* Remote debugging interface for boot monitors, for GDB. +/* Remote debugging interface for boot monitors, for GDB. Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc. This file is part of GDB. @@ -82,11 +82,15 @@ static int monitor_log = 0; static int tty_xon = 0; static int tty_xoff = 0; -static int timeout = 5; +static int timeout = 10; static int is_trace_mode = 0; /* Descriptor for I/O to remote machine. Initialize it to NULL*/ static serial_t monitor_desc = NULL; +static CORE_ADDR bufaddr = 0; +static int buflen = 0; +static char readbuf[16]; + /* Send data to monitor. Works just like printf. */ static void printf_monitor(va_alist) @@ -204,7 +208,6 @@ expect_prompt(discard) if (is_trace_mode) { expect("trace", discard); - is_trace_mode = 0; } else { expect (PROMPT, discard); } @@ -289,9 +292,6 @@ rombug_create_inferior (execfile, args, env) { int entry_pt; - /* Nonzero value indicates that a process really is running. */ - inferior_pid = 9000; - if (args && *args) error("Can't pass arguments to remote ROMBUG process"); @@ -368,8 +368,9 @@ rombug_open(args, from_tty) dev_name); attach_flag = 1; - inferior_pid = 9000; rombug_fetch_registers(); + bufaddr = 0; + buflen = 0; } /* @@ -432,7 +433,6 @@ rombug_detach (from_tty) if (attach_flag) { printf_monitor (GO_CMD); attach_flag = 0; - inferior_pid = 0; } pop_target(); /* calls rombug_close to do the real work */ if (from_tty) @@ -454,15 +454,19 @@ rombug_resume (pid, step, sig) { is_trace_mode = 1; printf_monitor (STEP_CMD); - /* wait for the echo. */ + /* wait for the echo. ** expect (STEP_CMD, 1); + */ } else { printf_monitor (GO_CMD); - /* swallow the echo. */ + /* swallow the echo. ** expect (GO_CMD, 1); + */ } + bufaddr = 0; + buflen= 0; } /* @@ -493,6 +497,8 @@ rombug_wait (pid, status) status->value.sig = TARGET_SIGNAL_TRAP; timeout = old_timeout; rombug_fetch_registers(); + bufaddr = 0; + buflen = 0; pc = read_register(PC_REGNUM); addr = read_register(DATABASE_REG); obj_sec = find_pc_section (pc); @@ -511,6 +517,7 @@ rombug_wait (pid, status) objfile_relocate(symfile_objfile, offs); } + return 0; } @@ -598,6 +605,7 @@ rombug_fetch_registers () supply_register(regno, (char *) &val); } } + is_trace_mode = 0; expect_prompt (1); } @@ -705,6 +713,7 @@ char *name; if (name == 0) return; printf_monitor (SET_REG, name, read_register (regno)); + is_trace_mode = 0; expect_prompt (1); } } @@ -753,6 +762,7 @@ rombug_write_inferior_memory (memaddr, myaddr, len) expect (CMD_DELIM, 1); if (CMD_END) printf_monitor (CMD_END); + is_trace_mode = 0; expect_prompt (1); return len; @@ -767,7 +777,6 @@ rombug_read_inferior_memory(memaddr, myaddr, len) int len; { int i, j; - char buf[20]; /* Number of bytes read so far. */ int count; @@ -794,6 +803,11 @@ rombug_read_inferior_memory(memaddr, myaddr, len) errno = EIO; return 0; } + if (bufaddr <= memaddr && (memaddr+len) <= (bufaddr+buflen)) + { + memcpy(myaddr, &readbuf[memaddr-bufaddr], len); + return len; + } startaddr = memaddr; count = 0; @@ -807,19 +821,22 @@ rombug_read_inferior_memory(memaddr, myaddr, len) if (sr_get_debug()) printf ("\nDisplay %d bytes at %x\n", len_this_pass, startaddr); - printf_monitor (MEM_DIS_CMD, startaddr, 16); + printf_monitor (MEM_DIS_CMD, startaddr, 8); expect ("- ", 1); - for (i = 0; i < len_this_pass; i++) + for (i = 0; i < 16; i++) { - get_hex_byte (&myaddr[count++]); - if (sr_get_debug()) - printf ("\nRead a 0x%x from 0x%x\n", myaddr[count-1], startaddr); - startaddr += 1; + get_hex_byte (&readbuf[i]); } + bufaddr = startaddr; + buflen = 16; + memcpy(&myaddr[count], readbuf, len_this_pass); + count += len_this_pass; + startaddr += len_this_pass; expect(CMD_DELIM, 1); } if (CMD_END) printf_monitor (CMD_END); + is_trace_mode = 0; expect_prompt (1); return len; @@ -883,6 +900,7 @@ rombug_insert_breakpoint (addr, shadow) printf ("Breakpoint at %x\n", addr); rombug_read_inferior_memory(addr, shadow, memory_breakpoint_size); printf_monitor(SET_BREAK_CMD, addr); + is_trace_mode = 0; expect_prompt(1); return 0; } @@ -909,6 +927,7 @@ rombug_remove_breakpoint (addr, shadow) { breakaddr[i] = 0; printf_monitor(CLR_BREAK_CMD, addr); + is_trace_mode = 0; expect_prompt(1); return 0; } diff --git a/gdb/stabsread.c b/gdb/stabsread.c index cc9537b2c21..37c23ca1261 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1545,13 +1545,17 @@ read_type (pp, objfile) case 'f': /* Function returning another type */ if (os9k_stabs && **pp == '(') { - /* Function prototype; skip it. + /* Function prototype; parse it. We must conditionalize this on os9k_stabs because otherwise it could be confused with a Sun-style (1,3) typenumber (I think). */ - while (**pp != ')') - ++*pp; + struct type *t; ++*pp; + while (**pp != ')') + { + t = os9k_read_type(pp, objfile); + if (**pp == ',') ++*pp; + } } type1 = read_type (pp, objfile); type = make_function_type (type1, dbx_lookup_type (typenums)); -- 2.30.2