Lines Matching full:frame

32 /* ... with 4 registers per frame. */
53 * @frame: the DWARF frame whose list of registers we insert on
58 * dwarf registers for @frame.
62 static struct dwarf_reg *dwarf_frame_alloc_reg(struct dwarf_frame *frame,
81 list_add(&reg->link, &frame->reg_list);
86 static void dwarf_frame_free_regs(struct dwarf_frame *frame)
90 list_for_each_entry_safe(reg, n, &frame->reg_list, link) {
98 * @frame: the DWARF frame to search in for @reg_num
101 * Lookup and return the dwarf reg @reg_num for this frame. Return
104 static struct dwarf_reg *dwarf_frame_reg(struct dwarf_frame *frame,
109 list_for_each_entry(reg, &frame->reg_list, link) {
388 * @frame: the instructions calculate the CFA for this frame
391 * Execute the Call Frame instruction sequence starting at
393 * how to calculate the Canonical Frame Address of a stackframe.
394 * Store the results in @frame.
400 struct dwarf_frame *frame,
410 while (current_insn < insn_end && frame->pc <= pc) {
421 frame->pc += delta;
429 regp = dwarf_frame_alloc_reg(frame, reg);
449 frame->pc += delta * cie->code_alignment_factor;
454 frame->pc += delta * cie->code_alignment_factor;
459 frame->pc += delta * cie->code_alignment_factor;
475 regp = dwarf_frame_alloc_reg(frame, reg);
480 &frame->cfa_register);
483 &frame->cfa_offset);
486 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET;
490 &frame->cfa_register);
492 frame->flags |= DWARF_FRAME_CFA_REG_OFFSET;
497 frame->cfa_offset = offset;
503 frame->cfa_expr = current_insn;
504 frame->cfa_expr_len = expr_len;
507 frame->flags |= DWARF_FRAME_CFA_REG_EXP;
515 regp = dwarf_frame_alloc_reg(frame, reg);
524 regp = dwarf_frame_alloc_reg(frame, reg);
538 regp = dwarf_frame_alloc_reg(frame, reg);
553 * dwarf_free_frame - free the memory allocated for @frame
554 * @frame: the frame to free
556 void dwarf_free_frame(struct dwarf_frame *frame)
558 dwarf_frame_free_regs(frame);
559 mempool_free(frame, dwarf_frame_pool);
570 * Return a struct dwarf_frame representing the most recent frame
577 struct dwarf_frame *frame;
623 frame = mempool_alloc(dwarf_frame_pool, GFP_ATOMIC);
624 if (!frame) {
625 printk(KERN_ERR "Unable to allocate a dwarf frame\n");
629 INIT_LIST_HEAD(&frame->reg_list);
630 frame->flags = 0;
631 frame->prev = prev;
632 frame->return_addr = 0;
640 * a) pc has no asscociated DWARF frame info and so
641 * we don't know how to unwind this frame. This is
643 * frame that was called from some assembly code
656 frame->pc = fde->initial_location;
661 frame, pc);
665 fde, frame, pc);
668 switch (frame->flags) {
671 reg = dwarf_frame_reg(prev, frame->cfa_register);
676 frame->cfa = __raw_readl(addr);
683 * the Canonical Frame Address for this
686 frame->cfa = dwarf_read_arch_reg(frame->cfa_register);
689 frame->cfa += frame->cfa_offset;
695 reg = dwarf_frame_reg(frame, DWARF_ARCH_RA_REG);
707 addr = frame->cfa + reg->addr;
708 frame->return_addr = __raw_readl(addr);
716 * just after the frame pointer (r14) had been restored. The
718 * reached by using the value of the frame pointer before it was
726 frame->return_addr = 0;
728 return frame;
731 dwarf_free_frame(frame);
914 /* Call frame instructions. */
963 struct dwarf_frame *frame, *_frame;
970 frame = dwarf_unwind_stack(return_addr, _frame);
975 _frame = frame;
977 if (!frame || !frame->return_addr)
980 return_addr = frame->return_addr;
984 if (frame)
985 dwarf_free_frame(frame);