+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
{
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;
}
*/
- psymtab_include_list[includes_used++] = namestring;
+ psymtab_include_list[includes_used++] = str;
if (includes_used >= includes_allocated)
{
char **orig = psymtab_include_list;
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. */
- /* 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.
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)
if (is_trace_mode) {
expect("trace", discard);
- is_trace_mode = 0;
} else {
expect (PROMPT, discard);
}
{
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");
dev_name);
attach_flag = 1;
- inferior_pid = 9000;
rombug_fetch_registers();
+ bufaddr = 0;
+ buflen = 0;
}
/*
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)
{
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;
}
/*
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);
objfile_relocate(symfile_objfile, offs);
}
+
return 0;
}
supply_register(regno, (char *) &val);
}
}
+ is_trace_mode = 0;
expect_prompt (1);
}
if (name == 0) return;
printf_monitor (SET_REG, name, read_register (regno));
+ is_trace_mode = 0;
expect_prompt (1);
}
}
expect (CMD_DELIM, 1);
if (CMD_END)
printf_monitor (CMD_END);
+ is_trace_mode = 0;
expect_prompt (1);
return len;
int len;
{
int i, j;
- char buf[20];
/* Number of bytes read so far. */
int count;
errno = EIO;
return 0;
}
+ if (bufaddr <= memaddr && (memaddr+len) <= (bufaddr+buflen))
+ {
+ memcpy(myaddr, &readbuf[memaddr-bufaddr], len);
+ return len;
+ }
startaddr = memaddr;
count = 0;
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;
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;
}
{
breakaddr[i] = 0;
printf_monitor(CLR_BREAK_CMD, addr);
+ is_trace_mode = 0;
expect_prompt(1);
return 0;
}
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));