From: Mark Wielaard Date: Mon, 11 Dec 2017 22:58:34 +0000 (+0100) Subject: libdw: dwarf_aggregate_size should not peel the given DIE. X-Git-Tag: elfutils-0.171~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c25dc62e59dc42378370602b0d05415a42b051d6;p=thirdparty%2Felfutils.git libdw: dwarf_aggregate_size should not peel the given DIE. Reserve memory for a new DIE first. The caller might not care, but it isn't really nice to change the DIE the caller gave us. See also https://sourceware.org/bugzilla/show_bug.cgi?id=22546#c5 Signed-off-by: Mark Wielaard --- diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 2a6d71180..350230e51 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2017-12-12 Mark Wielaard + + * dwarf_aggregate_size.c (dwarf_aggregate_size): Don't peel the + given DIE. Reserve memory for a new DIE first. + 2017-12-11 Dima Kogan * dwarf_aggregate_size.c (array_size): Handle multi-dimensional diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 3010c0aa2..6e501857b 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -199,12 +199,12 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, Dwarf_Die *type_mem) int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) { - Dwarf_Die type_mem; + Dwarf_Die die_mem, type_mem; - if (INTUSE (dwarf_peel_type) (die, die) != 0) + if (INTUSE (dwarf_peel_type) (die, &die_mem) != 0) return -1; - return aggregate_size (die, size, &type_mem); + return aggregate_size (&die_mem, size, &type_mem); } INTDEF (dwarf_aggregate_size) OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144)