]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/coregrind/m_syswrap/priv_syswrap-linux.h
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / coregrind / m_syswrap / priv_syswrap-linux.h
1
2 /*--------------------------------------------------------------------*/
3 /*--- Linux-specific syscalls stuff.          priv_syswrap-linux.h ---*/
4 /*--------------------------------------------------------------------*/
5
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9
10    Copyright (C) 2000-2010 Nicholas Nethercote
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
31 #ifndef __PRIV_SYSWRAP_LINUX_H
32 #define __PRIV_SYSWRAP_LINUX_H
33
34 /* requires #include "priv_types_n_macros.h" */
35
36 // Clone-related functions
37 extern Word ML_(start_thread_NORETURN) ( void* arg );
38 extern Addr ML_(allocstack)            ( ThreadId tid );
39 extern void ML_(call_on_new_stack_0_1) ( Addr stack, Addr retaddr,
40                                          void (*f)(Word), Word arg1 );
41 extern SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags,
42                                    Int* parent_tidptr, Int* child_tidptr );
43
44
45 // Linux-specific (but non-arch-specific) syscalls
46
47 DECL_TEMPLATE(linux, sys_mount);
48 DECL_TEMPLATE(linux, sys_oldumount);
49 DECL_TEMPLATE(linux, sys_umount);
50 DECL_TEMPLATE(linux, sys_perf_counter_open);
51 DECL_TEMPLATE(linux, sys_preadv);
52 DECL_TEMPLATE(linux, sys_pwritev);
53 DECL_TEMPLATE(linux, sys_dup3);
54 DECL_TEMPLATE(linux, sys_getcpu);
55 DECL_TEMPLATE(linux, sys_splice);
56 DECL_TEMPLATE(linux, sys_readahead);
57
58 // POSIX, but various sub-cases differ between Linux and Darwin.
59 DECL_TEMPLATE(linux, sys_fcntl);
60 DECL_TEMPLATE(linux, sys_fcntl64);
61 DECL_TEMPLATE(linux, sys_ioctl);
62
63 DECL_TEMPLATE(linux, sys_setfsuid16);
64 DECL_TEMPLATE(linux, sys_setfsuid);
65 DECL_TEMPLATE(linux, sys_setfsgid16);
66 DECL_TEMPLATE(linux, sys_setfsgid);
67 DECL_TEMPLATE(linux, sys_setresuid16);  // man page says "non-standard";
68 DECL_TEMPLATE(linux, sys_setresuid);    // man page says "non-standard"
69 DECL_TEMPLATE(linux, sys_getresuid16);
70 DECL_TEMPLATE(linux, sys_getresuid);
71 DECL_TEMPLATE(linux, sys_setresgid16);  // man page says "non-standard"
72 DECL_TEMPLATE(linux, sys_setresgid);    // man page says "non-standard"
73 DECL_TEMPLATE(linux, sys_getresgid16);
74 DECL_TEMPLATE(linux, sys_getresgid);
75
76 DECL_TEMPLATE(linux, sys_exit_group);
77 DECL_TEMPLATE(linux, sys_llseek);
78 DECL_TEMPLATE(linux, sys_adjtimex);
79 DECL_TEMPLATE(linux, sys_ioperm);
80 DECL_TEMPLATE(linux, sys_syslog);
81 DECL_TEMPLATE(linux, sys_vhangup);
82 DECL_TEMPLATE(linux, sys_sysinfo);
83 DECL_TEMPLATE(linux, sys_personality);
84 DECL_TEMPLATE(linux, sys_sysctl);
85 DECL_TEMPLATE(linux, sys_prctl);
86 DECL_TEMPLATE(linux, sys_sendfile);
87 DECL_TEMPLATE(linux, sys_sendfile64);
88 DECL_TEMPLATE(linux, sys_futex);
89 DECL_TEMPLATE(linux, sys_set_robust_list);
90 DECL_TEMPLATE(linux, sys_get_robust_list);
91 DECL_TEMPLATE(linux, sys_pselect6);
92 DECL_TEMPLATE(linux, sys_ppoll);
93
94 DECL_TEMPLATE(linux, sys_epoll_create);
95 DECL_TEMPLATE(linux, sys_epoll_create1);
96 DECL_TEMPLATE(linux, sys_epoll_ctl);
97 DECL_TEMPLATE(linux, sys_epoll_wait);
98 DECL_TEMPLATE(linux, sys_epoll_pwait);
99 DECL_TEMPLATE(linux, sys_eventfd);
100 DECL_TEMPLATE(linux, sys_eventfd2);
101
102 DECL_TEMPLATE(linux, sys_fallocate);
103
104 DECL_TEMPLATE(linux, sys_gettid);
105 DECL_TEMPLATE(linux, sys_set_tid_address);
106 DECL_TEMPLATE(linux, sys_tkill);
107 DECL_TEMPLATE(linux, sys_tgkill);
108
109 DECL_TEMPLATE(linux, sys_fadvise64);
110 DECL_TEMPLATE(linux, sys_fadvise64_64);
111
112 DECL_TEMPLATE(linux, sys_io_setup);
113 DECL_TEMPLATE(linux, sys_io_destroy);
114 DECL_TEMPLATE(linux, sys_io_getevents);
115 DECL_TEMPLATE(linux, sys_io_submit);
116 DECL_TEMPLATE(linux, sys_io_cancel);
117
118 DECL_TEMPLATE(linux, sys_ioprio_set);
119 DECL_TEMPLATE(linux, sys_ioprio_get);
120
121 DECL_TEMPLATE(linux, sys_mbind);
122 DECL_TEMPLATE(linux, sys_set_mempolicy);
123 DECL_TEMPLATE(linux, sys_get_mempolicy);
124
125 DECL_TEMPLATE(linux, sys_inotify_init);
126 DECL_TEMPLATE(linux, sys_inotify_init1);
127 DECL_TEMPLATE(linux, sys_inotify_add_watch);
128 DECL_TEMPLATE(linux, sys_inotify_rm_watch);
129
130 DECL_TEMPLATE(linux, sys_mq_open);
131 DECL_TEMPLATE(linux, sys_mq_unlink);
132 DECL_TEMPLATE(linux, sys_mq_timedsend);
133 DECL_TEMPLATE(linux, sys_mq_timedreceive);
134 DECL_TEMPLATE(linux, sys_mq_notify);
135 DECL_TEMPLATE(linux, sys_mq_getsetattr);
136
137 DECL_TEMPLATE(linux, sys_clock_settime);
138 DECL_TEMPLATE(linux, sys_clock_gettime);
139 DECL_TEMPLATE(linux, sys_clock_getres);
140 DECL_TEMPLATE(linux, sys_clock_nanosleep);
141
142 DECL_TEMPLATE(linux, sys_timer_create);      // Linux: varies across archs?
143 DECL_TEMPLATE(linux, sys_timer_settime);
144 DECL_TEMPLATE(linux, sys_timer_gettime);
145 DECL_TEMPLATE(linux, sys_timer_getoverrun);
146 DECL_TEMPLATE(linux, sys_timer_delete);
147 DECL_TEMPLATE(linux, sys_timerfd_create);
148 DECL_TEMPLATE(linux, sys_timerfd_gettime);
149 DECL_TEMPLATE(linux, sys_timerfd_settime);
150
151 DECL_TEMPLATE(linux, sys_signalfd);
152 DECL_TEMPLATE(linux, sys_signalfd4);
153
154 DECL_TEMPLATE(linux, sys_capget);
155 DECL_TEMPLATE(linux, sys_capset);
156
157 DECL_TEMPLATE(linux, sys_openat);
158 DECL_TEMPLATE(linux, sys_mkdirat);
159 DECL_TEMPLATE(linux, sys_mknodat);
160 DECL_TEMPLATE(linux, sys_fchownat);
161 DECL_TEMPLATE(linux, sys_futimesat);
162 DECL_TEMPLATE(linux, sys_newfstatat);
163 DECL_TEMPLATE(linux, sys_unlinkat);
164 DECL_TEMPLATE(linux, sys_renameat);
165 DECL_TEMPLATE(linux, sys_linkat);
166 DECL_TEMPLATE(linux, sys_symlinkat);
167 DECL_TEMPLATE(linux, sys_readlinkat);
168 DECL_TEMPLATE(linux, sys_fchmodat);
169 DECL_TEMPLATE(linux, sys_faccessat);
170 DECL_TEMPLATE(linux, sys_utimensat);
171
172 DECL_TEMPLATE(linux, sys_add_key);
173 DECL_TEMPLATE(linux, sys_request_key);
174 DECL_TEMPLATE(linux, sys_keyctl);
175
176 // These ones have 32-bit generic equivalents, but the 16-bit versions (they
177 // use 16-bit gid_t and uid_t types) seem to be Linux-specific.
178 DECL_TEMPLATE(linux, sys_getuid16);
179 DECL_TEMPLATE(linux, sys_setuid16);
180 DECL_TEMPLATE(linux, sys_getgid16);
181 DECL_TEMPLATE(linux, sys_setgid16);
182 DECL_TEMPLATE(linux, sys_geteuid16);
183 DECL_TEMPLATE(linux, sys_getegid16);
184 DECL_TEMPLATE(linux, sys_setreuid16);
185 DECL_TEMPLATE(linux, sys_setregid16);
186 DECL_TEMPLATE(linux, sys_getgroups16);
187 DECL_TEMPLATE(linux, sys_setgroups16);
188
189 // Again, these 16-bit versions are Linux-specific, the 32-bit versions are
190 // generic.
191 DECL_TEMPLATE(linux, sys_chown16);
192 DECL_TEMPLATE(linux, sys_fchown16);
193 //DECL_TEMPLATE(linux, sys_lchown16);      // not yet encountered
194
195 // Are these POSIX?  In Darwin they have an extra parameter 'position',
196 // so put them here.
197 DECL_TEMPLATE(linux, sys_setxattr);
198 DECL_TEMPLATE(linux, sys_lsetxattr);
199 DECL_TEMPLATE(linux, sys_fsetxattr);
200 DECL_TEMPLATE(linux, sys_getxattr);
201 DECL_TEMPLATE(linux, sys_lgetxattr);
202 DECL_TEMPLATE(linux, sys_fgetxattr);
203 DECL_TEMPLATE(linux, sys_listxattr);
204 DECL_TEMPLATE(linux, sys_llistxattr);
205 DECL_TEMPLATE(linux, sys_flistxattr);
206 DECL_TEMPLATE(linux, sys_removexattr);
207 DECL_TEMPLATE(linux, sys_lremovexattr);
208 DECL_TEMPLATE(linux, sys_fremovexattr);
209
210 // These are Posix, but not necessarily syscalls.  Darwin only supports
211 // sched_get_priority_{min,max} and sched_yield, but as libc functions, not
212 // syscalls.
213 DECL_TEMPLATE(linux, sys_sched_setparam);
214 DECL_TEMPLATE(linux, sys_sched_getparam);
215 DECL_TEMPLATE(linux, sys_sched_setscheduler);
216 DECL_TEMPLATE(linux, sys_sched_getscheduler);
217 DECL_TEMPLATE(linux, sys_sched_yield);
218 DECL_TEMPLATE(linux, sys_sched_get_priority_max);
219 DECL_TEMPLATE(linux, sys_sched_get_priority_min);
220 DECL_TEMPLATE(linux, sys_sched_rr_get_interval);
221 DECL_TEMPLATE(linux, sys_sched_setaffinity);
222 DECL_TEMPLATE(linux, sys_sched_getaffinity);
223
224 // These ones have different parameters and/or return values on Darwin.
225 // Also, some archs on Linux do not match the generic wrapper for sys_pipe.
226 DECL_TEMPLATE(linux, sys_munlockall);
227 DECL_TEMPLATE(linux, sys_pipe);
228 DECL_TEMPLATE(linux, sys_pipe2);
229 DECL_TEMPLATE(linux, sys_quotactl);
230 DECL_TEMPLATE(linux, sys_waitid);
231
232 // Posix, but in Darwin utime is a libc function that calls syscall utimes.
233 DECL_TEMPLATE(linux, sys_utime);
234
235 // On Darwin, off_t is 64-bits even on 32-bit platforms.
236 DECL_TEMPLATE(linux, sys_lseek);
237
238 // Darwin (and probably other OSes) don't have the old_sigset_t type.
239 DECL_TEMPLATE(linux, sys_sigpending);
240 DECL_TEMPLATE(linux, sys_sigprocmask);
241
242 // I think these are Linux-specific?
243 DECL_TEMPLATE(linux, sys_rt_sigaction);
244 DECL_TEMPLATE(linux, sys_rt_sigprocmask);
245 DECL_TEMPLATE(linux, sys_rt_sigpending);
246 DECL_TEMPLATE(linux, sys_rt_sigtimedwait);
247 DECL_TEMPLATE(linux, sys_rt_sigqueueinfo);
248 DECL_TEMPLATE(linux, sys_rt_tgsigqueueinfo);
249 DECL_TEMPLATE(linux, sys_rt_sigsuspend);
250
251 // Linux-specific?
252 DECL_TEMPLATE(linux, sys_sync_file_range);
253 DECL_TEMPLATE(linux, sys_sync_file_range2);
254 DECL_TEMPLATE(linux, sys_stime);  /* maybe generic?  I'm not sure */
255
256 // Linux specific (kernel modules)
257 DECL_TEMPLATE(linux, sys_init_module);
258 DECL_TEMPLATE(linux, sys_delete_module);
259
260 // Linux-specific (oprofile-related)
261 DECL_TEMPLATE(linux, sys_lookup_dcookie);        // (*/32/64) L
262
263 /* ---------------------------------------------------------------------
264    Wrappers for sockets and ipc-ery.  These are split into standalone
265    procedures because x86-linux hides them inside multiplexors
266    (sys_socketcall and sys_ipc).
267    ------------------------------------------------------------------ */
268
269 #define TId ThreadId
270 #define UW  UWord
271 #define SR  SysRes
272
273 extern void ML_(linux_PRE_sys_msgsnd)      ( TId, UW, UW, UW, UW );
274 extern void ML_(linux_PRE_sys_msgrcv)      ( TId, UW, UW, UW, UW, UW );
275 extern void ML_(linux_POST_sys_msgrcv)     ( TId, UW, UW, UW, UW, UW, UW );
276 extern void ML_(linux_PRE_sys_msgctl)      ( TId, UW, UW, UW );
277 extern void ML_(linux_POST_sys_msgctl)     ( TId, UW, UW, UW, UW );
278 extern void ML_(linux_PRE_sys_getsockopt)  ( TId, UW, UW, UW, UW, UW );
279 extern void ML_(linux_POST_sys_getsockopt) ( TId, SR, UW, UW, UW, UW, UW );
280
281 #undef TId
282 #undef UW
283 #undef SR
284
285 #endif   // __PRIV_SYSWRAP_LINUX_H
286
287 /*--------------------------------------------------------------------*/
288 /*--- end                                                          ---*/
289 /*--------------------------------------------------------------------*/