Lines Matching defs:state

41  * state and running cleanup functions.  Unwinding is performed virtually on
79 /* Unwind state. */
239 static void set_reg(unwind_state_t* state, uint32_t reg, uint32_t value) {
241 state->gregs[reg] = value;
244 static bool try_pop_registers(const memory_t* memory, unwind_state_t* state, uint32_t mask) {
245 uint32_t sp = state->gregs[R_SP];
256 set_reg(state, i, value);
261 set_reg(state, R_SP, sp);
276 * virtual register state (including the stack pointer) such that
280 unwind_state_t* state, byte_stream_t* stream, int pr_index) {
307 set_reg(state, R_SP, state->gregs[R_SP] + ((op & 0x3f) << 2) + 4);
310 set_reg(state, R_SP, state->gregs[R_SP] - ((op & 0x3f) << 2) - 4);
319 if (!try_pop_registers(memory, state, mask)) {
332 set_reg(state, R_SP, state->gregs[op & 0x0f]);
341 if (!try_pop_registers(memory, state, mask)) {
347 if (!try_pop_registers(memory, state, mask)) {
360 if (!try_pop_registers(memory, state, op2)) {
379 set_reg(state, R_SP, state->gregs[R_SP] + (value << 2) + 0x204);
386 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op2 & 0x0f) * 8 + 12);
389 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op & 0x07) * 8 + 12);
392 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op & 0x07) * 8 + 8);
399 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op2 & 0x0f) * 8 + 8);
407 set_reg(state, R_SP, state->gregs[R_SP] + __builtin_popcount(op2) * 4);
419 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op2 & 0x0f) * 8 + 8);
426 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op2 & 0x0f) * 8 + 8);
429 set_reg(state, R_SP, state->gregs[R_SP] + (uint32_t)(op & 0x07) * 8 + 8);
436 set_reg(state, R_PC, state->gregs[R_LR]);
488 unwind_state_t* state, backtrace_frame_t* backtrace,
494 uintptr_t pc = index ? rewind_pc_arch(memory, state->gregs[R_PC])
495 : state->gregs[R_PC];
499 frame->stack_top = state->gregs[R_SP];
507 if (index == 0 && state->gregs[R_LR]
508 && state->gregs[R_LR] != state->gregs[R_PC]) {
509 set_reg(state, R_PC, state->gregs[R_LR]);
530 if (!execute_personality_routine(memory, state, &stream, pr & 0x0f)) {
533 if (frame && state->gregs[R_SP] > frame->stack_top) {
534 frame->stack_size = state->gregs[R_SP] - frame->stack_top;
536 if (!state->gregs[R_PC]) {
544 && state->gregs[R_LR]
545 && state->gregs[R_LR] != state->gregs[R_PC]
546 && is_executable_map(map_info_list, state->gregs[R_LR])) {
549 add_backtrace_entry(rewind_pc_arch(memory, state->gregs[R_LR]),
560 unwind_state_t state;
562 state.gregs[0] = uc->uc_mcontext.arm_r0;
563 state.gregs[1] = uc->uc_mcontext.arm_r1;
564 state.gregs[2] = uc->uc_mcontext.arm_r2;
565 state.gregs[3] = uc->uc_mcontext.arm_r3;
566 state.gregs[4] = uc->uc_mcontext.arm_r4;
567 state.gregs[5] = uc->uc_mcontext.arm_r5;
568 state.gregs[6] = uc->uc_mcontext.arm_r6;
569 state.gregs[7] = uc->uc_mcontext.arm_r7;
570 state.gregs[8] = uc->uc_mcontext.arm_r8;
571 state.gregs[9] = uc->uc_mcontext.arm_r9;
572 state.gregs[10] = uc->uc_mcontext.arm_r10;
573 state.gregs[11] = uc->uc_mcontext.arm_fp;
574 state.gregs[12] = uc->uc_mcontext.arm_ip;
575 state.gregs[13] = uc->uc_mcontext.arm_sp;
576 state.gregs[14] = uc->uc_mcontext.arm_lr;
577 state.gregs[15] = uc->uc_mcontext.arm_pc;
581 return unwind_backtrace_common(&memory, map_info_list, &state,
592 unwind_state_t state;
594 state.gregs[i] = regs.uregs[i];
599 return unwind_backtrace_common(&memory, context->map_info_list, &state,