summaryrefslogtreecommitdiffstats
path: root/src/addr2line.c
diff options
context:
space:
mode:
authorJosh Stone <[email protected]>2014-12-10 11:14:40 -0800
committerJosh Stone <[email protected]>2014-12-11 10:48:15 -0800
commit2098b3d315b612d12b1425639707552e06131cde (patch)
tree8f558b096e85656db57201f76f5a788ec2f5ab8a /src/addr2line.c
parentaecdf2670c027adde8ff800397a48b1b2403dd89 (diff)
addr2line: Always prefer linkage_name over plain names
Signed-off-by: Josh Stone <[email protected]>
Diffstat (limited to 'src/addr2line.c')
-rw-r--r--src/addr2line.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/addr2line.c b/src/addr2line.c
index e8ffbc68..de802941 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -258,6 +258,23 @@ parse_opt (int key, char *arg, struct argp_state *state)
}
+static const char *
+get_diename (Dwarf_Die *die)
+{
+ Dwarf_Attribute attr;
+ const char *name;
+
+ name = dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name,
+ &attr)
+ ?: dwarf_attr_integrate (die, DW_AT_linkage_name,
+ &attr));
+
+ if (name == NULL)
+ name = dwarf_diename (die) ?: "??";
+
+ return name;
+}
+
static bool
print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
{
@@ -274,7 +291,7 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
{
case DW_TAG_subprogram:
{
- const char *name = dwarf_diename (&scopes[i]);
+ const char *name = get_diename (&scopes[i]);
if (name == NULL)
return false;
puts (name);
@@ -283,7 +300,7 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
case DW_TAG_inlined_subroutine:
{
- const char *name = dwarf_diename (&scopes[i]);
+ const char *name = get_diename (&scopes[i]);
if (name == NULL)
return false;
printf ("%s inlined", name);
@@ -395,23 +412,6 @@ print_addrsym (Dwfl_Module *mod, GElf_Addr addr)
}
}
-static void
-print_diesym (Dwarf_Die *die)
-{
- Dwarf_Attribute attr;
- const char *name;
-
- name = dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name,
- &attr)
- ?: dwarf_attr_integrate (die, DW_AT_linkage_name,
- &attr));
-
- if (name == NULL)
- name = dwarf_diename (die) ?: "??";
-
- puts (name);
-}
-
static int
see_one_module (Dwfl_Module *mod,
void **userdata __attribute__ ((unused)),
@@ -684,7 +684,7 @@ handle_address (const char *string, Dwfl *dwfl)
|| tag == DW_TAG_entry_point
|| tag == DW_TAG_subprogram)
{
- print_diesym (parent);
+ puts (get_diename (parent));
break;
}
}