1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-25 16:47:38 +01:00

Include <libunwind-ia64.h> instead of <libunwind.h> (this program is slightly

ia64-specific).
(sighandler): Rename rp to ip.
(doit): Declare argument as volatile pointer.

(Logical change 1.18)
This commit is contained in:
mostang.com!davidm 2002-04-25 06:47:29 +00:00
parent 934d3b52b0
commit e324c4c115

View file

@ -20,7 +20,7 @@ GNU General Public License for more details. */
#include <signal.h>
#include <stdio.h>
#include <unwind.h>
#include <libunwind-ia64.h>
#define panic(args...) \
{ fprintf (stderr, args); exit (-1); }
@ -29,14 +29,13 @@ static void
sighandler (int signal)
{
unw_cursor_t cursor, cursor2;
unw_word_t rp;
unw_word_t ip;
unw_context_t uc;
printf ("caught signal %d\n", signal);
unw_getcontext(&uc);
if (unw_init (&cursor, &uc) < 0)
unw_getcontext (&uc);
if (unw_init_local (&cursor, &uc) < 0)
panic ("unw_init() failed!\n");
/* get cursor for caller of sighandler: */
@ -48,15 +47,18 @@ sighandler (int signal)
if (unw_step (&cursor2) < 0)
panic ("failed to find signal frame!\n");
if (unw_get_reg (&cursor2, UNW_REG_RP, &rp) < 0)
if (unw_step (&cursor2) < 0)
panic ("unw_step() failed!\n");
if (unw_get_reg (&cursor2, UNW_REG_IP, &ip) < 0)
panic ("failed to get IP!\n");
/* skip faulting instruction (doesn't handle MLX template) */
++rp;
if (rp & 0x3 == 0x3)
rp += 13;
++ip;
if (ip & 0x3 == 0x3)
ip += 13;
if (unw_set_reg (&cursor2, UNW_REG_RP, rp) < 0)
if (unw_set_reg (&cursor2, UNW_REG_IP, ip) < 0)
panic ("failed to set IP!\n");
unw_resume (&cursor); /* update context & return to caller of sighandler() */
@ -65,7 +67,7 @@ sighandler (int signal)
}
static void
doit (char *p)
doit (volatile char *p)
{
int ch;