diff options
| author | Josh Stone <[email protected]> | 2014-12-10 11:14:40 -0800 |
|---|---|---|
| committer | Josh Stone <[email protected]> | 2014-12-11 10:48:15 -0800 |
| commit | 2098b3d315b612d12b1425639707552e06131cde (patch) | |
| tree | 8f558b096e85656db57201f76f5a788ec2f5ab8a /src/addr2line.c | |
| parent | aecdf2670c027adde8ff800397a48b1b2403dd89 (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.c | 40 |
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; } } |
