Re: [PATCH] dump_stack() based on prologue code analysis

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



one more comment,

2006/7/27, Franck Bui-Huu <vagabon.xyz@xxxxxxxxx>:
Hi Atsushi ;)

Atsushi Nemoto wrote:
> +unsigned long unwind_stack(struct task_struct *task,
> +                        unsigned long **sp, unsigned long pc)
> +{
> +     unsigned long stack_page;
> +     struct mips_frame_info info;
> +     char *modname;
> +     char namebuf[KSYM_NAME_LEN + 1];
> +     unsigned long size, ofs;
> +
> +     stack_page = (unsigned long)task_stack_page(task);
> +     if (!stack_page)
> +             return 0;
> +
> +     if (!kallsyms_lookup(pc, &size, &ofs, &modname, namebuf))
> +             return 0;
> +     if (ofs == 0)
> +             return 0;
> +
> +     info.func = (void *)(pc - ofs);
> +     info.func_size = ofs;   /* analyze from start to ofs */

in get_frame_info(), there is the following condition to stop the
prologue analysis

		if (info->func_size && i >= info->func_size / 4)
			break;

Setting info.func_size = ofs may trigger this stop condition very
early, specially if "ofs" is small...I would simply remove this
condition since it's very empirical and IMHO not very usefull.

> +     get_frame_info(&info);
> +     if (info.pc_offset < 0 || !info.frame_size) {
> +             /* leaf? */

for leaf case, can't we simply do this test:

        if (info.pc_offset < 0) {

--
              Franck


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux