Lines Matching refs:info

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