56static uintptr_t addrs[20];
62callback_mtest (
void *vdata, uintptr_t pc,
const char *filename,
int lineno,
67 if (
data->index >=
sizeof addrs /
sizeof addrs[0])
69 fprintf (stderr,
"callback_mtest: callback called too many times\n");
74 addrs[
data->index] = pc;
88 return f2 (__LINE__) + 1;
94 return f3 (f1line, __LINE__) + 2;
114 fprintf (stderr,
"test1: unexpected return value %d\n", i);
121 "test1: not enough frames; got %zu, expected at least 3\n",
128 for (j = 0; j < 3 && j <
data.index; j++)
144 (
"test1: [%zu], unexpected return value from "
145 "backtrace_syminfo %d\n"),
151 fprintf (stderr,
"test1: [%zu]: syminfo did not find name\n", j);
163 fprintf (stderr,
"test1: [0]: missing function name\n");
166 else if (strcmp (all[0].
function,
"f3") != 0)
168 fprintf (stderr,
"test1: [0]: got %s expected %s\n",
178 fprintf (stderr,
"test1: [1]: missing function name\n");
181 else if (strcmp (all[1].
function,
"f2") != 0)
183 fprintf (stderr,
"test1: [1]: got %s expected %s\n",
193 fprintf (stderr,
"test1: [2]: missing function name\n");
196 else if (strcmp (all[2].
function,
"test1") != 0)
198 fprintf (stderr,
"test1: [2]: got %s expected %s\n",
204 printf (
"%s: backtrace_full noinline\n",
data.failed ?
"FAIL" :
"PASS");
221 return f22 (__LINE__) + 1;
227 return f23 (f1line, __LINE__) + 2;
246 fprintf (stderr,
"test3: unexpected return value %d\n", i);
254 for (j = 0; j < 3; ++j)
268 (
"test3: [%d]: unexpected return value "
269 "from backtrace_syminfo %d\n"),
276 const char *expected;
295 fprintf (stderr,
"test3: [%d]: NULL syminfo name\n", j);
300 else if (strncmp (
symdata.
name, expected, strlen (expected))
304 (
"test3: [%d]: unexpected syminfo name "
305 "got %s expected %s\n"),
316 printf (
"%s: backtrace_simple noinline\n",
data.failed ?
"FAIL" :
"PASS");
333 uintptr_t addr = (uintptr_t) &global;
335 if (
sizeof (global) > 1)
348 "test5: unexpected return value from backtrace_syminfo %d\n",
357 fprintf (stderr,
"test5: NULL syminfo name\n");
360 else if (!(strncmp (
symdata.
name,
"global", 6) == 0
364 "test5: unexpected syminfo name got %s expected %s\n",
371 "test5: unexpected syminfo value got %lx expected %lx\n",
373 (
unsigned long) (uintptr_t) &global);
379 "test5: unexpected syminfo size got %lx expected %lx\n",
381 (
unsigned long) sizeof (global));
386 printf (
"%s: backtrace_syminfo variable\n",
401#if BACKTRACE_SUPPORTED
404#if BACKTRACE_SUPPORTS_DATA
409 exit (
failures ? EXIT_FAILURE : EXIT_SUCCESS);
#define BACKTRACE_SUPPORTS_THREADS
int backtrace_syminfo(struct backtrace_state *state, uintptr_t addr, backtrace_syminfo_callback callback, backtrace_error_callback error_callback, void *data)
int backtrace_simple(struct backtrace_state *state, int skip, backtrace_simple_callback callback, backtrace_error_callback error_callback, void *data)
int backtrace_full(struct backtrace_state *state, int skip, backtrace_full_callback callback, backtrace_error_callback error_callback, void *data)
struct backtrace_state * backtrace_create_state(const char *filename, int threaded, backtrace_error_callback error_callback, void *data)
static int f2(int f1line)
static int f3(int f1line __attribute__((unused)), int f2line __attribute__((unused)))
int main(int argc ATTRIBUTE_UNUSED, char **argv)
static int f23(int f1line __attribute__((unused)), int f2line __attribute__((unused)))
static int f22(int f1line)
void callback_three(void *vdata, uintptr_t pc ATTRIBUTE_UNUSED, const char *symname, uintptr_t symval, uintptr_t symsize)
void error_callback_three(void *vdata, const char *msg, int errnum)
int callback_two(void *vdata, uintptr_t pc)
void error_callback_create(void *data ATTRIBUTE_UNUSED, const char *msg, int errnum)
int callback_one(void *vdata, uintptr_t pc ATTRIBUTE_UNUSED, const char *filename, int lineno, const char *function)
void error_callback_one(void *vdata, const char *msg, int errnum)
void error_callback_two(void *vdata, const char *msg, int errnum)
Functions to help with cleanup.