1 /*	$NetBSD: sys_linux_component.c,v 1.7 2019/01/27 09:19:37 rin Exp $	*/
2 
3 #include <sys/cdefs.h>
4 __KERNEL_RCSID(0, "$NetBSD: sys_linux_component.c,v 1.7 2019/01/27 09:19:37 rin Exp $");
5 
6 #include <sys/param.h>
7 #include <sys/proc.h>
8 
9 #include <compat/linux/common/linux_errno.h>
10 
11 #include <uvm/uvm_extern.h>
12 
13 #include <rump-sys/kern.h>
14 
15 #include "rump_linux_syscall.h"
16 
17 extern struct sysent rump_linux_sysent[];
18 extern const uint32_t rump_linux_sysent_nomodbits[];
19 
20 #ifdef __HAVE_SYSCALL_INTERN
21 static void
rumplinux_syscall_intern(struct proc * p)22 rumplinux_syscall_intern(struct proc *p)
23 {
24 
25 	p->p_emuldata = __UNCONST(native_to_linux_errno);
26 }
27 #endif
28 
29 struct emul emul_rump_sys_linux = {
30 	.e_name = "linux-rump",
31 	.e_sysent = rump_linux_sysent,
32 	.e_nomodbits = rump_linux_sysent_nomodbits,
33 #ifndef __HAVE_MINIMAL_EMUL
34 	.e_nsysent = RUMP_LINUX_SYS_NSYSENT,
35 	.e_errno = native_to_linux_errno,
36 #endif
37 	.e_vm_default_addr = uvm_default_mapaddr,
38 #ifdef __HAVE_SYSCALL_INTERN
39 	.e_syscall_intern = rumplinux_syscall_intern,
40 #endif
41 };
42 
RUMP_COMPONENT(RUMP_COMPONENT_KERN)43 RUMP_COMPONENT(RUMP_COMPONENT_KERN)
44 {
45 	extern struct emul *emul_default;
46 
47 	emul_default = &emul_rump_sys_linux;
48 }
49 
50 #include <compat/linux/common/linux_machdep.h>
51 
52 dev_t
linux_fakedev(dev_t in,int raw)53 linux_fakedev(dev_t in, int raw)
54 {
55 
56 	/* I don't really think it matters what we return here */
57 	return in;
58 }
59 
60 /*
61  * XXX: the linux emulation code is not split into factions
62  */
63 void rumplinux__stub(void);
rumplinux__stub(void)64 void rumplinux__stub(void) {panic("unavailable");}
65 
66 /* vm-related */
67 __weak_alias(sys_mmap,rumplinux__stub);
68 __weak_alias(vm_map_unlock,rumplinux__stub);
69 __weak_alias(uvm_map_lookup_entry,rumplinux__stub);
70 __weak_alias(sys_obreak,rumplinux__stub);
71 __weak_alias(vm_map_lock,rumplinux__stub);
72 __weak_alias(uvm_mremap,rumplinux__stub);
73 
74 /* signal.c */
75 __weak_alias(sigaction1,rumplinux__stub);
76 __weak_alias(kpsignal2,rumplinux__stub);
77 __weak_alias(sys_kill,rumplinux__stub);
78 __weak_alias(sigsuspend1,rumplinux__stub);
79 __weak_alias(sigtimedwait1,rumplinux__stub);
80 __weak_alias(lwp_find,rumplinux__stub);
81 
82 /* misc */
83 __weak_alias(linux_machdepioctl,rumplinux__stub);
84 __weak_alias(linux_ioctl_sg,rumplinux__stub);
85 __weak_alias(oss_ioctl_mixer,rumplinux__stub);
86 __weak_alias(oss_ioctl_sequencer,rumplinux__stub);
87 __weak_alias(oss_ioctl_audio,rumplinux__stub);
88 __weak_alias(rusage_to_rusage50,rumplinux__stub);
89 __weak_alias(do_sys_wait,rumplinux__stub);
90 
91 /* arch-specific */
92 __weak_alias(compat_offseterr,rumplinux__stub);
93 __weak_alias(linux_sys_ptrace_arch,rumplinux__stub);
94 
95 #ifdef __i386__
96 const char *
linux_get_uname_arch(void)97 linux_get_uname_arch(void)
98 {
99 
100 	return MACHINE_ARCH;
101 }
102 #endif /* __i386__ */
103