[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);