Home | History | Annotate | Download | only in processor

Lines Matching refs:frame

63     BPLOG(ERROR) << "Can't get context frame without context";
67 StackFrameARM* frame = new StackFrameARM();
71 frame->context = *context_;
72 frame->context_validity = context_frame_validity_;
73 frame->trust = StackFrame::FRAME_TRUST_CONTEXT;
74 frame->instruction = frame->context.iregs[MD_CONTEXT_ARM_REG_PC];
76 return frame;
104 // Construct a new stack frame given the values the CFI recovered.
105 scoped_ptr<StackFrameARM> frame(new StackFrameARM());
112 frame->context_validity |= StackFrameARM::RegisterValidFlag(i);
113 frame->context.iregs[i] = entry->second;
120 frame->context_validity |= StackFrameARM::RegisterValidFlag(i);
121 frame->context.iregs[i] = last_frame->context.iregs[i];
125 if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) {
130 frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC;
131 frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = entry->second;
135 frame->context_validity |= StackFrameARM::CONTEXT_VALID_PC;
136 frame->context_validity |= StackFrameARM::CONTEXT_VALID_LR;
137 frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = entry->second;
138 frame->context.iregs[MD_CONTEXT_ARM_REG_PC] =
144 if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) {
148 frame->context_validity |= StackFrameARM::CONTEXT_VALID_SP;
149 frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = entry->second;
153 // If we didn't recover the PC and the SP, then the frame isn't very useful.
156 if ((frame->context_validity & essentials) != essentials)
159 frame->trust = StackFrame::FRAME_TRUST_CFI;
160 return frame.release();
180 // Create a new stack frame (ownership will be transferred to the caller)
182 StackFrameARM* frame = new StackFrameARM();
184 frame->trust = StackFrame::FRAME_TRUST_SCAN;
185 frame->context = last_frame->context;
186 frame->context.iregs[MD_CONTEXT_ARM_REG_PC] = caller_pc;
187 frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = caller_sp;
188 frame->context_validity = StackFrameARM::CONTEXT_VALID_PC |
191 return frame;
222 // Create a new stack frame (ownership will be transferred to the caller)
224 StackFrameARM* frame = new StackFrameARM();
226 frame->trust = StackFrame::FRAME_TRUST_FP;
227 frame->context = last_frame->context;
228 frame->context.iregs[fp_register_] = caller_fp;
229 frame->context.iregs[MD_CONTEXT_ARM_REG_SP] = caller_sp;
230 frame->context.iregs[MD_CONTEXT_ARM_REG_PC] =
232 frame->context.iregs[MD_CONTEXT_ARM_REG_LR] = caller_lr;
233 frame->context_validity = StackFrameARM::CONTEXT_VALID_PC |
237 return frame;
243 BPLOG(ERROR) << "Can't get caller frame without memory or stack";
249 scoped_ptr<StackFrameARM> frame;
251 // See if there is DWARF call frame information covering this address.
255 frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
258 // to frame pointer, if this is configured.
259 if (fp_register_ >= 0 && !frame.get())
260 frame.reset(GetCallerByFramePointer(frames));
263 if (stack_scan_allowed && !frame.get())
264 frame.reset(GetCallerByStackScan(frames));
267 if (!frame.get())
272 if (frame->context.iregs[MD_CONTEXT_ARM_REG_PC] == 0)
278 if (frame->context.iregs[MD_CONTEXT_ARM_REG_SP]
282 // The new frame's context's PC is the return address, which is one
289 // frame->context.iregs[MD_CONTEXT_ARM_REG_PC].
290 frame->instruction = frame->context.iregs[MD_CONTEXT_ARM_REG_PC] - 2;
292 return frame.release();