diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-03-10 18:04:00 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-03-10 18:04:00 +0000 |
commit | 9112db09262029f15cc9e8c77fc06b79b8148e8c (patch) | |
tree | 09f1f3e63b12d2653db730f729b647ff360830cc /gdb/dwarf2read.c | |
parent | 55e937314353eed91f473043e4faea1f6e3871a8 (diff) | |
download | gdb-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.c | 15 |
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 " |