Lines Matching refs:info

180 /* Called from setup_arch to import the kernel unwind info */
215 static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size)
233 struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN);
235 info->prev_sp = regs->gr[30];
236 info->prev_ip = regs->iaoq[0];
242 info->prev_sp = info->prev_ip = 0;
250 regs = (struct pt_regs *)(info->sp - PT_SZ_ALGN);
251 info->prev_sp = regs->gr[30];
252 info->prev_ip = regs->iaoq[0];
253 info->rp = regs->gr[2];
259 info->prev_sp = info->sp - CALLEE_SAVE_FRAME_SIZE;
260 info->prev_ip = *(unsigned long *)(info->prev_sp - RP_OFFSET);
266 info->prev_sp = *(unsigned long *)(info->sp - FRAME_SIZE - REG_SZ);
267 info->prev_ip = *(unsigned long *)(info->sp - FRAME_SIZE - RP_OFFSET);
274 static void unwind_frame_regs(struct unwind_frame_info *info)
282 e = find_unwind_entry(info->ip);
287 (void *) info->ip);
296 sp = info->sp & ~63;
300 info->prev_sp = sp - 64;
301 info->prev_ip = 0;
304 if ((info->prev_sp - (unsigned long) task_stack_page(info->t))
306 info->prev_sp = 0;
311 (void *)info->prev_sp - RP_OFFSET, sizeof(tmp)))
313 info->prev_ip = tmp;
314 sp = info->prev_sp;
315 } while (!kernel_text_address(info->prev_ip));
317 info->rp = 0;
319 dbg("analyzing func @ %lx with no unwind info, setting "
320 "prev_sp=%lx prev_ip=%lx\n", info->ip,
321 info->prev_sp, info->prev_ip);
333 npc < info->ip;
343 "%lx, frame_size = %ld\n", info->ip,
349 "%lx, frame_size = %ld\n", info->ip,
356 "-20(sp) @ %lx\n", info->ip, npc);
362 "-16(sp) @ %lx\n", info->ip, npc);
369 if (!unwind_special(info, e->region_start, frame_size)) {
370 info->prev_sp = info->sp - frame_size;
372 info->rp = info->r31;
374 info->rp = *(unsigned long *)(info->prev_sp - rpoffset);
375 info->prev_ip = info->rp;
376 info->rp = 0;
380 "prev_ip=%lx npc=%lx\n", info->ip, info->prev_sp,
381 info->prev_ip, npc);
385 void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t,
388 memset(info, 0, sizeof(struct unwind_frame_info));
389 info->t = t;
390 info->sp = regs->gr[30];
391 info->ip = regs->iaoq[0];
392 info->rp = regs->gr[2];
393 info->r31 = regs->gr[31];
396 t ? (int)t->pid : -1, info->sp, info->ip);
399 void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t)
410 unwind_frame_init(info, t, r2);
420 void unwind_frame_init_task(struct unwind_frame_info *info,
435 unwind_frame_init(info, task, regs);
437 unwind_frame_init_from_blocked_task(info, task);
461 int unwind_to_user(struct unwind_frame_info *info)
466 ret = unwind_once(info);
467 } while (!ret && !(info->ip & 3));
474 struct unwind_frame_info info;
476 /* initialize unwind info */
477 unwind_frame_init_task(&info, current, NULL);
482 if (unwind_once(&info) < 0 || info.ip == 0)
484 if (!kernel_text_address(info.ip))
486 } while (info.ip && level--);
488 return info.ip;