On 29-11-18 00:26, Ian Lance Taylor wrote:
> On Wed, Nov 28, 2018 at 3:15 PM, Tom de Vries <tdevr...@suse.de> wrote:
>>
>> this patch factors out new function backtrace_vector_free.
>>
>> Bootstrapped and reg-tested on x86_64.
>>
>> OK for trunk?
> 
> We should only add new files if we really absolutely must, as this
> package is copied around to a lot of places (e.g.,
> libsanitizer/libbacktrace) and adding files here requires
> modifications in all those places.
> 

I see, thanks for the explanation.

How about his patch? It does not add a file, though it does add an
external function which requires a rename in libsanitizer/libbacktrace
(I don't know whether that requires changes in any other places).

[ Also, it inlines backtrace-vector.c into alloc.c and mmap.c, so it
duplicates code. If that is not acceptable, I could move it to
internal.h as static inline or static ATTRIBUTE_UNUSED. ]

Thanks,
- Tom
[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  <tdevr...@suse.de>

	* 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

Reply via email to