aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog27
-rw-r--r--gdb/breakpoint.c5
-rw-r--r--gdb/findvar.c18
-rw-r--r--gdb/infcmd.c2
-rw-r--r--gdb/linespec.c2
-rw-r--r--gdb/maint.c2
-rw-r--r--gdb/minsyms.c10
-rw-r--r--gdb/parse.c5
-rw-r--r--gdb/printcmd.c6
-rw-r--r--gdb/symmisc.c4
-rw-r--r--gdb/symtab.c21
-rw-r--r--gdb/symtab.h14
12 files changed, 73 insertions, 43 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 120dee8..67c9980 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,30 @@
+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.
+ * infcmd.c (jump_command): Likewise.
+ * linespec.c (minsym_found): Likewise.
+ * maint.c (maintenance_translate_address): Likewise.
+ * minsyms.c (lookup_minimal_symbol_by_pc_section): Likewise.
+ (minimal_symbol_upper_bound): Likewise.
+ * parse.c (find_minsym_type_and_address): Likewise.
+ (operator_check_standard): Likewise.
+ * printcmd.c (info_address_command): Likewise.
+ * symmisc.c (dump_msymbols): Likewise.
+ (print_symbol): Likewise.
+ * symtab.c (general_symbol_info::obj_section): Define new
+ function.
+ (fixup_symbol_section): Replace SYMBOL_OBJ_SECTION.
+ (find_pc_sect_compunit_symtab): Likewise.
+ (find_function_start_sal): Likewise.
+ (skip_prologue_sal): Replace SYMBOL_OBJ_SECTION and
+ MSYMBOL_OBJ_SECTION.
+ * symtab.h (struct general_symbol_info) <obj_section>: Declare new
+ function.
+ (SYMBOL_OBJ_SECTION): Delete.
+ (MSYMBOL_OBJ_SECTION): Delete.
+
2021-02-09 Tom Tromey <tom@tromey.com>
* stap-probe.c (stap_parse_argument_conditionally): Fix typo.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c20c0d7..5f1914e 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -9677,8 +9677,7 @@ resolve_sal_pc (struct symtab_and_line *sal)
if (sym != NULL)
{
fixup_symbol_section (sym, SYMTAB_OBJFILE (sal->symtab));
- sal->section = SYMBOL_OBJ_SECTION (SYMTAB_OBJFILE (sal->symtab),
- sym);
+ sal->section = sym->obj_section (SYMTAB_OBJFILE (sal->symtab));
}
else
{
@@ -9692,7 +9691,7 @@ resolve_sal_pc (struct symtab_and_line *sal)
bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (sal->pc);
if (msym.minsym)
- sal->section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym);
+ sal->section = msym.minsym->obj_section (msym.objfile);
}
}
}
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 6abcd3a..fcd9719 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -638,11 +638,9 @@ language_defn::read_var_value (struct symbol *var,
v = allocate_value (type);
if (overlay_debugging)
{
- addr
- = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
- SYMBOL_OBJ_SECTION (symbol_objfile (var),
- var));
-
+ struct objfile *var_objfile = symbol_objfile (var);
+ addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
+ var->obj_section (var_objfile));
store_typed_address (value_contents_raw (v), type, addr);
}
else
@@ -665,9 +663,9 @@ language_defn::read_var_value (struct symbol *var,
case LOC_STATIC:
if (overlay_debugging)
- addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
- SYMBOL_OBJ_SECTION (symbol_objfile (var),
- var));
+ addr
+ = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (var),
+ var->obj_section (symbol_objfile (var)));
else
addr = SYMBOL_VALUE_ADDRESS (var);
break;
@@ -709,7 +707,7 @@ language_defn::read_var_value (struct symbol *var,
if (overlay_debugging)
addr = symbol_overlayed_address
(BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var)),
- SYMBOL_OBJ_SECTION (symbol_objfile (var), var));
+ var->obj_section (symbol_objfile (var)));
else
addr = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (var));
break;
@@ -777,7 +775,7 @@ language_defn::read_var_value (struct symbol *var,
error (_("Missing %s symbol \"%s\"."),
flavour_name, var->linkage_name ());
}
- obj_section = MSYMBOL_OBJ_SECTION (lookup_data.result.objfile, msym);
+ obj_section = msym->obj_section (lookup_data.result.objfile);
/* Relocate address, unless there is no section or the variable is
a TLS variable. */
if (obj_section == NULL
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index ebaf575..80e6ad3 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1110,7 +1110,7 @@ jump_command (const char *arg, int from_tty)
struct obj_section *section;
fixup_symbol_section (sfn, 0);
- section = SYMBOL_OBJ_SECTION (symbol_objfile (sfn), sfn);
+ section = sfn->obj_section (symbol_objfile (sfn));
if (section_is_overlay (section)
&& !section_is_mapped (section))
{
diff --git a/gdb/linespec.c b/gdb/linespec.c
index a9809a5..9bfa159 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -4258,7 +4258,7 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
sal.pspace = current_program_space;
}
- sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
+ sal.section = msymbol->obj_section (objfile);
if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
add_sal_to_sals (self, result, &sal, msymbol->natural_name (), 0);
diff --git a/gdb/maint.c b/gdb/maint.c
index d718d70..7495cab 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -509,7 +509,7 @@ maintenance_translate_address (const char *arg, int from_tty)
const char *symbol_offset
= pulongest (address - BMSYMBOL_VALUE_ADDRESS (sym));
- sect = MSYMBOL_OBJ_SECTION(sym.objfile, sym.minsym);
+ sect = sym.minsym->obj_section (sym.objfile);
if (sect != NULL)
{
const char *section_name;
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 5c719f9..b861f93 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -800,9 +800,9 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
/* Some types of debug info, such as COFF,
don't fill the bfd_section member, so don't
throw away symbols on those platforms. */
- && MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]) != NULL
+ && msymbol[hi].obj_section (objfile) != nullptr
&& (!matching_obj_sections
- (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi]),
+ (msymbol[hi].obj_section (objfile),
section)))
{
hi--;
@@ -820,8 +820,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio
== MSYMBOL_SIZE (&msymbol[hi - 1]))
&& (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
== MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1]))
- && (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi])
- == MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi - 1])))
+ && (msymbol[hi].obj_section (objfile)
+ == msymbol[hi - 1].obj_section (objfile)))
{
hi--;
continue;
@@ -1560,7 +1560,7 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
break;
}
- obj_section = MSYMBOL_OBJ_SECTION (minsym.objfile, minsym.minsym);
+ obj_section = minsym.minsym->obj_section (minsym.objfile);
if (iter != past_the_end
&& (MSYMBOL_VALUE_ADDRESS (minsym.objfile, iter)
< obj_section_endaddr (obj_section)))
diff --git a/gdb/parse.c b/gdb/parse.c
index 08fde89..d634a4f 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -416,7 +416,7 @@ find_minsym_type_and_address (minimal_symbol *msymbol,
CORE_ADDR *address_p)
{
bound_minimal_symbol bound_msym = {msymbol, objfile};
- struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
+ struct obj_section *section = msymbol->obj_section (objfile);
enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
bool is_tls = (section != NULL
@@ -1359,8 +1359,7 @@ operator_check_standard (struct expression *exp, int pos,
const struct block *const block = elts[pos + 1].block;
const struct symbol *const symbol = elts[pos + 2].symbol;
- /* Check objfile where the variable itself is placed.
- SYMBOL_OBJ_SECTION (symbol) may be NULL. */
+ /* Check objfile where the variable itself is placed. */
if ((*objfile_func) (symbol_objfile (symbol), data))
return 1;
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 332d971..1e328a7 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1534,7 +1534,7 @@ info_address_command (const char *exp, int from_tty)
fputs_styled (paddress (gdbarch, load_addr), address_style.style (),
gdb_stdout);
printf_filtered (" in a file compiled without debugging");
- section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym);
+ section = msymbol.minsym->obj_section (objfile);
if (section_is_overlay (section))
{
load_addr = overlay_unmapped_address (load_addr, section);
@@ -1558,7 +1558,7 @@ info_address_command (const char *exp, int from_tty)
printf_filtered ("\" is ");
val = SYMBOL_VALUE (sym);
if (SYMBOL_OBJFILE_OWNED (sym))
- section = SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym);
+ section = sym->obj_section (symbol_objfile (sym));
else
section = NULL;
gdbarch = symbol_arch (sym);
@@ -1678,7 +1678,7 @@ info_address_command (const char *exp, int from_tty)
printf_filtered ("unresolved");
else
{
- section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym);
+ section = msym.minsym->obj_section (msym.objfile);
if (section
&& (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index fe353bc..ec4758c 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -196,7 +196,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
index = 0;
for (minimal_symbol *msymbol : objfile->msymbols ())
{
- struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
+ struct obj_section *section = msymbol->obj_section (objfile);
switch (MSYMBOL_TYPE (msymbol))
{
@@ -543,7 +543,7 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
struct obj_section *section;
if (SYMBOL_OBJFILE_OWNED (symbol))
- section = SYMBOL_OBJ_SECTION (symbol_objfile (symbol), symbol);
+ section = symbol->obj_section (symbol_objfile (symbol));
else
section = NULL;
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 7ffb52a..9ad7c1f 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -1012,6 +1012,16 @@ general_symbol_info::search_name () const
/* See symtab.h. */
+struct obj_section *
+general_symbol_info::obj_section (const struct objfile *objfile) const
+{
+ if (section >= 0)
+ return &objfile->sections[section];
+ return nullptr;
+}
+
+/* See symtab.h. */
+
bool
symbol_matches_search_name (const struct general_symbol_info *gsymbol,
const lookup_name_info &name)
@@ -1730,7 +1740,7 @@ fixup_symbol_section (struct symbol *sym, struct objfile *objfile)
if (objfile == NULL)
objfile = symbol_objfile (sym);
- if (SYMBOL_OBJ_SECTION (objfile, sym))
+ if (sym->obj_section (objfile) != nullptr)
return sym;
/* We should have an objfile by now. */
@@ -2972,8 +2982,7 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
fixup_symbol_section (sym, obj_file);
- if (matching_obj_sections (SYMBOL_OBJ_SECTION (obj_file,
- sym),
+ if (matching_obj_sections (sym->obj_section (obj_file),
section))
break;
}
@@ -3732,7 +3741,7 @@ find_function_start_sal (symbol *sym, bool funfirstline)
fixup_symbol_section (sym, NULL);
symtab_and_line sal
= find_function_start_sal_1 (BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym)),
- SYMBOL_OBJ_SECTION (symbol_objfile (sym), sym),
+ sym->obj_section (symbol_objfile (sym)),
funfirstline);
sal.symbol = sym;
return sal;
@@ -3823,7 +3832,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
objfile = symbol_objfile (sym);
pc = BLOCK_ENTRY_PC (SYMBOL_BLOCK_VALUE (sym));
- section = SYMBOL_OBJ_SECTION (objfile, sym);
+ section = sym->obj_section (objfile);
name = sym->linkage_name ();
}
else
@@ -3836,7 +3845,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
objfile = msymbol.objfile;
pc = BMSYMBOL_VALUE_ADDRESS (msymbol);
- section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym);
+ section = msymbol.minsym->obj_section (objfile);
name = msymbol.minsym->linkage_name ();
}
diff --git a/gdb/symtab.h b/gdb/symtab.h
index f060e0e..e85ae68 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -540,6 +540,12 @@ struct general_symbol_info
does not get relocated relative to a section. */
short section;
+
+ /* Return the obj_section from OBJFILE for this symbol. The symbol
+ returned is based on the SECTION member variable, and can be nullptr
+ if SECTION is negative. */
+
+ struct obj_section *obj_section (const struct objfile *objfile) const;
};
extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *);
@@ -565,10 +571,6 @@ extern CORE_ADDR get_symbol_address (const struct symbol *sym);
#define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
#define SYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
#define SYMBOL_SECTION(symbol) (symbol)->section
-#define SYMBOL_OBJ_SECTION(objfile, symbol) \
- (((symbol)->section >= 0) \
- ? (&(((objfile)->sections)[(symbol)->section])) \
- : NULL)
/* Try to determine the demangled name for a symbol, based on the
language of that symbol. If the language is set to language_auto,
@@ -763,10 +765,6 @@ extern CORE_ADDR get_msymbol_address (struct objfile *objf,
#define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
#define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
#define MSYMBOL_SECTION(symbol) (symbol)->section
-#define MSYMBOL_OBJ_SECTION(objfile, symbol) \
- (((symbol)->section >= 0) \
- ? (&(((objfile)->sections)[(symbol)->section])) \
- : NULL)
#include "minsyms.h"