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