Lines Matching refs:frame

65 static struct dwarf_reg *dwarf_frame_alloc_reg(struct dwarf_frame *frame,  in dwarf_frame_alloc_reg()  argument
84 list_add(&reg->link, &frame->reg_list); in dwarf_frame_alloc_reg()
89 static void dwarf_frame_free_regs(struct dwarf_frame *frame) in dwarf_frame_free_regs() argument
93 list_for_each_entry_safe(reg, n, &frame->reg_list, link) { in dwarf_frame_free_regs()
107 static struct dwarf_reg *dwarf_frame_reg(struct dwarf_frame *frame, in dwarf_frame_reg() argument
112 list_for_each_entry(reg, &frame->reg_list, link) { in dwarf_frame_reg()
403 struct dwarf_frame *frame, in dwarf_cfa_execute_insns() argument
413 while (current_insn < insn_end && frame->pc <= pc) { in dwarf_cfa_execute_insns()
424 frame->pc += delta; in dwarf_cfa_execute_insns()
432 regp = dwarf_frame_alloc_reg(frame, reg); in dwarf_cfa_execute_insns()
452 frame->pc += delta * cie->code_alignment_factor; in dwarf_cfa_execute_insns()
457 frame->pc += delta * cie->code_alignment_factor; in dwarf_cfa_execute_insns()
462 frame->pc += delta * cie->code_alignment_factor; in dwarf_cfa_execute_insns()
478 regp = dwarf_frame_alloc_reg(frame, reg); in dwarf_cfa_execute_insns()
483 &frame->cfa_register); in dwarf_cfa_execute_insns()
486 &frame->cfa_offset); in dwarf_cfa_execute_insns()
489 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET; in dwarf_cfa_execute_insns()
493 &frame->cfa_register); in dwarf_cfa_execute_insns()
495 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET; in dwarf_cfa_execute_insns()
500 frame->cfa_offset = offset; in dwarf_cfa_execute_insns()
506 frame->cfa_expr = current_insn; in dwarf_cfa_execute_insns()
507 frame->cfa_expr_len = expr_len; in dwarf_cfa_execute_insns()
510 frame->flags |= DWARF_FRAME_CFA_REG_EXP; in dwarf_cfa_execute_insns()
518 regp = dwarf_frame_alloc_reg(frame, reg); in dwarf_cfa_execute_insns()
527 regp = dwarf_frame_alloc_reg(frame, reg); in dwarf_cfa_execute_insns()
541 regp = dwarf_frame_alloc_reg(frame, reg); in dwarf_cfa_execute_insns()
559 void dwarf_free_frame(struct dwarf_frame *frame) in dwarf_free_frame() argument
561 dwarf_frame_free_regs(frame); in dwarf_free_frame()
562 mempool_free(frame, dwarf_frame_pool); in dwarf_free_frame()
580 struct dwarf_frame *frame; in dwarf_unwind_stack() local
625 frame = mempool_alloc(dwarf_frame_pool, GFP_ATOMIC); in dwarf_unwind_stack()
626 if (!frame) { in dwarf_unwind_stack()
631 INIT_LIST_HEAD(&frame->reg_list); in dwarf_unwind_stack()
632 frame->flags = 0; in dwarf_unwind_stack()
633 frame->prev = prev; in dwarf_unwind_stack()
634 frame->return_addr = 0; in dwarf_unwind_stack()
658 frame->pc = fde->initial_location; in dwarf_unwind_stack()
663 frame, pc); in dwarf_unwind_stack()
667 fde, frame, pc); in dwarf_unwind_stack()
670 switch (frame->flags) { in dwarf_unwind_stack()
673 reg = dwarf_frame_reg(prev, frame->cfa_register); in dwarf_unwind_stack()
678 frame->cfa = __raw_readl(addr); in dwarf_unwind_stack()
688 frame->cfa = dwarf_read_arch_reg(frame->cfa_register); in dwarf_unwind_stack()
691 frame->cfa += frame->cfa_offset; in dwarf_unwind_stack()
697 reg = dwarf_frame_reg(frame, DWARF_ARCH_RA_REG); in dwarf_unwind_stack()
709 addr = frame->cfa + reg->addr; in dwarf_unwind_stack()
710 frame->return_addr = __raw_readl(addr); in dwarf_unwind_stack()
728 frame->return_addr = 0; in dwarf_unwind_stack()
730 return frame; in dwarf_unwind_stack()
733 dwarf_free_frame(frame); in dwarf_unwind_stack()
965 struct dwarf_frame *frame, *_frame; in dwarf_unwinder_dump() local
972 frame = dwarf_unwind_stack(return_addr, _frame); in dwarf_unwinder_dump()
977 _frame = frame; in dwarf_unwinder_dump()
979 if (!frame || !frame->return_addr) in dwarf_unwinder_dump()
982 return_addr = frame->return_addr; in dwarf_unwinder_dump()
986 if (frame) in dwarf_unwinder_dump()
987 dwarf_free_frame(frame); in dwarf_unwinder_dump()