• Paul Burton's avatar
    MIPS: Add definitions for extended context · f1fe2d21
    Paul Burton authored
    The context introduced by MSA needs to be saved around signals. However,
    we can't increase the size of struct sigcontext because that will change
    the offset of the signal mask in struct sigframe or struct ucontext.
    This patch instead places the new context immediately after the struct
    sigframe for traditional signals, or similarly after struct ucontext for
    RT signals. The layout of struct sigframe & struct ucontext is identical
    from their sigcontext fields onwards, so the offset from the sigcontext
    to the extended context will always be the same regardless of the type
    of signal.
    
    Userland will be able to search through the extended context by using
    the magic values to detect which types of context are present. Any
    unrecognised context can be skipped over using the size field of struct
    extcontext. Once the magic value END_EXTCONTEXT_MAGIC is seen it is
    known that there are no further extended context structures to examine.
    
    This approach is somewhat similar to that taken by ARM to save VFP &
    other context at the end of struct ucontext.
    
    Userland can determine whether extended context is present by checking
    for the USED_EXTCONTEXT bit in the sc_used_math field of struct
    sigcontext. Whilst this could potentially change the historic semantics
    of sc_used_math if further extended context which does not imply FP
    context were to be introduced in the future, I have been unable to find
    any userland code making use of sc_used_math at all. Using one of the
    fields described as unused in struct sigcontext was considered, but the
    kernel does not already write to those fields so there would be no
    guarantee of the field being clear on older kernels. Other alternatives
    would be to have userland check the kernel version, or to have a HWCAP
    bit indicating presence of extended context. However there is a desire
    to have the context & information required to decode it be self
    contained such that, for example, debuggers could decode the saved
    context easily.
    
    [ralf@linux-mips.org: Fixed conflict.]
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Cc: Guenter Roeck <linux@roeck-us.net>
    Cc: Matthew Fortune <matthew.fortune@imgtec.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
    Cc: Alex Smith <alex@alex-smith.me.uk>
    Cc: linux-kernel@vger.kernel.org
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Markos Chandras <markos.chandras@imgtec.com>
    Cc: Daniel Borkmann <dborkman@redhat.com>
    Cc: Maciej W. Rozycki <macro@codesourcery.com>
    Patchwork: https://patchwork.linux-mips.org/patch/10795/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    f1fe2d21
ucontext.h 2.09 KB