// SPDX-License-Identifier: GPL-2.0-or-later // Linux x86_64 syscall number -> SchOS syscall number translation. // Enabled per process by sys_enable_linux_abi (see kernel/sys/sys_compat.c). // // This file used to be the second half of a two-place registration scheme: a // hand-written `#define LINUX_foo N` for every Linux number, plus a hand-written // map entry pointing it at SYS_foo. Adding a syscall meant three edits across // two files, and forgetting this one left the syscall unreachable from every // musl-linked program while looking perfectly registered in table.inc. // // The map is now generated from kernel/sys/table.inc, which carries the Linux // number alongside the native one. There is nothing to hand-edit here. #include "core/types.h" #include "core/syscall.h" #define LINUX_NSYSCALL NSYSCALLS // Index: Linux x86_64 syscall number. Value: SchOS SYS_* number, or 0 for // "not implemented" (syscall() then returns -ENOSYS). // // Syscalls declared NO_LINUX in table.inc all land on the single scratch index // NO_LINUX. They overwrite each other there, which is harmless: no real Linux // syscall uses that number, so the slot is never dispatched. int linux_syscall_map[LINUX_NSYSCALL] = { #define SYSCALL(nr, lnr, name) [lnr] = SYS_##name, #define SYSCALL_ALIAS(lnr, name) [lnr] = SYS_##name, #include "table.inc" #undef SYSCALL #undef SYSCALL_ALIAS }; int linux_syscall_map_size = LINUX_NSYSCALL;