mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-12-23 03:53:43 +01:00
Fix merge conflict.
2004/12/02 23:51:00-08:00 hp.com!davidm (do_backtrace): Also print the symbol offset. Increase nesting-level tolerance to 64 so we can test programs with deeply nested call-chains without triggering spurious warnings. 2004/11/30 22:44:47-08:00 mostang.com!davidm (do_backtrace): Print IP if unw_get_proc_info() fails. 2004/11/23 18:01:09-08:00 mostang.com!davidm (do_backtrace): Fix "start_ip might be used uninitialized" warning. (Logical change 1.290)
This commit is contained in:
parent
e02ef902df
commit
95c9a4a21e
1 changed files with 17 additions and 6 deletions
|
@ -68,11 +68,12 @@ static struct UPT_info *ui;
|
||||||
void
|
void
|
||||||
do_backtrace (pid_t target_pid)
|
do_backtrace (pid_t target_pid)
|
||||||
{
|
{
|
||||||
|
unw_word_t ip, sp, start_ip = 0, off;
|
||||||
int n = 0, ret;
|
int n = 0, ret;
|
||||||
unw_proc_info_t pi;
|
unw_proc_info_t pi;
|
||||||
unw_word_t ip, sp, start_ip;
|
|
||||||
unw_cursor_t c;
|
unw_cursor_t c;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
|
size_t len;
|
||||||
|
|
||||||
ret = unw_init_remote (&c, as, ui);
|
ret = unw_init_remote (&c, as, ui);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -89,13 +90,22 @@ do_backtrace (pid_t target_pid)
|
||||||
|
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
if (print_names)
|
if (print_names)
|
||||||
unw_get_proc_name (&c, buf, sizeof (buf), NULL);
|
unw_get_proc_name (&c, buf, sizeof (buf), &off);
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf ("%016lx %-32s (sp=%016lx)\n", (long) ip, buf, (long) sp);
|
{
|
||||||
|
if (off)
|
||||||
|
{
|
||||||
|
len = strlen (buf);
|
||||||
|
if (len >= sizeof (buf) - 32)
|
||||||
|
len = sizeof (buf) - 32;
|
||||||
|
sprintf (buf + len, "+0x%lx", off);
|
||||||
|
}
|
||||||
|
printf ("%016lx %-32s (sp=%016lx)\n", (long) ip, buf, (long) sp);
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = unw_get_proc_info (&c, &pi)) < 0)
|
if ((ret = unw_get_proc_info (&c, &pi)) < 0)
|
||||||
panic ("unw_get_proc_info() failed: ret=%d\n", ret);
|
panic ("unw_get_proc_info(ip=0x%lx) failed: ret=%d\n", (long) ip, ret);
|
||||||
else if (verbose)
|
else if (verbose)
|
||||||
printf ("\tproc=%016lx-%016lx\n\thandler=%lx lsda=%lx",
|
printf ("\tproc=%016lx-%016lx\n\thandler=%lx lsda=%lx",
|
||||||
(long) pi.start_ip, (long) pi.end_ip,
|
(long) pi.start_ip, (long) pi.end_ip,
|
||||||
|
@ -122,10 +132,11 @@ do_backtrace (pid_t target_pid)
|
||||||
ret, (long) ip, (long) start_ip);
|
ret, (long) ip, (long) start_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++n > 32)
|
if (++n > 64)
|
||||||
{
|
{
|
||||||
/* guard against bad unwind info in old libraries... */
|
/* guard against bad unwind info in old libraries... */
|
||||||
panic ("too deeply nested---assuming bogus unwind\n");
|
panic ("too deeply nested---assuming bogus unwind (start ip=%lx)\n",
|
||||||
|
(long) start_ip);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue