Lines Matching refs:state
182 static bool unwind_exec_read_byte(struct unwind_state_arm32 *state, in unwind_exec_read_byte() argument
187 if (!copy_in(&insn, (void *)state->insn, sizeof(insn), kernel_stack)) in unwind_exec_read_byte()
191 *ret_insn = (insn >> (state->byte * 8)) & 0xff; in unwind_exec_read_byte()
194 if (state->byte == 0) { in unwind_exec_read_byte()
195 state->byte = 3; in unwind_exec_read_byte()
196 state->insn += sizeof(uint32_t); in unwind_exec_read_byte()
197 state->entries--; in unwind_exec_read_byte()
199 state->byte--; in unwind_exec_read_byte()
221 static bool unwind_exec_insn(struct unwind_state_arm32 *state, in unwind_exec_insn() argument
226 ulong vsp = state->registers[SP]; in unwind_exec_insn()
230 if (!unwind_exec_read_byte(state, &insn, kernel_stack)) in unwind_exec_insn()
234 state->registers[SP] += ((insn & INSN_VSP_SIZE_MASK) << 2) + 4; in unwind_exec_insn()
237 state->registers[SP] -= ((insn & INSN_VSP_SIZE_MASK) << 2) + 4; in unwind_exec_insn()
244 if (!unwind_exec_read_byte(state, &mask, kernel_stack)) in unwind_exec_insn()
258 if (!pop_vsp(&state->registers[reg], &vsp, in unwind_exec_insn()
261 state->update_mask |= 1 << reg; in unwind_exec_insn()
273 state->registers[SP] = in unwind_exec_insn()
274 state->registers[insn & INSN_STD_DATA_MASK]; in unwind_exec_insn()
287 if (!pop_vsp(&state->registers[reg], &vsp, in unwind_exec_insn()
290 state->update_mask |= 1 << reg; in unwind_exec_insn()
295 if (!pop_vsp(&state->registers[14], &vsp, kernel_stack, in unwind_exec_insn()
302 state->entries = 0; in unwind_exec_insn()
308 if (!unwind_exec_read_byte(state, &mask, kernel_stack)) in unwind_exec_insn()
319 if (!pop_vsp(&state->registers[reg], &vsp, in unwind_exec_insn()
322 state->update_mask |= 1 << reg; in unwind_exec_insn()
330 if (!unwind_exec_read_byte(state, &uleb128, kernel_stack)) in unwind_exec_insn()
333 state->registers[SP] += 0x204 + (uleb128 << 2); in unwind_exec_insn()
342 state->registers[SP] = vsp; in unwind_exec_insn()
348 static bool unwind_tab(struct unwind_state_arm32 *state, bool kernel_stack, in unwind_tab() argument
355 state->registers[PC] = 0; in unwind_tab()
357 if (!copy_in(&insn, (void *)state->insn, sizeof(insn), kernel_stack)) { in unwind_tab()
358 printf("Bad insn addr %p", (void *)state->insn); in unwind_tab()
366 state->byte = 2; in unwind_tab()
367 state->entries = 1; in unwind_tab()
369 state->byte = 1; in unwind_tab()
370 state->entries = ((insn >> 16) & 0xFF) + 1; in unwind_tab()
376 while (state->entries > 0) { in unwind_tab()
377 if (!unwind_exec_insn(state, kernel_stack, stack, stack_size)) in unwind_tab()
384 if (state->registers[PC] == 0) { in unwind_tab()
385 state->registers[PC] = state->registers[LR]; in unwind_tab()
390 if (state->start_pc != state->registers[PC]) in unwind_tab()
391 state->update_mask |= 1 << PC; in unwind_tab()
394 if (state->registers[PC] == 0) in unwind_tab()
401 bool unwind_stack_arm32(struct unwind_state_arm32 *state, ulong exidx, in unwind_stack_arm32() argument
412 state->update_mask = 0; in unwind_stack_arm32()
415 state->start_pc = state->registers[PC]; in unwind_stack_arm32()
418 index = find_index(state->start_pc, exidx, exidx_sz); in unwind_stack_arm32()
424 state->insn = (ulong)&index->insn; in unwind_stack_arm32()
427 state->insn = (ulong)&index->insn + in unwind_stack_arm32()
432 finished = unwind_tab(state, kernel_stack, stack, stack_size); in unwind_stack_arm32()
477 void print_stack_arm32(struct unwind_state_arm32 *state, in print_stack_arm32() argument
491 pc = (ulong)state->registers[PC] - gd->reloc_off; in print_stack_arm32()
492 lr = (ulong)state->registers[LR] - gd->reloc_off; in print_stack_arm32()
494 pc = (ulong)state->registers[PC]; in print_stack_arm32()
495 lr = (ulong)state->registers[LR]; in print_stack_arm32()
505 pc = (ulong)state->registers[PC] - gd->reloc_off; in print_stack_arm32()
507 pc = (ulong)state->registers[PC]; in print_stack_arm32()
510 } while (unwind_stack_arm32(state, exidx, exidx_sz, in print_stack_arm32()
520 struct unwind_state_arm32 state; in dump_core_stack() local
529 state.registers[i] = 0; in dump_core_stack()
530 state.update_mask = 0; in dump_core_stack()
531 state.start_pc = 0; in dump_core_stack()
532 state.entries = 0; in dump_core_stack()
533 state.insn = 0; in dump_core_stack()
534 state.byte = 0; in dump_core_stack()
537 state.registers[7] = regs->ARM_r7; in dump_core_stack()
539 state.registers[FP] = regs->ARM_ip; in dump_core_stack()
540 state.registers[SP] = regs->ARM_sp; in dump_core_stack()
541 state.registers[LR] = regs->ARM_lr; in dump_core_stack()
542 state.registers[PC] = regs->ARM_pc; in dump_core_stack()
544 print_stack_arm32(&state, exidx, exidx_sz, in dump_core_stack()