#include "unwind_i.h"
int
unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc)
{
struct cursor *c = (struct cursor *) cursor;
dwarf_loc_t loc;
loc = DWARF_NULL_LOC;
switch (reg)
{
case UNW_S390X_R6:
case UNW_S390X_R7:
case UNW_S390X_R8:
case UNW_S390X_R9:
case UNW_S390X_R10:
case UNW_S390X_R11:
case UNW_S390X_R12:
case UNW_S390X_R13:
case UNW_S390X_R15:
case UNW_S390X_F8:
case UNW_S390X_F9:
case UNW_S390X_F10:
case UNW_S390X_F11:
case UNW_S390X_F12:
case UNW_S390X_F13:
case UNW_S390X_F14:
case UNW_S390X_F15:
loc = c->dwarf.loc[reg];
break;
default:
break;
}
memset (sloc, 0, sizeof (*sloc));
if (DWARF_IS_NULL_LOC (loc))
{
sloc->type = UNW_SLT_NONE;
return 0;
}
#if !defined(UNW_LOCAL_ONLY)
if (DWARF_IS_REG_LOC (loc))
{
sloc->type = UNW_SLT_REG;
sloc->u.regnum = DWARF_GET_LOC (loc);
}
else
#endif
{
sloc->type = UNW_SLT_MEMORY;
sloc->u.addr = DWARF_GET_LOC (loc);
}
return 0;
}