mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-01-11 11:33:43 +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