diff options
author | Ian Lance Taylor <iant@google.com> | 2013-12-05 18:32:02 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2013-12-05 18:32:02 +0000 |
commit | bfd74f227df4eac35e4336f4a888907c33f0c041 (patch) | |
tree | a21a16be4ac9b12fe22e13697ded7ead64c31b02 /libbacktrace/alloc.c | |
parent | e69dbe3721a150e221e05edde4985dd961edafd1 (diff) | |
download | gcc-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.c | 20 |
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. */ |