new for ptx
[deliverable/binutils-gdb.git] / gdb / minsyms.c
index 8f1992c9374d7d16dfda10aaee61cc76193e70e8..73562cbdd9699f9b07c67d43dd17c447ef7749fd 100644 (file)
@@ -1,5 +1,5 @@
 /* GDB routines for manipulating the minimal symbol tables.
 /* GDB routines for manipulating the minimal symbol tables.
-   Copyright 1992 Free Software Foundation, Inc.
+   Copyright 1992, 1993, 1994 Free Software Foundation, Inc.
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
 This file is part of GDB.
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
 This file is part of GDB.
@@ -38,11 +38,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 
 #include "defs.h"
 
 
 #include "defs.h"
+#include <string.h>
 #include "symtab.h"
 #include "bfd.h"
 #include "symfile.h"
 #include "objfiles.h"
 #include "demangle.h"
 #include "symtab.h"
 #include "bfd.h"
 #include "symfile.h"
 #include "objfiles.h"
 #include "demangle.h"
+#include "gdb-stabs.h"
 
 /* Accumulate the minimal symbols for each objfile in bunches of BUNCH_SIZE.
    At the end, copy them all into one newly allocated location on an objfile's
 
 /* Accumulate the minimal symbols for each objfile in bunches of BUNCH_SIZE.
    At the end, copy them all into one newly allocated location on an objfile's
@@ -96,9 +98,7 @@ lookup_minimal_symbol (name, objf)
   struct minimal_symbol *msymbol;
   struct minimal_symbol *found_symbol = NULL;
   struct minimal_symbol *found_file_symbol = NULL;
   struct minimal_symbol *msymbol;
   struct minimal_symbol *found_symbol = NULL;
   struct minimal_symbol *found_file_symbol = NULL;
-#ifdef IBM6000_TARGET
   struct minimal_symbol *trampoline_symbol = NULL;
   struct minimal_symbol *trampoline_symbol = NULL;
-#endif
 
   for (objfile = object_files;
        objfile != NULL && found_symbol == NULL;
 
   for (objfile = object_files;
        objfile != NULL && found_symbol == NULL;
@@ -124,34 +124,17 @@ lookup_minimal_symbol (name, objf)
                      found_file_symbol = msymbol;
                      break;
 
                      found_file_symbol = msymbol;
                      break;
 
-                   case mst_unknown:
-#ifdef IBM6000_TARGET
-                     /* I *think* all platforms using shared
-                        libraries (and trampoline code) will suffer
-                        this problem. Consider a case where there are
-                        5 shared libraries, each referencing `foo'
-                        with a trampoline entry. When someone wants
-                        to put a breakpoint on `foo' and the only
-                        info we have is minimal symbol vector, we
-                        want to use the real `foo', rather than one
-                        of those trampoline entries. MGO */
+                   case mst_solib_trampoline:
 
                      /* If a trampoline symbol is found, we prefer to
                         keep looking for the *real* symbol. If the
 
                      /* If a trampoline symbol is found, we prefer to
                         keep looking for the *real* symbol. If the
-                        actual symbol not found, then we'll use the
-                        trampoline entry. Sorry for the machine
-                        dependent code here, but I hope this will
-                        benefit other platforms as well. For
-                        trampoline entries, we used mst_unknown
-                        earlier. Perhaps we should define a
-                        `mst_trampoline' type?? */
-
+                        actual symbol is not found, then we'll use the
+                        trampoline entry. */
                      if (trampoline_symbol == NULL)
                        trampoline_symbol = msymbol;
                      break;
                      if (trampoline_symbol == NULL)
                        trampoline_symbol = msymbol;
                      break;
-#else
-                     /* FALLTHROUGH */
-#endif
+
+                   case mst_unknown:
                    default:
                      found_symbol = msymbol;
                      break;
                    default:
                      found_symbol = msymbol;
                      break;
@@ -168,11 +151,9 @@ lookup_minimal_symbol (name, objf)
   if (found_file_symbol)
     return found_file_symbol;
 
   if (found_file_symbol)
     return found_file_symbol;
 
-  /* Symbols for IBM shared library trampolines are next best.  */
-#ifdef IBM6000_TARGET
+  /* Symbols for shared library trampolines are next best.  */
   if (trampoline_symbol)
     return trampoline_symbol;
   if (trampoline_symbol)
     return trampoline_symbol;
-#endif
 
   return NULL;
 }
 
   return NULL;
 }
@@ -298,8 +279,29 @@ prim_record_minimal_symbol (name, address, ms_type, objfile)
      enum minimal_symbol_type ms_type;
      struct objfile *objfile;
 {
      enum minimal_symbol_type ms_type;
      struct objfile *objfile;
 {
+  int section;
+
+  switch (ms_type)
+    {
+    case mst_text:
+    case mst_file_text:
+    case mst_solib_trampoline:
+      section = SECT_OFF_TEXT;
+      break;
+    case mst_data:
+    case mst_file_data:
+      section = SECT_OFF_DATA;
+      break;
+    case mst_bss:
+    case mst_file_bss:
+      section = SECT_OFF_BSS;
+      break;
+    default:
+      section = -1;
+    }
+
   prim_record_minimal_symbol_and_info (name, address, ms_type,
   prim_record_minimal_symbol_and_info (name, address, ms_type,
-                                      NULL, -1, objfile);
+                                      NULL, section, objfile);
 }
 
 void
 }
 
 void
@@ -348,6 +350,7 @@ prim_record_minimal_symbol_and_info (name, address, ms_type, info, section,
   SYMBOL_INIT_LANGUAGE_SPECIFIC (msymbol, language_unknown);
   SYMBOL_VALUE_ADDRESS (msymbol) = address;
   SYMBOL_SECTION (msymbol) = section;
   SYMBOL_INIT_LANGUAGE_SPECIFIC (msymbol, language_unknown);
   SYMBOL_VALUE_ADDRESS (msymbol) = address;
   SYMBOL_SECTION (msymbol) = section;
+
   MSYMBOL_TYPE (msymbol) = ms_type;
   /* FIXME:  This info, if it remains, needs its own field.  */
   MSYMBOL_INFO (msymbol) = info; /* FIXME! */
   MSYMBOL_TYPE (msymbol) = ms_type;
   /* FIXME:  This info, if it remains, needs its own field.  */
   MSYMBOL_INFO (msymbol) = info; /* FIXME! */
This page took 0.025447 seconds and 4 git commands to generate.