45#ifndef HAVE_DECL_GETPAGESIZE
46extern int getpagesize (
void);
54#define MAP_ANONYMOUS MAP_ANON
58#define MAP_FAILED ((void *)-1)
90 for (pp = &
state->freelist; *pp != NULL; pp = &(*pp)->
next)
92 if (ppsmall == NULL || (*pp)->
size < (*ppsmall)->size)
98 if (
size <= (*ppsmall)->size)
100 *ppsmall = (*ppsmall)->
next;
132 if (!
state->threaded)
139 for (pp = &
state->freelist; *pp != NULL; pp = &(*pp)->
next)
141 if ((*pp)->size >=
size)
169 pagesize = getpagesize ();
170 asksize = (
size + pagesize - 1) & ~ (pagesize - 1);
171 page = mmap (NULL, asksize, PROT_READ | PROT_WRITE,
206 if (
size >= 16 * 4096)
210 pagesize = getpagesize ();
211 if (((uintptr_t) addr & (pagesize - 1)) == 0
212 && (
size & (pagesize - 1)) == 0)
216 if (munmap (addr,
size) == 0)
226 if (!
state->threaded)
255 pagesize = getpagesize ();
259 else if (alc < pagesize)
268 alc = (alc + pagesize - 1) & ~ (pagesize - 1);
273 if (vec->
base != NULL)
283 ret = (
char *) vec->
base + vec->
size;
322 aligned = (
size + 7) & ~ (
size_t) 7;
323 alc -= aligned -
size;
void(* backtrace_error_callback)(void *data, const char *msg, int errnum)
static void error_callback(void *data, const char *msg, int errnum)
#define __sync_lock_release(A)
#define __sync_lock_test_and_set(A, B)
void backtrace_free(struct backtrace_state *state, void *addr, size_t size, backtrace_error_callback error_callback ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED)
void * backtrace_vector_grow(struct backtrace_state *state, size_t size, backtrace_error_callback error_callback, void *data, struct backtrace_vector *vec)
int backtrace_vector_release(struct backtrace_state *state, struct backtrace_vector *vec, backtrace_error_callback error_callback, void *data)
struct backtrace_freelist_struct * next
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 * backtrace_alloc(struct backtrace_state *state, size_t size, backtrace_error_callback error_callback, void *data)
static void backtrace_free_locked(struct backtrace_state *state, void *addr, size_t size)
const char * base(const char *p)
Functions to help with cleanup.