libunwind-devel
[Top][All Lists]
Advanced

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

Re: [Libunwind-devel] non-local return scalability bottleneck


From: Arun Sharma
Subject: Re: [Libunwind-devel] non-local return scalability bottleneck
Date: Sun, 6 Dec 2015 11:03:08 -0800

On Thu, Dec 3, 2015 at 9:28 AM, D'Alessandro, Luke K
<address@hidden> wrote:

> HIDDEN int
> dwarf_make_proc_info (struct dwarf_cursor *c)
> {
> #if 0
>     if (c->as->caching_policy == UNW_CACHE_NONE
>         || get_cached_proc_info (c) < 0)
> #endif
>         /* Lookup it up the slow way... */
>         return fetch_proc_info (c, c->ip, 0);
>     return 0;
> }
> ```
>
> So the question becomes, what is standing in the way of a “ 
> get_cached_proc_info” implementation? Is it just a "TODO/patches welcome” or 
> is there something fundamentally difficult going on here?

That code has been around since at least 2004, before my time with
libunwind. It didn't show up in the common use case of unwinding the
stack without a non-local return.

Suspect the comment below is relevant. Perhaps try removing it and see
what happens?

 -Arun

HIDDEN inline int
x86_64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
{
  [..]
  /* Ensure c->pi is up-to-date.  On x86-64, it's relatively common to
     be missing DWARF unwind info.  We don't want to fail in that
     case, because the frame-chain still would let us do a backtrace
     at least.  */
  dwarf_make_proc_info (&c->dwarf);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]