mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-12-23 12:03:41 +01:00
(Logical change 1.137)
This commit is contained in:
parent
e71e68a15e
commit
5e111c69df
1 changed files with 58 additions and 0 deletions
58
tests/test-mem.c
Normal file
58
tests/test-mem.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#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;
|
||||
}
|
Loading…
Reference in a new issue