* inftarg.c (child_thread_alive): New function to see if a
[deliverable/binutils-gdb.git] / gdb / os9kread.c
index 6577b6570a1d315a9fc09a9d260d23d06e796fde..155ea93ea6939f0def65a608f6b6c21fc94e23fb 100644 (file)
@@ -1,5 +1,5 @@
 /* Read os9/os9k symbol tables and convert to internal format, for GDB.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -53,7 +53,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "command.h"
 #include "target.h"
 #include "gdbcore.h"           /* for bfd stuff */
-#include "libbfd.h"            /* FIXME Secret internal BFD stuff (bfd_read) */
 #include "libaout.h"           /* FIXME Secret internal BFD stuff for a.out */
 #include "symfile.h"
 #include "objfiles.h"
@@ -105,9 +104,6 @@ extern int info_verbose;
 
 extern int previous_stab_code;
 
-/* The BFD for this file -- implicit parameter to next_symbol_text.  */
-static bfd *symfile_bfd;
-
 /* Name of last function encountered.  Used in Solaris to approximate
    object file boundaries.  */
 static char *last_function_name;
@@ -125,12 +121,13 @@ extern struct complaint repeated_header_complaint;
 
 extern struct complaint repeated_header_name_complaint;
 
+#if 0
 static struct complaint lbrac_unmatched_complaint =
   {"unmatched Increment Block Entry before symtab pos %d", 0, 0};
 
 static struct complaint lbrac_mismatch_complaint =
   {"IBE/IDE symbol mismatch at symtab pos %d", 0, 0};
-
+#endif
 \f
 /* Local function prototypes */
 static void
@@ -146,12 +143,6 @@ static void
 read_os9k_psymtab PARAMS ((struct section_offsets *, struct objfile *,
                          CORE_ADDR, int));
 
-static void
-init_psymbol_list PARAMS ((struct objfile *));
-
-static char *
-os9k_next_symbol_text PARAMS ((void));
-
 static int
 fill_sym PARAMS ((FILE *, bfd *));
 
@@ -181,7 +172,8 @@ os9k_end_psymtab PARAMS ((struct partial_symtab *, char **, int, int, CORE_ADDR,
                      struct partial_symtab **, int));
 
 static void
-record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
+record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *, 
+                    struct section_offsets *));
 \f
 #define HANDLE_RBRAC(val) \
   if ((val) > pst->texthigh) pst->texthigh = (val);
@@ -207,23 +199,38 @@ record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
 #define N_ABS 6
 
 static void
-record_minimal_symbol (name, address, type, objfile)
+record_minimal_symbol (name, address, type, objfile, section_offsets)
      char *name;
      CORE_ADDR address;
      int type;
      struct objfile *objfile;
+     struct section_offsets *section_offsets;
 {
   enum minimal_symbol_type ms_type;
 
   switch (type)
     {
-    case N_TEXT:  ms_type = mst_text; break;
-    case N_DATA:  ms_type = mst_data; break;
-    case N_BSS:   ms_type = mst_bss;  break;
-    case N_RDATA: ms_type = mst_bss; break;
-    case N_IDATA: ms_type = mst_data; break;
-    case N_ABS:   ms_type = mst_abs;  break;
-    default:      ms_type = mst_unknown; break;
+    case N_TEXT:
+         ms_type = mst_text;
+         address += ANOFFSET(section_offsets, SECT_OFF_TEXT);
+         break;
+    case N_DATA:
+         ms_type = mst_data;
+         break;
+    case N_BSS:
+          ms_type = mst_bss;
+         break;
+    case N_RDATA:
+         ms_type = mst_bss;
+         break;
+    case N_IDATA:      
+         ms_type = mst_data;
+         break;
+    case N_ABS:
+         ms_type = mst_abs;
+         break;
+    default:
+          ms_type = mst_unknown; break;
   }
 
   prim_record_minimal_symbol
@@ -249,9 +256,10 @@ struct stbsymbol {
 };
 #define STBSYMSIZE 10
 
-static int 
-read_minimal_symbols(objfile)
+static void
+read_minimal_symbols(objfile, section_offsets)
      struct objfile *objfile;
+     struct section_offsets *section_offsets;
 {
 FILE *fp;
 bfd *abfd;
@@ -299,11 +307,11 @@ char buf[64], buf1[128];
        if (ch == 0) break;
        ch = getc(fp);
     };
-    record_minimal_symbol(buf1, sym.value, sym.type&7, objfile);
+    record_minimal_symbol(buf1, sym.value, sym.type&7, objfile, section_offsets);
     off += STBSYMSIZE;
   };
   install_minimal_symbols (objfile);
-  return 1;
+  return;
 }
 \f
 /* Scan and build partial symbols for a symbol file.
@@ -323,21 +331,19 @@ os9k_symfile_read (objfile, section_offsets, mainline)
      int mainline;     /* FIXME comments above */
 {
   bfd *sym_bfd;
-  int val;
-  int stb_exist;
   struct cleanup *back_to;
 
   sym_bfd = objfile->obfd;
   /* If we are reinitializing, or if we have never loaded syms yet, init */
   if (mainline || objfile->global_psymbols.size == 0 || 
     objfile->static_psymbols.size == 0)
-    init_psymbol_list (objfile);
+    init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
 
   pending_blocks = 0;
   back_to = make_cleanup (really_free_pendings, 0);
 
   make_cleanup (discard_minimal_symbols, 0);
-  read_minimal_symbols (objfile);
+  read_minimal_symbols (objfile, section_offsets);
 
   /* Now that the symbol table data of the executable file are all in core,
      process them and define symbols accordingly.  */
@@ -345,12 +351,6 @@ os9k_symfile_read (objfile, section_offsets, mainline)
                   bfd_section_vma  (sym_bfd, DBX_TEXT_SECT (objfile)),
                   bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
 
-  if (!have_partial_symbols ()) {
-    wrap_here ("");
-    printf_filtered ("(no debugging symbols found)...");
-    wrap_here ("");
-  }
-
   do_cleanups (back_to);
 }
 
@@ -384,10 +384,9 @@ static void
 os9k_symfile_init (objfile)
      struct objfile *objfile;
 {
-  int val;
   bfd *sym_bfd = objfile->obfd;
   char *name = bfd_get_filename (sym_bfd);
-  char dbgname[64], stbname[64];
+  char dbgname[512], stbname[512];
   FILE *symfile = 0;
   FILE *minfile = 0;
 
@@ -485,7 +484,6 @@ fill_sym (dbg_file, abfd)
      FILE *dbg_file;
      bfd *abfd;
 {
-short id;
 short si, nmask;
 long li;
 int ii;
@@ -549,30 +547,6 @@ char *p;
     return 1;
 }
 \f
-/* Initializes storage for all of the partial symbols that will be
-   created by read_dbx_symtab and subsidiaries.  */
-
-static void
-init_psymbol_list (objfile)
-     struct objfile *objfile;
-{
-  /* Free any previously allocated psymbol lists.  */
-  if (objfile -> global_psymbols.list)
-    mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
-  if (objfile -> static_psymbols.list)
-    mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
-
-  /* Current best guess is that there are approximately a twentieth
-     of the total symbols (in a debugging file) are global or static
-     oriented symbols */
-  objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
-  objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
-  objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
-    xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
-  objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
-    xmmalloc (objfile -> md, objfile -> static_psymbols.size * sizeof (struct partial_symbol));
-}
-
 /* Given pointers to an a.out symbol table in core containing dbx
    style data, setup partial_symtab's describing each source file for
    which debugging information is available.
@@ -589,10 +563,11 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
 {
   register struct internal_symstruct *bufp = 0;        /* =0 avoids gcc -Wall glitch*/
   register char *namestring;
-  int nsl;
   int past_first_source_file = 0;
   CORE_ADDR last_o_file_start = 0;
+#if 0
   struct cleanup *back_to;
+#endif
   bfd *abfd;
   FILE *fp;
 
@@ -633,6 +608,7 @@ read_os9k_psymtab (section_offsets, objfile, text_addr, text_size)
 
   abfd = objfile->obfd;
   fp = objfile->auxf2; 
+  if (!fp) return;
                
   fread(&dbghdr.sync, sizeof(dbghdr.sync), 1, fp);
   fread(&dbghdr.rev, sizeof(dbghdr.rev), 1, fp);
@@ -701,33 +677,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 + 
-                 ANOFFSET (section_offsets, SECT_OFF_TEXT);
+               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;
@@ -737,7 +723,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;
@@ -1067,7 +1053,7 @@ os9k_end_psymtab (pst, include_list, num_includes, capping_symbol_cnt,
     strncpy (p, last_function_name, n);
     p[n] = 0;
     
-    minsym = lookup_minimal_symbol (p, objfile);
+    minsym = lookup_minimal_symbol (p, NULL, objfile);
 
     if (minsym) {
       pst->texthigh = SYMBOL_VALUE_ADDRESS(minsym)+(long)MSYMBOL_INFO(minsym);
@@ -1378,8 +1364,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. */
This page took 0.026896 seconds and 4 git commands to generate.