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
This commit is contained in:
parent
e69dbe3721
commit
bfd74f227d
@ -1,3 +1,13 @@
|
||||
2013-12-05 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2013-11-27 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* dwarf.c (find_address_ranges): New static function, broken out
|
||||
|
@ -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. */
|
||||
|
@ -2535,19 +2535,23 @@ read_function_info (struct backtrace_state *state, struct dwarf_data *ddata,
|
||||
if (pfvec->count == 0)
|
||||
return;
|
||||
|
||||
addrs = (struct function_addrs *) pfvec->vec.base;
|
||||
addrs_count = pfvec->count;
|
||||
|
||||
if (fvec == NULL)
|
||||
{
|
||||
if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
|
||||
return;
|
||||
addrs = (struct function_addrs *) pfvec->vec.base;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Finish this list of addresses, but leave the remaining space in
|
||||
the vector available for the next function unit. */
|
||||
backtrace_vector_finish (state, &fvec->vec);
|
||||
addrs = ((struct function_addrs *)
|
||||
backtrace_vector_finish (state, &fvec->vec,
|
||||
error_callback, data));
|
||||
if (addrs == NULL)
|
||||
return;
|
||||
fvec->count = 0;
|
||||
}
|
||||
|
||||
|
@ -233,13 +233,17 @@ extern void *backtrace_vector_grow (struct backtrace_state *state, size_t size,
|
||||
struct backtrace_vector *vec);
|
||||
|
||||
/* Finish the current allocation on VEC. Prepare to start a new
|
||||
allocation. The finished allocation will never be freed. */
|
||||
allocation. The finished allocation will never be freed. Returns
|
||||
a pointer to the base of the finished entries, or NULL on
|
||||
failure. */
|
||||
|
||||
extern void backtrace_vector_finish (struct backtrace_state *state,
|
||||
struct backtrace_vector *vec);
|
||||
extern void* backtrace_vector_finish (struct backtrace_state *state,
|
||||
struct backtrace_vector *vec,
|
||||
backtrace_error_callback error_callback,
|
||||
void *data);
|
||||
|
||||
/* Release any extra space allocated for VEC. Returns 1 on success, 0
|
||||
on failure. */
|
||||
/* Release any extra space allocated for VEC. This may change
|
||||
VEC->base. Returns 1 on success, 0 on failure. */
|
||||
|
||||
extern int backtrace_vector_release (struct backtrace_state *state,
|
||||
struct backtrace_vector *vec,
|
||||
|
@ -230,12 +230,19 @@ backtrace_vector_grow (struct backtrace_state *state,size_t size,
|
||||
|
||||
/* 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 ATTRIBUTE_UNUSED,
|
||||
struct backtrace_vector *vec,
|
||||
backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
|
||||
void *data ATTRIBUTE_UNUSED)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
ret = vec->base;
|
||||
vec->base = (char *) vec->base + vec->size;
|
||||
vec->size = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Release any extra space allocated for VEC. */
|
||||
|
Loading…
Reference in New Issue
Block a user