mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
Fix gdb.ada/import.exp when using mold
We found that the gdb.ada/import.exp test fails when 'mold' is used as the linker. This happens because mold decides to mark most of the symbols in the executable as being file-local. I tend to think this choice, while non-traditional, is probably fine. So, this patch fixes the problem by changing the relevant Ada code to look for file-local symbols as well. Furthermore, there are two overloads of lookup_minimal_symbol_linkage that both have a final 'bool' parameter -- but with radically different meanings. This patch somewhat clears up this confusion as well. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31378
This commit is contained in:
@@ -36,7 +36,8 @@ ada_imported_read_variable (struct symbol *symbol, const frame_info_ptr &frame)
|
|||||||
{
|
{
|
||||||
const char *name = get_imported_name (symbol);
|
const char *name = get_imported_name (symbol);
|
||||||
bound_minimal_symbol minsym
|
bound_minimal_symbol minsym
|
||||||
= lookup_minimal_symbol_linkage (symbol->objfile ()->pspace (), name, false);
|
= lookup_minimal_symbol_linkage (symbol->objfile ()->pspace (), name,
|
||||||
|
true, false);
|
||||||
if (minsym.minsym == nullptr)
|
if (minsym.minsym == nullptr)
|
||||||
error (_("could not find imported name %s"), name);
|
error (_("could not find imported name %s"), name);
|
||||||
return value_at (symbol->type (), minsym.value_address ());
|
return value_at (symbol->type (), minsym.value_address ());
|
||||||
|
|||||||
@@ -589,7 +589,7 @@ lookup_minimal_symbol_linkage (const char *name, struct objfile *objf,
|
|||||||
|
|
||||||
bound_minimal_symbol
|
bound_minimal_symbol
|
||||||
lookup_minimal_symbol_linkage (program_space *pspace, const char *name,
|
lookup_minimal_symbol_linkage (program_space *pspace, const char *name,
|
||||||
bool only_main)
|
bool match_static_type, bool only_main)
|
||||||
{
|
{
|
||||||
for (objfile *objfile : pspace->objfiles ())
|
for (objfile *objfile : pspace->objfiles ())
|
||||||
{
|
{
|
||||||
@@ -599,9 +599,8 @@ lookup_minimal_symbol_linkage (program_space *pspace, const char *name,
|
|||||||
if (only_main && (objfile->flags & OBJF_MAINLINE) == 0)
|
if (only_main && (objfile->flags & OBJF_MAINLINE) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bound_minimal_symbol minsym = lookup_minimal_symbol_linkage (name,
|
bound_minimal_symbol minsym
|
||||||
objfile,
|
= lookup_minimal_symbol_linkage (name, objfile, match_static_type);
|
||||||
false);
|
|
||||||
if (minsym.minsym != nullptr)
|
if (minsym.minsym != nullptr)
|
||||||
return minsym;
|
return minsym;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -240,8 +240,8 @@ extern bound_minimal_symbol lookup_minimal_symbol_linkage
|
|||||||
OBJF_MAINLINE will be considered. */
|
OBJF_MAINLINE will be considered. */
|
||||||
|
|
||||||
extern bound_minimal_symbol lookup_minimal_symbol_linkage
|
extern bound_minimal_symbol lookup_minimal_symbol_linkage
|
||||||
(program_space *pspace, const char *name, bool only_main)
|
(program_space *pspace, const char *name, bool match_static_type,
|
||||||
ATTRIBUTE_NONNULL (1);
|
bool only_main) ATTRIBUTE_NONNULL (1);
|
||||||
|
|
||||||
/* Look through all the current minimal symbol tables and find the
|
/* Look through all the current minimal symbol tables and find the
|
||||||
first minimal symbol that matches NAME and PC. If OBJF is non-NULL,
|
first minimal symbol that matches NAME and PC. If OBJF is non-NULL,
|
||||||
|
|||||||
@@ -6817,7 +6817,7 @@ symbol::get_maybe_copied_address () const
|
|||||||
const char *linkage_name = this->linkage_name ();
|
const char *linkage_name = this->linkage_name ();
|
||||||
bound_minimal_symbol minsym
|
bound_minimal_symbol minsym
|
||||||
= lookup_minimal_symbol_linkage (this->objfile ()->pspace (), linkage_name,
|
= lookup_minimal_symbol_linkage (this->objfile ()->pspace (), linkage_name,
|
||||||
false);
|
false, false);
|
||||||
if (minsym.minsym != nullptr)
|
if (minsym.minsym != nullptr)
|
||||||
return minsym.value_address ();
|
return minsym.value_address ();
|
||||||
|
|
||||||
@@ -6834,7 +6834,8 @@ minimal_symbol::get_maybe_copied_address (objfile *objf) const
|
|||||||
|
|
||||||
const char *linkage_name = this->linkage_name ();
|
const char *linkage_name = this->linkage_name ();
|
||||||
bound_minimal_symbol found
|
bound_minimal_symbol found
|
||||||
= lookup_minimal_symbol_linkage (objf->pspace (), linkage_name, true);
|
= lookup_minimal_symbol_linkage (objf->pspace (), linkage_name,
|
||||||
|
false, true);
|
||||||
if (found.minsym != nullptr)
|
if (found.minsym != nullptr)
|
||||||
return found.value_address ();
|
return found.value_address ();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user