/* Minimal symbol table definitions for GDB.
- Copyright (C) 2011-2019 Free Software Foundation, Inc.
+ Copyright (C) 2011-2020 Free Software Foundation, Inc.
This file is part of GDB.
Arguments are:
NAME - the symbol's name
- NAME_LEN - the length of the name
COPY_NAME - if true, the minsym code must make a copy of NAME. If
false, then NAME must be NUL-terminated, and must have a lifetime
that is at least as long as OBJFILE's lifetime.
SECTION - the symbol's section
*/
- struct minimal_symbol *record_full (const char *name,
- int name_len,
+ struct minimal_symbol *record_full (gdb::string_view name,
bool copy_name,
CORE_ADDR address,
enum minimal_symbol_type ms_type,
int section);
/* Like record_full, but:
- - uses strlen to compute NAME_LEN,
+ - computes the length of NAME
- passes COPY_NAME = true,
- and passes a default SECTION, depending on the type
enum minimal_symbol_type ms_type);
/* Like record_full, but:
- - uses strlen to compute NAME_LEN,
+ - computes the length of NAME
- passes COPY_NAME = true.
This variant does not return the new symbol. */
enum minimal_symbol_type ms_type,
int section)
{
- record_full (name, strlen (name), true, address, ms_type, section);
+ record_full (name, true, address, ms_type, section);
}
private:
struct bound_minimal_symbol lookup_minimal_symbol_text (const char *,
struct objfile *);
+/* Look through the minimal symbols in OBJF (and its separate debug
+ objfiles) for a global (not file-local) minsym whose linkage name
+ is NAME. This is somewhat similar to lookup_minimal_symbol_text,
+ only data symbols (not text symbols) are considered, and a non-NULL
+ objfile is not accepted. Returns a bound minimal symbol that
+ matches, or an "empty" bound minimal symbol otherwise. */
+
+extern struct bound_minimal_symbol lookup_minimal_symbol_linkage
+ (const char *name, struct objfile *objf)
+ ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2);
+
/* Look through all the current minimal symbol tables and find the
first minimal symbol that matches NAME and PC. If OBJF is non-NULL,
limit the search to that objfile. Returns a pointer to the minimal
/* Search through the minimal symbol table for each objfile and find
the symbol whose address is the largest address that is still less
- than or equal to PC, and which matches SECTION.
+ than or equal to PC_IN, and which matches SECTION. A matching symbol
+ must either be zero sized and have address PC_IN, or PC_IN must fall
+ within the range of addresses covered by the matching symbol.
If SECTION is NULL, this uses the result of find_pc_section
instead.
found, or NULL if PC is not in a suitable range.
See definition of lookup_msym_prefer for description of PREFER. By
- default mst_text symbols are preferred. */
+ default mst_text symbols are preferred.
+
+ If the PREVIOUS pointer is non-NULL, and no matching symbol is found,
+ then the contents will be set to reference the closest symbol before
+ PC_IN. */
struct bound_minimal_symbol lookup_minimal_symbol_by_pc_section
- (CORE_ADDR,
- struct obj_section *,
- lookup_msym_prefer prefer = lookup_msym_prefer::TEXT);
+ (CORE_ADDR pc_in,
+ struct obj_section *section,
+ lookup_msym_prefer prefer = lookup_msym_prefer::TEXT,
+ bound_minimal_symbol *previous = nullptr);
/* Backward compatibility: search through the minimal symbol table
for a matching PC (no section given).