xref: /dragonfly/sys/sys/sysmsg.h (revision 2b57e6df)
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 #ifndef _SYS_SYSPROTO_H_
16 #include <sys/sysproto.h>
17 #endif
18 #ifndef _SYS_SYSUNION_H_
19 #include <sys/sysunion.h>
20 #endif
21 
22 /*
23  * The sysmsg holds the kernelland version of a system call's arguments
24  * and return value.  It typically preceeds the syscall arguments in sysunion
25  * (see sys/sysunion.h).
26  *
27  * WARNING: fds must be long so it translates to two 64 bit registers
28  * on 64 bit architectures.
29  */
30 union sysunion;
31 
32 struct sysmsg {
33 	union {
34 	    void    *resultp;		/* misc pointer data or result */
35 	    int     result;		/* DEPRECATED - AUDIT -> iresult */
36 	    int     iresult;		/* standard 'int'eger result */
37 	    long    lresult;		/* long result */
38 	    size_t  szresult;		/* size_t result */
39 	    long    fds[2];		/* double result */
40 	    __int32_t result32;		/* 32 bit result */
41 	    __int64_t result64;		/* 64 bit result */
42 	    __off_t offset;		/* off_t result */
43 	    register_t reg;
44 	} sm_result;
45 	struct trapframe *sm_frame;	/* trapframe - saved user context */
46 	union sysunion extargs;		/* if more than 6 args */
47 } __packed;
48 
49 struct lwp;
50 union sysunion;
51 
52 #endif
53 
54 #ifdef _KERNEL
55 #define sysmsg_result	sm_result.result
56 #define sysmsg_iresult	sm_result.iresult
57 #define sysmsg_lresult	sm_result.lresult
58 #define sysmsg_szresult	sm_result.szresult
59 #define sysmsg_resultp	sm_result.resultp
60 #define sysmsg_fds	sm_result.fds
61 #define sysmsg_offset	sm_result.offset
62 #define sysmsg_result32	sm_result.result32
63 #define sysmsg_result64	sm_result.result64
64 #define sysmsg_reg	sm_result.reg
65 #define sysmsg_frame	sm_frame
66 #endif
67 
68 #endif
69 
70