aboutsummaryrefslogtreecommitdiff
path: root/libbacktrace/alloc.c
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2013-12-05 18:32:02 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2013-12-05 18:32:02 +0000
commitbfd74f227df4eac35e4336f4a888907c33f0c041 (patch)
treea21a16be4ac9b12fe22e13697ded7ead64c31b02 /libbacktrace/alloc.c
parente69dbe3721a150e221e05edde4985dd961edafd1 (diff)
downloadgcc-bfd74f227df4eac35e4336f4a888907c33f0c041.zip
gcc-bfd74f227df4eac35e4336f4a888907c33f0c041.tar.gz
gcc-bfd74f227df4eac35e4336f4a888907c33f0c041.tar.bz2
alloc.c (backtrace_vector_finish): Add error_callback and data parameters.
* alloc.c (backtrace_vector_finish): Add error_callback and data parameters. Call backtrace_vector_release. Return address base. * mmap.c (backtrace_vector_finish): Add error_callback and data parameters. Return address base. * dwarf.c (read_function_info): Get new address base from backtrace_vector_finish. * internal.h (backtrace_vector_finish): Update declaration. From-SVN: r205716
Diffstat (limited to 'libbacktrace/alloc.c')
-rw-r--r--libbacktrace/alloc.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/libbacktrace/alloc.c b/libbacktrace/alloc.c
index d079673..b2c31fa 100644
--- a/libbacktrace/alloc.c
+++ b/libbacktrace/alloc.c
@@ -113,12 +113,24 @@ backtrace_vector_grow (struct backtrace_state *state ATTRIBUTE_UNUSED,
/* Finish the current allocation on VEC. */
-void
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
- struct backtrace_vector *vec)
+void *
+backtrace_vector_finish (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data)
{
- vec->base = (char *) vec->base + vec->size;
+ void *ret;
+
+ /* With this allocator we call realloc in backtrace_vector_grow,
+ which means we can't easily reuse the memory here. So just
+ release it. */
+ if (!backtrace_vector_release (state, vec, error_callback, data))
+ return NULL;
+ ret = vec->base;
+ vec->base = NULL;
vec->size = 0;
+ vec->alc = 0;
+ return ret;
}
/* Release any extra space allocated for VEC. */