Fix entry-values in C++ across CUs.
	* dwarf2loc.c (call_site_to_target_addr) <FIELD_LOC_KIND_PHYSNAME>: Use
	lookup_minimal_symbol.  Add a comment.
	* dwarf2read.c
	(read_call_site_scope) <is_ref_attr> <die_is_declaration>: Prefer
	DW_AT_linkage_name.

gdb/testsuite/
	Fix entry-values in C++ across CUs.
	* gdb.arch/amd64-tailcall-cxx.exp: New file.
	* gdb.arch/amd64-tailcall-cxx1.S: New file.
	* gdb.arch/amd64-tailcall-cxx1.cc: New file.
	* gdb.arch/amd64-tailcall-cxx2.S: New file.
	* gdb.arch/amd64-tailcall-cxx2.cc: New file.
This commit is contained in:
Jan Kratochvil 2013-03-10 18:04:00 +00:00
parent 55e9373143
commit 9112db0926
9 changed files with 767 additions and 3 deletions

View file

@ -9812,9 +9812,18 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
gdb_assert (target_cu->objfile == objfile);
if (die_is_declaration (target_die, target_cu))
{
const char *target_physname;
const char *target_physname = NULL;
struct attribute *target_attr;
target_physname = dwarf2_physname (NULL, target_die, target_cu);
/* Prefer the mangled name; otherwise compute the demangled one. */
target_attr = dwarf2_attr (target_die, DW_AT_linkage_name, target_cu);
if (target_attr == NULL)
target_attr = dwarf2_attr (target_die, DW_AT_MIPS_linkage_name,
target_cu);
if (target_attr != NULL && DW_STRING (target_attr) != NULL)
target_physname = DW_STRING (target_attr);
else
target_physname = dwarf2_physname (NULL, target_die, target_cu);
if (target_physname == NULL)
complaint (&symfile_complaints,
_("DW_AT_GNU_call_site_target target DIE has invalid "