static inline int establish_machine_state (struct cursor *c) { unw_addr_space_t as = c->dwarf.as; void *arg = c->dwarf.as_arg; unw_fpreg_t fpval; unw_word_t val; int reg; Debug (8, "copying out cursor state\n"); for (reg = 0; reg <= UNW_REG_LAST; ++reg) { Debug (16, "copying %s %d\n", unw_regname (reg), reg); if (unw_is_fpreg (reg)) { if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) as->acc.access_fpreg (as, reg, &fpval, 1, arg); } else { if (tdep_access_reg (c, reg, &val, 0) >= 0) as->acc.access_reg (as, reg, &val, 1, arg); } } return 0; }
PROTECTED int unw_get_reg (unw_cursor_t *cursor, int regnum, unw_word_t *valp) { struct cursor *c = (struct cursor *) cursor; // We can get the IP value directly without needing a lookup. if (regnum == UNW_REG_IP) { *valp = tdep_get_ip (c); return 0; } return tdep_access_reg (c, regnum, valp, 0); }