[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libunwind-devel] Eliminating the sigprocmask system call
From: |
David Mosberger-Tang |
Subject: |
Re: [Libunwind-devel] Eliminating the sigprocmask system call |
Date: |
Thu, 5 Jun 2008 10:31:18 -0600 |
On 6/4/08, Arun Sharma <address@hidden> wrote:
> When we were analyzing the performance of stack unwinding (especially
> compared to a much simpler unwinder based on frame pointers), one
> thing that stood out is the cost of the sigprocmask(2) system call
> which is invoked from the getcontext() in libc. It appears to me that
> this is necessary only if the caller wants to unw_resume() at some
> point.
>
> However, for callers who just want to examine the stack, this could
> potentially be eliminated. Currently there is no way for the caller to
> express the intent at unw_getcontext() time. Looking at some of the
> other archs which have a hand coded getcontext.S (ia64, arm etc) - I
> don't see any calls to sigprocmask. Does this mean that
> Ltest-resume-sig is failing on those archs?
I don't know about ARM, but I have never seen Ltest-resume-sig fail on
ia64 and I don't think it should.
> If we must restore signals state on unw_resume(), I was thinking
> something along the lines of:
>
> /* For users who want to unw_resume */
> unw_getcontext(&uc);
>
> /* For users who want to just examine the stack */
> unw_get_mcontext(&uc);
>
> Comments?
I don't particularly like making the API more complicated (and
error-prone to use) for such reasons. Maybe not using the libc
getcontext() would be better?
--david