njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 1 | |
| 2 | /*--------------------------------------------------------------------*/ |
njn | c1b0181 | 2005-06-17 22:19:06 +0000 | [diff] [blame] | 3 | /*--- Linux-specific syscalls stuff. priv_syswrap-linux.h ---*/ |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 4 | /*--------------------------------------------------------------------*/ |
| 5 | |
| 6 | /* |
| 7 | This file is part of Valgrind, a dynamic binary instrumentation |
| 8 | framework. |
| 9 | |
sewardj | 0f157dd | 2013-10-18 14:27:36 +0000 | [diff] [blame] | 10 | Copyright (C) 2000-2013 Nicholas Nethercote |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 11 | njn@valgrind.org |
| 12 | |
| 13 | This program is free software; you can redistribute it and/or |
| 14 | modify it under the terms of the GNU General Public License as |
| 15 | published by the Free Software Foundation; either version 2 of the |
| 16 | License, or (at your option) any later version. |
| 17 | |
| 18 | This program is distributed in the hope that it will be useful, but |
| 19 | WITHOUT ANY WARRANTY; without even the implied warranty of |
| 20 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 21 | General Public License for more details. |
| 22 | |
| 23 | You should have received a copy of the GNU General Public License |
| 24 | along with this program; if not, write to the Free Software |
| 25 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 26 | 02111-1307, USA. |
| 27 | |
| 28 | The GNU General Public License is contained in the file COPYING. |
| 29 | */ |
| 30 | |
njn | c1b0181 | 2005-06-17 22:19:06 +0000 | [diff] [blame] | 31 | #ifndef __PRIV_SYSWRAP_LINUX_H |
| 32 | #define __PRIV_SYSWRAP_LINUX_H |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 33 | |
florian | 535fb1b | 2013-09-15 13:54:34 +0000 | [diff] [blame] | 34 | #include "pub_core_basics.h" // ThreadId |
| 35 | #include "priv_types_n_macros.h" // DECL_TEMPLATE |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 36 | |
njn | e148666 | 2005-11-10 02:48:04 +0000 | [diff] [blame] | 37 | // Clone-related functions |
njn | ffd9c1d | 2005-11-10 04:02:19 +0000 | [diff] [blame] | 38 | extern Word ML_(start_thread_NORETURN) ( void* arg ); |
njn | a3afdfb | 2005-11-09 04:49:28 +0000 | [diff] [blame] | 39 | extern Addr ML_(allocstack) ( ThreadId tid ); |
| 40 | extern void ML_(call_on_new_stack_0_1) ( Addr stack, Addr retaddr, |
| 41 | void (*f)(Word), Word arg1 ); |
njn | e148666 | 2005-11-10 02:48:04 +0000 | [diff] [blame] | 42 | extern SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags, |
| 43 | Int* parent_tidptr, Int* child_tidptr ); |
| 44 | |
| 45 | |
| 46 | // Linux-specific (but non-arch-specific) syscalls |
njn | a3afdfb | 2005-11-09 04:49:28 +0000 | [diff] [blame] | 47 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 48 | DECL_TEMPLATE(linux, sys_mount); |
| 49 | DECL_TEMPLATE(linux, sys_oldumount); |
| 50 | DECL_TEMPLATE(linux, sys_umount); |
tom | c8232f9 | 2011-06-08 09:10:40 +0000 | [diff] [blame] | 51 | DECL_TEMPLATE(linux, sys_perf_event_open); |
tom | d8feb70 | 2009-10-28 10:04:11 +0000 | [diff] [blame] | 52 | DECL_TEMPLATE(linux, sys_preadv); |
| 53 | DECL_TEMPLATE(linux, sys_pwritev); |
tom | a499123 | 2012-02-10 11:30:09 +0000 | [diff] [blame] | 54 | DECL_TEMPLATE(linux, sys_sendmmsg); |
| 55 | DECL_TEMPLATE(linux, sys_recvmmsg); |
tom | f43793a | 2009-11-23 08:19:20 +0000 | [diff] [blame] | 56 | DECL_TEMPLATE(linux, sys_dup3); |
tom | 472a34b | 2010-02-23 10:02:55 +0000 | [diff] [blame] | 57 | DECL_TEMPLATE(linux, sys_getcpu); |
tom | 110743c | 2010-02-23 10:49:48 +0000 | [diff] [blame] | 58 | DECL_TEMPLATE(linux, sys_splice); |
tom | 5db7a79 | 2012-08-08 08:03:44 +0000 | [diff] [blame] | 59 | DECL_TEMPLATE(linux, sys_tee); |
| 60 | DECL_TEMPLATE(linux, sys_vmsplice); |
sewardj | 792e00a | 2010-10-04 20:03:27 +0000 | [diff] [blame] | 61 | DECL_TEMPLATE(linux, sys_readahead); |
tom | d5fb58e | 2012-04-03 10:51:27 +0000 | [diff] [blame] | 62 | DECL_TEMPLATE(linux, sys_move_pages); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 63 | |
njn | 096ccdd | 2009-02-22 23:00:30 +0000 | [diff] [blame] | 64 | // POSIX, but various sub-cases differ between Linux and Darwin. |
| 65 | DECL_TEMPLATE(linux, sys_fcntl); |
| 66 | DECL_TEMPLATE(linux, sys_fcntl64); |
| 67 | DECL_TEMPLATE(linux, sys_ioctl); |
| 68 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 69 | DECL_TEMPLATE(linux, sys_setfsuid16); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 70 | DECL_TEMPLATE(linux, sys_setfsuid); |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 71 | DECL_TEMPLATE(linux, sys_setfsgid16); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 72 | DECL_TEMPLATE(linux, sys_setfsgid); |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 73 | DECL_TEMPLATE(linux, sys_setresuid16); // man page says "non-standard"; |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 74 | DECL_TEMPLATE(linux, sys_setresuid); // man page says "non-standard" |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 75 | DECL_TEMPLATE(linux, sys_getresuid16); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 76 | DECL_TEMPLATE(linux, sys_getresuid); |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 77 | DECL_TEMPLATE(linux, sys_setresgid16); // man page says "non-standard" |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 78 | DECL_TEMPLATE(linux, sys_setresgid); // man page says "non-standard" |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 79 | DECL_TEMPLATE(linux, sys_getresgid16); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 80 | DECL_TEMPLATE(linux, sys_getresgid); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 81 | |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 82 | DECL_TEMPLATE(linux, sys_exit_group); |
| 83 | DECL_TEMPLATE(linux, sys_llseek); |
| 84 | DECL_TEMPLATE(linux, sys_adjtimex); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 85 | DECL_TEMPLATE(linux, sys_ioperm); |
| 86 | DECL_TEMPLATE(linux, sys_syslog); |
| 87 | DECL_TEMPLATE(linux, sys_vhangup); |
| 88 | DECL_TEMPLATE(linux, sys_sysinfo); |
| 89 | DECL_TEMPLATE(linux, sys_personality); |
| 90 | DECL_TEMPLATE(linux, sys_sysctl); |
| 91 | DECL_TEMPLATE(linux, sys_prctl); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 92 | DECL_TEMPLATE(linux, sys_sendfile); |
| 93 | DECL_TEMPLATE(linux, sys_sendfile64); |
| 94 | DECL_TEMPLATE(linux, sys_futex); |
tom | 05b1f9a | 2006-05-17 14:24:12 +0000 | [diff] [blame] | 95 | DECL_TEMPLATE(linux, sys_set_robust_list); |
| 96 | DECL_TEMPLATE(linux, sys_get_robust_list); |
tom | 363ec76 | 2006-03-21 10:58:35 +0000 | [diff] [blame] | 97 | DECL_TEMPLATE(linux, sys_pselect6); |
| 98 | DECL_TEMPLATE(linux, sys_ppoll); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 99 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 100 | DECL_TEMPLATE(linux, sys_epoll_create); |
njn | 7271588 | 2009-07-10 12:02:03 +0000 | [diff] [blame] | 101 | DECL_TEMPLATE(linux, sys_epoll_create1); |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 102 | DECL_TEMPLATE(linux, sys_epoll_ctl); |
| 103 | DECL_TEMPLATE(linux, sys_epoll_wait); |
bart | f5ceec8 | 2008-04-26 07:45:10 +0000 | [diff] [blame] | 104 | DECL_TEMPLATE(linux, sys_epoll_pwait); |
| 105 | DECL_TEMPLATE(linux, sys_eventfd); |
tom | 84eb41f | 2008-12-10 09:28:56 +0000 | [diff] [blame] | 106 | DECL_TEMPLATE(linux, sys_eventfd2); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 107 | |
njn | 0bd7177 | 2009-07-15 03:08:35 +0000 | [diff] [blame] | 108 | DECL_TEMPLATE(linux, sys_fallocate); |
| 109 | |
tom | 46d02ab | 2011-06-08 09:55:54 +0000 | [diff] [blame] | 110 | DECL_TEMPLATE(linux, sys_prlimit64); |
| 111 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 112 | DECL_TEMPLATE(linux, sys_gettid); |
| 113 | DECL_TEMPLATE(linux, sys_set_tid_address); |
| 114 | DECL_TEMPLATE(linux, sys_tkill); |
| 115 | DECL_TEMPLATE(linux, sys_tgkill); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 116 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 117 | DECL_TEMPLATE(linux, sys_fadvise64); |
| 118 | DECL_TEMPLATE(linux, sys_fadvise64_64); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 119 | |
sewardj | bc22cf7 | 2005-06-08 00:02:49 +0000 | [diff] [blame] | 120 | DECL_TEMPLATE(linux, sys_io_setup); |
| 121 | DECL_TEMPLATE(linux, sys_io_destroy); |
| 122 | DECL_TEMPLATE(linux, sys_io_getevents); |
| 123 | DECL_TEMPLATE(linux, sys_io_submit); |
| 124 | DECL_TEMPLATE(linux, sys_io_cancel); |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 125 | |
sewardj | 7acef08 | 2007-03-11 19:28:02 +0000 | [diff] [blame] | 126 | DECL_TEMPLATE(linux, sys_ioprio_set); |
tom | 16dfea4 | 2008-12-15 08:58:29 +0000 | [diff] [blame] | 127 | DECL_TEMPLATE(linux, sys_ioprio_get); |
sewardj | 7acef08 | 2007-03-11 19:28:02 +0000 | [diff] [blame] | 128 | |
tom | 70a5cb0 | 2005-10-20 17:00:23 +0000 | [diff] [blame] | 129 | DECL_TEMPLATE(linux, sys_mbind); |
tom | 2af58f2 | 2005-07-22 15:04:14 +0000 | [diff] [blame] | 130 | DECL_TEMPLATE(linux, sys_set_mempolicy); |
| 131 | DECL_TEMPLATE(linux, sys_get_mempolicy); |
| 132 | |
tom | 0bcaf2a | 2005-07-25 15:21:41 +0000 | [diff] [blame] | 133 | DECL_TEMPLATE(linux, sys_inotify_init); |
tom | 7bb1b1c | 2009-10-27 14:17:27 +0000 | [diff] [blame] | 134 | DECL_TEMPLATE(linux, sys_inotify_init1); |
tom | 0bcaf2a | 2005-07-25 15:21:41 +0000 | [diff] [blame] | 135 | DECL_TEMPLATE(linux, sys_inotify_add_watch); |
| 136 | DECL_TEMPLATE(linux, sys_inotify_rm_watch); |
| 137 | |
njn | 4279a88 | 2005-08-26 03:43:28 +0000 | [diff] [blame] | 138 | DECL_TEMPLATE(linux, sys_mq_open); |
| 139 | DECL_TEMPLATE(linux, sys_mq_unlink); |
| 140 | DECL_TEMPLATE(linux, sys_mq_timedsend); |
| 141 | DECL_TEMPLATE(linux, sys_mq_timedreceive); |
| 142 | DECL_TEMPLATE(linux, sys_mq_notify); |
| 143 | DECL_TEMPLATE(linux, sys_mq_getsetattr); |
| 144 | |
njn | 1588bc0 | 2005-08-26 03:49:43 +0000 | [diff] [blame] | 145 | DECL_TEMPLATE(linux, sys_clock_settime); |
| 146 | DECL_TEMPLATE(linux, sys_clock_gettime); |
| 147 | DECL_TEMPLATE(linux, sys_clock_getres); |
| 148 | DECL_TEMPLATE(linux, sys_clock_nanosleep); |
tom | ddc4a18 | 2014-01-30 22:33:02 +0000 | [diff] [blame] | 149 | DECL_TEMPLATE(linux, sys_clock_adjtime); |
njn | 1588bc0 | 2005-08-26 03:49:43 +0000 | [diff] [blame] | 150 | |
njn | 424c056 | 2005-08-26 03:54:30 +0000 | [diff] [blame] | 151 | DECL_TEMPLATE(linux, sys_timer_create); // Linux: varies across archs? |
| 152 | DECL_TEMPLATE(linux, sys_timer_settime); |
| 153 | DECL_TEMPLATE(linux, sys_timer_gettime); |
| 154 | DECL_TEMPLATE(linux, sys_timer_getoverrun); |
| 155 | DECL_TEMPLATE(linux, sys_timer_delete); |
bart | 5fc7da2 | 2008-04-27 12:56:06 +0000 | [diff] [blame] | 156 | DECL_TEMPLATE(linux, sys_timerfd_create); |
| 157 | DECL_TEMPLATE(linux, sys_timerfd_gettime); |
| 158 | DECL_TEMPLATE(linux, sys_timerfd_settime); |
bart | f5ceec8 | 2008-04-26 07:45:10 +0000 | [diff] [blame] | 159 | |
| 160 | DECL_TEMPLATE(linux, sys_signalfd); |
tom | 6c67ef5 | 2009-01-09 16:42:51 +0000 | [diff] [blame] | 161 | DECL_TEMPLATE(linux, sys_signalfd4); |
njn | 424c056 | 2005-08-26 03:54:30 +0000 | [diff] [blame] | 162 | |
njn | 9fe7b12 | 2005-08-26 04:03:04 +0000 | [diff] [blame] | 163 | DECL_TEMPLATE(linux, sys_capget); |
| 164 | DECL_TEMPLATE(linux, sys_capset); |
| 165 | |
tom | 363ec76 | 2006-03-21 10:58:35 +0000 | [diff] [blame] | 166 | DECL_TEMPLATE(linux, sys_openat); |
| 167 | DECL_TEMPLATE(linux, sys_mkdirat); |
| 168 | DECL_TEMPLATE(linux, sys_mknodat); |
| 169 | DECL_TEMPLATE(linux, sys_fchownat); |
| 170 | DECL_TEMPLATE(linux, sys_futimesat); |
| 171 | DECL_TEMPLATE(linux, sys_newfstatat); |
| 172 | DECL_TEMPLATE(linux, sys_unlinkat); |
| 173 | DECL_TEMPLATE(linux, sys_renameat); |
| 174 | DECL_TEMPLATE(linux, sys_linkat); |
| 175 | DECL_TEMPLATE(linux, sys_symlinkat); |
| 176 | DECL_TEMPLATE(linux, sys_readlinkat); |
| 177 | DECL_TEMPLATE(linux, sys_fchmodat); |
| 178 | DECL_TEMPLATE(linux, sys_faccessat); |
sewardj | 9d3f9d7 | 2007-11-20 23:41:23 +0000 | [diff] [blame] | 179 | DECL_TEMPLATE(linux, sys_utimensat); |
tom | f9e5b5e | 2013-03-03 12:57:20 +0000 | [diff] [blame] | 180 | DECL_TEMPLATE(linux, sys_name_to_handle_at); |
tom | 43ca097 | 2013-07-17 13:25:08 +0000 | [diff] [blame] | 181 | DECL_TEMPLATE(linux, sys_open_by_handle_at); |
tom | 363ec76 | 2006-03-21 10:58:35 +0000 | [diff] [blame] | 182 | |
tom | 7f4d7e4 | 2007-03-07 11:12:13 +0000 | [diff] [blame] | 183 | DECL_TEMPLATE(linux, sys_add_key); |
| 184 | DECL_TEMPLATE(linux, sys_request_key); |
| 185 | DECL_TEMPLATE(linux, sys_keyctl); |
| 186 | |
njn | a3b67b7 | 2005-08-26 04:27:54 +0000 | [diff] [blame] | 187 | // These ones have 32-bit generic equivalents, but the 16-bit versions (they |
| 188 | // use 16-bit gid_t and uid_t types) seem to be Linux-specific. |
| 189 | DECL_TEMPLATE(linux, sys_getuid16); |
| 190 | DECL_TEMPLATE(linux, sys_setuid16); |
| 191 | DECL_TEMPLATE(linux, sys_getgid16); |
| 192 | DECL_TEMPLATE(linux, sys_setgid16); |
| 193 | DECL_TEMPLATE(linux, sys_geteuid16); |
| 194 | DECL_TEMPLATE(linux, sys_getegid16); |
| 195 | DECL_TEMPLATE(linux, sys_setreuid16); |
| 196 | DECL_TEMPLATE(linux, sys_setregid16); |
| 197 | DECL_TEMPLATE(linux, sys_getgroups16); |
| 198 | DECL_TEMPLATE(linux, sys_setgroups16); |
| 199 | |
njn | efc957c | 2005-08-26 04:36:10 +0000 | [diff] [blame] | 200 | // Again, these 16-bit versions are Linux-specific, the 32-bit versions are |
| 201 | // generic. |
| 202 | DECL_TEMPLATE(linux, sys_chown16); |
| 203 | DECL_TEMPLATE(linux, sys_fchown16); |
| 204 | //DECL_TEMPLATE(linux, sys_lchown16); // not yet encountered |
| 205 | |
njn | 7397548 | 2005-08-30 02:45:44 +0000 | [diff] [blame] | 206 | // Are these POSIX? In Darwin they have an extra parameter 'position', |
| 207 | // so put them here. |
njn | 65ccc50 | 2005-08-30 01:53:54 +0000 | [diff] [blame] | 208 | DECL_TEMPLATE(linux, sys_setxattr); |
| 209 | DECL_TEMPLATE(linux, sys_lsetxattr); |
| 210 | DECL_TEMPLATE(linux, sys_fsetxattr); |
| 211 | DECL_TEMPLATE(linux, sys_getxattr); |
| 212 | DECL_TEMPLATE(linux, sys_lgetxattr); |
| 213 | DECL_TEMPLATE(linux, sys_fgetxattr); |
| 214 | DECL_TEMPLATE(linux, sys_listxattr); |
| 215 | DECL_TEMPLATE(linux, sys_llistxattr); |
| 216 | DECL_TEMPLATE(linux, sys_flistxattr); |
| 217 | DECL_TEMPLATE(linux, sys_removexattr); |
| 218 | DECL_TEMPLATE(linux, sys_lremovexattr); |
| 219 | DECL_TEMPLATE(linux, sys_fremovexattr); |
njn | b2480c9 | 2005-08-30 02:17:23 +0000 | [diff] [blame] | 220 | |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 221 | // These are Posix, but not necessarily syscalls. Darwin only supports |
| 222 | // sched_get_priority_{min,max} and sched_yield, but as libc functions, not |
| 223 | // syscalls. |
njn | b2480c9 | 2005-08-30 02:17:23 +0000 | [diff] [blame] | 224 | DECL_TEMPLATE(linux, sys_sched_setparam); |
| 225 | DECL_TEMPLATE(linux, sys_sched_getparam); |
| 226 | DECL_TEMPLATE(linux, sys_sched_setscheduler); |
| 227 | DECL_TEMPLATE(linux, sys_sched_getscheduler); |
| 228 | DECL_TEMPLATE(linux, sys_sched_yield); |
| 229 | DECL_TEMPLATE(linux, sys_sched_get_priority_max); |
| 230 | DECL_TEMPLATE(linux, sys_sched_get_priority_min); |
tom | b8b4848 | 2009-11-24 16:03:19 +0000 | [diff] [blame] | 231 | DECL_TEMPLATE(linux, sys_sched_rr_get_interval); |
njn | b2480c9 | 2005-08-30 02:17:23 +0000 | [diff] [blame] | 232 | DECL_TEMPLATE(linux, sys_sched_setaffinity); |
| 233 | DECL_TEMPLATE(linux, sys_sched_getaffinity); |
| 234 | |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 235 | // These ones have different parameters and/or return values on Darwin. |
| 236 | // Also, some archs on Linux do not match the generic wrapper for sys_pipe. |
| 237 | DECL_TEMPLATE(linux, sys_munlockall); |
| 238 | DECL_TEMPLATE(linux, sys_pipe); |
sewardj | 586c815 | 2008-11-05 11:20:59 +0000 | [diff] [blame] | 239 | DECL_TEMPLATE(linux, sys_pipe2); |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 240 | DECL_TEMPLATE(linux, sys_quotactl); |
| 241 | DECL_TEMPLATE(linux, sys_waitid); |
| 242 | |
| 243 | // Posix, but in Darwin utime is a libc function that calls syscall utimes. |
| 244 | DECL_TEMPLATE(linux, sys_utime); |
| 245 | |
| 246 | // On Darwin, off_t is 64-bits even on 32-bit platforms. |
| 247 | DECL_TEMPLATE(linux, sys_lseek); |
| 248 | |
| 249 | // Darwin (and probably other OSes) don't have the old_sigset_t type. |
| 250 | DECL_TEMPLATE(linux, sys_sigpending); |
| 251 | DECL_TEMPLATE(linux, sys_sigprocmask); |
sewardj | de9264c | 2011-07-11 17:48:24 +0000 | [diff] [blame] | 252 | DECL_TEMPLATE(linux, sys_sigaction); |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 253 | |
| 254 | // I think these are Linux-specific? |
| 255 | DECL_TEMPLATE(linux, sys_rt_sigaction); |
| 256 | DECL_TEMPLATE(linux, sys_rt_sigprocmask); |
| 257 | DECL_TEMPLATE(linux, sys_rt_sigpending); |
| 258 | DECL_TEMPLATE(linux, sys_rt_sigtimedwait); |
| 259 | DECL_TEMPLATE(linux, sys_rt_sigqueueinfo); |
tom | d18b541 | 2009-11-24 16:08:40 +0000 | [diff] [blame] | 260 | DECL_TEMPLATE(linux, sys_rt_tgsigqueueinfo); |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 261 | DECL_TEMPLATE(linux, sys_rt_sigsuspend); |
| 262 | |
tom | c4e466f | 2008-01-08 16:31:25 +0000 | [diff] [blame] | 263 | // Linux-specific? |
| 264 | DECL_TEMPLATE(linux, sys_sync_file_range); |
tom | c0fe32a | 2009-11-25 11:29:14 +0000 | [diff] [blame] | 265 | DECL_TEMPLATE(linux, sys_sync_file_range2); |
sewardj | 6d65277 | 2008-11-06 23:11:42 +0000 | [diff] [blame] | 266 | DECL_TEMPLATE(linux, sys_stime); /* maybe generic? I'm not sure */ |
tom | c4e466f | 2008-01-08 16:31:25 +0000 | [diff] [blame] | 267 | |
bart | 10ac144 | 2008-06-21 16:28:24 +0000 | [diff] [blame] | 268 | // Linux specific (kernel modules) |
| 269 | DECL_TEMPLATE(linux, sys_init_module); |
| 270 | DECL_TEMPLATE(linux, sys_delete_module); |
| 271 | |
sewardj | d3263e5 | 2008-11-16 21:40:54 +0000 | [diff] [blame] | 272 | // Linux-specific (oprofile-related) |
| 273 | DECL_TEMPLATE(linux, sys_lookup_dcookie); // (*/32/64) L |
| 274 | |
tom | 9e4b636 | 2012-02-10 09:39:37 +0000 | [diff] [blame] | 275 | // Linux-specific (new in Linux 3.2) |
| 276 | DECL_TEMPLATE(linux, sys_process_vm_readv); |
| 277 | DECL_TEMPLATE(linux, sys_process_vm_writev); |
| 278 | |
tom | cec24b5 | 2013-07-17 13:58:59 +0000 | [diff] [blame] | 279 | // Linux-specific (new in Linux 2.6.36) |
| 280 | DECL_TEMPLATE(linux, sys_fanotify_init); |
| 281 | DECL_TEMPLATE(linux, sys_fanotify_mark); |
| 282 | |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 283 | /* --------------------------------------------------------------------- |
| 284 | Wrappers for sockets and ipc-ery. These are split into standalone |
| 285 | procedures because x86-linux hides them inside multiplexors |
| 286 | (sys_socketcall and sys_ipc). |
| 287 | ------------------------------------------------------------------ */ |
| 288 | |
| 289 | #define TId ThreadId |
| 290 | #define UW UWord |
| 291 | #define SR SysRes |
| 292 | |
njn | f37a81b | 2009-02-17 00:23:30 +0000 | [diff] [blame] | 293 | extern void ML_(linux_PRE_sys_msgsnd) ( TId, UW, UW, UW, UW ); |
| 294 | extern void ML_(linux_PRE_sys_msgrcv) ( TId, UW, UW, UW, UW, UW ); |
| 295 | extern void ML_(linux_POST_sys_msgrcv) ( TId, UW, UW, UW, UW, UW, UW ); |
| 296 | extern void ML_(linux_PRE_sys_msgctl) ( TId, UW, UW, UW ); |
| 297 | extern void ML_(linux_POST_sys_msgctl) ( TId, UW, UW, UW, UW ); |
| 298 | extern void ML_(linux_PRE_sys_getsockopt) ( TId, UW, UW, UW, UW, UW ); |
| 299 | extern void ML_(linux_POST_sys_getsockopt) ( TId, SR, UW, UW, UW, UW, UW ); |
tom | 70f71aa | 2013-07-17 14:36:57 +0000 | [diff] [blame] | 300 | extern void ML_(linux_PRE_sys_setsockopt) ( TId, UW, UW, UW, UW, UW ); |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 301 | |
cborntra | e48a444 | 2012-11-08 20:10:10 +0000 | [diff] [blame] | 302 | // Linux-specific (but non-arch-specific) ptrace wrapper helpers |
| 303 | extern void ML_(linux_PRE_getregset) ( ThreadId, long, long ); |
| 304 | extern void ML_(linux_PRE_setregset) ( ThreadId, long, long ); |
| 305 | extern void ML_(linux_POST_getregset)( ThreadId, long, long ); |
| 306 | |
njn | cd405ea | 2005-08-31 02:44:31 +0000 | [diff] [blame] | 307 | #undef TId |
| 308 | #undef UW |
| 309 | #undef SR |
| 310 | |
philippe | f2a7bbe | 2012-11-04 20:40:33 +0000 | [diff] [blame] | 311 | /* sys_ipc and sys_socketcall are multiplexors which implements several syscalls. |
philippe | 4eefc8c | 2012-10-21 20:21:17 +0000 | [diff] [blame] | 312 | Used e.g. by x86, ppc32, ppc64, ... */ |
| 313 | DECL_TEMPLATE(linux, sys_ipc); |
philippe | f2a7bbe | 2012-11-04 20:40:33 +0000 | [diff] [blame] | 314 | DECL_TEMPLATE(linux, sys_socketcall); |
philippe | 4eefc8c | 2012-10-21 20:21:17 +0000 | [diff] [blame] | 315 | |
philippe | 6b08776 | 2013-03-01 23:31:09 +0000 | [diff] [blame] | 316 | /* Depending on the platform, the below are implemented as |
| 317 | direct syscalls or via the above sys_socketcall multiplexor. */ |
| 318 | |
| 319 | /* Direct ipc related syscalls. */ |
| 320 | /* Semaphore */ |
| 321 | DECL_TEMPLATE(linux, sys_semget); |
| 322 | DECL_TEMPLATE(linux, sys_semop); |
| 323 | DECL_TEMPLATE(linux, sys_semctl); |
| 324 | DECL_TEMPLATE(linux, sys_semtimedop); |
| 325 | /* Shared memory */ |
| 326 | DECL_TEMPLATE(linux, wrap_sys_shmat); |
| 327 | DECL_TEMPLATE(linux, sys_shmget); |
| 328 | DECL_TEMPLATE(linux, sys_shmdt); |
| 329 | DECL_TEMPLATE(linux, sys_shmctl); |
| 330 | /* Message queue */ |
| 331 | DECL_TEMPLATE(linux, sys_msgget); |
| 332 | DECL_TEMPLATE(linux, sys_msgrcv); |
| 333 | DECL_TEMPLATE(linux, sys_msgsnd); |
| 334 | DECL_TEMPLATE(linux, sys_msgctl); |
| 335 | |
| 336 | /* Direct socket related syscalls. */ |
| 337 | DECL_TEMPLATE(linux, sys_socket); |
| 338 | DECL_TEMPLATE(linux, sys_setsockopt); |
| 339 | DECL_TEMPLATE(linux, sys_getsockopt); |
| 340 | DECL_TEMPLATE(linux, sys_connect); |
| 341 | DECL_TEMPLATE(linux, sys_accept); |
| 342 | DECL_TEMPLATE(linux, sys_accept4); |
| 343 | DECL_TEMPLATE(linux, sys_send); |
| 344 | DECL_TEMPLATE(linux, sys_sendto); |
| 345 | DECL_TEMPLATE(linux, sys_recv); |
| 346 | DECL_TEMPLATE(linux, sys_recvfrom); |
| 347 | DECL_TEMPLATE(linux, sys_sendmsg); |
| 348 | DECL_TEMPLATE(linux, sys_recvmsg); |
| 349 | DECL_TEMPLATE(linux, sys_shutdown); |
| 350 | DECL_TEMPLATE(linux, sys_bind); |
| 351 | DECL_TEMPLATE(linux, sys_listen); |
| 352 | DECL_TEMPLATE(linux, sys_getsockname); |
| 353 | DECL_TEMPLATE(linux, sys_getpeername); |
| 354 | DECL_TEMPLATE(linux, sys_socketpair); |
| 355 | |
| 356 | |
njn | c1b0181 | 2005-06-17 22:19:06 +0000 | [diff] [blame] | 357 | #endif // __PRIV_SYSWRAP_LINUX_H |
njn | 3c917bb | 2005-05-17 04:20:31 +0000 | [diff] [blame] | 358 | |
| 359 | /*--------------------------------------------------------------------*/ |
| 360 | /*--- end ---*/ |
| 361 | /*--------------------------------------------------------------------*/ |