linux/arch/x86/include/asm/sigframe.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_X86_SIGFRAME_H
   3#define _ASM_X86_SIGFRAME_H
   4
   5#include <uapi/asm/sigcontext.h>
   6#include <asm/siginfo.h>
   7#include <asm/ucontext.h>
   8#include <linux/compat.h>
   9
  10#ifdef CONFIG_X86_32
  11#define sigframe_ia32           sigframe
  12#define rt_sigframe_ia32        rt_sigframe
  13#define ucontext_ia32           ucontext
  14#else /* !CONFIG_X86_32 */
  15
  16#ifdef CONFIG_IA32_EMULATION
  17#include <asm/ia32.h>
  18#endif /* CONFIG_IA32_EMULATION */
  19
  20#endif /* CONFIG_X86_32 */
  21
  22#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
  23struct sigframe_ia32 {
  24        u32 pretcode;
  25        int sig;
  26        struct sigcontext_32 sc;
  27        /*
  28         * fpstate is unused. fpstate is moved/allocated after
  29         * retcode[] below. This movement allows to have the FP state and the
  30         * future state extensions (xsave) stay together.
  31         * And at the same time retaining the unused fpstate, prevents changing
  32         * the offset of extramask[] in the sigframe and thus prevent any
  33         * legacy application accessing/modifying it.
  34         */
  35        struct _fpstate_32 fpstate_unused;
  36        unsigned int extramask[1];
  37        char retcode[8];
  38        /* fp state follows here */
  39};
  40
  41struct rt_sigframe_ia32 {
  42        u32 pretcode;
  43        int sig;
  44        u32 pinfo;
  45        u32 puc;
  46#ifdef CONFIG_IA32_EMULATION
  47        compat_siginfo_t info;
  48#else /* !CONFIG_IA32_EMULATION */
  49        struct siginfo info;
  50#endif /* CONFIG_IA32_EMULATION */
  51        struct ucontext_ia32 uc;
  52        char retcode[8];
  53        /* fp state follows here */
  54};
  55#endif /* defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION) */
  56
  57#ifdef CONFIG_X86_64
  58
  59struct rt_sigframe {
  60        char __user *pretcode;
  61        struct ucontext uc;
  62        struct siginfo info;
  63        /* fp state follows here */
  64};
  65
  66#ifdef CONFIG_X86_X32_ABI
  67
  68struct ucontext_x32 {
  69        unsigned int      uc_flags;
  70        unsigned int      uc_link;
  71        compat_stack_t    uc_stack;
  72        unsigned int      uc__pad0;     /* needed for alignment */
  73        struct sigcontext uc_mcontext;  /* the 64-bit sigcontext type */
  74        compat_sigset_t   uc_sigmask;   /* mask last for extensibility */
  75};
  76
  77struct rt_sigframe_x32 {
  78        u64 pretcode;
  79        struct ucontext_x32 uc;
  80        compat_siginfo_t info;
  81        /* fp state follows here */
  82};
  83
  84#endif /* CONFIG_X86_X32_ABI */
  85
  86#endif /* CONFIG_X86_64 */
  87
  88#endif /* _ASM_X86_SIGFRAME_H */
  89