linux-mips
[Top] [All Lists]

Re: Cannot unwind through MIPS signal frames with ICACHE_REFILLS_WORKARO

To: David Daney <ddaney@avtrex.com>
Subject: Re: Cannot unwind through MIPS signal frames with ICACHE_REFILLS_WORKAROUND_WAR
From: Andrew Haley <aph-gcc@littlepinkcloud.COM>
Date: Tue, 13 Nov 2007 11:48:53 +0000
Cc: linux-mips@linux-mips.org, Richard Sandiford <rsandifo@nildram.co.uk>, gcc@gcc.gnu.org
In-reply-to: <473957B6.3030202@avtrex.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <473957B6.3030202@avtrex.com>
Sender: linux-mips-bounce@linux-mips.org
David Daney writes:
 > With the current kernel (2.6.23.1) in my R5000 based O2 it seems 
 > impossible for GCC's exception unwinding machinery to unwind through 
 > signal frames.  The cause of the problems is the 
 > ICACHE_REFILLS_WORKAROUND_WAR which puts the sigcontext at an almost 
 > impossible to determine offset from the signal return trampoline.  The 
 > unwinder depends on being able to find the sigcontext given a known 
 > location of the trampoline.
 > 
 > It seems there are a couple of possible solutions:
 > 
 > 1) The comments in war.h indicate the problem only exists in R7000
 > and E9000 processors.  We could turn off the workaround if the
 > kernel is configured for R5000.  That would help me, but not those
 > with the effected systems.
 > 
 > 2) In the non-workaround case, the siginfo immediately follows the
 > trampoline and the first member is the signal number.  For the
 > workaround case the first word following the trampoline is zero.
 > We could replace this with the offset to the sigcontext which is
 > always a small negative value.  The unwinder could then distinguish
 > the two cases (signal numbers are positive and the offset
 > negative).  If we did this, the change would have to be coordinated
 > with GCC's unwinder (in libgcc_s.so.1).
 > 
 > Thoughts?

The best solution is to put the unwinder info in the kernel.  Does
MIPS use a vDSO ?

Andrew.

<Prev in Thread] Current Thread [Next in Thread>