From: Nicholas Nethercote Date: Tue, 17 May 2005 04:20:31 +0000 (+0000) Subject: Move linux-only syscall wrappers into m_syscalls. X-Git-Tag: svn/VALGRIND_3_0_0~563 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=932075c94fd37dcdb2ea08269b3ab2241fccbdbc;p=thirdparty%2Fvalgrind.git Move linux-only syscall wrappers into m_syscalls. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3755 --- diff --git a/coregrind/linux/core_os.h b/coregrind/linux/core_os.h index dfc8af4b4b..e1ead69e17 100644 --- a/coregrind/linux/core_os.h +++ b/coregrind/linux/core_os.h @@ -32,69 +32,6 @@ #ifndef __LINUX_CORE_OS_H #define __LINUX_CORE_OS_H -// Macros for adding Linux-specific, arch-independent wrappers to a syscall -// table. -#define LINX_(const, name) SYS_WRAPPER_ENTRY_X_(vgOS_linux, const, name) -#define LINXY(const, name) SYS_WRAPPER_ENTRY_XY(vgOS_linux, const, name) - -// The following syscall wrappers are Linux-specific, but arch-independent. -#define VGO_LINUX_SYSCALL_WRAPPER(x) \ - extern UInt VGO_(linux_##x##_flags); \ - extern void VGO_(linux_##x##_before)(ThreadId tid, ThreadState *tst); \ - extern void VGO_(linux_##x##_after) (ThreadId tid, ThreadState *tst) - -VGO_LINUX_SYSCALL_WRAPPER(sys_exit_group); - -VGO_LINUX_SYSCALL_WRAPPER(sys_mount); -VGO_LINUX_SYSCALL_WRAPPER(sys_oldumount); -VGO_LINUX_SYSCALL_WRAPPER(sys_umount); - -VGO_LINUX_SYSCALL_WRAPPER(sys_llseek); -VGO_LINUX_SYSCALL_WRAPPER(sys_adjtimex); - -VGO_LINUX_SYSCALL_WRAPPER(sys_setfsuid16); -VGO_LINUX_SYSCALL_WRAPPER(sys_setfsgid16); -VGO_LINUX_SYSCALL_WRAPPER(sys_setresuid16); // man page says "non-standard"; -VGO_LINUX_SYSCALL_WRAPPER(sys_getresuid16); -VGO_LINUX_SYSCALL_WRAPPER(sys_setresgid16); // man page says "non-standard" -VGO_LINUX_SYSCALL_WRAPPER(sys_getresgid16); - -VGO_LINUX_SYSCALL_WRAPPER(sys_setfsuid); -VGO_LINUX_SYSCALL_WRAPPER(sys_setfsgid); -VGO_LINUX_SYSCALL_WRAPPER(sys_setresuid); // man page says "non-standard" -VGO_LINUX_SYSCALL_WRAPPER(sys_getresuid); -VGO_LINUX_SYSCALL_WRAPPER(sys_setresgid); // man page says "non-standard" -VGO_LINUX_SYSCALL_WRAPPER(sys_getresgid); - -VGO_LINUX_SYSCALL_WRAPPER(sys_ioperm); -VGO_LINUX_SYSCALL_WRAPPER(sys_syslog); -VGO_LINUX_SYSCALL_WRAPPER(sys_vhangup); -VGO_LINUX_SYSCALL_WRAPPER(sys_sysinfo); -VGO_LINUX_SYSCALL_WRAPPER(sys_personality); -VGO_LINUX_SYSCALL_WRAPPER(sys_sysctl); -VGO_LINUX_SYSCALL_WRAPPER(sys_prctl); - -VGO_LINUX_SYSCALL_WRAPPER(sys_sendfile); -VGO_LINUX_SYSCALL_WRAPPER(sys_sendfile64); -VGO_LINUX_SYSCALL_WRAPPER(sys_futex); - -VGO_LINUX_SYSCALL_WRAPPER(sys_epoll_create); -VGO_LINUX_SYSCALL_WRAPPER(sys_epoll_ctl); -VGO_LINUX_SYSCALL_WRAPPER(sys_epoll_wait); - -VGO_LINUX_SYSCALL_WRAPPER(sys_gettid); -VGO_LINUX_SYSCALL_WRAPPER(sys_tkill); -VGO_LINUX_SYSCALL_WRAPPER(sys_tgkill); - -VGO_LINUX_SYSCALL_WRAPPER(sys_fadvise64); -VGO_LINUX_SYSCALL_WRAPPER(sys_fadvise64_64); - -VGO_LINUX_SYSCALL_WRAPPER(sys_io_setup); -VGO_LINUX_SYSCALL_WRAPPER(sys_io_destroy); -VGO_LINUX_SYSCALL_WRAPPER(sys_io_getevents); -VGO_LINUX_SYSCALL_WRAPPER(sys_io_submit); -VGO_LINUX_SYSCALL_WRAPPER(sys_io_cancel); - #define FUTEX_SEMA 0 #if FUTEX_SEMA diff --git a/coregrind/m_syscalls/Makefile.am b/coregrind/m_syscalls/Makefile.am index d30f08a82f..ff7ee9668c 100644 --- a/coregrind/m_syscalls/Makefile.am +++ b/coregrind/m_syscalls/Makefile.am @@ -8,6 +8,7 @@ EXTRA_DIST = \ noinst_HEADERS = \ priv_syscalls.h \ + priv_syscalls-linux.h \ priv_syscalls-amd64-linux.h \ priv_syscalls-arm-linux.h \ priv_syscalls-x86-linux.h diff --git a/coregrind/m_syscalls/priv_syscalls-linux.h b/coregrind/m_syscalls/priv_syscalls-linux.h new file mode 100644 index 0000000000..86223cf604 --- /dev/null +++ b/coregrind/m_syscalls/priv_syscalls-linux.h @@ -0,0 +1,101 @@ + +/*--------------------------------------------------------------------*/ +/*--- Linux-specific syscalls stuff. priv_syscalls-linux.h ---*/ +/*--------------------------------------------------------------------*/ + +/* + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2005 Nicholas Nethercote + njn@valgrind.org + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307, USA. + + The GNU General Public License is contained in the file COPYING. +*/ + +#ifndef __PRIV_SYSCALLS_LINUX_H +#define __PRIV_SYSCALLS_LINUX_H + +// Macros for adding Linux-specific, arch-independent wrappers to a syscall +// table. +#define LINX_(const, name) SYS_WRAPPER_ENTRY_X_(vgOS_linux, const, name) +#define LINXY(const, name) SYS_WRAPPER_ENTRY_XY(vgOS_linux, const, name) + +// The following syscall wrappers are Linux-specific, but arch-independent. +#define LINUX_SYSCALL_WRAPPER(x) \ + extern UInt VGO_(linux_##x##_flags); \ + extern void VGO_(linux_##x##_before)(ThreadId tid, ThreadState *tst); \ + extern void VGO_(linux_##x##_after) (ThreadId tid, ThreadState *tst) + +LINUX_SYSCALL_WRAPPER(sys_exit_group); + +LINUX_SYSCALL_WRAPPER(sys_mount); +LINUX_SYSCALL_WRAPPER(sys_oldumount); +LINUX_SYSCALL_WRAPPER(sys_umount); + +LINUX_SYSCALL_WRAPPER(sys_llseek); +LINUX_SYSCALL_WRAPPER(sys_adjtimex); + +LINUX_SYSCALL_WRAPPER(sys_setfsuid16); +LINUX_SYSCALL_WRAPPER(sys_setfsgid16); +LINUX_SYSCALL_WRAPPER(sys_setresuid16); // man page says "non-standard"; +LINUX_SYSCALL_WRAPPER(sys_getresuid16); +LINUX_SYSCALL_WRAPPER(sys_setresgid16); // man page says "non-standard" +LINUX_SYSCALL_WRAPPER(sys_getresgid16); + +LINUX_SYSCALL_WRAPPER(sys_setfsuid); +LINUX_SYSCALL_WRAPPER(sys_setfsgid); +LINUX_SYSCALL_WRAPPER(sys_setresuid); // man page says "non-standard" +LINUX_SYSCALL_WRAPPER(sys_getresuid); +LINUX_SYSCALL_WRAPPER(sys_setresgid); // man page says "non-standard" +LINUX_SYSCALL_WRAPPER(sys_getresgid); + +LINUX_SYSCALL_WRAPPER(sys_ioperm); +LINUX_SYSCALL_WRAPPER(sys_syslog); +LINUX_SYSCALL_WRAPPER(sys_vhangup); +LINUX_SYSCALL_WRAPPER(sys_sysinfo); +LINUX_SYSCALL_WRAPPER(sys_personality); +LINUX_SYSCALL_WRAPPER(sys_sysctl); +LINUX_SYSCALL_WRAPPER(sys_prctl); + +LINUX_SYSCALL_WRAPPER(sys_sendfile); +LINUX_SYSCALL_WRAPPER(sys_sendfile64); +LINUX_SYSCALL_WRAPPER(sys_futex); + +LINUX_SYSCALL_WRAPPER(sys_epoll_create); +LINUX_SYSCALL_WRAPPER(sys_epoll_ctl); +LINUX_SYSCALL_WRAPPER(sys_epoll_wait); + +LINUX_SYSCALL_WRAPPER(sys_gettid); +LINUX_SYSCALL_WRAPPER(sys_tkill); +LINUX_SYSCALL_WRAPPER(sys_tgkill); + +LINUX_SYSCALL_WRAPPER(sys_fadvise64); +LINUX_SYSCALL_WRAPPER(sys_fadvise64_64); + +LINUX_SYSCALL_WRAPPER(sys_io_setup); +LINUX_SYSCALL_WRAPPER(sys_io_destroy); +LINUX_SYSCALL_WRAPPER(sys_io_getevents); +LINUX_SYSCALL_WRAPPER(sys_io_submit); +LINUX_SYSCALL_WRAPPER(sys_io_cancel); + +#endif // __PRIV_SYSCALLS_LINUX_H + +/*--------------------------------------------------------------------*/ +/*--- end ---*/ +/*--------------------------------------------------------------------*/ diff --git a/coregrind/m_syscalls/priv_syscalls.h b/coregrind/m_syscalls/priv_syscalls.h index 2dc0b1df05..146228eb4f 100644 --- a/coregrind/m_syscalls/priv_syscalls.h +++ b/coregrind/m_syscalls/priv_syscalls.h @@ -32,8 +32,12 @@ #include "pub_core_options.h" -// This is ugly, but the alternatives (ie. doing it "properly" with -I options -// and directories and more Makefiles) are even worse. +#if defined(VGO_linux) +# include "priv_syscalls-linux.h" +#else +# error Unknown OS +#endif + #if defined(VGP_amd64_linux) # include "priv_syscalls-amd64-linux.h" #elif defined(VGP_arm_linux)