1 /* 2 * Copyright (c) 2003-2020 The DragonFly Project. All rights reserved. 3 * 4 * This code is derived from software contributed to The DragonFly Project 5 * by Matthew Dillon <dillon@dragonflybsd.org>. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 3. Neither the name of The DragonFly Project nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific, prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35 #ifndef _SYS_SYSMSG_H_ 36 #define _SYS_SYSMSG_H_ 37 38 #ifdef _KERNEL 39 40 #ifndef _SYS_TYPES_H_ 41 #include <sys/types.h> 42 #endif 43 #ifndef _SYS_SYSPROTO_H_ 44 #include <sys/sysproto.h> 45 #endif 46 #ifndef _SYS_SYSUNION_H_ 47 #include <sys/sysunion.h> 48 #endif 49 50 /* 51 * The sysmsg holds the kernelland version of a system call's arguments 52 * and return value. It typically preceeds the syscall arguments in sysunion 53 * (see sys/sysunion.h). 54 * 55 * WARNING: fds must be long so it translates to two 64 bit registers 56 * on 64 bit architectures. 57 */ 58 union sysunion; 59 60 struct sysmsg { 61 union { 62 void *resultp; /* misc pointer data or result */ 63 int result; /* DEPRECATED - AUDIT -> iresult */ 64 int iresult; /* standard 'int'eger result */ 65 long lresult; /* long result */ 66 size_t szresult; /* size_t result */ 67 long fds[2]; /* double result */ 68 __int32_t result32; /* 32 bit result */ 69 __int64_t result64; /* 64 bit result */ 70 __off_t offset; /* off_t result */ 71 register_t reg; 72 } sm_result; 73 struct trapframe *sm_frame; /* trapframe - saved user context */ 74 union sysunion extargs; /* if more than 6 args */ 75 } __packed; 76 77 struct lwp; 78 union sysunion; 79 80 #endif 81 82 #ifdef _KERNEL 83 #define sysmsg_result sm_result.result 84 #define sysmsg_iresult sm_result.iresult 85 #define sysmsg_lresult sm_result.lresult 86 #define sysmsg_szresult sm_result.szresult 87 #define sysmsg_resultp sm_result.resultp 88 #define sysmsg_fds sm_result.fds 89 #define sysmsg_offset sm_result.offset 90 #define sysmsg_result32 sm_result.result32 91 #define sysmsg_result64 sm_result.result64 92 #define sysmsg_reg sm_result.reg 93 #define sysmsg_frame sm_frame 94 #endif 95 96 #endif 97 98