#include "unwind_i.h"
#include <stdio.h>
int
unw_is_signal_frame (unw_cursor_t *cursor)
{
struct cursor *c = (struct cursor *) cursor;
unw_word_t w0, w1, ip;
unw_addr_space_t as;
unw_accessors_t *a;
void *arg;
int ret;
as = c->dwarf.as;
a = unw_get_accessors_int (as);
arg = c->dwarf.as_arg;
ip = c->dwarf.ip;
if ((ret = (*a->access_mem) (as, ip + 4, &w1, 0, arg)) < 0)
return 0;
if ((w1 & 0xffffffff) != 0x0c)
return 0;
if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0)
return 0;
switch (c->dwarf.as->abi)
{
case UNW_MIPS_ABI_O32:
switch (w0 & 0xffffffff)
{
case 0x24021061:
return 1;
case 0x24021017:
return 2;
default:
return 0;
}
case UNW_MIPS_ABI_N64:
switch (w0 & 0xffffffff)
{
case 0x2402145b:
return 1;
default:
return 0;
}
default:
return 0;
}
}