1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-19 14:17:38 +01:00
libunwind-eh_elf/tests/test-mem.c
2003-12-05 00:45:03 +00:00

58 lines
1 KiB
C

#include <libunwind.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
#define panic(args...) \
{ fprintf (stderr, args); exit (-1); }
int verbose;
static void
do_backtrace (void)
{
unw_cursor_t cursor;
unw_word_t ip, sp;
unw_context_t uc;
int ret;
unw_getcontext (&uc);
if (unw_init_local (&cursor, &uc) < 0)
panic ("unw_init_local failed!\n");
do
{
unw_get_reg (&cursor, UNW_REG_IP, &ip);
unw_get_reg (&cursor, UNW_REG_SP, &sp);
if (verbose)
printf ("%016lx (sp=%016lx)\n", (long) ip, (long) sp);
ret = unw_step (&cursor);
if (ret < 0)
{
unw_get_reg (&cursor, UNW_REG_IP, &ip);
panic ("FAILURE: unw_step() returned %d for ip=%lx\n",
ret, (long) ip);
}
}
while (ret > 0);
}
int
main (int argc, char **argv)
{
struct rlimit rlim;
verbose = argc > 1;
rlim.rlim_cur = 0;
rlim.rlim_max = RLIM_INFINITY;
setrlimit (RLIMIT_DATA, &rlim);
setrlimit (RLIMIT_AS, &rlim);
do_backtrace ();
return 0;
}