diff options
-rw-r--r-- | libbacktrace/ChangeLog | 5 | ||||
-rw-r--r-- | libbacktrace/dwarf.c | 20 |
2 files changed, 13 insertions, 12 deletions
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog index 27a0f429331..ee31ef0dd5e 100644 --- a/libbacktrace/ChangeLog +++ b/libbacktrace/ChangeLog @@ -1,3 +1,8 @@ +2018-12-28 Tom de Vries <tdevries@suse.de> + + * dwarf.c (build_address_map): Simplify by removing local variable + abbrevs. + 2018-12-28 Ian Lance Taylor <iant@golang.org> Tom de Vries <tdevries@suse.de> diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c index f3499a9f45a..7ef99bdd7f2 100644 --- a/libbacktrace/dwarf.c +++ b/libbacktrace/dwarf.c @@ -1432,7 +1432,6 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, void *data, struct unit_addrs_vector *addrs) { struct dwarf_buf info; - struct abbrevs abbrevs; struct backtrace_vector units; size_t units_count; size_t i; @@ -1457,7 +1456,6 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, memset (&units, 0, sizeof units); units_count = 0; - memset (&abbrevs, 0, sizeof abbrevs); while (info.left > 0) { const unsigned char *unit_data_start; @@ -1488,13 +1486,6 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, goto fail; } - abbrev_offset = read_offset (&unit_buf, is_dwarf64); - if (!read_abbrevs (state, abbrev_offset, dwarf_abbrev, dwarf_abbrev_size, - is_bigendian, error_callback, data, &abbrevs)) - goto fail; - - addrsize = read_byte (&unit_buf); - pu = ((struct unit **) backtrace_vector_grow (state, sizeof (struct unit *), error_callback, data, &units)); @@ -1509,6 +1500,14 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, *pu = u; ++units_count; + memset (&u->abbrevs, 0, sizeof u->abbrevs); + abbrev_offset = read_offset (&unit_buf, is_dwarf64); + if (!read_abbrevs (state, abbrev_offset, dwarf_abbrev, dwarf_abbrev_size, + is_bigendian, error_callback, data, &u->abbrevs)) + goto fail; + + addrsize = read_byte (&unit_buf); + u->unit_data = unit_buf.buf; u->unit_data_len = unit_buf.left; u->unit_data_offset = unit_buf.buf - unit_data_start; @@ -1519,8 +1518,6 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, u->comp_dir = NULL; u->abs_filename = NULL; u->lineoff = 0; - u->abbrevs = abbrevs; - memset (&abbrevs, 0, sizeof abbrevs); /* The actual line number mappings will be read as needed. */ u->lines = NULL; @@ -1559,7 +1556,6 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address, } backtrace_vector_free (state, &units, error_callback, data); } - free_abbrevs (state, &abbrevs, error_callback, data); if (addrs->count > 0) { backtrace_vector_free (state, &addrs->vec, error_callback, data); |