Lines Matching refs:info

208 static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size)  in unwind_special()  argument
214 struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); in unwind_special()
216 info->prev_sp = regs->gr[30]; in unwind_special()
217 info->prev_ip = regs->iaoq[0]; in unwind_special()
225 static void unwind_frame_regs(struct unwind_frame_info *info) in unwind_frame_regs() argument
233 e = find_unwind_entry(info->ip); in unwind_frame_regs()
237 dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip); in unwind_frame_regs()
245 kallsyms_lookup(info->ip, NULL, NULL, &modname, in unwind_frame_regs()
248 dbg("info->ip = 0x%lx, name = %s\n", info->ip, symname); in unwind_frame_regs()
251 info->prev_sp = info->sp - CALLEE_SAVE_FRAME_SIZE; in unwind_frame_regs()
252 info->prev_ip = *(unsigned long *)(info->prev_sp - RP_OFFSET); in unwind_frame_regs()
255 info->ip, info->prev_sp, in unwind_frame_regs()
256 info->prev_ip); in unwind_frame_regs()
260 info->prev_ip = info->prev_sp = 0; in unwind_frame_regs()
273 sp = info->sp & ~63; in unwind_frame_regs()
277 info->prev_sp = sp - 64; in unwind_frame_regs()
278 info->prev_ip = 0; in unwind_frame_regs()
279 if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET))) in unwind_frame_regs()
281 info->prev_ip = tmp; in unwind_frame_regs()
282 sp = info->prev_sp; in unwind_frame_regs()
283 } while (!kernel_text_address(info->prev_ip)); in unwind_frame_regs()
285 info->rp = 0; in unwind_frame_regs()
288 "prev_sp=%lx prev_ip=%lx\n", info->ip, in unwind_frame_regs()
289 info->prev_sp, info->prev_ip); in unwind_frame_regs()
301 npc < info->ip; in unwind_frame_regs()
312 "%lx, frame_size = %ld\n", info->ip, in unwind_frame_regs()
319 "%lx, frame_size = %ld\n", info->ip, in unwind_frame_regs()
326 "-20(sp) @ %lx\n", info->ip, npc); in unwind_frame_regs()
332 "-16(sp) @ %lx\n", info->ip, npc); in unwind_frame_regs()
336 if (!unwind_special(info, e->region_start, frame_size)) { in unwind_frame_regs()
337 info->prev_sp = info->sp - frame_size; in unwind_frame_regs()
339 info->rp = info->r31; in unwind_frame_regs()
341 info->rp = *(unsigned long *)(info->prev_sp - rpoffset); in unwind_frame_regs()
342 info->prev_ip = info->rp; in unwind_frame_regs()
343 info->rp = 0; in unwind_frame_regs()
347 "prev_ip=%lx npc=%lx\n", info->ip, info->prev_sp, in unwind_frame_regs()
348 info->prev_ip, npc); in unwind_frame_regs()
352 void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, in unwind_frame_init() argument
355 memset(info, 0, sizeof(struct unwind_frame_info)); in unwind_frame_init()
356 info->t = t; in unwind_frame_init()
357 info->sp = regs->gr[30]; in unwind_frame_init()
358 info->ip = regs->iaoq[0]; in unwind_frame_init()
359 info->rp = regs->gr[2]; in unwind_frame_init()
360 info->r31 = regs->gr[31]; in unwind_frame_init()
363 t ? (int)t->pid : -1, info->sp, info->ip); in unwind_frame_init()
366 void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t) in unwind_frame_init_from_blocked_task() argument
377 unwind_frame_init(info, t, r2); in unwind_frame_init_from_blocked_task()
381 void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *regs) in unwind_frame_init_running() argument
383 unwind_frame_init(info, current, regs); in unwind_frame_init_running()
406 int unwind_to_user(struct unwind_frame_info *info) in unwind_to_user() argument
411 ret = unwind_once(info); in unwind_to_user()
412 } while (!ret && !(info->ip & 3)); in unwind_to_user()
419 struct unwind_frame_info info; in return_address() local
429 unwind_frame_init(&info, current, &r); in return_address()
434 if (unwind_once(&info) < 0 || info.ip == 0) in return_address()
436 if (!kernel_text_address(info.ip)) in return_address()
438 } while (info.ip && level--); in return_address()
440 return info.ip; in return_address()