summaryrefslogtreecommitdiffstats
path: root/src/addr2line.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/addr2line.c')
-rw-r--r--src/addr2line.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/addr2line.c b/src/addr2line.c
index 97f988ff..0ce854f6 100644
--- a/src/addr2line.c
+++ b/src/addr2line.c
@@ -330,6 +330,7 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
if (nscopes <= 0)
return false;
+ bool res = false;
for (int i = 0; i < nscopes; ++i)
switch (dwarf_tag (&scopes[i]))
{
@@ -337,23 +338,25 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
{
const char *name = get_diename (&scopes[i]);
if (name == NULL)
- return false;
+ goto done;
printf ("%s%c", symname (name), pretty ? ' ' : '\n');
- return true;
+ res = true;
+ goto done;
}
case DW_TAG_inlined_subroutine:
{
const char *name = get_diename (&scopes[i]);
if (name == NULL)
- return false;
+ goto done;
/* When using --pretty-print we only show inlines on their
own line. Just print the first subroutine name. */
if (pretty)
{
printf ("%s ", symname (name));
- return true;
+ res = true;
+ goto done;
}
else
printf ("%s inlined", symname (name));
@@ -414,7 +417,9 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr)
}
}
- return false;
+done:
+ free (scopes);
+ return res;
}
static void