The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/x86/linux/linux_x86_sigframe.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-3-Clause
    3  *
    4  * Copyright (c) 2004 Tim J. Robbins
    5  * Copyright (c) 2001 Doug Rabson
    6  * Copyright (c) 1994-1996 Søren Schmidt
    7  * All rights reserved.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer
   14  *    in this position and unchanged.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. The name of the author may not be used to endorse or promote products
   19  *    derived from this software without specific prior written permission
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   31  *
   32  * $FreeBSD$
   33  */
   34 
   35 #ifndef _X86_LINUX_SIGFRAME_H_
   36 #define _X86_LINUX_SIGFRAME_H_
   37 
   38 #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32))
   39 
   40 /* The Linux sigcontext, pretty much a standard 386 trapframe. */
   41 struct l_sigcontext {
   42         l_uint          sc_gs;
   43         l_uint          sc_fs;
   44         l_uint          sc_es;
   45         l_uint          sc_ds;
   46         l_uint          sc_edi;
   47         l_uint          sc_esi;
   48         l_uint          sc_ebp;
   49         l_uint          sc_esp;
   50         l_uint          sc_ebx;
   51         l_uint          sc_edx;
   52         l_uint          sc_ecx;
   53         l_uint          sc_eax;
   54         l_uint          sc_trapno;
   55         l_uint          sc_err;
   56         l_uint          sc_eip;
   57         l_uint          sc_cs;
   58         l_uint          sc_eflags;
   59         l_uint          sc_esp_at_signal;
   60         l_uint          sc_ss;
   61         l_uint          sc_387;
   62         l_uint          sc_mask;
   63         l_uint          sc_cr2;
   64 };
   65 
   66 struct l_ucontext {
   67         l_ulong         uc_flags;
   68         l_uintptr_t     uc_link;
   69         l_stack_t       uc_stack;
   70         struct l_sigcontext     uc_mcontext;
   71         l_sigset_t      uc_sigmask;
   72 } __packed;
   73 
   74 struct l_fpreg {
   75         u_int16_t       significand[4];
   76         u_int16_t       exponent;
   77 };
   78 
   79 struct l_fpxreg {
   80         u_int16_t       significand[4];
   81         u_int16_t       exponent;
   82         u_int16_t       padding[3];
   83 };
   84 
   85 struct l_xmmreg {
   86         u_int32_t       element[4];
   87 };
   88 
   89 struct l_fpstate {
   90         /* Regular FPU environment */
   91         u_int32_t               cw;
   92         u_int32_t               sw;
   93         u_int32_t               tag;
   94         u_int32_t               ipoff;
   95         u_int32_t               cssel;
   96         u_int32_t               dataoff;
   97         u_int32_t               datasel;
   98         struct l_fpreg          _st[8];
   99         u_int16_t               status;
  100         u_int16_t               magic;          /* 0xffff = regular FPU data */
  101 
  102         /* FXSR FPU environment */
  103         u_int32_t               _fxsr_env[6];   /* env is ignored. */
  104         u_int32_t               mxcsr;
  105         u_int32_t               reserved;
  106         struct l_fpxreg         _fxsr_st[8];    /* reg data is ignored. */
  107         struct l_xmmreg         _xmm[8];
  108         u_int32_t               padding[56];
  109 };
  110 
  111 /*
  112  * We make the stack look like Linux expects it when calling a signal
  113  * handler, but use the BSD way of calling the handler and sigreturn().
  114  */
  115 struct l_sigframe {
  116         l_int                   sf_sig;
  117         struct l_sigcontext     sf_sc;
  118         struct l_fpstate        sf_fpstate;
  119         sigset_t                sf_sigmask;
  120 };
  121 
  122 struct l_rt_sigframe {
  123         l_int                   sf_sig;
  124         l_uintptr_t             sf_siginfo;
  125         l_uintptr_t             sf_ucontext;
  126         l_siginfo_t             sf_si;
  127         struct l_ucontext       sf_uc;
  128 };
  129 
  130 #else
  131 
  132 struct l_fpstate {
  133         u_int16_t cwd;
  134         u_int16_t swd;
  135         u_int16_t twd;
  136         u_int16_t fop;
  137         u_int64_t rip;
  138         u_int64_t rdp;
  139         u_int32_t mxcsr;
  140         u_int32_t mxcsr_mask;
  141         u_int32_t st_space[32];
  142         u_int32_t xmm_space[64];
  143         u_int32_t reserved2[24];
  144 };
  145 
  146 struct l_sigcontext {
  147         l_ulong         sc_r8;
  148         l_ulong         sc_r9;
  149         l_ulong         sc_r10;
  150         l_ulong         sc_r11;
  151         l_ulong         sc_r12;
  152         l_ulong         sc_r13;
  153         l_ulong         sc_r14;
  154         l_ulong         sc_r15;
  155         l_ulong         sc_rdi;
  156         l_ulong         sc_rsi;
  157         l_ulong         sc_rbp;
  158         l_ulong         sc_rbx;
  159         l_ulong         sc_rdx;
  160         l_ulong         sc_rax;
  161         l_ulong         sc_rcx;
  162         l_ulong         sc_rsp;
  163         l_ulong         sc_rip;
  164         l_ulong         sc_rflags;
  165         l_ushort        sc_cs;
  166         l_ushort        sc_gs;
  167         l_ushort        sc_fs;
  168         l_ushort        sc___pad0;
  169         l_ulong         sc_err;
  170         l_ulong         sc_trapno;
  171         l_sigset_t      sc_mask;
  172         l_ulong         sc_cr2;
  173         struct l_fpstate *sc_fpstate;
  174         l_ulong         sc_reserved1[8];
  175 };
  176 
  177 struct l_ucontext {
  178         l_ulong         uc_flags;
  179         l_uintptr_t     uc_link;
  180         l_stack_t       uc_stack;
  181         struct l_sigcontext     uc_mcontext;
  182         l_sigset_t      uc_sigmask;
  183 };
  184 
  185 /*
  186  * We make the stack look like Linux expects it when calling a signal
  187  * handler, but use the BSD way of calling the handler and sigreturn().
  188  */
  189 struct l_rt_sigframe {
  190         struct l_ucontext       sf_uc;
  191         struct l_siginfo        sf_si;
  192 };
  193 
  194 #endif /* __i386__ || (__amd64__ && COMPAT_LINUX32) */
  195 
  196 #endif /* !_X86_LINUX_SIGFRAME_H_ */

Cache object: 92e5ca2c2193a810dba8926b558335cd


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.