⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sigcontext.h

📁 一个简单的操作系统minix的核心代码
💻 H
字号:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				include/sys/sigcontext.h	 	 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

02000	#ifndef _SIGCONTEXT_H
02001	#define _SIGCONTEXT_H
02002	
02003	/* The sigcontext structure is used by the sigreturn(2) system call.
02004	 * sigreturn() is seldom called by user programs, but it is used internally
02005	 * by the signal catching mechanism.
02006	 */
02007	
02008	#ifndef _ANSI_H
02009	#include <ansi.h>
02010	#endif
02011	
02012	#ifndef _CONFIG_H
02013	#include <minix/config.h>
02014	#endif
02015	
02016	#if !defined(CHIP)
02017	#include "error, configuration is not known"
02018	#endif
02019	
02020	/* The following structure should match the stackframe_s structure used
02021	 * by the kernel's context switching code.  Floating point registers should
02022	 * be added in a different struct.
02023	 */
02024	#if (CHIP == INTEL)
02025	struct sigregs {  
02026	#if _WORD_SIZE == 4
02027	  short sr_gs;
02028	  short sr_fs;
02029	#endif /* _WORD_SIZE == 4 */
02030	  short sr_es;
02031	  short sr_ds;
02032	  int sr_di;
02033	  int sr_si;
02034	  int sr_bp;
02035	  int sr_st;                    /* stack top -- used in kernel */
02036	  int sr_bx;
02037	  int sr_dx;
02038	  int sr_cx;
02039	  int sr_retreg;
02040	  int sr_retadr;                /* return address to caller of save -- used
02041	                                 * in kernel */
02042	  int sr_pc;
02043	  int sr_cs;
02044	  int sr_psw;
02045	  int sr_sp;
02046	  int sr_ss;
02047	};
02048	
02049	struct sigframe {               /* stack frame created for signalled process */
02050	  _PROTOTYPE( void (*sf_retadr), (void) );
02051	  int sf_signo;
02052	  int sf_code;
02053	  struct sigcontext *sf_scp;
02054	  int sf_fp;
02055	  _PROTOTYPE( void (*sf_retadr2), (void) );
02056	  struct sigcontext *sf_scpcopy;
02057	};
02058	
02059	#else
02060	#if (CHIP == M68000)
02061	struct sigregs {  
02062	  long sr_retreg;                       /* d0 */
02063	  long sr_d1;
02064	  long sr_d2;
02065	  long sr_d3;
02066	  long sr_d4;
02067	  long sr_d5;
02068	  long sr_d6;
02069	  long sr_d7;
02070	  long sr_a0;
02071	  long sr_a1;
02072	  long sr_a2;
02073	  long sr_a3;
02074	  long sr_a4;
02075	  long sr_a5;
02076	  long sr_a6;
02077	  long sr_sp;                   /* also known as a7 */
02078	  long sr_pc;
02079	  short sr_psw;
02080	  short sr_dummy;               /* make size multiple of 4 for system.c */
02081	};
02082	#else
02083	#include "error, CHIP is not supported"
02084	#endif
02085	#endif /* CHIP == INTEL */
02086	
02087	struct sigcontext {
02088	  int sc_flags;                 /* sigstack state to restore */
02089	  long sc_mask;                 /* signal mask to restore */
02090	  struct sigregs sc_regs;       /* register set to restore */
02091	};
02092	
02093	#if (CHIP == INTEL)
02094	#if _WORD_SIZE == 4
02095	#define sc_gs sc_regs.sr_gs
02096	#define sc_fs sc_regs.sr_fs
02097	#endif /* _WORD_SIZE == 4 */
02098	#define sc_es sc_regs.sr_es
02099	#define sc_ds sc_regs.sr_ds
02100	#define sc_di sc_regs.sr_di
02101	#define sc_si sc_regs.sr_si 
02102	#define sc_fp sc_regs.sr_bp
02103	#define sc_st sc_regs.sr_st             /* stack top -- used in kernel */
02104	#define sc_bx sc_regs.sr_bx
02105	#define sc_dx sc_regs.sr_dx
02106	#define sc_cx sc_regs.sr_cx
02107	#define sc_retreg sc_regs.sr_retreg
02108	#define sc_retadr sc_regs.sr_retadr     /* return address to caller of 
02109	                                        save -- used in kernel */
02110	#define sc_pc sc_regs.sr_pc
02111	#define sc_cs sc_regs.sr_cs
02112	#define sc_psw sc_regs.sr_psw
02113	#define sc_sp sc_regs.sr_sp
02114	#define sc_ss sc_regs.sr_ss
02115	#endif /* CHIP == INTEL */
02116	
02117	#if (CHIP == M68000)
02118	#define sc_retreg sc_regs.sr_retreg
02119	#define sc_d1 sc_regs.sr_d1
02120	#define sc_d2 sc_regs.sr_d2
02121	#define sc_d3 sc_regs.sr_d3
02122	#define sc_d4 sc_regs.sr_d4
02123	#define sc_d5 sc_regs.sr_d5
02124	#define sc_d6 sc_regs.sr_d6
02125	#define sc_d7 sc_regs.sr_d7
02126	#define sc_a0 sc_regs.sr_a0
02127	#define sc_a1 sc_regs.sr_a1
02128	#define sc_a2 sc_regs.sr_a2
02129	#define sc_a3 sc_regs.sr_a3
02130	#define sc_a4 sc_regs.sr_a4
02131	#define sc_a5 sc_regs.sr_a5
02132	#define sc_fp sc_regs.sr_a6
02133	#define sc_sp sc_regs.sr_sp
02134	#define sc_pc sc_regs.sr_pc
02135	#define sc_psw sc_regs.sr_psw
02136	#endif /* CHIP == M68000 */
02137	
02138	/* Values for sc_flags.  Must agree with <minix/jmp_buf.h>. */
02139	#define SC_SIGCONTEXT   2       /* nonzero when signal context is included */
02140	#define SC_NOREGLOCALS  4       /* nonzero when registers are not to be
02141	                                        saved and restored */
02142	
02143	_PROTOTYPE( int sigreturn, (struct sigcontext *_scp)                    );
02144	
02145	#endif /* _SIGCONTEXT_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -