diff options
-rw-r--r-- | gdb/ChangeLog | 34 | ||||
-rw-r--r-- | gdb/coff-pe-read.c | 2 | ||||
-rw-r--r-- | gdb/coffread.c | 4 | ||||
-rw-r--r-- | gdb/ctfread.c | 2 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 10 | ||||
-rw-r--r-- | gdb/language.c | 2 | ||||
-rw-r--r-- | gdb/minsyms.c | 9 | ||||
-rw-r--r-- | gdb/objfiles.c | 4 | ||||
-rw-r--r-- | gdb/psympriv.h | 7 | ||||
-rw-r--r-- | gdb/psymtab.c | 2 | ||||
-rw-r--r-- | gdb/stabsread.c | 2 | ||||
-rw-r--r-- | gdb/symmisc.c | 2 | ||||
-rw-r--r-- | gdb/symtab.c | 15 | ||||
-rw-r--r-- | gdb/symtab.h | 22 | ||||
-rw-r--r-- | gdb/xcoffread.c | 8 |
15 files changed, 86 insertions, 39 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 67c9980..6de7954 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,39 @@ 2021-02-10 Andrew Burgess <andrew.burgess@embecosm.com> + * coff-pe-read.c (add_pe_forwarded_sym): Make use of section_index + and set_section_index member functions where appropriate. + * coffread.c (coff_symtab_read): Likewise. + (process_coff_symbol): Likewise. + * ctfread.c (set_symbol_address): Likewise. + * dwarf2/read.c (add_partial_symbol): Likewise. + (var_decode_location): Likewise. + * language.c: Likewise. + * minsyms.c (minimal_symbol_reader::record_full): Likewise. + (compact_minimal_symbols): Likewise. + (minimal_symbol_upper_bound): Likewise. + * objfiles.c (relocate_one_symbol): Likewise. + * psympriv.h (partial_symbol::obj_section): Likewise. + (partial_symbol::address): Likewise. + * psymtab.c (partial_symtab::add_psymbol): Likewise. + * stabsread.c (scan_file_globals): Likewise. + * symmisc.c (dump_msymbols): Likewise. + * symtab.c (general_symbol_info::obj_section): Likewise. + (fixup_section): Likewise. + (get_msymbol_address): Likewise. + * symtab.h (general_symbol_info::section): Rename to... + (general_symbol_info::m_section): ...this. + (general_symbol_info::set_section_index): New member function. + (general_symbol_info::section_index): Likewise. + (SYMBOL_SECTION): Delete. + (MSYMBOL_VALUE_ADDRESS): Make use of section_index and + set_section_index member functions where appropriate. + (MSYMBOL_SECTION): Delete. + (symbol::symbol): Update to initialize 'm_section'. + * xcoffread.c (read_xcoff_symtab): Make use of set_section_index. + (process_xcoff_symbol): Likewise. + +2021-02-10 Andrew Burgess <andrew.burgess@embecosm.com> + * breakpoint.c (resolve_sal_pc): Replace SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION. * findvar.c (language_defn::read_var_value): Likewise. diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index 70eb7a0..90b406f 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -246,7 +246,7 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader, vma = BMSYMBOL_VALUE_ADDRESS (msymbol); msymtype = MSYMBOL_TYPE (msymbol.minsym); - section = MSYMBOL_SECTION (msymbol.minsym); + section = msymbol.minsym->section_index (); /* Generate a (hopefully unique) qualified name using the first part of the dll name, e.g. KERNEL32!AddAtomA. This matches the style diff --git a/gdb/coffread.c b/gdb/coffread.c index 77752bc..49a2485 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -1026,7 +1026,7 @@ coff_symtab_read (minimal_symbol_reader &reader, sym = process_coff_symbol (cs, &main_aux, objfile); SYMBOL_VALUE (sym) = tmpaddr + offset; - SYMBOL_SECTION (sym) = sec; + sym->set_section_index (sec); } } break; @@ -1565,7 +1565,7 @@ process_coff_symbol (struct coff_symbol *cs, /* default assumptions */ SYMBOL_VALUE (sym) = cs->c_value; SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); + sym->set_section_index (cs_to_section (cs, objfile)); if (ISFCN (cs->c_type)) { diff --git a/gdb/ctfread.c b/gdb/ctfread.c index 866977a..928cb30 100644 --- a/gdb/ctfread.c +++ b/gdb/ctfread.c @@ -297,7 +297,7 @@ set_symbol_address (struct objfile *of, struct symbol *sym, const char *name) { SET_SYMBOL_VALUE_ADDRESS (sym, BMSYMBOL_VALUE_ADDRESS (msym)); SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC; - SYMBOL_SECTION (sym) = MSYMBOL_SECTION (msym.minsym); + sym->set_section_index (msym.minsym->section_index ()); } } diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 4b901c5..51bf0fb 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -8612,7 +8612,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) partial_symbol psymbol; memset (&psymbol, 0, sizeof (psymbol)); psymbol.ginfo.set_language (cu->language, &objfile->objfile_obstack); - psymbol.ginfo.section = -1; + psymbol.ginfo.set_section_index (-1); /* The code below indicates that the psymbol should be installed by setting this. */ @@ -8641,7 +8641,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) psymbol.domain = VAR_DOMAIN; psymbol.aclass = LOC_BLOCK; - psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile)); psymbol.ginfo.value.address = addr; if (pdi->main_subprogram && actual_name != NULL) @@ -8686,7 +8686,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) { psymbol.domain = VAR_DOMAIN; psymbol.aclass = LOC_STATIC; - psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile)); psymbol.ginfo.value.address = addr; where = psymbol_placement::GLOBAL; } @@ -8702,7 +8702,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) psymbol.domain = VAR_DOMAIN; psymbol.aclass = LOC_STATIC; - psymbol.ginfo.section = SECT_OFF_TEXT (objfile); + psymbol.ginfo.set_section_index (SECT_OFF_TEXT (objfile)); if (has_loc) psymbol.ginfo.value.address = addr; where = psymbol_placement::STATIC; @@ -22100,7 +22100,7 @@ var_decode_location (struct attribute *attr, struct symbol *sym, SET_SYMBOL_VALUE_ADDRESS (sym, SYMBOL_VALUE_ADDRESS (sym) - + objfile->section_offsets[SYMBOL_SECTION (sym)]); + + objfile->section_offsets[sym->section_index ()]); return; } } diff --git a/gdb/language.c b/gdb/language.c index c23f291..0eff76e 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -1052,7 +1052,7 @@ language_arch_info::type_and_symbol::alloc_type_symbol symbol->set_language (lang, nullptr); symbol->owner.arch = gdbarch; SYMBOL_OBJFILE_OWNED (symbol) = 0; - SYMBOL_SECTION (symbol) = 0; + symbol->set_section_index (0); SYMBOL_TYPE (symbol) = type; SYMBOL_DOMAIN (symbol) = VAR_DOMAIN; SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF; diff --git a/gdb/minsyms.c b/gdb/minsyms.c index b861f93..8b8e11a 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -1157,7 +1157,7 @@ minimal_symbol_reader::record_full (gdb::string_view name, msymbol->m_name = name.data (); SET_MSYMBOL_VALUE_ADDRESS (msymbol, address); - MSYMBOL_SECTION (msymbol) = section; + msymbol->set_section_index (section); MSYMBOL_TYPE (msymbol) = ms_type; @@ -1246,7 +1246,8 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount, { if (MSYMBOL_VALUE_RAW_ADDRESS (copyfrom) == MSYMBOL_VALUE_RAW_ADDRESS ((copyfrom + 1)) - && MSYMBOL_SECTION (copyfrom) == MSYMBOL_SECTION (copyfrom + 1) + && (copyfrom->section_index () + == (copyfrom + 1)->section_index ()) && strcmp (copyfrom->linkage_name (), (copyfrom + 1)->linkage_name ()) == 0) { @@ -1551,12 +1552,12 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym) = (minsym.objfile->per_bfd->msymbols.get () + minsym.objfile->per_bfd->minimal_symbol_count); msymbol = minsym.minsym; - section = MSYMBOL_SECTION (msymbol); + section = msymbol->section_index (); for (iter = msymbol + 1; iter != past_the_end; ++iter) { if ((MSYMBOL_VALUE_RAW_ADDRESS (iter) != MSYMBOL_VALUE_RAW_ADDRESS (msymbol)) - && MSYMBOL_SECTION (iter) == section) + && iter->section_index () == section) break; } diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 18dc8fa..2a513d8 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -621,11 +621,11 @@ relocate_one_symbol (struct symbol *sym, struct objfile *objfile, they can't possibly pass the tests below. */ if ((SYMBOL_CLASS (sym) == LOC_LABEL || SYMBOL_CLASS (sym) == LOC_STATIC) - && SYMBOL_SECTION (sym) >= 0) + && sym->section_index () >= 0) { SET_SYMBOL_VALUE_ADDRESS (sym, SYMBOL_VALUE_ADDRESS (sym) - + delta[SYMBOL_SECTION (sym)]); + + delta[sym->section_index ()]); } } diff --git a/gdb/psympriv.h b/gdb/psympriv.h index b5080e3..1f35ef2 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -40,9 +40,7 @@ struct partial_symbol section has been set. */ struct obj_section *obj_section (struct objfile *objfile) const { - if (ginfo.section >= 0) - return &objfile->sections[ginfo.section]; - return nullptr; + return ginfo.obj_section (objfile); } /* Return the unrelocated address of this partial symbol. */ @@ -55,7 +53,8 @@ struct partial_symbol the offsets provided in OBJFILE. */ CORE_ADDR address (const struct objfile *objfile) const { - return ginfo.value.address + objfile->section_offsets[ginfo.section]; + return (ginfo.value.address + + objfile->section_offsets[ginfo.section_index ()]); } /* Set the address of this partial symbol. The address must be diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 58fd067..7f41c01 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1556,7 +1556,7 @@ partial_symtab::add_psymbol (gdb::string_view name, bool copy_name, memset (&psymbol, 0, sizeof (psymbol)); psymbol.set_unrelocated_address (coreaddr); - psymbol.ginfo.section = section; + psymbol.ginfo.set_section_index (section); psymbol.domain = domain; psymbol.aclass = theclass; psymbol.ginfo.set_language (language, objfile->partial_symtabs->obstack ()); diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 33f200a..d83f4b4 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -4590,7 +4590,7 @@ scan_file_globals (struct objfile *objfile) (sym, MSYMBOL_VALUE_ADDRESS (resolve_objfile, msymbol)); } - SYMBOL_SECTION (sym) = MSYMBOL_SECTION (msymbol); + sym->set_section_index (msymbol->section_index ()); } if (prev) diff --git a/gdb/symmisc.c b/gdb/symmisc.c index ec4758c..3703e50 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -240,7 +240,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile) /* Use the relocated address as shown in the symbol here -- do not try to respect copy relocations. */ CORE_ADDR addr = (msymbol->value.address - + objfile->section_offsets[msymbol->section]); + + objfile->section_offsets[msymbol->section_index ()]); fputs_filtered (paddress (gdbarch, addr), outfile); fprintf_filtered (outfile, " %s", msymbol->linkage_name ()); if (section) diff --git a/gdb/symtab.c b/gdb/symtab.c index 9ad7c1f..3650b49 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1015,8 +1015,8 @@ general_symbol_info::search_name () const struct obj_section * general_symbol_info::obj_section (const struct objfile *objfile) const { - if (section >= 0) - return &objfile->sections[section]; + if (section_index () >= 0) + return &objfile->sections[section_index ()]; return nullptr; } @@ -1655,7 +1655,7 @@ fixup_section (struct general_symbol_info *ginfo, msym = lookup_minimal_symbol_by_pc_name (addr, ginfo->linkage_name (), objfile); if (msym) - ginfo->section = MSYMBOL_SECTION (msym); + ginfo->set_section_index (msym->section_index ()); else { /* Static, function-local variables do appear in the linker @@ -1707,7 +1707,7 @@ fixup_section (struct general_symbol_info *ginfo, if (obj_section_addr (s) - offset <= addr && addr < obj_section_endaddr (s) - offset) { - ginfo->section = idx; + ginfo->set_section_index (idx); return; } } @@ -1716,9 +1716,9 @@ fixup_section (struct general_symbol_info *ginfo, section. If there is no allocated section, then it hardly matters what we pick, so just pick zero. */ if (fallback == -1) - ginfo->section = 0; + ginfo->set_section_index (0); else - ginfo->section = fallback; + ginfo->set_section_index (fallback); } } @@ -6472,7 +6472,8 @@ get_msymbol_address (struct objfile *objf, const struct minimal_symbol *minsym) return BMSYMBOL_VALUE_ADDRESS (found); } } - return minsym->value.address + objf->section_offsets[minsym->section]; + return (minsym->value.address + + objf->section_offsets[minsym->section_index ()]); } diff --git a/gdb/symtab.h b/gdb/symtab.h index e85ae68..efdbada 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -539,7 +539,21 @@ struct general_symbol_info section_offsets for this objfile. Negative means that the symbol does not get relocated relative to a section. */ - short section; + short m_section; + + /* Set the index into the obj_section list (within the containing + objfile) for the section that contains this symbol. See M_SECTION + for more details. */ + + void set_section_index (short idx) + { m_section = idx; } + + /* Return the index into the obj_section list (within the containing + objfile) for the section that contains this symbol. See M_SECTION + for more details. */ + + short section_index () const + { return m_section; } /* Return the obj_section from OBJFILE for this symbol. The symbol returned is based on the SECTION member variable, and can be nullptr @@ -570,7 +584,6 @@ extern CORE_ADDR get_symbol_address (const struct symbol *sym); #define SYMBOL_VALUE_COMMON_BLOCK(symbol) (symbol)->value.common_block #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block #define SYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain -#define SYMBOL_SECTION(symbol) (symbol)->section /* Try to determine the demangled name for a symbol, based on the language of that symbol. If the language is set to language_auto, @@ -755,7 +768,7 @@ extern CORE_ADDR get_msymbol_address (struct objfile *objf, #define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \ (((symbol)->maybe_copied) ? get_msymbol_address (objfile, symbol) \ : ((symbol)->value.address \ - + (objfile)->section_offsets[(symbol)->section])) + + (objfile)->section_offsets[(symbol)->section_index ()])) /* For a bound minsym, we can easily compute the address directly. */ #define BMSYMBOL_VALUE_ADDRESS(symbol) \ MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym) @@ -764,7 +777,6 @@ extern CORE_ADDR get_msymbol_address (struct objfile *objf, #define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes #define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block #define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain -#define MSYMBOL_SECTION(symbol) (symbol)->section #include "minsyms.h" @@ -1118,7 +1130,7 @@ struct symbol : public general_symbol_info, public allocate_on_obstack language_specific.obstack = nullptr; m_language = language_unknown; ada_mangled = 0; - section = -1; + m_section = -1; /* GCC 4.8.5 (on CentOS 7) does not correctly compile class- initialization of unions, so we initialize it manually here. */ owner.symtab = nullptr; diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 8a2348c..cd93943 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1372,7 +1372,7 @@ read_xcoff_symtab (struct objfile *objfile, legacy_psymtab *pst) (fcn_cs_saved.c_value + off, fcn_stab_saved.c_name, 0, 0, objfile); if (newobj->name != NULL) - SYMBOL_SECTION (newobj->name) = SECT_OFF_TEXT (objfile); + newobj->name->set_section_index (SECT_OFF_TEXT (objfile)); } else if (strcmp (cs->c_name, ".ef") == 0) { @@ -1559,7 +1559,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) /* default assumptions */ SET_SYMBOL_VALUE_ADDRESS (sym, cs->c_value + off); SYMBOL_DOMAIN (sym) = VAR_DOMAIN; - SYMBOL_SECTION (sym) = secnum_to_section (cs->c_secnum, objfile); + sym->set_section_index (secnum_to_section (cs->c_secnum, objfile)); if (ISFCN (cs->c_type)) { @@ -1625,7 +1625,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) sym = define_symbol (cs->c_value + off, cs->c_name, 0, 0, objfile); if (sym != NULL) { - SYMBOL_SECTION (sym) = sec; + sym->set_section_index (sec); } return sym; } @@ -1657,7 +1657,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) SET_SYMBOL_VALUE_ADDRESS (sym, SYMBOL_VALUE_ADDRESS (sym) + static_block_base); - SYMBOL_SECTION (sym) = static_block_section; + sym->set_section_index (static_block_section); } return sym; |