}
+static char *format_result = NULL;
+static size_t format_result_size = 0;
+
static char *
format_dwarf_addr (Dwfl_Module *dwflmod,
int address_size, Dwarf_Addr address, Dwarf_Addr raw)
}
char *result;
+ size_t max_size = ((name != NULL ? strlen (name) : 0)
+ + (scn != NULL ? strlen (scn) : 0)
+ + (2 + 8 * 2) * 2 + 6);
+ if (max_size > format_result_size)
+ {
+ max_size *= 2; /* A bit more, so we don't immediately realloc again. */
+ result = realloc (format_result, max_size);
+ if (result == NULL)
+ error (EXIT_FAILURE, 0, _("memory exhausted"));
+ format_result_size = max_size;
+ format_result = result;
+ }
+ else
+ result = format_result;
+
if ((name != NULL
? (off != 0
? (scn != NULL
? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64 " <%s+%#" PRIx64 ">"),
- scn, address, name, off)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64 " <%s+%#" PRIx64 ">"),
- scn, 2 + address_size * 2, address,
- name, off))
+ ? sprintf (result,
+ "%s+%#" PRIx64 " <%s+%#" PRIx64 ">",
+ scn, address, name, off)
+ : sprintf (result,
+ "%s+%#0*" PRIx64 " <%s+%#" PRIx64 ">",
+ scn, 2 + address_size * 2, address,
+ name, off))
: (address_size == 0
- ? asprintf (&result,
- gettext ("%#" PRIx64 " <%s+%#" PRIx64 ">"),
- address, name, off)
- : asprintf (&result,
- gettext ("%#0*" PRIx64 " <%s+%#" PRIx64 ">"),
- 2 + address_size * 2, address,
- name, off)))
+ ? sprintf (result,
+ "%#" PRIx64 " <%s+%#" PRIx64 ">",
+ address, name, off)
+ : sprintf (result,
+ "%#0*" PRIx64 " <%s+%#" PRIx64 ">",
+ 2 + address_size * 2, address,
+ name, off)))
: (scn != NULL
? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64 " <%s>"),
- scn, address, name)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64 " <%s>"),
- scn, 2 + address_size * 2, address, name))
+ ? sprintf (result,
+ "%s+%#" PRIx64 " <%s>",
+ scn, address, name)
+ : sprintf (result,
+ "%s+%#0*" PRIx64 " <%s>",
+ scn, 2 + address_size * 2, address, name))
: (address_size == 0
- ? asprintf (&result,
- gettext ("%#" PRIx64 " <%s>"),
- address, name)
- : asprintf (&result,
- gettext ("%#0*" PRIx64 " <%s>"),
- 2 + address_size * 2, address, name))))
+ ? sprintf (result,
+ "%#" PRIx64 " <%s>",
+ address, name)
+ : sprintf (result,
+ "%#0*" PRIx64 " <%s>",
+ 2 + address_size * 2, address, name))))
: (scn != NULL
? (address_size == 0
- ? asprintf (&result,
- gettext ("%s+%#" PRIx64),
- scn, address)
- : asprintf (&result,
- gettext ("%s+%#0*" PRIx64),
- scn, 2 + address_size * 2, address))
+ ? sprintf (result,
+ "%s+%#" PRIx64,
+ scn, address)
+ : sprintf (result,
+ "%s+%#0*" PRIx64,
+ scn, 2 + address_size * 2, address))
: (address_size == 0
- ? asprintf (&result,
- "%#" PRIx64,
- address)
- : asprintf (&result,
- "%#0*" PRIx64,
- 2 + address_size * 2, address)))) < 0)
- error (EXIT_FAILURE, 0, _("memory exhausted"));
+ ? sprintf (result,
+ "%#" PRIx64,
+ address)
+ : sprintf (result,
+ "%#0*" PRIx64,
+ 2 + address_size * 2, address)))) < 0)
+ error (EXIT_FAILURE, 0, _("sprintf failure"));
return result;
}
char *a = format_dwarf_addr (dwflmod, 0, addr, addr);
printf ("%*s[%2" PRIuMAX "] %s %s\n",
indent, "", (uintmax_t) offset, op_name, a);
- free (a);
offset += 1 + addrsize;
break;
{
a = format_dwarf_addr (dwflmod, 0, addr, addr);
printf ("%s\n", a);
- free (a);
}
break;
char *a = format_dwarf_addr (dwflmod, address_size,
addr, addr);
printf ("%s\n", a);
- free (a);
}
printf ("\n");
char *b = format_dwarf_addr (dwflmod, address_size, range_address,
range_address);
+ printf (" %s", b);
char *e = format_dwarf_addr (dwflmod, address_size,
range_address + range_length - 1,
range_length);
if (segment_size != 0)
- printf (gettext (" %s..%s (%" PRIx64 ")\n"), b, e,
- (uint64_t) segment);
+ printf ("..%s (%" PRIx64 ")\n", e, (uint64_t) segment);
else
- printf (gettext (" %s..%s\n"), b, e);
- free (b);
- free (e);
+ printf ("..%s\n", e);
}
next_table:
else
printf (gettext (" CU [%6" PRIx64 "] base: %s\n"),
dwarf_dieoffset (&cudie), basestr);
- free (basestr);
}
else
printf (gettext (" Not associated with a CU.\n"));
a1 = format_dwarf_addr (dwflmod, address_size,
addr, addr);
printf (" %s\n", a1);
- free (a1);
}
}
break;
{
a1 = format_dwarf_addr (dwflmod, address_size,
addr1, addr1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
addr2 - 1, addr2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
}
break;
addr2 = addr1 + op2;
a1 = format_dwarf_addr (dwflmod, address_size,
addr1, addr1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
addr2 - 1, addr2);
- printf (" %s..\n", a1);
printf (" %s..\n", a2);
- free (a1);
- free (a2);
}
}
break;
op1 += base;
op2 += base;
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
break;
{
a1 = format_dwarf_addr (dwflmod, address_size, base, base);
printf (" %s\n", a1);
- free (a1);
}
break;
if (! print_unresolved_addresses)
{
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
break;
if (! print_unresolved_addresses)
{
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
+
op2 = op1 + op2;
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
break;
else
printf (gettext ("\n CU [%6" PRIx64 "] base: %s\n"),
dwarf_dieoffset (&cudie), basestr);
- free (basestr);
}
last_cu = cu;
{
char *b = format_dwarf_addr (dwflmod, address_size, end, end);
printf (gettext (" [%6tx] base address\n %s\n"), offset, b);
- free (b);
base = end;
}
else if (begin == 0 && end == 0) /* End of list entry. */
{
char *b = format_dwarf_addr (dwflmod, address_size, base + begin,
base + begin);
+ printf (" %s..\n", b);
char *e = format_dwarf_addr (dwflmod, address_size,
base + end - 1, base + end);
- printf (" %s..\n", b);
printf (" %s\n", e);
- free (b);
- free (e);
}
first = false;
" initial_location: %s",
offset, (uint64_t) unit_length,
cie->cie_offset, (uint64_t) cie_id, a);
- free (a);
if ((fde_encoding & 0x70) == DW_EH_PE_pcrel)
{
vma_base = (((uint64_t) shdr->sh_offset
printf (" %*s%-20s (%s) %s\n",
(int) (level * 2), "", dwarf_attr_name (attr),
dwarf_form_name (form), a);
- free (a);
}
break;
printf (" %*s%-20s (%s) %" PRIuMAX " (%s)\n",
(int) (level * 2), "", dwarf_attr_name (attr),
dwarf_form_name (form), (uintmax_t) num, a);
- free (a);
}
else
{
(epilogue_begin ? 'E' : ' '),
(endseq ? '*' : ' '),
disc, isa, lineop, a);
- free (a);
if (endseq)
printf("\n");
printf (gettext ("\
special opcode %u: address+%u = %s, line%+d = %zu\n"),
opcode, op_addr_advance, a, line_increment, line);
- free (a);
}
else if (opcode == 0)
{
{
char *a = format_dwarf_addr (dwflmod, 0, address, address);
printf (gettext (" set address to %s\n"), a);
- free (a);
}
break;
else
printf (gettext (" advance address by %u to %s\n"),
op_addr_advance, a);
- free (a);
}
break;
printf (gettext ("\
advance address by constant %u to %s\n"),
op_addr_advance, a);
- free (a);
}
break;
printf (gettext ("\
advance address by fixed value %u to %s\n"),
u128, a);
- free (a);
}
break;
else
printf (gettext (" CU [%6" PRIx64 "] base: %s\n"),
dwarf_dieoffset (&cudie), basestr);
- free (basestr);
}
else
printf (gettext (" Not associated with a CU.\n"));
a1 = format_dwarf_addr (dwflmod, address_size,
addr, addr);
printf (" %s\n", a1);
- free (a1);
}
}
break;
{
a1 = format_dwarf_addr (dwflmod, address_size,
addr1, addr1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
addr2 - 1, addr2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
}
if ((uint64_t) (nexthdr - readp) < 1)
addr2 = addr1 + op2;
a1 = format_dwarf_addr (dwflmod, address_size,
addr1, addr1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
addr2 - 1, addr2);
- printf (" %s..\n", a1);
printf (" %s..\n", a2);
- free (a1);
- free (a2);
}
}
if ((uint64_t) (nexthdr - readp) < 1)
op1 += base;
op2 += base;
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
if ((uint64_t) (nexthdr - readp) < 1)
goto invalid_entry;
{
a1 = format_dwarf_addr (dwflmod, address_size, base, base);
printf (" %s\n", a1);
- free (a1);
}
break;
if (! print_unresolved_addresses)
{
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
if ((uint64_t) (nexthdr - readp) < 1)
goto invalid_entry;
if (! print_unresolved_addresses)
{
a1 = format_dwarf_addr (dwflmod, address_size, op1, op1);
+ printf (" %s..\n", a1);
+
op2 = op1 + op2;
a2 = format_dwarf_addr (dwflmod, address_size,
op2 - 1, op2);
- printf (" %s..\n", a1);
printf (" %s\n", a2);
- free (a1);
- free (a2);
}
if ((uint64_t) (nexthdr - readp) < 1)
goto invalid_entry;
else
printf (gettext ("\n CU [%6" PRIx64 "] base: %s\n"),
dwarf_dieoffset (&cudie), basestr);
- free (basestr);
}
last_cu = cu;
{
char *b = format_dwarf_addr (dwflmod, address_size, end, end);
printf (gettext (" [%6tx] base address\n %s\n"), offset, b);
- free (b);
base = end;
}
else if (begin == 0 && end == 0) /* End of list entry. */
Dwarf_Addr dae = use_base ? base + end : end;
char *b = format_dwarf_addr (dwflmod, address_size,
dab, dab);
+ printf (" %s..\n", b);
char *e = format_dwarf_addr (dwflmod, address_size,
dae - 1, dae);
- printf (" %s..\n", b);
printf (" %s\n", e);
- free (b);
- free (e);
}
if (endp - readp <= (ptrdiff_t) len)
readp += 4;
char *l = format_dwarf_addr (dwflmod, 8, low, low);
+ printf (" [%4zu] %s..", n, l);
char *h = format_dwarf_addr (dwflmod, 8, high - 1, high);
- printf (" [%4zu] %s..%s, CU index: %5" PRId32 "\n",
- n, l, h, idx);
- free (l);
- free (h);
+ printf ("%s, CU index: %5" PRId32 "\n", h, idx);
n++;
}