summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dwflpp.cxx15
1 files changed, 8 insertions, 7 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index 73848429..b5663fff 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -1624,9 +1624,9 @@ dwflpp::find_struct_member(const target_symbol::component& c,
vector<Dwarf_Attribute>& locs)
{
Dwarf_Attribute attr;
- Dwarf_Die die = *parentdie;
+ Dwarf_Die die;
- switch (dwarf_child (&die, &die))
+ switch (dwarf_child (parentdie, &die))
{
case 0: /* First child found. */
break;
@@ -1634,8 +1634,8 @@ dwflpp::find_struct_member(const target_symbol::component& c,
return false;
case -1: /* Error. */
default: /* Shouldn't happen */
- throw semantic_error (string (dwarf_tag(&die) == DW_TAG_union_type ? "union" : "struct")
- + string (dwarf_diename (&die) ?: "<anonymous>")
+ throw semantic_error (string (dwarf_tag(parentdie) == DW_TAG_union_type ? "union" : "struct")
+ + string (dwarf_diename (parentdie) ?: "<anonymous>")
+ string (dwarf_errmsg (-1)),
c.tok);
}
@@ -1774,17 +1774,18 @@ dwflpp::translate_components(struct obstack *pool,
}
{
+ Dwarf_Die parentdie = *die;
vector<Dwarf_Attribute> locs;
- if (!find_struct_member(c, die, die, locs))
+ if (!find_struct_member(c, &parentdie, die, locs))
{
string alternatives;
stringstream members;
- print_members(die, members);
+ print_members(&parentdie, members);
if (members.str().size() != 0)
alternatives = " (alternatives:" + members.str();
throw semantic_error("unable to find member '" +
c.member + "' for struct "
- + string(dwarf_diename(die) ?: "<unknown>")
+ + string(dwarf_diename(&parentdie) ?: "<unknown>")
+ alternatives,
c.tok);
}