[libbacktrace] Factor out backtrace_vector_free Factor out new function backtrace_vector_free. Bootstrapped and reg-tested on x86_64. 2018-11-28 Tom de Vries * alloc.c (backtrace_vector_free): New fuction, factored out of ... * dwarf.c (read_line_info): ... here. * mmap.c (backtrace_vector_free): Copy from alloc.c. * internal.h (backtrace_vector_free): Declare. * libbacktrace/backtrace-rename.h (backtrace_vector_free): Define to __asan_backtrace_vector_free. --- libbacktrace/alloc.c | 12 ++++++++++++ libbacktrace/dwarf.c | 4 +--- libbacktrace/internal.h | 7 +++++++ libbacktrace/mmap.c | 12 ++++++++++++ libsanitizer/libbacktrace/backtrace-rename.h | 1 + 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/libbacktrace/alloc.c b/libbacktrace/alloc.c index 522b59dd59f..d442b5d1762 100644 --- a/libbacktrace/alloc.c +++ b/libbacktrace/alloc.c @@ -165,3 +165,15 @@ backtrace_vector_release (struct backtrace_state *state ATTRIBUTE_UNUSED, return 1; } + +/* Free the space managed by VEC. */ + +void +backtrace_vector_free (struct backtrace_state *state, + struct backtrace_vector *vec, + backtrace_error_callback error_callback, void *data) +{ + vec->alc += vec->size; + vec->size = 0; + backtrace_vector_release (state, vec, error_callback, data); +} diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c index 4e93f120820..13d0aa4bcd8 100644 --- a/libbacktrace/dwarf.c +++ b/libbacktrace/dwarf.c @@ -2057,9 +2057,7 @@ read_line_info (struct backtrace_state *state, struct dwarf_data *ddata, return 1; fail: - vec.vec.alc += vec.vec.size; - vec.vec.size = 0; - backtrace_vector_release (state, &vec.vec, error_callback, data); + backtrace_vector_free (state, &vec.vec, error_callback, data); free_line_header (state, hdr, error_callback, data); *lines = (struct line *) (uintptr_t) -1; *lines_count = 0; diff --git a/libbacktrace/internal.h b/libbacktrace/internal.h index bff8ed470e4..710693bcf66 100644 --- a/libbacktrace/internal.h +++ b/libbacktrace/internal.h @@ -257,6 +257,13 @@ extern int backtrace_vector_release (struct backtrace_state *state, backtrace_error_callback error_callback, void *data); +/* Free the space managed by VEC. This will reset VEC. */ + +extern void backtrace_vector_free (struct backtrace_state *state, + struct backtrace_vector *vec, + backtrace_error_callback error_callback, + void *data); + /* Read initial debug data from a descriptor, and set the fileline_data, syminfo_fn, and syminfo_data fields of STATE. Return the fileln_fn field in *FILELN_FN--this is done this way so diff --git a/libbacktrace/mmap.c b/libbacktrace/mmap.c index 9f896a1bb99..080868c8a91 100644 --- a/libbacktrace/mmap.c +++ b/libbacktrace/mmap.c @@ -325,3 +325,15 @@ backtrace_vector_release (struct backtrace_state *state, vec->base = NULL; return 1; } + +/* Free the space managed by VEC. */ + +void +backtrace_vector_free (struct backtrace_state *state, + struct backtrace_vector *vec, + backtrace_error_callback error_callback, void *data) +{ + vec->alc += vec->size; + vec->size = 0; + backtrace_vector_release (state, vec, error_callback, data); +} diff --git a/libsanitizer/libbacktrace/backtrace-rename.h b/libsanitizer/libbacktrace/backtrace-rename.h index 2555fe508c2..e2494e3686d 100644 --- a/libsanitizer/libbacktrace/backtrace-rename.h +++ b/libsanitizer/libbacktrace/backtrace-rename.h @@ -15,6 +15,7 @@ #define backtrace_vector_finish __asan_backtrace_vector_finish #define backtrace_vector_grow __asan_backtrace_vector_grow #define backtrace_vector_release __asan_backtrace_vector_release +#define backtrace_vector_free __asan_backtrace_vector_free #define cplus_demangle_builtin_types __asan_cplus_demangle_builtin_types #define cplus_demangle_fill_ctor __asan_cplus_demangle_fill_ctor