Modified Files:
authorKung Hsu <kung@cygnus>
Fri, 22 Apr 1994 21:36:59 +0000 (21:36 +0000)
committerKung Hsu <kung@cygnus>
Fri, 22 Apr 1994 21:36:59 +0000 (21:36 +0000)
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
gdb/os9kread.c
gdb/remote-os9k.c
gdb/stabsread.c

index 9c5b8114f060afac6de041f41eef4a6f08d357ea..21207117493c0329805531cce374c9b61682ba2b 100644 (file)
@@ -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
index 4a1f3653866b6864c1224862fcfaff6695b09597..f1d79128628537e930f4e4a5c5b47f5a3973edcb 100644 (file)
@@ -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. */
index abeb1b599d1e402b3cc456dd0dc8041bfc4135cc..798e2ebf7e9ae2c048933ac853d96dc43c7768a0 100644 (file)
@@ -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;
       }
index cc9537b2c21d4574321c84d883fb6db497c0fd56..37c23ca1261671f2f01b107ef7ebcf1d67152b1a 100644 (file)
@@ -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));