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

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
> limitation?

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.

Reply to: