# Copyright all contributors # License: AGPL-3.0+ # Dump syscall numbers under Linux and any other kernel which # promises stable syscall numbers. This is to maintain # PublicInbox::Syscall # DO NOT USE this for *BSDs, none of the current BSD kernels # we know about promise stable syscall numbers, we'll use # Inline::C to support them. eval 'exec perl -S $0 ${1+"$@"}' # no shebang if 0; # running under some shell use strict; use v5.10.1; use File::Temp 0.19; use POSIX qw(uname); say '$machine='.(POSIX::uname())[-1]; my $cc = $ENV{CC} // 'cc'; my @cflags = split(/\s+/, $ENV{CFLAGS} // '-Wall'); my $str = do { local $/; }; my $tmp = File::Temp->newdir('syscall-list-XXXX', TMPDIR => 1); my $f = "$tmp/sc.c"; my $x = "$tmp/sc"; open my $fh, '>', $f or die "open $f $!"; print $fh $str or die "print $f $!"; close $fh or die "close $f $!"; system($cc, '-o', $x, $f, @cflags) == 0 or die "cc failed \$?=$?"; exec($x); __DATA__ #define _GNU_SOURCE #include #include #include #ifdef __linux__ #include #endif #include #include #include #define D(x) printf("$" #x " = %ld;\n", (long)x) int main(void) { #ifdef __linux__ D(SYS_epoll_create1); D(SYS_epoll_ctl); #ifdef SYS_epoll_wait D(SYS_epoll_wait); #endif D(SYS_epoll_pwait); D(SYS_signalfd4); D(SYS_inotify_init1); D(SYS_inotify_add_watch); D(SYS_inotify_rm_watch); D(SYS_prctl); D(SYS_fstatfs); D(SYS_sendmsg); D(SYS_recvmsg); #ifdef FS_IOC_GETFLAGS printf("FS_IOC_GETFLAGS=%#lx\nFS_IOC_SETFLAGS=%#lx\n", (unsigned long)FS_IOC_GETFLAGS, (unsigned long)FS_IOC_SETFLAGS); #endif #ifdef SYS_renameat2 D(SYS_renameat2); #endif #endif /* Linux, any other OSes with stable syscalls? */ printf("size_t=%zu off_t=%zu pid_t=%zu\n", sizeof(size_t), sizeof(off_t), sizeof(pid_t)); D(SIGWINCH); return 0; }