lkml.org 
[lkml]   [2007]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] Complain about missing system calls.
    From
    Date
    Most system calls seem to get added to i386 first. This patch
    automatically generates a warning for any new system call which is
    implemented on i386 but not the architecture currently being compiled.
    On PowerPC at the moment, for example, it results in these warnings:
    init/missing_syscalls.h:935:3: warning: #warning syscall sync_file_range not implemented
    init/missing_syscalls.h:947:3: warning: #warning syscall getcpu not implemented
    init/missing_syscalls.h:950:3: warning: #warning syscall epoll_pwait not implemented

    Signed-off-by: David Woodhouse <dwmw2@infradead.org>

    index 0154aea..826433b 100644
    --- a/init/Makefile
    +++ b/init/Makefile
    @@ -2,7 +2,7 @@
    # Makefile for the linux kernel.
    #

    -obj-y := main.o version.o mounts.o
    +obj-y := main.o version.o mounts.o missing_syscalls.o
    ifneq ($(CONFIG_BLK_DEV_INITRD),y)
    obj-y += noinitramfs.o
    else
    @@ -16,11 +16,12 @@ mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o
    mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o

    # files to be removed upon make clean
    -clean-files := ../include/linux/compile.h
    +clean-files := ../include/linux/compile.h $(obj)/missing_syscalls.h

    # dependencies on generated files need to be listed explicitly

    $(obj)/version.o: include/linux/compile.h
    +$(obj)/missing_syscalls.o: $(obj)/missing_syscalls.h include/linux/compile.h FORCE

    # compile.h changes depending on hostname, generation number, etc,
    # so we regenerate it always.
    @@ -31,3 +32,13 @@ include/linux/compile.h: FORCE
    @echo ' CHK $@'
    $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
    "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC) $(CFLAGS)"
    +
    +
    +quiet_cmd_missing_syscalls = GEN $@
    + cmd_missing_syscalls = sed -n '/^\#define/s/[^_]*__NR_\([^[:space:]]*\).*/\
    + \#if !defined (__NR_\1) \&\& !defined (__IGNORE_\1)\n\
    + \#warning syscall \1 not implemented\n\
    + \#endif/p' $(srctree)/include/asm-i386/unistd.h >$@
    +targets += missing_syscalls.h
    +$(obj)/missing_syscalls.h: include/asm-i386/unistd.h
    + $(call if_changed,missing_syscalls)
    --- /dev/null 2007-03-08 11:51:40.542628703 +0000
    +++ b/init/missing_syscalls.c 2007-03-08 22:48:27.000000000 +0000
    @@ -0,0 +1,57 @@
    +#include <asm/types.h>
    +#include <asm/unistd.h>
    +
    +/* Force recompilation (and thus warnings) every time we rebuild the kernel */
    +#include <linux/compile.h>
    +
    +/* System calls for 32-bit kernels only */
    +#if BITS_PER_LONG == 64
    +#define __IGNORE_sendfile64
    +#define __IGNORE_ftruncate64
    +#define __IGNORE_truncate64
    +#define __IGNORE_stat64
    +#define __IGNORE_lstat64
    +#define __IGNORE_fstat64
    +#define __IGNORE_fcntl64
    +#define __IGNORE_fadvise64_64
    +#define __IGNORE_fstatat64
    +#endif
    +
    +/* i386-specific or historical system calls */
    +#define __IGNORE_mmap2
    +#define __IGNORE_vm86
    +#define __IGNORE_vm86old
    +#define __IGNORE_set_thread_area
    +#define __IGNORE_get_thread_area
    +#define __IGNORE_madvise1
    +#define __IGNORE_oldstat
    +#define __IGNORE_oldfstat
    +#define __IGNORE_oldlstat
    +#define __IGNORE_oldolduname
    +#define __IGNORE_olduname
    +#define __IGNORE_umount2
    +/* ... including the "new" 32-bit uid syscalls */
    +#define __IGNORE_lchown32
    +#define __IGNORE_getuid32
    +#define __IGNORE_getgid32
    +#define __IGNORE_geteuid32
    +#define __IGNORE_getegid32
    +#define __IGNORE_setreuid32
    +#define __IGNORE_setregid32
    +#define __IGNORE_getgroups32
    +#define __IGNORE_setgroups32
    +#define __IGNORE_fchown32
    +#define __IGNORE_setresuid32
    +#define __IGNORE_getresuid32
    +#define __IGNORE_setresgid32
    +#define __IGNORE_getresgid32
    +#define __IGNORE_chown32
    +#define __IGNORE_setuid32
    +#define __IGNORE_setgid32
    +#define __IGNORE_setfsuid32
    +#define __IGNORE_setfsgid32
    +
    +/* Not yet upstream */
    +#define __IGNORE_vserver
    +
    +#include "missing_syscalls.h"

    --
    dwmw2

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-03-09 00:03    [W:0.042 / U:1.964 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site