Change minimal_symbol inheritance

This changes struct minimal_symbol to inherit from general_symbol_info
and updates various macros to cope.

Because MSYMBOL_SET_LANGUAGE and MSYMBOL_SET_NAMES were only used from
a single spot, this patch removes them in favor of simply inlining
their definitions.  I consider this to be somewhat cleaner, not least
because the "phony polymorphism" provided by such macros is not useful
in practice.

gdb/ChangeLog
2019-03-15  Tom Tromey  <tom@tromey.com>

	* symtab.h (struct minimal_symbol): Derive from
	general_symbol_info.
	(MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS)
	(MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES)
	(MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE)
	(MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME)
	(MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME)
	(MSYMBOL_SEARCH_NAME): Update.
	(MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove.
	* solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset.
	* minsyms.c (minimal_symbol_reader::record_full): Update.
This commit is contained in:
Tom Tromey
2019-03-02 13:07:47 -07:00
parent 0de2420c4b
commit eefba3da27
4 changed files with 36 additions and 36 deletions

View File

@ -1,3 +1,17 @@
2019-03-15 Tom Tromey <tom@tromey.com>
* symtab.h (struct minimal_symbol): Derive from
general_symbol_info.
(MSYMBOL_VALUE, MSYMBOL_VALUE_RAW_ADDRESS)
(MSYMBOL_VALUE_ADDRESS, MSYMBOL_VALUE_BYTES)
(MSYMBOL_BLOCK_VALUE, MSYMBOL_VALUE_CHAIN, MSYMBOL_LANGUAGE)
(MSYMBOL_SECTION, MSYMBOL_OBJ_SECTION, MSYMBOL_NATURAL_NAME)
(MSYMBOL_LINKAGE_NAME, MSYMBOL_DEMANGLED_NAME)
(MSYMBOL_SEARCH_NAME): Update.
(MSYMBOL_SET_LANGUAGE, MSYMBOL_SET_NAMES): Remove.
* solib.c (gdb_bfd_lookup_symbol_from_symtab): Don't use memset.
* minsyms.c (minimal_symbol_reader::record_full): Update.
2019-03-15 Tom Tromey <tom@tromey.com> 2019-03-15 Tom Tromey <tom@tromey.com>
* minsyms.c (minimal_symbol_reader::install): Use memcpy. * minsyms.c (minimal_symbol_reader::install): Use memcpy.

View File

@ -1152,9 +1152,9 @@ minimal_symbol_reader::record_full (const char *name, int name_len,
m_msym_bunch = newobj; m_msym_bunch = newobj;
} }
msymbol = &m_msym_bunch->contents[m_msym_bunch_index]; msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
MSYMBOL_SET_LANGUAGE (msymbol, language_auto, symbol_set_language (msymbol, language_auto,
&m_objfile->per_bfd->storage_obstack); &m_objfile->per_bfd->storage_obstack);
MSYMBOL_SET_NAMES (msymbol, name, name_len, copy_name, m_objfile); symbol_set_names (msymbol, name, name_len, copy_name, m_objfile->per_bfd);
SET_MSYMBOL_VALUE_ADDRESS (msymbol, address); SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
MSYMBOL_SECTION (msymbol) = section; MSYMBOL_SECTION (msymbol) = section;

View File

@ -1501,9 +1501,8 @@ gdb_bfd_lookup_symbol_from_symtab (bfd *abfd,
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& gdbarch_elf_make_msymbol_special_p (gdbarch)) && gdbarch_elf_make_msymbol_special_p (gdbarch))
{ {
struct minimal_symbol msym; struct minimal_symbol msym {};
memset (&msym, 0, sizeof (msym));
SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr); SET_MSYMBOL_VALUE_ADDRESS (&msym, symaddr);
gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym); gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym);
symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym); symaddr = MSYMBOL_VALUE_RAW_ADDRESS (&msym);

View File

@ -641,16 +641,8 @@ gdb_static_assert (nr_minsym_types <= (1 << MINSYM_TYPE_BITS));
between names and addresses, and vice versa. They are also sometimes between names and addresses, and vice versa. They are also sometimes
used to figure out what full symbol table entries need to be read in. */ used to figure out what full symbol table entries need to be read in. */
struct minimal_symbol struct minimal_symbol : public general_symbol_info
{ {
/* The general symbol info required for all types of symbols.
The SYMBOL_VALUE_ADDRESS contains the address that this symbol
corresponds to. */
struct general_symbol_info mginfo;
/* Size of this symbol. dbx_end_psymtab in dbxread.c uses this /* Size of this symbol. dbx_end_psymtab in dbxread.c uses this
information to calculate the end of the partial symtab based on the information to calculate the end of the partial symtab based on the
address of the last symbol plus the size of the last symbol. */ address of the last symbol plus the size of the last symbol. */
@ -687,7 +679,7 @@ struct minimal_symbol
struct minimal_symbol *demangled_hash_next; struct minimal_symbol *demangled_hash_next;
/* True if this symbol is of some data type. */ /* True if this symbol is of some data type. */
bool data_p () const; bool data_p () const;
@ -708,43 +700,38 @@ struct minimal_symbol
#define MSYMBOL_HAS_SIZE(msymbol) ((msymbol)->has_size + 0) #define MSYMBOL_HAS_SIZE(msymbol) ((msymbol)->has_size + 0)
#define MSYMBOL_TYPE(msymbol) (msymbol)->type #define MSYMBOL_TYPE(msymbol) (msymbol)->type
#define MSYMBOL_VALUE(symbol) (symbol)->mginfo.value.ivalue #define MSYMBOL_VALUE(symbol) (symbol)->value.ivalue
/* The unrelocated address of the minimal symbol. */ /* The unrelocated address of the minimal symbol. */
#define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->mginfo.value.address + 0) #define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->value.address + 0)
/* The relocated address of the minimal symbol, using the section /* The relocated address of the minimal symbol, using the section
offsets from OBJFILE. */ offsets from OBJFILE. */
#define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \ #define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \
((symbol)->mginfo.value.address \ ((symbol)->value.address \
+ ANOFFSET ((objfile)->section_offsets, ((symbol)->mginfo.section))) + ANOFFSET ((objfile)->section_offsets, ((symbol)->section)))
/* For a bound minsym, we can easily compute the address directly. */ /* For a bound minsym, we can easily compute the address directly. */
#define BMSYMBOL_VALUE_ADDRESS(symbol) \ #define BMSYMBOL_VALUE_ADDRESS(symbol) \
MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym) MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym)
#define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \ #define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \
((symbol)->mginfo.value.address = (new_value)) ((symbol)->value.address = (new_value))
#define MSYMBOL_VALUE_BYTES(symbol) (symbol)->mginfo.value.bytes #define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
#define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->mginfo.value.block #define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
#define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->mginfo.value.chain #define MSYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
#define MSYMBOL_LANGUAGE(symbol) (symbol)->mginfo.language #define MSYMBOL_LANGUAGE(symbol) (symbol)->language
#define MSYMBOL_SECTION(symbol) (symbol)->mginfo.section #define MSYMBOL_SECTION(symbol) (symbol)->section
#define MSYMBOL_OBJ_SECTION(objfile, symbol) \ #define MSYMBOL_OBJ_SECTION(objfile, symbol) \
(((symbol)->mginfo.section >= 0) \ (((symbol)->section >= 0) \
? (&(((objfile)->sections)[(symbol)->mginfo.section])) \ ? (&(((objfile)->sections)[(symbol)->section])) \
: NULL) : NULL)
#define MSYMBOL_NATURAL_NAME(symbol) \ #define MSYMBOL_NATURAL_NAME(symbol) \
(symbol_natural_name (&(symbol)->mginfo)) (symbol_natural_name (symbol))
#define MSYMBOL_LINKAGE_NAME(symbol) (symbol)->mginfo.name #define MSYMBOL_LINKAGE_NAME(symbol) (symbol)->name
#define MSYMBOL_PRINT_NAME(symbol) \ #define MSYMBOL_PRINT_NAME(symbol) \
(demangle ? MSYMBOL_NATURAL_NAME (symbol) : MSYMBOL_LINKAGE_NAME (symbol)) (demangle ? MSYMBOL_NATURAL_NAME (symbol) : MSYMBOL_LINKAGE_NAME (symbol))
#define MSYMBOL_DEMANGLED_NAME(symbol) \ #define MSYMBOL_DEMANGLED_NAME(symbol) \
(symbol_demangled_name (&(symbol)->mginfo)) (symbol_demangled_name (symbol))
#define MSYMBOL_SET_LANGUAGE(symbol,language,obstack) \
(symbol_set_language (&(symbol)->mginfo, (language), (obstack)))
#define MSYMBOL_SEARCH_NAME(symbol) \ #define MSYMBOL_SEARCH_NAME(symbol) \
(symbol_search_name (&(symbol)->mginfo)) (symbol_search_name (symbol))
#define MSYMBOL_SET_NAMES(symbol,linkage_name,len,copy_name,objfile) \
symbol_set_names (&(symbol)->mginfo, linkage_name, len, copy_name, \
(objfile)->per_bfd)
#include "minsyms.h" #include "minsyms.h"