• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*--------------------------------------------------------------------*/
3 /*--- Platform-specific syscalls stuff.      syswrap-ppc64-linux.c ---*/
4 /*--------------------------------------------------------------------*/
5 
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9 
10    Copyright (C) 2005-2017 Nicholas Nethercote <njn@valgrind.org>
11    Copyright (C) 2005-2017 Cerion Armour-Brown <cerion@open-works.co.uk>
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 #if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
32 
33 #include "pub_core_basics.h"
34 #include "pub_core_vki.h"
35 #include "pub_core_vkiscnums.h"
36 #include "pub_core_threadstate.h"
37 #include "pub_core_aspacemgr.h"
38 #include "pub_core_debuglog.h"
39 #include "pub_core_libcbase.h"
40 #include "pub_core_libcassert.h"
41 #include "pub_core_libcprint.h"
42 #include "pub_core_libcproc.h"
43 #include "pub_core_libcsignal.h"
44 #include "pub_core_options.h"
45 #include "pub_core_scheduler.h"
46 #include "pub_core_sigframe.h"      // For VG_(sigframe_destroy)()
47 #include "pub_core_signals.h"
48 #include "pub_core_syscall.h"
49 #include "pub_core_syswrap.h"
50 #include "pub_core_tooliface.h"
51 
52 #include "priv_types_n_macros.h"
53 #include "priv_syswrap-generic.h"   /* for decls of generic wrappers */
54 #include "priv_syswrap-linux.h"     /* for decls of linux-ish wrappers */
55 #include "priv_syswrap-main.h"
56 
57 
58 /* ---------------------------------------------------------------------
59    clone() handling
60    ------------------------------------------------------------------ */
61 
62 /* Call f(arg1), but first switch stacks, using 'stack' as the new
63    stack, and use 'retaddr' as f's return-to address.  Also, clear all
64    the integer registers before entering f.*/
65 __attribute__((noreturn))
66 void ML_(call_on_new_stack_0_1) ( Addr stack,
67                                   Addr retaddr,
68                                   void (*f_desc)(Word),
69                                   Word arg1 );
70 //    r3 = stack
71 //    r4 = retaddr
72 //    r5 = function descriptor
73 //    r6 = arg1
74 /* On PPC64, a func ptr is represented by a TOC entry ptr.
75    This TOC entry contains three words; the first word is the function
76    address, the second word is the TOC ptr (r2), and the third word is
77    the static chain value. */
78 asm(
79 #if defined(VGP_ppc64be_linux)
80 "   .align   2\n"
81 "   .globl   vgModuleLocal_call_on_new_stack_0_1\n"
82 "   .section \".opd\",\"aw\"\n"
83 "   .align   3\n"
84 "vgModuleLocal_call_on_new_stack_0_1:\n"
85 "   .quad    .vgModuleLocal_call_on_new_stack_0_1,.TOC.@tocbase,0\n"
86 "   .previous\n"
87 "   .type    .vgModuleLocal_call_on_new_stack_0_1,@function\n"
88 "   .globl   .vgModuleLocal_call_on_new_stack_0_1\n"
89 ".vgModuleLocal_call_on_new_stack_0_1:\n"
90 "   mr    %r1,%r3\n\t"     // stack to %sp
91 "   mtlr  %r4\n\t"         // retaddr to %lr
92 "   ld 5,0(5)\n\t"         // load f_ptr from f_desc[0]
93 "   mtctr %r5\n\t"         // f_ptr to count reg
94 "   mr %r3,%r6\n\t"        // arg1 to %r3
95 "   li 0,0\n\t"            // zero all GP regs
96 "   li 4,0\n\t"
97 "   li 5,0\n\t"
98 "   li 6,0\n\t"
99 "   li 7,0\n\t"
100 "   li 8,0\n\t"
101 "   li 9,0\n\t"
102 "   li 10,0\n\t"
103 "   li 11,0\n\t"
104 "   li 12,0\n\t"
105 "   li 13,0\n\t"
106 "   li 14,0\n\t"
107 "   li 15,0\n\t"
108 "   li 16,0\n\t"
109 "   li 17,0\n\t"
110 "   li 18,0\n\t"
111 "   li 19,0\n\t"
112 "   li 20,0\n\t"
113 "   li 21,0\n\t"
114 "   li 22,0\n\t"
115 "   li 23,0\n\t"
116 "   li 24,0\n\t"
117 "   li 25,0\n\t"
118 "   li 26,0\n\t"
119 "   li 27,0\n\t"
120 "   li 28,0\n\t"
121 "   li 29,0\n\t"
122 "   li 30,0\n\t"
123 "   li 31,0\n\t"
124 "   mtxer 0\n\t"           // CAB: Need this?
125 "   mtcr 0\n\t"            // CAB: Need this?
126 "   bctr\n\t"              // jump to dst
127 "   trap\n"                // should never get here
128 #else
129 //  ppc64le_linux
130 "   .align   2\n"
131 "   .globl   vgModuleLocal_call_on_new_stack_0_1\n"
132 "vgModuleLocal_call_on_new_stack_0_1:\n"
133 "   .type    .vgModuleLocal_call_on_new_stack_0_1,@function\n"
134 "#if _CALL_ELF == 2 \n"
135 "0: addis        2,12,.TOC.-0b@ha\n"
136 "   addi         2,2,.TOC.-0b@l\n"
137 "#endif\n"
138 ".localentry vgModuleLocal_call_on_new_stack_0_1, .-vgModuleLocal_call_on_new_stack_0_1\n"
139 "   mr    %r1,%r3\n\t"     // stack to %sp
140 "   mtlr  %r4\n\t"         // retaddr to %lr
141 "   mtctr %r5\n\t"         // f_ptr to count reg
142 "   mr %r3,%r6\n\t"        // arg1 to %r3
143 "   li 0,0\n\t"            // zero all GP regs
144 "   li 4,0\n\t"
145 "   li 5,0\n\t"
146 "   li 6,0\n\t"
147 "   li 7,0\n\t"
148 "   li 8,0\n\t"
149 "   li 9,0\n\t"
150 "   li 10,0\n\t"
151 "   li 11,0\n\t"
152 "   li 12,0\n\t"
153 "   li 13,0\n\t"
154 "   li 14,0\n\t"
155 "   li 15,0\n\t"
156 "   li 16,0\n\t"
157 "   li 17,0\n\t"
158 "   li 18,0\n\t"
159 "   li 19,0\n\t"
160 "   li 20,0\n\t"
161 "   li 21,0\n\t"
162 "   li 22,0\n\t"
163 "   li 23,0\n\t"
164 "   li 24,0\n\t"
165 "   li 25,0\n\t"
166 "   li 26,0\n\t"
167 "   li 27,0\n\t"
168 "   li 28,0\n\t"
169 "   li 29,0\n\t"
170 "   li 30,0\n\t"
171 "   li 31,0\n\t"
172 "   mtxer 0\n\t"           // CAB: Need this?
173 "   mtcr 0\n\t"            // CAB: Need this?
174 "   bctr\n\t"              // jump to dst
175 "   trap\n"                // should never get here
176 #endif
177 );
178 
179 
180 /*
181         Perform a clone system call.  clone is strange because it has
182         fork()-like return-twice semantics, so it needs special
183         handling here.
184 
185         Upon entry, we have:
186 
187             word (fn)(void*)    in r3
188             void* child_stack   in r4
189             word flags          in r5
190             void* arg           in r6
191             pid_t* child_tid    in r7
192             pid_t* parent_tid   in r8
193             void* ???           in r9
194 
195         Note: r3 contains fn desc ptr, not fn ptr -- p_fn = p_fn_desc[0]
196         System call requires:
197 
198             int    $__NR_clone  in r0  (sc number)
199             int    flags        in r3  (sc arg1)
200             void*  child_stack  in r4  (sc arg2)
201             pid_t* parent_tid   in r5  (sc arg3)
202             ??     child_tls    in r6  (sc arg4)
203             pid_t* child_tid    in r7  (sc arg5)
204             void*  ???          in r8  (sc arg6)
205 
206         Returns a ULong encoded as: top half is %cr following syscall,
207         low half is syscall return value (r3).
208  */
209 #define __NR_CLONE        VG_STRINGIFY(__NR_clone)
210 #define __NR_EXIT         VG_STRINGIFY(__NR_exit)
211 
212 // See priv_syswrap-linux.h for arg profile.
213 asm(
214 #if defined(VGP_ppc64be_linux)
215 "   .align   2\n"
216 "   .globl   do_syscall_clone_ppc64_linux\n"
217 "   .section \".opd\",\"aw\"\n"
218 "   .align   3\n"
219 "do_syscall_clone_ppc64_linux:\n"
220 "   .quad    .do_syscall_clone_ppc64_linux,.TOC.@tocbase,0\n"
221 "   .previous\n"
222 "   .type    .do_syscall_clone_ppc64_linux,@function\n"
223 "   .globl   .do_syscall_clone_ppc64_linux\n"
224 ".do_syscall_clone_ppc64_linux:\n"
225 "       stdu    1,-64(1)\n"
226 "       std     29,40(1)\n"
227 "       std     30,48(1)\n"
228 "       std     31,56(1)\n"
229 "       mr      30,3\n"              // preserve fn
230 "       mr      31,6\n"              // preserve arg
231 
232         // setup child stack
233 "       rldicr  4,4, 0,59\n"         // trim sp to multiple of 16 bytes
234                                      // (r4 &= ~0xF)
235 "       li      0,0\n"
236 "       stdu    0,-32(4)\n"          // make initial stack frame
237 "       mr      29,4\n"              // preserve sp
238 
239         // setup syscall
240 "       li      0,"__NR_CLONE"\n"    // syscall number
241 "       mr      3,5\n"               // syscall arg1: flags
242         // r4 already setup          // syscall arg2: child_stack
243 "       mr      5,8\n"               // syscall arg3: parent_tid
244 "       mr      6,13\n"              // syscall arg4: REAL THREAD tls
245 "       mr      7,7\n"               // syscall arg5: child_tid
246 "       mr      8,8\n"               // syscall arg6: ????
247 "       mr      9,9\n"               // syscall arg7: ????
248 
249 "       sc\n"                        // clone()
250 
251 "       mfcr    4\n"                 // CR now in low half r4
252 "       sldi    4,4,32\n"            // CR now in hi half r4
253 
254 "       sldi    3,3,32\n"
255 "       srdi    3,3,32\n"            // zero out hi half r3
256 
257 "       or      3,3,4\n"             // r3 = CR : syscall-retval
258 "       cmpwi   3,0\n"               // child if retval == 0 (note, cmpw)
259 "       bne     1f\n"                // jump if !child
260 
261         /* CHILD - call thread function */
262         /* Note: 2.4 kernel doesn't set the child stack pointer,
263            so we do it here.
264            That does leave a small window for a signal to be delivered
265            on the wrong stack, unfortunately. */
266 "       mr      1,29\n"
267 "       ld      30, 0(30)\n"         // convert fn desc ptr to fn ptr
268 "       mtctr   30\n"                // ctr reg = fn
269 "       mr      3,31\n"              // r3 = arg
270 "       bctrl\n"                     // call fn()
271 
272         // exit with result
273 "       li      0,"__NR_EXIT"\n"
274 "       sc\n"
275 
276         // Exit returned?!
277 "       .long   0\n"
278 
279         // PARENT or ERROR - return
280 "1:     ld      29,40(1)\n"
281 "       ld      30,48(1)\n"
282 "       ld      31,56(1)\n"
283 "       addi    1,1,64\n"
284 "       blr\n"
285 #else
286 "   .align   2\n"
287 "   .globl   do_syscall_clone_ppc64_linux\n"
288 "   .type    do_syscall_clone_ppc64_linux,@function\n"
289 "do_syscall_clone_ppc64_linux:\n"
290 "   .globl   .do_syscall_clone_ppc64_linux\n"
291 ".do_syscall_clone_ppc64_linux:\n"
292 "#if _CALL_ELF == 2 \n"
293 "0:     addis        2,12,.TOC.-0b@ha \n"
294 "       addi         2,2,.TOC.-0b@l \n"
295 "#endif \n"
296 "   .localentry  do_syscall_clone_ppc64_linux, .-do_syscall_clone_ppc64_linux \n"
297 "       stdu    1,-64(1)\n"
298 "       std     29,40(1)\n"
299 "       std     30,48(1)\n"
300 "       std     31,56(1)\n"
301 "       mr      30,3\n"              // preserve fn
302 "       mr      31,6\n"              // preserve arg
303 
304         // setup child stack
305 "       rldicr  4,4, 0,59\n"         // trim sp to multiple of 16 bytes
306                                      // (r4 &= ~0xF)
307 "       li      0,0\n"
308 "       stdu    0,-32(4)\n"          // make initial stack frame
309 "       mr      29,4\n"              // preserve sp
310 
311         // setup syscall
312 "       li      0,"__NR_CLONE"\n"    // syscall number
313 "       mr      3,5\n"               // syscall arg1: flags
314         // r4 already setup          // syscall arg2: child_stack
315 "       mr      5,8\n"               // syscall arg3: parent_tid
316 "       mr      6,13\n"              // syscall arg4: REAL THREAD tls
317 "       mr      7,7\n"               // syscall arg5: child_tid
318 "       mr      8,8\n"               // syscall arg6: ????
319 "       mr      9,9\n"               // syscall arg7: ????
320 
321 "       sc\n"                        // clone()
322 
323 "       mfcr    4\n"                 // CR now in low half r4
324 "       sldi    4,4,32\n"            // CR now in hi half r4
325 
326 "       sldi    3,3,32\n"
327 "       srdi    3,3,32\n"            // zero out hi half r3
328 
329 "       or      3,3,4\n"             // r3 = CR : syscall-retval
330 "       cmpwi   3,0\n"               // child if retval == 0 (note, cmpw)
331 "       bne     1f\n"                // jump if !child
332 
333         /* CHILD - call thread function */
334         /* Note: 2.4 kernel doesn't set the child stack pointer,
335            so we do it here.
336            That does leave a small window for a signal to be delivered
337            on the wrong stack, unfortunately. */
338 "       mr      1,29\n"
339 "       mtctr   30\n"                // ctr reg = fn
340 "       mr      3,31\n"              // r3 = arg
341 "       bctrl\n"                     // call fn()
342 
343         // exit with result
344 "       li      0,"__NR_EXIT"\n"
345 "       sc\n"
346 
347         // Exit returned?!
348 "       .long   0\n"
349 
350         // PARENT or ERROR - return
351 "1:     ld      29,40(1)\n"
352 "       ld      30,48(1)\n"
353 "       ld      31,56(1)\n"
354 "       addi    1,1,64\n"
355 "       blr\n"
356 #endif
357 );
358 
359 #undef __NR_CLONE
360 #undef __NR_EXIT
361 
362 /* ---------------------------------------------------------------------
363    More thread stuff
364    ------------------------------------------------------------------ */
365 
VG_(cleanup_thread)366 void VG_(cleanup_thread) ( ThreadArchState* arch )
367 {
368 }
369 
370 /* ---------------------------------------------------------------------
371    PRE/POST wrappers for ppc64/Linux-specific syscalls
372    ------------------------------------------------------------------ */
373 
374 #define PRE(name)       DEFN_PRE_TEMPLATE(ppc64_linux, name)
375 #define POST(name)      DEFN_POST_TEMPLATE(ppc64_linux, name)
376 
377 /* Add prototypes for the wrappers declared here, so that gcc doesn't
378    harass us for not having prototypes.  Really this is a kludge --
379    the right thing to do is to make these wrappers 'static' since they
380    aren't visible outside this file, but that requires even more macro
381    magic. */
382 
383 DECL_TEMPLATE(ppc64_linux, sys_mmap);
384 //zz DECL_TEMPLATE(ppc64_linux, sys_mmap2);
385 //zz DECL_TEMPLATE(ppc64_linux, sys_stat64);
386 //zz DECL_TEMPLATE(ppc64_linux, sys_lstat64);
387 //zz DECL_TEMPLATE(ppc64_linux, sys_fstat64);
388 //zz DECL_TEMPLATE(ppc64_linux, sys_sigreturn);
389 DECL_TEMPLATE(ppc64_linux, sys_rt_sigreturn);
390 DECL_TEMPLATE(ppc64_linux, sys_fadvise64);
391 
PRE(sys_mmap)392 PRE(sys_mmap)
393 {
394    SysRes r;
395 
396    PRINT("sys_mmap ( %#lx, %lu, %lu, %lu, %lu, %lu )",
397          ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 );
398    PRE_REG_READ6(long, "mmap",
399                  unsigned long, start, unsigned long, length,
400                  unsigned long, prot,  unsigned long, flags,
401                  unsigned long, fd,    unsigned long, offset);
402 
403    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5,
404                                        (Off64T)ARG6 );
405    SET_STATUS_from_SysRes(r);
406 }
407 
408 //zz PRE(sys_mmap2)
409 //zz {
410 //zz    SysRes r;
411 //zz
412 //zz    // Exactly like old_mmap() except:
413 //zz    //  - the file offset is specified in 4K units rather than bytes,
414 //zz    //    so that it can be used for files bigger than 2^32 bytes.
415 //zz    PRINT("sys_mmap2 ( %p, %llu, %d, %d, %d, %d )",
416 //zz          ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
417 //zz    PRE_REG_READ6(long, "mmap2",
418 //zz                  unsigned long, start, unsigned long, length,
419 //zz                  unsigned long, prot,  unsigned long, flags,
420 //zz                  unsigned long, fd,    unsigned long, offset);
421 //zz
422 //zz    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5,
423 //zz                                        4096 * (Off64T)ARG6 );
424 //zz    SET_STATUS_from_SysRes(r);
425 //zz }
426 //zz
427 //zz // XXX: lstat64/fstat64/stat64 are generic, but not necessarily
428 //zz // applicable to every architecture -- I think only to 32-bit archs.
429 //zz // We're going to need something like linux/core_os32.h for such
430 //zz // things, eventually, I think.  --njn
431 //zz PRE(sys_stat64)
432 //zz {
433 //zz    PRINT("sys_stat64 ( %p, %p )",ARG1,ARG2);
434 //zz    PRE_REG_READ2(long, "stat64", char *, file_name, struct stat64 *, buf);
435 //zz    PRE_MEM_RASCIIZ( "stat64(file_name)", ARG1 );
436 //zz    PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) );
437 //zz }
438 //zz
439 //zz POST(sys_stat64)
440 //zz {
441 //zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
442 //zz }
443 //zz
444 //zz PRE(sys_lstat64)
445 //zz {
446 //zz    PRINT("sys_lstat64 ( %p(%s), %p )",ARG1,ARG1,ARG2);
447 //zz    PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf);
448 //zz    PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 );
449 //zz    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
450 //zz }
451 //zz
452 //zz POST(sys_lstat64)
453 //zz {
454 //zz    vg_assert(SUCCESS);
455 //zz    if (RES == 0) {
456 //zz       POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
457 //zz    }
458 //zz }
459 //zz
460 //zz PRE(sys_fstat64)
461 //zz {
462 //zz   PRINT("sys_fstat64 ( %d, %p )",ARG1,ARG2);
463 //zz   PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf);
464 //zz   PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
465 //zz }
466 //zz
467 //zz POST(sys_fstat64)
468 //zz {
469 //zz   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
470 //zz }
471 
PRE(sys_fadvise64)472 PRE(sys_fadvise64)
473 {
474    PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )",  SARG1, SARG2, SARG3, SARG4);
475    PRE_REG_READ4(long, "fadvise64",
476                  int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
477 }
478 
PRE(sys_rt_sigreturn)479 PRE(sys_rt_sigreturn)
480 {
481    /* See comments on PRE(sys_rt_sigreturn) in syswrap-amd64-linux.c for
482       an explanation of what follows. */
483 
484    //ThreadState* tst;
485    PRINT("sys_rt_sigreturn ( )");
486 
487    vg_assert(VG_(is_valid_tid)(tid));
488    vg_assert(tid >= 1 && tid < VG_N_THREADS);
489    vg_assert(VG_(is_running_thread)(tid));
490 
491    ///* Adjust esp to point to start of frame; skip back up over handler
492    //   ret addr */
493    //tst = VG_(get_ThreadState)(tid);
494    //tst->arch.vex.guest_ESP -= sizeof(Addr);
495    // Should we do something equivalent on ppc64-linux?  Who knows.
496 
497    ///* This is only so that the EIP is (might be) useful to report if
498    //   something goes wrong in the sigreturn */
499    //ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
500    // Should we do something equivalent on ppc64?  Who knows.
501 
502    /* Restore register state from frame and remove it */
503    VG_(sigframe_destroy)(tid, True);
504 
505    /* Tell the driver not to update the guest state with the "result",
506       and set a bogus result to keep it happy. */
507    *flags |= SfNoWriteResult;
508    SET_STATUS_Success(0);
509 
510    /* Check to see if any signals arose as a result of this. */
511    *flags |= SfPollAfter;
512 }
513 
514 #undef PRE
515 #undef POST
516 
517 /* ---------------------------------------------------------------------
518    The ppc64/Linux syscall table
519    ------------------------------------------------------------------ */
520 
521 /* Add an ppc64-linux specific wrapper to a syscall table. */
522 #define PLAX_(sysno, name)    WRAPPER_ENTRY_X_(ppc64_linux, sysno, name)
523 #define PLAXY(sysno, name)    WRAPPER_ENTRY_XY(ppc64_linux, sysno, name)
524 
525 // This table maps from __NR_xxx syscall numbers (from
526 // linux/include/asm-ppc/unistd.h) to the appropriate PRE/POST sys_foo()
527 // wrappers on ppc64 (as per sys_call_table in linux/arch/ppc/kernel/entry.S).
528 //
529 // For those syscalls not handled by Valgrind, the annotation indicate its
530 // arch/OS combination, eg. */* (generic), */Linux (Linux only), ?/?
531 // (unknown).
532 
533 static SyscallTableEntry syscall_table[] = {
534 // _____(__NR_restart_syscall,   sys_restart_syscall),    //   0
535    GENX_(__NR_exit,              sys_exit),               //   1
536    GENX_(__NR_fork,              sys_fork),               //   2
537    GENXY(__NR_read,              sys_read),               //   3
538    GENX_(__NR_write,             sys_write),              //   4
539 
540    GENXY(__NR_open,              sys_open),               //   5
541    GENXY(__NR_close,             sys_close),              //   6
542    GENXY(__NR_waitpid,           sys_waitpid),            //   7
543    GENXY(__NR_creat,             sys_creat),              //   8
544    GENX_(__NR_link,              sys_link),               //   9
545 
546    GENX_(__NR_unlink,            sys_unlink),             //  10
547    GENX_(__NR_execve,            sys_execve),             //  11
548    GENX_(__NR_chdir,             sys_chdir),              //  12
549    GENXY(__NR_time,              sys_time),               //  13
550    GENX_(__NR_mknod,             sys_mknod),              //  14
551 
552    GENX_(__NR_chmod,             sys_chmod),              //  15
553    GENX_(__NR_lchown,            sys_lchown),             //  16
554 // _____(__NR_break,             sys_break),              //  17
555 // _____(__NR_oldstat,           sys_oldstat),            //  18
556    LINX_(__NR_lseek,             sys_lseek),              //  19
557 
558    GENX_(__NR_getpid,            sys_getpid),             //  20
559    LINX_(__NR_mount,             sys_mount),              //  21
560 // _____(__NR_umount,            sys_umount),             //  22
561    GENX_(__NR_setuid,            sys_setuid),             //  23
562    GENX_(__NR_getuid,            sys_getuid),             //  24
563 
564 // _____(__NR_stime,             sys_stime),              //  25
565 // When ptrace is supported, memcheck/tests/linux/getregset should be enabled
566 // _____(__NR_ptrace,            sys_ptrace),             //  26
567    GENX_(__NR_alarm,             sys_alarm),              //  27
568 // _____(__NR_oldfstat,          sys_oldfstat),           //  28
569    GENX_(__NR_pause,             sys_pause),              //  29
570 
571    LINX_(__NR_utime,             sys_utime),              //  30
572 // _____(__NR_stty,              sys_stty),               //  31
573 // _____(__NR_gtty,              sys_gtty),               //  32
574    GENX_(__NR_access,            sys_access),             //  33
575 // _____(__NR_nice,              sys_nice),               //  34
576 
577 // _____(__NR_ftime,             sys_ftime),              //  35
578    GENX_(__NR_sync,              sys_sync),               //  36
579    GENX_(__NR_kill,              sys_kill),               //  37
580    GENX_(__NR_rename,            sys_rename),             //  38
581    GENX_(__NR_mkdir,             sys_mkdir),              //  39
582 
583    GENX_(__NR_rmdir,             sys_rmdir),              //  40
584    GENXY(__NR_dup,               sys_dup),                //  41
585    LINXY(__NR_pipe,              sys_pipe),               //  42
586    GENXY(__NR_times,             sys_times),              //  43
587 // _____(__NR_prof,              sys_prof),               //  44
588 
589    GENX_(__NR_brk,               sys_brk),                //  45
590    GENX_(__NR_setgid,            sys_setgid),             //  46
591    GENX_(__NR_getgid,            sys_getgid),             //  47
592 // _____(__NR_signal,            sys_signal),             //  48
593    GENX_(__NR_geteuid,           sys_geteuid),            //  49
594 
595    GENX_(__NR_getegid,           sys_getegid),            //  50
596 // _____(__NR_acct,              sys_acct),               //  51
597    LINX_(__NR_umount2,           sys_umount),             //  52
598 // _____(__NR_lock,              sys_lock),               //  53
599    LINXY(__NR_ioctl,             sys_ioctl),              //  54
600 
601    LINXY(__NR_fcntl,             sys_fcntl),              //  55
602 // _____(__NR_mpx,               sys_mpx),                //  56
603    GENX_(__NR_setpgid,           sys_setpgid),            //  57
604 // _____(__NR_ulimit,            sys_ulimit),             //  58
605 // _____(__NR_oldolduname,       sys_oldolduname),        //  59
606 
607    GENX_(__NR_umask,             sys_umask),              //  60
608    GENX_(__NR_chroot,            sys_chroot),             //  61
609 // _____(__NR_ustat,             sys_ustat),              //  62
610    GENXY(__NR_dup2,              sys_dup2),               //  63
611    GENX_(__NR_getppid,           sys_getppid),            //  64
612 
613    GENX_(__NR_getpgrp,           sys_getpgrp),            //  65
614    GENX_(__NR_setsid,            sys_setsid),             //  66
615 // _____(__NR_sigaction,         sys_sigaction),          //  67
616 // _____(__NR_sgetmask,          sys_sgetmask),           //  68
617 // _____(__NR_ssetmask,          sys_ssetmask),           //  69
618 
619    GENX_(__NR_setreuid,          sys_setreuid),           //  70
620    GENX_(__NR_setregid,          sys_setregid),           //  71
621 // _____(__NR_sigsuspend,        sys_sigsuspend),         //  72
622 // _____(__NR_sigpending,        sys_sigpending),         //  73
623 // _____(__NR_sethostname,       sys_sethostname),        //  74
624 
625    GENX_(__NR_setrlimit,         sys_setrlimit),          //  75
626 // _____(__NR_getrlimit,         sys_getrlimit),          //  76
627    GENXY(__NR_getrusage,         sys_getrusage),          //  77
628    GENXY(__NR_gettimeofday,      sys_gettimeofday),       //  78
629 // _____(__NR_settimeofday,      sys_settimeofday),       //  79
630 
631    GENXY(__NR_getgroups,         sys_getgroups),          //  80
632    GENX_(__NR_setgroups,         sys_setgroups),          //  81
633 // _____(__NR_select,            sys_select),             //  82
634    GENX_(__NR_symlink,           sys_symlink),            //  83
635 // _____(__NR_oldlstat,          sys_oldlstat),           //  84
636 
637    GENX_(__NR_readlink,          sys_readlink),           //  85
638 // _____(__NR_uselib,            sys_uselib),             //  86
639 // _____(__NR_swapon,            sys_swapon),             //  87
640 // _____(__NR_reboot,            sys_reboot),             //  88
641 // _____(__NR_readdir,           sys_readdir),            //  89
642 
643    PLAX_(__NR_mmap,              sys_mmap),               //  90
644    GENXY(__NR_munmap,            sys_munmap),             //  91
645    GENX_(__NR_truncate,          sys_truncate),           //  92
646    GENX_(__NR_ftruncate,         sys_ftruncate),          //  93
647    GENX_(__NR_fchmod,            sys_fchmod),             //  94
648 
649    GENX_(__NR_fchown,            sys_fchown),             //  95
650    GENX_(__NR_getpriority,       sys_getpriority),        //  96
651    GENX_(__NR_setpriority,       sys_setpriority),        //  97
652 // _____(__NR_profil,            sys_profil),             //  98
653    GENXY(__NR_statfs,            sys_statfs),             //  99
654 
655    GENXY(__NR_fstatfs,           sys_fstatfs),            // 100
656 // _____(__NR_ioperm,            sys_ioperm),             // 101
657    LINXY(__NR_socketcall,        sys_socketcall),         // 102
658    LINXY(__NR_syslog,            sys_syslog),             // 103
659    GENXY(__NR_setitimer,         sys_setitimer),          // 104
660 
661    GENXY(__NR_getitimer,         sys_getitimer),          // 105
662    GENXY(__NR_stat,              sys_newstat),            // 106
663    GENXY(__NR_lstat,             sys_newlstat),           // 107
664    GENXY(__NR_fstat,             sys_newfstat),           // 108
665 // _____(__NR_olduname,          sys_olduname),           // 109
666 
667 // _____(__NR_iopl,              sys_iopl),               // 110
668    LINX_(__NR_vhangup,           sys_vhangup),            // 111
669 // _____(__NR_idle,              sys_idle),               // 112
670 // _____(__NR_vm86,              sys_vm86),               // 113
671    GENXY(__NR_wait4,             sys_wait4),              // 114
672 
673 // _____(__NR_swapoff,           sys_swapoff),            // 115
674    LINXY(__NR_sysinfo,           sys_sysinfo),            // 116
675    LINXY(__NR_ipc,               sys_ipc),                // 117
676    GENX_(__NR_fsync,             sys_fsync),              // 118
677 // _____(__NR_sigreturn,         sys_sigreturn),          // 119
678 
679    LINX_(__NR_clone,             sys_clone),              // 120
680 // _____(__NR_setdomainname,     sys_setdomainname),      // 121
681    GENXY(__NR_uname,             sys_newuname),           // 122
682 // _____(__NR_modify_ldt,        sys_modify_ldt),         // 123
683    LINXY(__NR_adjtimex,          sys_adjtimex),           // 124
684 
685    GENXY(__NR_mprotect,          sys_mprotect),           // 125
686 // _____(__NR_sigprocmask,       sys_sigprocmask),        // 126
687    GENX_(__NR_create_module,     sys_ni_syscall),         // 127
688    LINX_(__NR_init_module,       sys_init_module),        // 128
689    LINX_(__NR_delete_module,     sys_delete_module),      // 129
690 
691 // _____(__NR_get_kernel_syms,   sys_get_kernel_syms),    // 130
692 // _____(__NR_quotactl,          sys_quotactl),           // 131
693    GENX_(__NR_getpgid,           sys_getpgid),            // 132
694    GENX_(__NR_fchdir,            sys_fchdir),             // 133
695 // _____(__NR_bdflush,           sys_bdflush),            // 134
696 
697 // _____(__NR_sysfs,             sys_sysfs),              // 135
698    LINX_(__NR_personality,       sys_personality),        // 136
699 // _____(__NR_afs_syscall,       sys_afs_syscall),        // 137
700    LINX_(__NR_setfsuid,          sys_setfsuid),           // 138
701    LINX_(__NR_setfsgid,          sys_setfsgid),           // 139
702 
703    LINXY(__NR__llseek,           sys_llseek),             // 140
704    GENXY(__NR_getdents,          sys_getdents),           // 141
705    GENX_(__NR__newselect,        sys_select),             // 142
706    GENX_(__NR_flock,             sys_flock),              // 143
707    GENX_(__NR_msync,             sys_msync),              // 144
708 
709    GENXY(__NR_readv,             sys_readv),              // 145
710    GENX_(__NR_writev,            sys_writev),             // 146
711 // _____(__NR_getsid,            sys_getsid),             // 147
712    GENX_(__NR_fdatasync,         sys_fdatasync),          // 148
713    LINXY(__NR__sysctl,           sys_sysctl),             // 149
714 
715    GENX_(__NR_mlock,             sys_mlock),              // 150
716    GENX_(__NR_munlock,           sys_munlock),            // 151
717    GENX_(__NR_mlockall,          sys_mlockall),           // 152
718    LINX_(__NR_munlockall,        sys_munlockall),         // 153
719    LINXY(__NR_sched_setparam,    sys_sched_setparam),     // 154
720 
721    LINXY(__NR_sched_getparam,         sys_sched_getparam),        // 155
722    LINX_(__NR_sched_setscheduler,     sys_sched_setscheduler),    // 156
723    LINX_(__NR_sched_getscheduler,     sys_sched_getscheduler),    // 157
724    LINX_(__NR_sched_yield,            sys_sched_yield),           // 158
725    LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max),// 159
726 
727    LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 160
728    LINXY(__NR_sched_rr_get_interval,  sys_sched_rr_get_interval), // 161
729    GENXY(__NR_nanosleep,         sys_nanosleep),          // 162
730    GENX_(__NR_mremap,            sys_mremap),             // 163
731    LINX_(__NR_setresuid,         sys_setresuid),          // 164
732 
733    LINXY(__NR_getresuid,         sys_getresuid),          // 165
734 // _____(__NR_query_module,      sys_query_module),       // 166
735    GENXY(__NR_poll,              sys_poll),               // 167
736 // _____(__NR_nfsservctl,        sys_nfsservctl),         // 168
737    LINX_(__NR_setresgid,         sys_setresgid),          // 169
738 
739    LINXY(__NR_getresgid,         sys_getresgid),          // 170
740    LINXY(__NR_prctl,             sys_prctl),              // 171
741    PLAX_(__NR_rt_sigreturn,      sys_rt_sigreturn),       // 172
742    LINXY(__NR_rt_sigaction,      sys_rt_sigaction),       // 173
743    LINXY(__NR_rt_sigprocmask,    sys_rt_sigprocmask),     // 174
744 
745    LINXY(__NR_rt_sigpending,     sys_rt_sigpending),      // 175
746    LINXY(__NR_rt_sigtimedwait,   sys_rt_sigtimedwait),    // 176
747    LINXY(__NR_rt_sigqueueinfo,   sys_rt_sigqueueinfo),    // 177
748    LINX_(__NR_rt_sigsuspend,     sys_rt_sigsuspend),      // 178
749    GENXY(__NR_pread64,           sys_pread64),            // 179
750 
751    GENX_(__NR_pwrite64,          sys_pwrite64),           // 180
752    GENX_(__NR_chown,             sys_chown),              // 181
753    GENXY(__NR_getcwd,            sys_getcwd),             // 182
754    LINXY(__NR_capget,            sys_capget),             // 183
755    LINX_(__NR_capset,            sys_capset),             // 184
756 
757    GENXY(__NR_sigaltstack,       sys_sigaltstack),        // 185
758    LINXY(__NR_sendfile,          sys_sendfile),           // 186
759 // _____(__NR_getpmsg,           sys_getpmsg),            // 187
760 // _____(__NR_putpmsg,           sys_putpmsg),            // 188
761    GENX_(__NR_vfork,             sys_fork),               // 189 treat as fork
762 
763    GENXY(__NR_ugetrlimit,        sys_getrlimit),          // 190
764    LINX_(__NR_readahead,         sys_readahead),          // 191
765 // /* #define __NR_mmap2           192     32bit only */
766 // /* #define __NR_truncate64      193     32bit only */
767 // /* #define __NR_ftruncate64     194     32bit only */
768 
769 // /* #define __NR_stat64          195     32bit only */
770 // /* #define __NR_lstat64         196     32bit only */
771 // /* #define __NR_fstat64         197     32bit only */
772 // _____(__NR_pciconfig_read,    sys_pciconfig_read),     // 198
773 // _____(__NR_pciconfig_write,   sys_pciconfig_write),    // 199
774 
775 // _____(__NR_pciconfig_iobase,  sys_pciconfig_iobase),   // 200
776 // _____(__NR_multiplexer,       sys_multiplexer),        // 201
777    GENXY(__NR_getdents64,        sys_getdents64),         // 202
778    LINX_(__NR_pivot_root,        sys_pivot_root),         // 203
779    LINXY(__NR_fcntl64,           sys_fcntl64),            // 204 !!!!?? 32bit only */
780 
781    GENX_(__NR_madvise,           sys_madvise),            // 205
782 // _____(__NR_mincore,           sys_mincore),            // 206
783    LINX_(__NR_gettid,            sys_gettid),             // 207
784 // _____(__NR_tkill,             sys_tkill),              // 208
785    LINX_(__NR_setxattr,          sys_setxattr),           // 209
786 
787    LINX_(__NR_lsetxattr,         sys_lsetxattr),          // 210
788    LINX_(__NR_fsetxattr,         sys_fsetxattr),          // 211
789    LINXY(__NR_getxattr,          sys_getxattr),           // 212
790    LINXY(__NR_lgetxattr,         sys_lgetxattr),          // 213
791    LINXY(__NR_fgetxattr,         sys_fgetxattr),          // 214
792    LINXY(__NR_listxattr,         sys_listxattr),          // 215
793    LINXY(__NR_llistxattr,        sys_llistxattr),         // 216
794    LINXY(__NR_flistxattr,        sys_flistxattr),         // 217
795    LINX_(__NR_removexattr,       sys_removexattr),        // 218
796    LINX_(__NR_lremovexattr,      sys_lremovexattr),       // 219
797    LINX_(__NR_fremovexattr,      sys_fremovexattr),       // 220
798 
799    LINXY(__NR_futex,             sys_futex),              // 221
800    LINX_(__NR_sched_setaffinity, sys_sched_setaffinity),  // 222
801    LINXY(__NR_sched_getaffinity, sys_sched_getaffinity),  // 223
802 // /* 224 currently unused */
803 
804 // _____(__NR_tuxcall,           sys_tuxcall),            // 225
805 // /* #define __NR_sendfile64      226     32bit only */
806    LINX_(__NR_io_setup,          sys_io_setup),           // 227
807    LINX_(__NR_io_destroy,        sys_io_destroy),         // 228
808    LINXY(__NR_io_getevents,      sys_io_getevents),       // 229
809    LINX_(__NR_io_submit,         sys_io_submit),          // 230
810    LINXY(__NR_io_cancel,         sys_io_cancel),          // 231
811    LINX_(__NR_set_tid_address,   sys_set_tid_address),    // 232
812    PLAX_(__NR_fadvise64,         sys_fadvise64),          // 233
813    LINX_(__NR_exit_group,        sys_exit_group),         // 234
814 
815 // _____(__NR_lookup_dcookie,    sys_lookup_dcookie),     // 235
816    LINXY(__NR_epoll_create,      sys_epoll_create),       // 236
817    LINX_(__NR_epoll_ctl,         sys_epoll_ctl),          // 237
818    LINXY(__NR_epoll_wait,        sys_epoll_wait),         // 238
819 // _____(__NR_remap_file_pages,  sys_remap_file_pages),   // 239
820 
821    LINXY(__NR_timer_create,      sys_timer_create),       // 240
822    LINXY(__NR_timer_settime,     sys_timer_settime),      // 241
823    LINXY(__NR_timer_gettime,     sys_timer_gettime),      // 242
824    LINX_(__NR_timer_getoverrun,  sys_timer_getoverrun),   // 243
825    LINX_(__NR_timer_delete,      sys_timer_delete),       // 244
826    LINX_(__NR_clock_settime,     sys_clock_settime),      // 245
827    LINXY(__NR_clock_gettime,     sys_clock_gettime),      // 246
828    LINXY(__NR_clock_getres,      sys_clock_getres),       // 247
829    LINXY(__NR_clock_nanosleep,   sys_clock_nanosleep),    // 248
830 
831 // _____(__NR_swapcontext,       sys_swapcontext),        // 249
832 
833    LINXY(__NR_tgkill,            sys_tgkill),             // 250
834 // _____(__NR_utimes,            sys_utimes),             // 251
835 // _____(__NR_statfs64,          sys_statfs64),           // 252
836 // _____(__NR_fstatfs64,         sys_fstatfs64),          // 253
837 // /* #define __NR_fadvise64_64    254     32bit only */
838 
839 // _____(__NR_rtas,              sys_rtas),               // 255
840 // /* Number 256 is reserved for sys_debug_setcontext */
841 // /* Number 257 is reserved for vserver */
842 // /* 258 currently unused */
843    LINX_(__NR_mbind,             sys_mbind),              // 259
844 
845    LINXY(__NR_get_mempolicy,     sys_get_mempolicy),      // 260
846    LINX_(__NR_set_mempolicy,     sys_set_mempolicy),      // 261
847    LINXY(__NR_mq_open,           sys_mq_open),            // 262
848    LINX_(__NR_mq_unlink,         sys_mq_unlink),          // 263
849    LINX_(__NR_mq_timedsend,      sys_mq_timedsend),       // 264
850 
851    LINXY(__NR_mq_timedreceive,   sys_mq_timedreceive),    // 265
852    LINX_(__NR_mq_notify,         sys_mq_notify),          // 266
853    LINXY(__NR_mq_getsetattr,     sys_mq_getsetattr),      // 267
854 // _____(__NR_kexec_load,        sys_kexec_load),         // 268
855    LINX_(__NR_add_key,           sys_add_key),            // 269
856 
857    LINX_(__NR_request_key,       sys_request_key),        // 270
858    LINXY(__NR_keyctl,            sys_keyctl),             // 271
859    LINXY(__NR_waitid,            sys_waitid),             // 272
860    LINX_(__NR_ioprio_set,        sys_ioprio_set),         // 273
861    LINX_(__NR_ioprio_get,        sys_ioprio_get),         // 274
862 
863    LINX_(__NR_inotify_init,  sys_inotify_init),           // 275
864    LINX_(__NR_inotify_add_watch,  sys_inotify_add_watch), // 276
865    LINX_(__NR_inotify_rm_watch,   sys_inotify_rm_watch),  // 277
866 
867    LINXY(__NR_pselect6,          sys_pselect6),           // 280
868    LINXY(__NR_ppoll,             sys_ppoll),              // 281
869 
870    LINXY(__NR_openat,            sys_openat),             // 286
871    LINX_(__NR_mkdirat,           sys_mkdirat),            // 287
872    LINX_(__NR_mknodat,           sys_mknodat),            // 288
873    LINX_(__NR_fchownat,          sys_fchownat),           // 289
874    LINX_(__NR_futimesat,         sys_futimesat),          // 290
875    LINXY(__NR_newfstatat,        sys_newfstatat),         // 291
876    LINX_(__NR_unlinkat,          sys_unlinkat),           // 292
877    LINX_(__NR_renameat,          sys_renameat),           // 293
878    LINX_(__NR_linkat,            sys_linkat),             // 294
879    LINX_(__NR_symlinkat,         sys_symlinkat),          // 295
880    LINX_(__NR_readlinkat,        sys_readlinkat),         // 296
881    LINX_(__NR_fchmodat,          sys_fchmodat),           // 297
882    LINX_(__NR_faccessat,         sys_faccessat),          // 298
883    LINX_(__NR_set_robust_list,   sys_set_robust_list),    // 299
884    LINXY(__NR_get_robust_list,   sys_get_robust_list),    // 300
885    LINXY(__NR_move_pages,        sys_move_pages),        // 301
886    LINXY(__NR_getcpu,            sys_getcpu),            // 302
887    LINXY(__NR_epoll_pwait,       sys_epoll_pwait),       // 303
888    LINX_(__NR_utimensat,         sys_utimensat),         // 304
889    LINXY(__NR_signalfd,          sys_signalfd),          // 305
890    LINXY(__NR_timerfd_create,    sys_timerfd_create),    // 306
891    LINXY(__NR_eventfd,           sys_eventfd),           // 307
892    LINX_(__NR_sync_file_range2,  sys_sync_file_range2),  // 308
893    LINX_(__NR_fallocate,         sys_fallocate),         // 309
894 //   LINXY(__NR_subpage_prot,       sys_ni_syscall),       // 310
895    LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 311
896    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 312
897    LINXY(__NR_signalfd4,         sys_signalfd4),        // 313
898    LINXY(__NR_eventfd2,          sys_eventfd2),         // 314
899    LINXY(__NR_epoll_create1,     sys_epoll_create1),    // 315
900    LINXY(__NR_dup3,              sys_dup3),             // 316
901    LINXY(__NR_pipe2,             sys_pipe2),            // 317
902    LINXY(__NR_inotify_init1,     sys_inotify_init1),    // 318
903    LINXY(__NR_perf_event_open,   sys_perf_event_open),  // 319
904    LINXY(__NR_preadv,            sys_preadv),           // 320
905    LINX_(__NR_pwritev,           sys_pwritev),          // 321
906    LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322
907 
908    LINXY(__NR_prlimit64,         sys_prlimit64),        // 325
909    LINXY(__NR_socket,            sys_socket),           // 326
910    LINX_(__NR_bind,              sys_bind),             // 327
911    LINX_(__NR_connect,           sys_connect),          // 328
912    LINX_(__NR_listen,            sys_listen),           // 329
913    LINXY(__NR_accept,            sys_accept),           // 330
914    LINXY(__NR_getsockname,       sys_getsockname),      // 331
915    LINXY(__NR_getpeername,       sys_getpeername),      // 332
916    LINXY(__NR_socketpair,        sys_socketpair),       // 333
917    LINX_(__NR_send,              sys_send),             // 334
918    LINX_(__NR_sendto,            sys_sendto),           // 335
919    LINXY(__NR_recv,              sys_recv),             // 336
920    LINXY(__NR_recvfrom,          sys_recvfrom),         // 337
921    LINX_(__NR_shutdown,          sys_shutdown),         // 338
922    LINX_(__NR_setsockopt,        sys_setsockopt),       // 339
923    LINXY(__NR_getsockopt,        sys_getsockopt),       // 340
924    LINX_(__NR_sendmsg,           sys_sendmsg),          // 341
925    LINXY(__NR_recvmsg,           sys_recvmsg),          // 342
926    LINXY(__NR_recvmmsg,          sys_recvmmsg),         // 343
927    LINXY(__NR_accept4,           sys_accept4),          // 344
928    LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 345
929    LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 346
930    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 347
931    LINX_(__NR_syncfs,            sys_syncfs),           // 348
932    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 349
933 
934    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 351
935    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352
936 
937    LINX_(__NR_renameat2,         sys_renameat2),        // 357
938 
939    LINXY(__NR_getrandom,         sys_getrandom),        // 359
940    LINXY(__NR_memfd_create,      sys_memfd_create)      // 360
941 };
942 
ML_(get_linux_syscall_entry)943 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
944 {
945    const UInt syscall_table_size
946       = sizeof(syscall_table) / sizeof(syscall_table[0]);
947 
948    /* Is it in the contiguous initial section of the table? */
949    if (sysno < syscall_table_size) {
950       SyscallTableEntry* sys = &syscall_table[sysno];
951       if (sys->before == NULL)
952          return NULL; /* no entry */
953       else
954          return sys;
955    }
956 
957    /* Can't find a wrapper */
958    return NULL;
959 }
960 
961 #endif // defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
962 
963 /*--------------------------------------------------------------------*/
964 /*--- end                                                          ---*/
965 /*--------------------------------------------------------------------*/
966