1 /* $NetBSD: kern_stub.c,v 1.11 2008/10/15 16:03:29 wrstuden Exp $ */ 2 3 /*- 4 * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. 5 * All rights reserved. 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 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /* 30 * Copyright (c) 1982, 1986, 1991, 1993 31 * The Regents of the University of California. All rights reserved. 32 * 33 * Redistribution and use in source and binary forms, with or without 34 * modification, are permitted provided that the following conditions 35 * are met: 36 * 1. Redistributions of source code must retain the above copyright 37 * notice, this list of conditions and the following disclaimer. 38 * 2. Redistributions in binary form must reproduce the above copyright 39 * notice, this list of conditions and the following disclaimer in the 40 * documentation and/or other materials provided with the distribution. 41 * 3. Neither the name of the University nor the names of its contributors 42 * may be used to endorse or promote products derived from this software 43 * without specific prior written permission. 44 * 45 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 46 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 47 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 48 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 49 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 50 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 51 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 52 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 53 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 54 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 55 * SUCH DAMAGE. 56 * 57 * @(#)subr_xxx.c 8.3 (Berkeley) 3/29/95 58 */ 59 60 /* 61 * Stubs for system calls and facilities not included in the system. 62 */ 63 64 #include <sys/cdefs.h> 65 __KERNEL_RCSID(0, "$NetBSD: kern_stub.c,v 1.11 2008/10/15 16:03:29 wrstuden Exp $"); 66 67 #include "opt_ptrace.h" 68 #include "opt_ktrace.h" 69 #include "opt_sa.h" 70 71 #include <sys/param.h> 72 #include <sys/kernel.h> 73 #include <sys/proc.h> 74 #include <sys/signalvar.h> 75 #include <sys/syscallargs.h> 76 #include <sys/ktrace.h> 77 #include <sys/intr.h> 78 #include <sys/cpu.h> 79 80 /* 81 * Nonexistent system call-- signal process (may want to handle it). Flag 82 * error in case process won't see signal immediately (blocked or ignored). 83 */ 84 #ifndef PTRACE 85 __weak_alias(sys_ptrace,sys_nosys); 86 #endif /* PTRACE */ 87 88 /* 89 * ktrace stubs. ktruser() goes to enosys as we want to fail the syscall, 90 * but not kill the process: utrace() is a debugging feature. 91 */ 92 #ifndef KTRACE 93 __weak_alias(ktr_csw,nullop); /* Probes */ 94 __weak_alias(ktr_emul,nullop); 95 __weak_alias(ktr_geniov,nullop); 96 __weak_alias(ktr_genio,nullop); 97 __weak_alias(ktr_mibio,nullop); 98 __weak_alias(ktr_namei,nullop); 99 __weak_alias(ktr_namei2,nullop); 100 __weak_alias(ktr_psig,nullop); 101 __weak_alias(ktr_saupcall,nullop); 102 __weak_alias(ktr_syscall,nullop); 103 __weak_alias(ktr_sysret,nullop); 104 __weak_alias(ktr_kuser,nullop); 105 __weak_alias(ktr_mmsg,nullop); 106 __weak_alias(ktr_mib,nullop); 107 __weak_alias(ktr_mool,nullop); 108 __weak_alias(ktr_execarg,nullop); 109 __weak_alias(ktr_execenv,nullop); 110 111 __weak_alias(sys_fktrace,sys_nosys); /* Syscalls */ 112 __weak_alias(sys_ktrace,sys_nosys); 113 __weak_alias(sys_utrace,sys_nosys); 114 115 int ktrace_on; /* Misc */ 116 __weak_alias(ktruser,enosys); 117 __weak_alias(ktr_point,nullop); 118 #endif /* KTRACE */ 119 120 /* 121 * Scheduler activations system calls. These need to remain, even when 122 * KERN_SA isn't defined, until libc's major version is bumped. 123 */ 124 #if !defined(KERN_SA) 125 __strong_alias(sys_sa_register,sys_nosys); 126 __strong_alias(sys_sa_stacks,sys_nosys); 127 __strong_alias(sys_sa_enable,sys_nosys); 128 __strong_alias(sys_sa_setconcurrency,sys_nosys); 129 __strong_alias(sys_sa_yield,sys_nosys); 130 __strong_alias(sys_sa_preempt,sys_nosys); 131 __strong_alias(sys_sa_unblockyield,sys_nosys); 132 #endif 133 134 /* 135 * Stubs for architectures that do not support kernel preemption. 136 */ 137 #ifndef __HAVE_PREEMPTION 138 bool 139 cpu_kpreempt_enter(uintptr_t where, int s) 140 { 141 142 return false; 143 } 144 145 void 146 cpu_kpreempt_exit(uintptr_t where) 147 { 148 149 } 150 151 bool 152 cpu_kpreempt_disabled(void) 153 { 154 155 return true; 156 } 157 #else 158 # ifndef MULTIPROCESSOR 159 # error __HAVE_PREEMPTION requires MULTIPROCESSOR 160 # endif 161 #endif /* !__HAVE_PREEMPTION */ 162 163 /* ARGSUSED */ 164 int 165 sys_nosys(struct lwp *l, const void *v, register_t *retval) 166 { 167 168 mutex_enter(proc_lock); 169 psignal(l->l_proc, SIGSYS); 170 mutex_exit(proc_lock); 171 return ENOSYS; 172 } 173 174 /* 175 * Unsupported device function (e.g. writing to read-only device). 176 */ 177 int 178 enodev(void) 179 { 180 181 return (ENODEV); 182 } 183 184 /* 185 * Unconfigured device function; driver not configured. 186 */ 187 int 188 enxio(void) 189 { 190 191 return (ENXIO); 192 } 193 194 /* 195 * Unsupported ioctl function. 196 */ 197 int 198 enoioctl(void) 199 { 200 201 return (ENOTTY); 202 } 203 204 /* 205 * Unsupported system function. 206 * This is used for an otherwise-reasonable operation 207 * that is not supported by the current system binary. 208 */ 209 int 210 enosys(void) 211 { 212 213 return (ENOSYS); 214 } 215 216 /* 217 * Return error for operation not supported 218 * on a specific object or file type. 219 */ 220 int 221 eopnotsupp(void) 222 { 223 224 return (EOPNOTSUPP); 225 } 226 227 /* 228 * Generic null operation, always returns success. 229 */ 230 /*ARGSUSED*/ 231 int 232 nullop(void *v) 233 { 234 235 return (0); 236 } 237