aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2013-03-10 18:04:00 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2013-03-10 18:04:00 +0000
commit9112db09262029f15cc9e8c77fc06b79b8148e8c (patch)
tree09f1f3e63b12d2653db730f729b647ff360830cc /gdb/dwarf2read.c
parent55e937314353eed91f473043e4faea1f6e3871a8 (diff)
downloadgdb-9112db09262029f15cc9e8c77fc06b79b8148e8c.zip
gdb-9112db09262029f15cc9e8c77fc06b79b8148e8c.tar.gz
gdb-9112db09262029f15cc9e8c77fc06b79b8148e8c.tar.bz2
gdb/
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.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index df6298b..faee1a8 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -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;
-
- target_physname = dwarf2_physname (NULL, target_die, target_cu);
+ const char *target_physname = NULL;
+ struct attribute *target_attr;
+
+ /* 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 "