00001 #ifndef _SIGCONTEXT_H 00002 #define _SIGCONTEXT_H 00003 00004 /* The sigcontext structure is used by the sigreturn(2) system call. 00005 * sigreturn() is seldom called by user programs, but it is used internally 00006 * by the signal catching mechanism. 00007 */ 00008 00009 #ifndef _ANSI_H 00010 #include <ansi.h> 00011 #endif 00012 00013 #ifndef _MINIX_SYS_CONFIG_H 00014 #include <minix/sys_config.h> 00015 #endif 00016 00017 #if !defined(_MINIX_CHIP) 00018 #include "error, configuration is not known" 00019 #endif 00020 00021 /* The following structure should match the stackframe_s structure used 00022 * by the kernel's context switching code. Floating point registers should 00023 * be added in a different struct. 00024 */ 00025 #if (_MINIX_CHIP == _CHIP_INTEL) 00026 #include <sys/stackframe.h> 00027 #include <sys/fpu.h> 00028 00029 typedef struct stackframe_s sigregs; 00030 struct sigframe { /* stack frame created for signalled process */ 00031 _PROTOTYPE( void (*sf_retadr), (void) ); 00032 int sf_signo; 00033 int sf_code; 00034 struct sigcontext *sf_scp; 00035 int sf_fp; 00036 _PROTOTYPE( void (*sf_retadr2), (void) ); 00037 struct sigcontext *sf_scpcopy; 00038 }; 00039 00040 #else 00041 #include "error, _MINIX_CHIP is not supported" 00042 #endif /* _MINIX_CHIP == _CHIP_INTEL */ 00043 00044 struct sigcontext { 00045 int sc_flags; /* sigstack state to restore (including 00046 * MF_FPU_INITIALIZED) 00047 */ 00048 long sc_mask; /* signal mask to restore */ 00049 sigregs sc_regs; /* register set to restore */ 00050 #if (_MINIX_CHIP == _CHIP_INTEL) 00051 union fpu_state_u sc_fpu_state; 00052 #endif 00053 }; 00054 00055 #if (_MINIX_CHIP == _CHIP_INTEL) 00056 #if _WORD_SIZE == 4 00057 #define sc_gs sc_regs.gs 00058 #define sc_fs sc_regs.fs 00059 #endif /* _WORD_SIZE == 4 */ 00060 #define sc_es sc_regs.es 00061 #define sc_ds sc_regs.ds 00062 #define sc_di sc_regs.di 00063 #define sc_si sc_regs.si 00064 #define sc_fp sc_regs.bp 00065 #define sc_st sc_regs.st /* stack top -- used in kernel */ 00066 #define sc_bx sc_regs.bx 00067 #define sc_dx sc_regs.dx 00068 #define sc_cx sc_regs.cx 00069 #define sc_retreg sc_regs.retreg 00070 #define sc_retadr sc_regs.retadr /* return address to caller of 00071 save -- used in kernel */ 00072 #define sc_pc sc_regs.pc 00073 #define sc_cs sc_regs.cs 00074 #define sc_psw sc_regs.psw 00075 #define sc_sp sc_regs.sp 00076 #define sc_ss sc_regs.ss 00077 #endif /* _MINIX_CHIP == _CHIP_INTEL */ 00078 00079 _PROTOTYPE( int sigreturn, (struct sigcontext *_scp) ); 00080 00081 #endif /* _SIGCONTEXT_H */
1.5.8