strace/linux/syscall.h
Dmitry V. Levin 530bed0ca8 Fix decoding of getgroups, getgroups32, setgroups, and setgroups32 syscalls
Convert parsers of these syscalls to the same scheme as were applied to
parsers of other uid/gid related syscalls.
That is, define two sets of parsers on architectures that support
(either directly or via multiarch) 16-bit and 32-bit gid getgroups
and setgroups syscalls simultaneously, and reuse essentially the same
code by parametrizing uid_t and names of parser functions.

* groups.c: Remove.
(sys_getgroups, sys_setgroups): Move ...
* uid.c: ... here and parametrize their names.
* Makefile.am (strace_SOURCES): Remove groups.c.
* linux/syscall.h (sys_getgroups32, sys_setgroups32): Remove.
[NEED_UID16_PARSERS] (sys_getgroups16, sys_setgroups16): New prototypes.
* linux/arm/syscallent.h: Rename sys_[gs]etgroups to sys_[gs]etgroups16,
rename sys_[gs]etgroups32 to sys_[gs]etgroups.
* linux/bfin/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* tests/uid.c: Test for getgroups.
* tests/uid16.c: Likewise.
* tests/uid32.c: Test for getgroups32.
* tests/uid.awk: Test for getgroups/getgroups32 decoding.
* tests/uid.test: Trace getgroups/getgroups32 syscalls.
2014-12-16 01:09:23 +00:00

367 lines
8.2 KiB
C

/*
* Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
* Copyright (c) 1993, 1994, 1995 Rick Sladkey <jrs@world.std.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "dummy.h"
/* common syscalls */
int sys_accept();
int sys_accept4();
int sys_access();
int sys_add_key();
int sys_adjtimex();
int sys_arch_prctl();
int sys_bind();
int sys_brk();
int sys_capget();
int sys_capset();
int sys_chdir();
int sys_chmod();
int sys_chown();
int sys_clock_adjtime();
int sys_clock_gettime();
int sys_clock_nanosleep();
int sys_clock_settime();
int sys_clone();
int sys_close();
int sys_connect();
int sys_creat();
int sys_create_module();
int sys_delete_module();
int sys_dup();
int sys_dup2();
int sys_dup3();
int sys_epoll_create();
int sys_epoll_create1();
int sys_epoll_ctl();
int sys_epoll_pwait();
int sys_epoll_wait();
int sys_eventfd();
int sys_eventfd2();
int sys_execve();
int sys_exit();
int sys_faccessat();
int sys_fadvise64();
int sys_fadvise64_64();
int sys_fallocate();
int sys_fanotify_init();
int sys_fanotify_mark();
int sys_fchmod();
int sys_fchmodat();
int sys_fchown();
int sys_fchownat();
int sys_fcntl();
int sys_fgetxattr();
int sys_finit_module();
int sys_flistxattr();
int sys_flock();
int sys_fork();
int sys_fremovexattr();
int sys_fsetxattr();
int sys_fstat();
int sys_fstat64();
int sys_fstatfs();
int sys_fstatfs64();
int sys_ftruncate();
int sys_ftruncate64();
int sys_futex();
int sys_futimesat();
int sys_get_mempolicy();
int sys_get_robust_list();
int sys_get_thread_area();
int sys_getcpu();
int sys_getcwd();
int sys_getdents();
int sys_getdents64();
int sys_getdtablesize();
int sys_getgroups();
int sys_gethostname();
int sys_getitimer();
int sys_getpmsg(); /* TODO: non-Linux, remove? */
int sys_getpriority();
int sys_getresuid();
int sys_getrlimit();
int sys_getrusage();
int sys_getsockname();
int sys_getsockopt();
int sys_gettimeofday();
int sys_getuid();
int sys_getxattr();
int sys_init_module();
int sys_inotify_add_watch();
int sys_inotify_init1();
int sys_inotify_rm_watch();
int sys_io_cancel();
int sys_io_destroy();
int sys_io_getevents();
int sys_io_setup();
int sys_io_submit();
int sys_ioctl();
int sys_ioprio_get();
int sys_ioprio_set();
int sys_ipc();
int sys_keyctl();
int sys_kexec_load();
int sys_kill();
int sys_link();
int sys_linkat();
int sys_listen();
int sys_listxattr();
int sys_llseek();
int sys_lseek();
int sys_madvise();
int sys_mbind();
int sys_migrate_pages();
int sys_mincore();
int sys_mknod();
int sys_mknodat();
int sys_mlockall();
int sys_mmap();
int sys_mmap_pgoff();
int sys_mmap_4koff();
int sys_modify_ldt();
int sys_mount();
int sys_move_pages();
int sys_mprotect();
int sys_mq_getsetattr();
int sys_mq_notify();
int sys_mq_open();
int sys_mq_timedreceive();
int sys_mq_timedsend();
int sys_mremap();
int sys_msgctl();
int sys_msgget();
int sys_msgrcv();
int sys_msgsnd();
int sys_msync();
int sys_munmap();
int sys_nanosleep();
int sys_newfstatat();
int sys_old_mmap();
int sys_old_mmap_pgoff();
int sys_oldfstat();
int sys_oldselect();
int sys_oldstat();
int sys_open();
int sys_openat();
int sys_perf_event_open();
int sys_personality();
int sys_pipe();
int sys_pipe2();
int sys_poll();
int sys_poll();
int sys_ppoll();
int sys_prctl();
int sys_pread();
int sys_preadv();
int sys_prlimit64();
int sys_process_vm_readv();
int sys_process_vm_writev();
int sys_pselect6();
int sys_ptrace();
int sys_putpmsg(); /* TODO: non-Linux, remove? */
int sys_pwrite();
int sys_pwritev();
int sys_query_module();
int sys_quotactl();
int sys_read();
int sys_readahead();
int sys_readdir();
int sys_readlink();
int sys_readlinkat();
int sys_readv();
int sys_reboot();
int sys_recv();
int sys_recvfrom();
int sys_recvmmsg();
int sys_recvmsg();
int sys_remap_file_pages();
int sys_removexattr();
int sys_renameat();
int sys_renameat2();
int sys_request_key();
int sys_restart_syscall();
int sys_rt_sigaction();
int sys_rt_sigpending();
int sys_rt_sigprocmask();
int sys_rt_sigqueueinfo();
int sys_rt_sigsuspend();
int sys_rt_sigtimedwait();
int sys_rt_tgsigqueueinfo();
int sys_sched_get_priority_min();
int sys_sched_getaffinity();
int sys_sched_getparam();
int sys_sched_getscheduler();
int sys_sched_rr_get_interval();
int sys_sched_setaffinity();
int sys_sched_setparam();
int sys_sched_setscheduler();
int sys_select();
int sys_semctl();
int sys_semget();
int sys_semop();
int sys_semtimedop();
int sys_send();
int sys_sendfile();
int sys_sendfile64();
int sys_sendmmsg();
int sys_sendmsg();
int sys_sendto();
int sys_set_mempolicy();
int sys_set_thread_area();
int sys_setfsuid();
int sys_setgroups();
int sys_sethostname();
int sys_setitimer();
int sys_setns();
int sys_setpriority();
int sys_setresuid();
int sys_setreuid();
int sys_setrlimit();
int sys_setsockopt();
int sys_settimeofday();
int sys_setuid();
int sys_setxattr();
int sys_shmat();
int sys_shmctl();
int sys_shmdt();
int sys_shmget();
int sys_shutdown();
int sys_sigaction();
int sys_sigaltstack();
int sys_siggetmask();
int sys_signal();
int sys_signalfd();
int sys_signalfd4();
int sys_sigpending();
int sys_sigprocmask();
int sys_sigreturn();
int sys_sigsetmask();
int sys_sigsuspend();
int sys_socket();
int sys_socketcall();
int sys_socketpair();
int sys_splice();
int sys_stat();
int sys_stat64();
int sys_statfs();
int sys_statfs64();
int sys_swapon();
int sys_symlinkat();
int sys_sync_file_range();
int sys_sync_file_range2();
int sys_sysctl();
int sys_sysinfo();
int sys_syslog();
int sys_tee();
int sys_tgkill();
int sys_time();
int sys_timer_create();
int sys_timer_gettime();
int sys_timer_settime();
int sys_timerfd();
int sys_timerfd_create();
int sys_timerfd_gettime();
int sys_timerfd_settime();
int sys_times();
int sys_truncate();
int sys_truncate64();
int sys_umask();
int sys_umount2();
int sys_uname();
int sys_unlinkat();
int sys_unshare();
int sys_utime();
int sys_utimensat();
int sys_utimes();
int sys_vmsplice();
int sys_wait4();
int sys_waitid();
int sys_waitpid();
int sys_write();
int sys_writev();
/* architecture-specific calls */
#ifdef ALPHA
int osf_statfs();
int osf_fstatfs();
int sys_osf_getitimer();
int sys_osf_getrusage();
int sys_osf_gettimeofday();
int sys_osf_select();
int sys_osf_setitimer();
int sys_osf_settimeofday();
int sys_osf_utimes();
int sys_osf_wait4();
#endif
#if defined(ALPHA) || defined(IA64) || defined(SPARC) || defined(SPARC64)
int sys_getpagesize();
#endif
#ifdef MIPS
int sys_sysmips();
#endif
#if defined M68K || defined SH
int sys_cacheflush();
#endif
#if defined OR1K
int sys_or1k_atomic();
#endif
#ifdef POWERPC
int sys_subpage_prot();
#endif
#ifdef BFIN
int sys_cacheflush();
int sys_sram_alloc();
#endif
#if defined SPARC || defined SPARC64
#include "sparc/syscall1.h"
int sys_execv();
int sys_getmsg();
int sys_putmsg();
#endif
#if NEED_UID16_PARSERS
int sys_chown16();
int sys_fchown16();
int sys_getgroups16();
int sys_getresuid16();
int sys_getuid16();
int sys_setfsuid16();
int sys_setgroups16();
int sys_setresuid16();
int sys_setreuid16();
int sys_setuid16();
#endif