Fixup SYMBOL_SECTION for objfiles_relocate().
authorKevin Buettner <kevinb@redhat.com>
Fri, 4 Aug 2000 23:13:50 +0000 (23:13 +0000)
committerKevin Buettner <kevinb@redhat.com>
Fri, 4 Aug 2000 23:13:50 +0000 (23:13 +0000)
gdb/ChangeLog
gdb/objfiles.c
gdb/symtab.c
gdb/symtab.h

index 8abe74d78a1c4cde3df05d3b0b569a01b4522971..bdaaa2ae717ab56a120b26a79d74d3e766adeeb2 100644 (file)
@@ -1,3 +1,12 @@
+2000-08-04  Kevin Buettner  <kevinb@redhat.com>
+
+       * symtab.h (fixup_psymbol_section): Declare.
+       * symtab.c (fixup_psymbol_section): Make extern.
+       (fixup_section): Fix up section as well as bfd_section.
+       * objfiles.c (objfile_relocate): Call fixup_symbol_section
+       or fixup_psymbol_section before attempting to access
+       the SYMBOL_SECTION component of a symbol or partial symbol.
+
 2000-08-04  Kevin Buettner  <kevinb@redhat.com>
 
        * minsyms.c (build_minimal_symbol_hash_tables): New function.
index 5cdfb983bc64086835425e453f1469b1e836fe54..f5b1119acf75b55b6918d267789c905f4f2345ad 100644 (file)
@@ -564,6 +564,9 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
          for (j = 0; j < BLOCK_NSYMS (b); ++j)
            {
              struct symbol *sym = BLOCK_SYM (b, j);
+
+             fixup_symbol_section (sym, objfile);
+
              /* The RS6000 code from which this was taken skipped
                 any symbols in STRUCT_NAMESPACE or UNDEF_NAMESPACE.
                 But I'm leaving out that test, on the theory that
@@ -606,15 +609,21 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
     for (psym = objfile->global_psymbols.list;
         psym < objfile->global_psymbols.next;
         psym++)
-      if (SYMBOL_SECTION (*psym) >= 0)
-       SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
-                                                 SYMBOL_SECTION (*psym));
+      {
+       fixup_psymbol_section (*psym, objfile);
+       if (SYMBOL_SECTION (*psym) >= 0)
+         SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
+                                                   SYMBOL_SECTION (*psym));
+      }
     for (psym = objfile->static_psymbols.list;
         psym < objfile->static_psymbols.next;
         psym++)
-      if (SYMBOL_SECTION (*psym) >= 0)
-       SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
-                                                 SYMBOL_SECTION (*psym));
+      {
+       fixup_psymbol_section (*psym, objfile);
+       if (SYMBOL_SECTION (*psym) >= 0)
+         SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
+                                                   SYMBOL_SECTION (*psym));
+      }
   }
 
   {
index e43afd41cfd84ccef1d63ca5855ef8b53c9c76ce..633f6f79fe2c6f5e27eab01fbc05e2a2c9565c72 100644 (file)
@@ -81,10 +81,6 @@ static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
                                                     const char *, int,
                                                     namespace_enum);
 
-static struct partial_symbol *fixup_psymbol_section (struct
-                                                    partial_symbol *,
-                                                    struct objfile *);
-
 static struct symtab *lookup_symtab_1 (char *);
 
 static void cplusplus_hint (char *);
@@ -520,7 +516,10 @@ fixup_section (struct general_symbol_info *ginfo, struct objfile *objfile)
   msym = lookup_minimal_symbol (ginfo->name, NULL, objfile);
 
   if (msym)
-    ginfo->bfd_section = SYMBOL_BFD_SECTION (msym);
+    {
+      ginfo->bfd_section = SYMBOL_BFD_SECTION (msym);
+      ginfo->section = SYMBOL_SECTION (msym);
+    }
 }
 
 struct symbol *
@@ -537,7 +536,7 @@ fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
   return sym;
 }
 
-static struct partial_symbol *
+struct partial_symbol *
 fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile)
 {
   if (!psym)
index 7fb78db3ea73c10bd3db39f3f23363c70adddeee..101759f22def80b001d260549585012fd5d08742 100644 (file)
@@ -1414,6 +1414,10 @@ extern int in_prologue (CORE_ADDR pc, CORE_ADDR func_start);
 extern struct symbol *fixup_symbol_section (struct symbol *,
                                            struct objfile *);
 
+extern struct partial_symbol *fixup_psymbol_section (struct partial_symbol
+                                                    *psym,
+                                                    struct objfile *objfile);
+
 /* Symbol searching */
 
 /* When using search_symbols, a list of the following structs is returned.