xref: /dragonfly/sys/sys/sysmsg.h (revision d4ef6694)
1 /*
2  * SYS/SYSMSG.H
3  *
4  * $DragonFly: src/sys/sys/sysmsg.h,v 1.12 2008/08/25 23:35:47 dillon Exp $
5  */
6 
7 #ifndef _SYS_SYSMSG_H_
8 #define _SYS_SYSMSG_H_
9 
10 #ifdef _KERNEL
11 
12 #ifndef _SYS_TYPES_H_
13 #include <sys/types.h>
14 #endif
15 
16 /*
17  * The sysmsg holds the kernelland version of a system call's arguments
18  * and return value.  It typically preceeds the syscall arguments in sysunion
19  * (see sys/sysunion.h).
20  *
21  * WARNING: fds must be long so it translates to two 64 bit registers
22  * on 64 bit architectures.
23  */
24 union sysunion;
25 
26 struct sysmsg {
27 	union {
28 	    void    *resultp;		/* misc pointer data or result */
29 	    int     result;		/* DEPRECATED - AUDIT -> iresult */
30 	    int     iresult;		/* standard 'int'eger result */
31 	    long    lresult;		/* long result */
32 	    size_t  szresult;		/* size_t result */
33 	    long    fds[2];		/* double result */
34 	    __int32_t result32;		/* 32 bit result */
35 	    __int64_t result64;		/* 64 bit result */
36 	    __off_t offset;		/* off_t result */
37 	    register_t reg;
38 	} sm_result;
39 	struct trapframe *sm_frame;	 /* trapframe - saved user context */
40 	void *sm_unused;
41 };
42 
43 struct lwp;
44 union sysunion;
45 
46 #endif
47 
48 #ifdef _KERNEL
49 #define sysmsg_result	sysmsg.sm_result.result
50 #define sysmsg_iresult	sysmsg.sm_result.iresult
51 #define sysmsg_lresult	sysmsg.sm_result.lresult
52 #define sysmsg_szresult	sysmsg.sm_result.szresult
53 #define sysmsg_resultp	sysmsg.sm_result.resultp
54 #define sysmsg_fds	sysmsg.sm_result.fds
55 #define sysmsg_offset	sysmsg.sm_result.offset
56 #define sysmsg_result32	sysmsg.sm_result.result32
57 #define sysmsg_result64	sysmsg.sm_result.result64
58 #define sysmsg_reg	sysmsg.sm_result.reg
59 #define sysmsg_frame	sysmsg.sm_frame
60 #endif
61 
62 #endif
63 
64