Lines Matching refs:sr

615 push (struct unw_state_record *sr)  in push()  argument
624 memcpy(rs, &sr->curr, sizeof(*rs)); in push()
625 sr->curr.next = rs; in push()
629 pop (struct unw_state_record *sr) in pop() argument
631 struct unw_reg_state *rs = sr->curr.next; in pop()
637 memcpy(&sr->curr, rs, sizeof(*rs)); in pop()
745 finish_prologue (struct unw_state_record *sr) in finish_prologue() argument
756 reg = sr->curr.reg + unw.save_order[i]; in finish_prologue()
759 reg->val = sr->gr_save_loc++; in finish_prologue()
769 if (sr->imask) { in finish_prologue()
770 unsigned char kind, mask = 0, *cp = sr->imask; in finish_prologue()
777 regs[0] = sr->curr.reg + UNW_REG_F2; in finish_prologue()
778 regs[1] = sr->curr.reg + UNW_REG_R4; in finish_prologue()
779 regs[2] = sr->curr.reg + UNW_REG_B1; in finish_prologue()
781 for (t = 0; t < sr->region_len; ++t) { in finish_prologue()
786 spill_next_when(&regs[kind - 1], sr->curr.reg + limit[kind - 1], in finish_prologue()
787 sr->region_start + t); in finish_prologue()
793 if (sr->any_spills) { in finish_prologue()
794 off = sr->spill_offset; in finish_prologue()
795 alloc_spill_area(&off, 16, sr->curr.reg + UNW_REG_F2, sr->curr.reg + UNW_REG_F31); in finish_prologue()
796 alloc_spill_area(&off, 8, sr->curr.reg + UNW_REG_B1, sr->curr.reg + UNW_REG_B5); in finish_prologue()
797 alloc_spill_area(&off, 8, sr->curr.reg + UNW_REG_R4, sr->curr.reg + UNW_REG_R7); in finish_prologue()
807 struct unw_state_record *sr) in desc_prologue() argument
811 if (!(sr->in_body || sr->first_region)) in desc_prologue()
812 finish_prologue(sr); in desc_prologue()
813 sr->first_region = 0; in desc_prologue()
816 if (sr->when_target < sr->region_start + sr->region_len) { in desc_prologue()
817 sr->done = 1; in desc_prologue()
821 region_start = sr->region_start + sr->region_len; in desc_prologue()
823 for (i = 0; i < sr->epilogue_count; ++i) in desc_prologue()
824 pop(sr); in desc_prologue()
825 sr->epilogue_count = 0; in desc_prologue()
826 sr->epilogue_start = UNW_WHEN_NEVER; in desc_prologue()
828 sr->region_start = region_start; in desc_prologue()
829 sr->region_len = rlen; in desc_prologue()
830 sr->in_body = body; in desc_prologue()
833 push(sr); in desc_prologue()
837 set_reg(sr->curr.reg + unw.save_order[i], UNW_WHERE_GR, in desc_prologue()
838 sr->region_start + sr->region_len - 1, grsave++); in desc_prologue()
841 sr->gr_save_loc = grsave; in desc_prologue()
842 sr->any_spills = 0; in desc_prologue()
843 sr->imask = NULL; in desc_prologue()
844 sr->spill_offset = 0x10; /* default to psp+16 */ in desc_prologue()
853 desc_abi (unsigned char abi, unsigned char context, struct unw_state_record *sr) in desc_abi() argument
856 sr->flags |= UNW_FLAG_INTERRUPT_FRAME; in desc_abi()
865 desc_br_gr (unsigned char brmask, unsigned char gr, struct unw_state_record *sr) in desc_br_gr() argument
871 set_reg(sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_GR, in desc_br_gr()
872 sr->region_start + sr->region_len - 1, gr++); in desc_br_gr()
878 desc_br_mem (unsigned char brmask, struct unw_state_record *sr) in desc_br_mem() argument
884 set_reg(sr->curr.reg + UNW_REG_B1 + i, UNW_WHERE_SPILL_HOME, in desc_br_mem()
885 sr->region_start + sr->region_len - 1, 0); in desc_br_mem()
886 sr->any_spills = 1; in desc_br_mem()
893 desc_frgr_mem (unsigned char grmask, unw_word frmask, struct unw_state_record *sr) in desc_frgr_mem() argument
899 set_reg(sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME, in desc_frgr_mem()
900 sr->region_start + sr->region_len - 1, 0); in desc_frgr_mem()
901 sr->any_spills = 1; in desc_frgr_mem()
908 set_reg(sr->curr.reg + base + i, UNW_WHERE_SPILL_HOME, in desc_frgr_mem()
909 sr->region_start + sr->region_len - 1, 0); in desc_frgr_mem()
910 sr->any_spills = 1; in desc_frgr_mem()
917 desc_fr_mem (unsigned char frmask, struct unw_state_record *sr) in desc_fr_mem() argument
923 set_reg(sr->curr.reg + UNW_REG_F2 + i, UNW_WHERE_SPILL_HOME, in desc_fr_mem()
924 sr->region_start + sr->region_len - 1, 0); in desc_fr_mem()
925 sr->any_spills = 1; in desc_fr_mem()
932 desc_gr_gr (unsigned char grmask, unsigned char gr, struct unw_state_record *sr) in desc_gr_gr() argument
938 set_reg(sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_GR, in desc_gr_gr()
939 sr->region_start + sr->region_len - 1, gr++); in desc_gr_gr()
945 desc_gr_mem (unsigned char grmask, struct unw_state_record *sr) in desc_gr_mem() argument
951 set_reg(sr->curr.reg + UNW_REG_R4 + i, UNW_WHERE_SPILL_HOME, in desc_gr_mem()
952 sr->region_start + sr->region_len - 1, 0); in desc_gr_mem()
953 sr->any_spills = 1; in desc_gr_mem()
960 desc_mem_stack_f (unw_word t, unw_word size, struct unw_state_record *sr) in desc_mem_stack_f() argument
962 set_reg(sr->curr.reg + UNW_REG_PSP, UNW_WHERE_NONE, in desc_mem_stack_f()
963 sr->region_start + min_t(int, t, sr->region_len - 1), 16*size); in desc_mem_stack_f()
967 desc_mem_stack_v (unw_word t, struct unw_state_record *sr) in desc_mem_stack_v() argument
969 sr->curr.reg[UNW_REG_PSP].when = sr->region_start + min_t(int, t, sr->region_len - 1); in desc_mem_stack_v()
973 desc_reg_gr (unsigned char reg, unsigned char dst, struct unw_state_record *sr) in desc_reg_gr() argument
975 set_reg(sr->curr.reg + reg, UNW_WHERE_GR, sr->region_start + sr->region_len - 1, dst); in desc_reg_gr()
979 desc_reg_psprel (unsigned char reg, unw_word pspoff, struct unw_state_record *sr) in desc_reg_psprel() argument
981 set_reg(sr->curr.reg + reg, UNW_WHERE_PSPREL, sr->region_start + sr->region_len - 1, in desc_reg_psprel()
986 desc_reg_sprel (unsigned char reg, unw_word spoff, struct unw_state_record *sr) in desc_reg_sprel() argument
988 set_reg(sr->curr.reg + reg, UNW_WHERE_SPREL, sr->region_start + sr->region_len - 1, in desc_reg_sprel()
993 desc_rp_br (unsigned char dst, struct unw_state_record *sr) in desc_rp_br() argument
995 sr->return_link_reg = dst; in desc_rp_br()
999 desc_reg_when (unsigned char regnum, unw_word t, struct unw_state_record *sr) in desc_reg_when() argument
1001 struct unw_reg_info *reg = sr->curr.reg + regnum; in desc_reg_when()
1005 reg->when = sr->region_start + min_t(int, t, sr->region_len - 1); in desc_reg_when()
1009 desc_spill_base (unw_word pspoff, struct unw_state_record *sr) in desc_spill_base() argument
1011 sr->spill_offset = 0x10 - 4*pspoff; in desc_spill_base()
1015 desc_spill_mask (unsigned char *imaskp, struct unw_state_record *sr) in desc_spill_mask() argument
1017 sr->imask = imaskp; in desc_spill_mask()
1018 return imaskp + (2*sr->region_len + 7)/8; in desc_spill_mask()
1025 desc_epilogue (unw_word t, unw_word ecount, struct unw_state_record *sr) in desc_epilogue() argument
1027 sr->epilogue_start = sr->region_start + sr->region_len - 1 - t; in desc_epilogue()
1028 sr->epilogue_count = ecount + 1; in desc_epilogue()
1032 desc_copy_state (unw_word label, struct unw_state_record *sr) in desc_copy_state() argument
1036 for (ls = sr->labeled_states; ls; ls = ls->next) { in desc_copy_state()
1038 free_state_stack(&sr->curr); in desc_copy_state()
1039 memcpy(&sr->curr, &ls->saved_state, sizeof(sr->curr)); in desc_copy_state()
1040 sr->curr.next = dup_state_stack(ls->saved_state.next); in desc_copy_state()
1048 desc_label_state (unw_word label, struct unw_state_record *sr) in desc_label_state() argument
1058 memcpy(&ls->saved_state, &sr->curr, sizeof(ls->saved_state)); in desc_label_state()
1059 ls->saved_state.next = dup_state_stack(sr->curr.next); in desc_label_state()
1062 ls->next = sr->labeled_states; in desc_label_state()
1063 sr->labeled_states = ls; in desc_label_state()
1071 desc_is_active (unsigned char qp, unw_word t, struct unw_state_record *sr) in desc_is_active() argument
1073 if (sr->when_target <= sr->region_start + min_t(int, t, sr->region_len - 1)) in desc_is_active()
1076 if ((sr->pr_val & (1UL << qp)) == 0) in desc_is_active()
1078 sr->pr_mask |= (1UL << qp); in desc_is_active()
1084 desc_restore_p (unsigned char qp, unw_word t, unsigned char abreg, struct unw_state_record *sr) in desc_restore_p() argument
1088 if (!desc_is_active(qp, t, sr)) in desc_restore_p()
1091 r = sr->curr.reg + decode_abreg(abreg, 0); in desc_restore_p()
1099 unsigned char ytreg, struct unw_state_record *sr) in desc_spill_reg_p() argument
1104 if (!desc_is_active(qp, t, sr)) in desc_spill_reg_p()
1112 r = sr->curr.reg + decode_abreg(abreg, 0); in desc_spill_reg_p()
1114 r->when = sr->region_start + min_t(int, t, sr->region_len - 1); in desc_spill_reg_p()
1120 struct unw_state_record *sr) in desc_spill_psprel_p() argument
1124 if (!desc_is_active(qp, t, sr)) in desc_spill_psprel_p()
1127 r = sr->curr.reg + decode_abreg(abreg, 1); in desc_spill_psprel_p()
1129 r->when = sr->region_start + min_t(int, t, sr->region_len - 1); in desc_spill_psprel_p()
1135 struct unw_state_record *sr) in desc_spill_sprel_p() argument
1139 if (!desc_is_active(qp, t, sr)) in desc_spill_sprel_p()
1142 r = sr->curr.reg + decode_abreg(abreg, 1); in desc_spill_sprel_p()
1144 r->when = sr->region_start + min_t(int, t, sr->region_len - 1); in desc_spill_sprel_p()
1332 script_finalize (struct unw_script *script, struct unw_state_record *sr) in script_finalize() argument
1334 script->pr_mask = sr->pr_mask; in script_finalize()
1335 script->pr_val = sr->pr_val; in script_finalize()
1356 emit_nat_info (struct unw_state_record *sr, int i, struct unw_script *script) in emit_nat_info() argument
1358 struct unw_reg_info *r = sr->curr.reg + i; in emit_nat_info()
1401 compile_reg (struct unw_state_record *sr, int i, struct unw_script *script) in compile_reg() argument
1403 struct unw_reg_info *r = sr->curr.reg + i; in compile_reg()
1409 if (r->where == UNW_WHERE_NONE || r->when >= sr->when_target) in compile_reg()
1484 emit_nat_info(sr, i, script); in compile_reg()
1532 struct unw_state_record sr; in build_script() local
1544 memset(&sr, 0, sizeof(sr)); in build_script()
1545 for (r = sr.curr.reg; r < sr.curr.reg + UNW_NUM_REGS; ++r) in build_script()
1547 sr.pr_val = info->pr; in build_script()
1587 sr.curr.reg[UNW_REG_RP].where = UNW_WHERE_BR; in build_script()
1588 sr.curr.reg[UNW_REG_RP].when = -1; in build_script()
1589 sr.curr.reg[UNW_REG_RP].val = 0; in build_script()
1590 compile_reg(&sr, UNW_REG_RP, script); in build_script()
1591 script_finalize(script, &sr); in build_script()
1597 sr.when_target = (3*((ip & ~0xfUL) - (table->segment_base + e->start_offset))/16 in build_script()
1603 while (!sr.done && dp < desc_end) in build_script()
1604 dp = unw_decode(dp, sr.in_body, &sr); in build_script()
1606 if (sr.when_target > sr.epilogue_start) { in build_script()
1611 sr.curr.reg[UNW_REG_PSP].val = 0; in build_script()
1612 sr.curr.reg[UNW_REG_PSP].where = UNW_WHERE_NONE; in build_script()
1613 sr.curr.reg[UNW_REG_PSP].when = UNW_WHEN_NEVER; in build_script()
1614 for (r = sr.curr.reg; r < sr.curr.reg + UNW_NUM_REGS; ++r) in build_script()
1624 script->flags = sr.flags; in build_script()
1630 if (sr.curr.reg[UNW_REG_RP].when >= sr.when_target) { in build_script()
1631 sr.curr.reg[UNW_REG_RP].where = UNW_WHERE_BR; in build_script()
1632 sr.curr.reg[UNW_REG_RP].when = -1; in build_script()
1633 sr.curr.reg[UNW_REG_RP].val = sr.return_link_reg; in build_script()
1635 __func__, ip, sr.curr.reg[UNW_REG_RP].where, in build_script()
1636 sr.curr.reg[UNW_REG_RP].val); in build_script()
1641 __func__, table->segment_base + e->start_offset, sr.when_target); in build_script()
1642 for (r = sr.curr.reg; r < sr.curr.reg + UNW_NUM_REGS; ++r) { in build_script()
1644 UNW_DPRINT(1, " %s <- ", unw.preg_name[r - sr.curr.reg]); in build_script()
1652 UNW_DPRINT(1, "%s+0x%lx", unw.preg_name[r - sr.curr.reg], r->val); in build_script()
1672 if (sr.when_target > sr.curr.reg[UNW_REG_PSP].when in build_script()
1673 && (sr.curr.reg[UNW_REG_PSP].where == UNW_WHERE_NONE) in build_script()
1674 && sr.curr.reg[UNW_REG_PSP].val != 0) { in build_script()
1678 insn.val = sr.curr.reg[UNW_REG_PSP].val; /* frame size */ in build_script()
1683 if (sr.when_target < sr.curr.reg[UNW_REG_PRI_UNAT_GR].when) in build_script()
1685 else if (sr.when_target < sr.curr.reg[UNW_REG_PRI_UNAT_MEM].when) in build_script()
1687 else if (sr.curr.reg[UNW_REG_PRI_UNAT_MEM].when > sr.curr.reg[UNW_REG_PRI_UNAT_GR].when) in build_script()
1692 compile_reg(&sr, i, script); in build_script()
1695 compile_reg(&sr, i, script); in build_script()
1700 for (ls = sr.labeled_states; ls; ls = next) { in build_script()
1705 free_state_stack(&sr.curr); in build_script()
1708 script_finalize(script, &sr); in build_script()