sigsegv on s390 only giving start address of page in segv handler
On Fri, Mar 11, 2011 at 05:36:25PM +0100, Christoph Egger wrote:
> Hi all!
> Bruno Haible <bruno at clisp.org> writes:
> >> libsigsegv doesn't cope well with s390 at the moment. This is caused
> >> by the fact, that linux masks the address for sigsegv:
> >> mm/fault.c:#define __FAIL_ADDR_MASK 0x7ffff000
> >> So the last 12 bit of information are lost.
> > Thanks for the analysis. Indeed at least the 'sigsegv1' test will fail in this
> > situation.
> > Have you reported the problem to the linux-kernel mailing list, or to the
> > maintainers of the s390 part of Linux?
> >> Forcing libsigsegv to use
> >> POSIX signal handlers othewise makes a library that passes all the tests
> >> apart from the exact fault location.
> > That sounds promising, if the kernel problem was fixed.
> It seems the FAIL_ADDR_MASK is some handling for hardware
The hardware only stores the page address in case of a fault. The rest of
the bits (if defined) in the eight byte value are used for other informations
helping to figure out what sort of fault happened.
> Is there some chance to get near a exact address for
> segfault handlers or will we have to just live with the absence of this
> facility on application level?
You would have to perform instruction decoding to figure out what was the
exact failing address. Not really a thankful job.