14df0bfc0614379192c780c944415dc420d9cfe8epetarj
24df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--------------------------------------------------------------------*/
34df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--- Platform-specific syscalls stuff.    syswrap-mips64-linux.c ----*/
44df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--------------------------------------------------------------------*/
54df0bfc0614379192c780c944415dc420d9cfe8epetarj
64df0bfc0614379192c780c944415dc420d9cfe8epetarj/*
74df0bfc0614379192c780c944415dc420d9cfe8epetarj   This file is part of Valgrind, a dynamic binary instrumentation
84df0bfc0614379192c780c944415dc420d9cfe8epetarj   framework.
94df0bfc0614379192c780c944415dc420d9cfe8epetarj
10b3a1e4bffbdbbf38304f216af405009868f43628sewardj   Copyright (C) 2010-2015 RT-RK
114df0bfc0614379192c780c944415dc420d9cfe8epetarj      mips-valgrind@rt-rk.com
124df0bfc0614379192c780c944415dc420d9cfe8epetarj
134df0bfc0614379192c780c944415dc420d9cfe8epetarj   This program is free software; you can redistribute it and/or
144df0bfc0614379192c780c944415dc420d9cfe8epetarj   modify it under the terms of the GNU General Public License as
154df0bfc0614379192c780c944415dc420d9cfe8epetarj   published by the Free Software Foundation; either version 2 of the
164df0bfc0614379192c780c944415dc420d9cfe8epetarj   License, or (at your option) any later version.
174df0bfc0614379192c780c944415dc420d9cfe8epetarj
184df0bfc0614379192c780c944415dc420d9cfe8epetarj   This program is distributed in the hope that it will be useful, but
194df0bfc0614379192c780c944415dc420d9cfe8epetarj   WITHOUT ANY WARRANTY; without even the implied warranty of
204df0bfc0614379192c780c944415dc420d9cfe8epetarj   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
214df0bfc0614379192c780c944415dc420d9cfe8epetarj   General Public License for more details.
224df0bfc0614379192c780c944415dc420d9cfe8epetarj
234df0bfc0614379192c780c944415dc420d9cfe8epetarj   You should have received a copy of the GNU General Public License
244df0bfc0614379192c780c944415dc420d9cfe8epetarj   along with this program; if not, write to the Free Software
254df0bfc0614379192c780c944415dc420d9cfe8epetarj   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
264df0bfc0614379192c780c944415dc420d9cfe8epetarj   02111-1307, USA.
274df0bfc0614379192c780c944415dc420d9cfe8epetarj
284df0bfc0614379192c780c944415dc420d9cfe8epetarj   The GNU General Public License is contained in the file COPYING.
294df0bfc0614379192c780c944415dc420d9cfe8epetarj*/
304df0bfc0614379192c780c944415dc420d9cfe8epetarj
314df0bfc0614379192c780c944415dc420d9cfe8epetarj#if defined(VGP_mips64_linux)
324df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_basics.h"
334df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_vki.h"
344df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_vkiscnums.h"
354df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_threadstate.h"
364df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_aspacemgr.h"
374df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_debuglog.h"
384df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcbase.h"
394df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcassert.h"
404df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcprint.h"
414df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcproc.h"
424df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcsignal.h"
434df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_options.h"
444df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_scheduler.h"
454df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_sigframe.h"     /* For VG_(sigframe_destroy)() */
464df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_signals.h"
474df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_syscall.h"
484df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_syswrap.h"
494df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_tooliface.h"
504df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_transtab.h"     /* VG_(discard_translations) */
514df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "priv_types_n_macros.h"
524df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "priv_syswrap-generic.h"  /* for decls of generic wrappers */
534df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "priv_syswrap-linux.h"    /* for decls of linux-ish wrappers */
544df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "priv_syswrap-main.h"
554df0bfc0614379192c780c944415dc420d9cfe8epetarj
564df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_debuginfo.h"    /* VG_(di_notify_*) */
574df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_xarray.h"
584df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_clientstate.h"  /* VG_(brk_base), VG_(brk_limit) */
594df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_errormgr.h"
60c91f58449e6fc2a4ce0851639a342c4277612fbbflorian#include "pub_core_gdbserver.h"    /* VG_(gdbserver) */
614df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_libcfile.h"
624df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_machine.h"      /* VG_(get_SP) */
634df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_mallocfree.h"
644df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_stacktrace.h"   /* For VG_(get_and_pp_StackTrace)() */
654df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "pub_core_ume.h"
664df0bfc0614379192c780c944415dc420d9cfe8epetarj
674df0bfc0614379192c780c944415dc420d9cfe8epetarj#include "config.h"
684df0bfc0614379192c780c944415dc420d9cfe8epetarj
694df0bfc0614379192c780c944415dc420d9cfe8epetarj#include <errno.h>
704df0bfc0614379192c780c944415dc420d9cfe8epetarj
714df0bfc0614379192c780c944415dc420d9cfe8epetarj/* ---------------------------------------------------------------------
724df0bfc0614379192c780c944415dc420d9cfe8epetarj                             clone() handling
734df0bfc0614379192c780c944415dc420d9cfe8epetarj   ------------------------------------------------------------------ */
744df0bfc0614379192c780c944415dc420d9cfe8epetarj
754df0bfc0614379192c780c944415dc420d9cfe8epetarj/* Call f(arg1), but first switch stacks, using 'stack' as the new stack, and
764df0bfc0614379192c780c944415dc420d9cfe8epetarj   use 'retaddr' as f's return-to address. Also, clear all the integer registers
774df0bfc0614379192c780c944415dc420d9cfe8epetarj   before entering f. */
784df0bfc0614379192c780c944415dc420d9cfe8epetarj__attribute__ ((noreturn))
794df0bfc0614379192c780c944415dc420d9cfe8epetarjvoid ML_(call_on_new_stack_0_1) ( Addr stack,             /* $4 - $a0 */
804df0bfc0614379192c780c944415dc420d9cfe8epetarj                                  Addr retaddr,           /* $5 - $a1 */
814df0bfc0614379192c780c944415dc420d9cfe8epetarj                                  void (*f_desc) (Word),  /* $6 - $a2 */
824df0bfc0614379192c780c944415dc420d9cfe8epetarj                                  Word arg1 );            /* $7 - $a3 */
834df0bfc0614379192c780c944415dc420d9cfe8epetarjasm (
844df0bfc0614379192c780c944415dc420d9cfe8epetarj".text\n"
854df0bfc0614379192c780c944415dc420d9cfe8epetarj".globl vgModuleLocal_call_on_new_stack_0_1\n"
864df0bfc0614379192c780c944415dc420d9cfe8epetarj"vgModuleLocal_call_on_new_stack_0_1:\n"
874df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $29, $4\n"  /* set stack */
884df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $4,  $7\n"  /* arg1 to $4 */
894df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $25, $6\n"
904df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $31, $5\n"  /* retaddr to $ra */
914df0bfc0614379192c780c944415dc420d9cfe8epetarj"   jr $25\n"        /* jump to f */
924df0bfc0614379192c780c944415dc420d9cfe8epetarj"   break 0x7\n"     /* should never get here */
934df0bfc0614379192c780c944415dc420d9cfe8epetarj".previous\n"
944df0bfc0614379192c780c944415dc420d9cfe8epetarj);
954df0bfc0614379192c780c944415dc420d9cfe8epetarj
964df0bfc0614379192c780c944415dc420d9cfe8epetarj/* Perform a clone system call.  clone is strange because it has fork()-like
974df0bfc0614379192c780c944415dc420d9cfe8epetarj   return-twice semantics, so it needs special handling here.
984df0bfc0614379192c780c944415dc420d9cfe8epetarj
994df0bfc0614379192c780c944415dc420d9cfe8epetarj   Upon entry, we have:
1004df0bfc0614379192c780c944415dc420d9cfe8epetarj
1014df0bfc0614379192c780c944415dc420d9cfe8epetarj      word (fn)(void*)    in a0 = 4
1024df0bfc0614379192c780c944415dc420d9cfe8epetarj      void* child_stack   in a1 = 5
1034df0bfc0614379192c780c944415dc420d9cfe8epetarj      word flags          in a2 = 6
1044df0bfc0614379192c780c944415dc420d9cfe8epetarj      void* arg           in a3 = 7
1054df0bfc0614379192c780c944415dc420d9cfe8epetarj      pid_t* parent_tid   in a4 = 8
1064df0bfc0614379192c780c944415dc420d9cfe8epetarj      void* tls           in a5 = 9
1074df0bfc0614379192c780c944415dc420d9cfe8epetarj      pid_t* child_tid    in a6 = 10
1084df0bfc0614379192c780c944415dc420d9cfe8epetarj
1094df0bfc0614379192c780c944415dc420d9cfe8epetarj   System call requires:
1104df0bfc0614379192c780c944415dc420d9cfe8epetarj
1114df0bfc0614379192c780c944415dc420d9cfe8epetarj      int    $__NR_clone  in v0
1124df0bfc0614379192c780c944415dc420d9cfe8epetarj      int    flags        in a0 = 4
1134df0bfc0614379192c780c944415dc420d9cfe8epetarj      void*  child_stack  in a1 = 5
1144df0bfc0614379192c780c944415dc420d9cfe8epetarj      pid_t* parent_tid   in a2 = 6
1154df0bfc0614379192c780c944415dc420d9cfe8epetarj      void*  tls_ptr      in a3 = 7
1164df0bfc0614379192c780c944415dc420d9cfe8epetarj      pid_t* child_tid    in a4 = 8 */
1174df0bfc0614379192c780c944415dc420d9cfe8epetarj
1184df0bfc0614379192c780c944415dc420d9cfe8epetarj#define __NR_CLONE        __NR_clone
1194df0bfc0614379192c780c944415dc420d9cfe8epetarj#define __NR_EXIT         __NR_exit
1204df0bfc0614379192c780c944415dc420d9cfe8epetarj
1214df0bfc0614379192c780c944415dc420d9cfe8epetarjULong do_syscall_clone_mips64_linux ( Word (*fn) (void *),  /* a0 - 4 */
1224df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      void* stack,          /* a1 - 5 */
1234df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      Int   flags,          /* a2 - 6 */
1244df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      void* arg,            /* a3 - 7 */
1254df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      Int*  parent_tid,     /* a4 - 8 */
1264df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      void* /* Int tls */,  /* a5 - 9 */
1274df0bfc0614379192c780c944415dc420d9cfe8epetarj                                      Int*  child_tid );    /* a6 - 10 */
1284df0bfc0614379192c780c944415dc420d9cfe8epetarj
1294df0bfc0614379192c780c944415dc420d9cfe8epetarjasm(
1304df0bfc0614379192c780c944415dc420d9cfe8epetarj".text\n"
1314df0bfc0614379192c780c944415dc420d9cfe8epetarj".set noreorder\n"
1324df0bfc0614379192c780c944415dc420d9cfe8epetarj".set nomacro\n"
1334df0bfc0614379192c780c944415dc420d9cfe8epetarj".globl do_syscall_clone_mips64_linux\n"
1344df0bfc0614379192c780c944415dc420d9cfe8epetarj"do_syscall_clone_mips64_linux:\n"
1354df0bfc0614379192c780c944415dc420d9cfe8epetarj"   daddiu $29, $29, -32\n"
1364df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $31, 0($29)\n"
1374df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $30, 8($29)\n"
1384df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $28, 16($29)\n"
1394df0bfc0614379192c780c944415dc420d9cfe8epetarj
1404df0bfc0614379192c780c944415dc420d9cfe8epetarj"   daddiu  $5, $5, -32\n"
1414df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $4, 0($5)\n"   /* fn */
1424df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $7, 8($5)\n"   /* arg */
1434df0bfc0614379192c780c944415dc420d9cfe8epetarj"   sd $6, 16($5)\n"  /* flags */
1444df0bfc0614379192c780c944415dc420d9cfe8epetarj
1454df0bfc0614379192c780c944415dc420d9cfe8epetarj/* 1. arg for syscalls */
1464df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $4, $6\n"   /* flags */
1474df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $6, $8\n"   /* parent */
1484df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $7, $a5\n"  /* tls */
1494df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $8, $a6\n"  /* child */
1504df0bfc0614379192c780c944415dc420d9cfe8epetarj
1514df0bfc0614379192c780c944415dc420d9cfe8epetarj/* 2. do a syscall to clone */
1524df0bfc0614379192c780c944415dc420d9cfe8epetarj"   li  $2, 5055\n"  /* syscall num for clone */
1534df0bfc0614379192c780c944415dc420d9cfe8epetarj"   syscall\n"
1544df0bfc0614379192c780c944415dc420d9cfe8epetarj
1554df0bfc0614379192c780c944415dc420d9cfe8epetarj/* 3. See if we are a child, call fn and after that exit */
1564df0bfc0614379192c780c944415dc420d9cfe8epetarj"   bnez $7, p_or_error\n"
1574df0bfc0614379192c780c944415dc420d9cfe8epetarj"   nop\n"
1584df0bfc0614379192c780c944415dc420d9cfe8epetarj
1594df0bfc0614379192c780c944415dc420d9cfe8epetarj"   bnez $2, p_or_error\n"
1604df0bfc0614379192c780c944415dc420d9cfe8epetarj"   nop\n"
1614df0bfc0614379192c780c944415dc420d9cfe8epetarj
1624df0bfc0614379192c780c944415dc420d9cfe8epetarj"   ld $25,0($29)\n"
1634df0bfc0614379192c780c944415dc420d9cfe8epetarj"   jalr $25\n"
1644df0bfc0614379192c780c944415dc420d9cfe8epetarj"   ld $4,8($29)\n"
1654df0bfc0614379192c780c944415dc420d9cfe8epetarj
1664df0bfc0614379192c780c944415dc420d9cfe8epetarj"   move $4, $2\n\t"  /* retval from fn is in $v0 */
1674df0bfc0614379192c780c944415dc420d9cfe8epetarj"   li $2, 5058\n\t"  /* NR_exit */
1684df0bfc0614379192c780c944415dc420d9cfe8epetarj"   syscall\n\t"
1694df0bfc0614379192c780c944415dc420d9cfe8epetarj"   nop\n\t"
1704df0bfc0614379192c780c944415dc420d9cfe8epetarj/* 4. If we are parent or error, just return to caller */
1714df0bfc0614379192c780c944415dc420d9cfe8epetarj"   p_or_error:\n"
1724df0bfc0614379192c780c944415dc420d9cfe8epetarj"   ld $31, 0($29)\n"
1734df0bfc0614379192c780c944415dc420d9cfe8epetarj"   ld $30, 8($29)\n"
1744df0bfc0614379192c780c944415dc420d9cfe8epetarj"   ld $28, 16($29)\n"
1754df0bfc0614379192c780c944415dc420d9cfe8epetarj"   jr $31\n"
1764df0bfc0614379192c780c944415dc420d9cfe8epetarj"   daddi $29,$29, 32\n"
1774df0bfc0614379192c780c944415dc420d9cfe8epetarj".previous\n"
1784df0bfc0614379192c780c944415dc420d9cfe8epetarj);
1794df0bfc0614379192c780c944415dc420d9cfe8epetarj
1804df0bfc0614379192c780c944415dc420d9cfe8epetarj#undef __NR_CLONE
1814df0bfc0614379192c780c944415dc420d9cfe8epetarj#undef __NR_EXIT
1824df0bfc0614379192c780c944415dc420d9cfe8epetarj
1834df0bfc0614379192c780c944415dc420d9cfe8epetarj/* forward declarations */
1844df0bfc0614379192c780c944415dc420d9cfe8epetarjstatic void setup_child ( ThreadArchState *, ThreadArchState *);
1854df0bfc0614379192c780c944415dc420d9cfe8epetarjstatic SysRes sys_set_tls ( ThreadId tid, Addr tlsptr);
1864df0bfc0614379192c780c944415dc420d9cfe8epetarj
1874df0bfc0614379192c780c944415dc420d9cfe8epetarj/* When a client clones, we need to keep track of the new thread. This means:
188ad4e979f408239dabbaae955d8ffcb84a51a5c85florian   1. allocate a ThreadId+ThreadState+stack for the thread
1894df0bfc0614379192c780c944415dc420d9cfe8epetarj
1904df0bfc0614379192c780c944415dc420d9cfe8epetarj   2. initialize the thread's new VCPU state
1914df0bfc0614379192c780c944415dc420d9cfe8epetarj
1924df0bfc0614379192c780c944415dc420d9cfe8epetarj   3. create the thread using the same args as the client requested, but using
1934df0bfc0614379192c780c944415dc420d9cfe8epetarj      the scheduler entrypoint for IP, and a separate stack for SP. */
1944df0bfc0614379192c780c944415dc420d9cfe8epetarjstatic SysRes do_clone ( ThreadId ptid,
1954df0bfc0614379192c780c944415dc420d9cfe8epetarj                         UInt flags, Addr sp,
1964df0bfc0614379192c780c944415dc420d9cfe8epetarj                         Int* parent_tidptr,
1974df0bfc0614379192c780c944415dc420d9cfe8epetarj                         Int* child_tidptr,
1984df0bfc0614379192c780c944415dc420d9cfe8epetarj                         Addr child_tls )
1994df0bfc0614379192c780c944415dc420d9cfe8epetarj{
2004df0bfc0614379192c780c944415dc420d9cfe8epetarj   const Bool debug = False;
2014df0bfc0614379192c780c944415dc420d9cfe8epetarj   ThreadId ctid = VG_ (alloc_ThreadState) ();
2024df0bfc0614379192c780c944415dc420d9cfe8epetarj   ThreadState * ptst = VG_ (get_ThreadState) (ptid);
2034df0bfc0614379192c780c944415dc420d9cfe8epetarj   ThreadState * ctst = VG_ (get_ThreadState) (ctid);
2044df0bfc0614379192c780c944415dc420d9cfe8epetarj   UInt ret = 0;
2054df0bfc0614379192c780c944415dc420d9cfe8epetarj   UWord * stack;
2064df0bfc0614379192c780c944415dc420d9cfe8epetarj   SysRes res;
2074df0bfc0614379192c780c944415dc420d9cfe8epetarj   vki_sigset_t blockall, savedmask;
2084df0bfc0614379192c780c944415dc420d9cfe8epetarj
2094df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_(sigfillset)(&blockall);
2104df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(VG_(is_running_thread)(ptid));
2114df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(VG_(is_valid_tid)(ctid));
2124df0bfc0614379192c780c944415dc420d9cfe8epetarj   stack = (UWord *)ML_(allocstack)(ctid);
2134df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (stack == NULL) {
2144df0bfc0614379192c780c944415dc420d9cfe8epetarj      res = VG_(mk_SysRes_Error)(VKI_ENOMEM);
2154df0bfc0614379192c780c944415dc420d9cfe8epetarj      goto out;
2164df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
2174df0bfc0614379192c780c944415dc420d9cfe8epetarj   setup_child(&ctst->arch, &ptst->arch);
2184df0bfc0614379192c780c944415dc420d9cfe8epetarj
2194df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* on MIPS we need to set V0 and A3 to zero */
2204df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->arch.vex.guest_r2 = 0;
2214df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->arch.vex.guest_r7 = 0;
2224df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (sp != 0)
2234df0bfc0614379192c780c944415dc420d9cfe8epetarj      ctst->arch.vex.guest_r29 = sp;
2244df0bfc0614379192c780c944415dc420d9cfe8epetarj
2254df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->os_state.parent = ptid;
2264df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->sig_mask = ptst->sig_mask;
2274df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->tmp_sig_mask = ptst->sig_mask;
2284df0bfc0614379192c780c944415dc420d9cfe8epetarj
2294df0bfc0614379192c780c944415dc420d9cfe8epetarj   ctst->os_state.threadgroup = ptst->os_state.threadgroup;
2301c750c93f0f5c25063413787814e82fbe33947f9petarj
2311c750c93f0f5c25063413787814e82fbe33947f9petarj   ML_(guess_and_register_stack) (sp, ctst);
2324df0bfc0614379192c780c944415dc420d9cfe8epetarj
2334df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_TRACK(pre_thread_ll_create, ptid, ctid);
2344df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (flags & VKI_CLONE_SETTLS) {
2354df0bfc0614379192c780c944415dc420d9cfe8epetarj       if (debug)
2364df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(printf)("clone child has SETTLS: tls at %#lx\n", child_tls);
2374df0bfc0614379192c780c944415dc420d9cfe8epetarj       res = sys_set_tls(ctid, child_tls);
2384df0bfc0614379192c780c944415dc420d9cfe8epetarj       if (sr_isError(res))
2394df0bfc0614379192c780c944415dc420d9cfe8epetarj          goto out;
2404df0bfc0614379192c780c944415dc420d9cfe8epetarj       ctst->arch.vex.guest_r27 = child_tls;
2414df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
2424df0bfc0614379192c780c944415dc420d9cfe8epetarj
2434df0bfc0614379192c780c944415dc420d9cfe8epetarj   flags &= ~VKI_CLONE_SETTLS;
2444df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_ (sigprocmask) (VKI_SIG_SETMASK, &blockall, &savedmask);
2454df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Create the new thread */
2464df0bfc0614379192c780c944415dc420d9cfe8epetarj   ret = do_syscall_clone_mips64_linux(ML_(start_thread_NORETURN),
2474df0bfc0614379192c780c944415dc420d9cfe8epetarj                                       stack, flags, &VG_(threads)[ctid],
2484df0bfc0614379192c780c944415dc420d9cfe8epetarj                                       parent_tidptr, NULL /*child_tls*/,
2494df0bfc0614379192c780c944415dc420d9cfe8epetarj                                       child_tidptr);
2504df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (debug)
2514df0bfc0614379192c780c944415dc420d9cfe8epetarj     VG_(printf)("ret: 0x%x\n", ret);
2524df0bfc0614379192c780c944415dc420d9cfe8epetarj
2534df0bfc0614379192c780c944415dc420d9cfe8epetarj   res = VG_(mk_SysRes_mips64_linux)( /* val */ ret, 0, /* errflag */ 0);
2544df0bfc0614379192c780c944415dc420d9cfe8epetarj
2554df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
2564df0bfc0614379192c780c944415dc420d9cfe8epetarj
2574df0bfc0614379192c780c944415dc420d9cfe8epetarj   out:
2584df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (sr_isError (res)) {
2594df0bfc0614379192c780c944415dc420d9cfe8epetarj      VG_ (cleanup_thread) (&ctst->arch);
2604df0bfc0614379192c780c944415dc420d9cfe8epetarj      ctst->status = VgTs_Empty;
2614df0bfc0614379192c780c944415dc420d9cfe8epetarj      VG_TRACK (pre_thread_ll_exit, ctid);
2624df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
2634df0bfc0614379192c780c944415dc420d9cfe8epetarj   ptst->arch.vex.guest_r2 = 0;
2644df0bfc0614379192c780c944415dc420d9cfe8epetarj
2654df0bfc0614379192c780c944415dc420d9cfe8epetarj   return res;
2664df0bfc0614379192c780c944415dc420d9cfe8epetarj}
2674df0bfc0614379192c780c944415dc420d9cfe8epetarj
2684df0bfc0614379192c780c944415dc420d9cfe8epetarj/* ---------------------------------------------------------------------
2694df0bfc0614379192c780c944415dc420d9cfe8epetarj                          More thread stuff
2704df0bfc0614379192c780c944415dc420d9cfe8epetarj   ------------------------------------------------------------------ */
2714df0bfc0614379192c780c944415dc420d9cfe8epetarjvoid VG_(cleanup_thread) ( ThreadArchState * arch ) { };
2724df0bfc0614379192c780c944415dc420d9cfe8epetarj
2734df0bfc0614379192c780c944415dc420d9cfe8epetarjvoid setup_child ( /* OUT */ ThreadArchState * child,
2744df0bfc0614379192c780c944415dc420d9cfe8epetarj                   /* IN  */ ThreadArchState * parent )
2754df0bfc0614379192c780c944415dc420d9cfe8epetarj{
2764df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* We inherit our parent's guest state. */
2774df0bfc0614379192c780c944415dc420d9cfe8epetarj   child->vex = parent->vex;
2784df0bfc0614379192c780c944415dc420d9cfe8epetarj   child->vex_shadow1 = parent->vex_shadow1;
2794df0bfc0614379192c780c944415dc420d9cfe8epetarj   child->vex_shadow2 = parent->vex_shadow2;
2804df0bfc0614379192c780c944415dc420d9cfe8epetarj}
2814df0bfc0614379192c780c944415dc420d9cfe8epetarj
2824df0bfc0614379192c780c944415dc420d9cfe8epetarjSysRes sys_set_tls ( ThreadId tid, Addr tlsptr )
2834df0bfc0614379192c780c944415dc420d9cfe8epetarj{
2844df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_(threads)[tid].arch.vex.guest_ULR = tlsptr;
2854df0bfc0614379192c780c944415dc420d9cfe8epetarj   return VG_(mk_SysRes_Success)( 0 );
2864df0bfc0614379192c780c944415dc420d9cfe8epetarj}
2874df0bfc0614379192c780c944415dc420d9cfe8epetarj
2884df0bfc0614379192c780c944415dc420d9cfe8epetarj/* ---------------------------------------------------------------------
2894df0bfc0614379192c780c944415dc420d9cfe8epetarj           PRE/POST wrappers for mips/Linux-specific syscalls
2904df0bfc0614379192c780c944415dc420d9cfe8epetarj   ------------------------------------------------------------------ */
2914df0bfc0614379192c780c944415dc420d9cfe8epetarj
2924df0bfc0614379192c780c944415dc420d9cfe8epetarj#define PRE(name)       DEFN_PRE_TEMPLATE(mips_linux, name)
2934df0bfc0614379192c780c944415dc420d9cfe8epetarj#define POST(name)      DEFN_POST_TEMPLATE(mips_linux, name)
2944df0bfc0614379192c780c944415dc420d9cfe8epetarj
2954df0bfc0614379192c780c944415dc420d9cfe8epetarj/* Add prototypes for the wrappers declared here, so that gcc doesn't harass us
2964df0bfc0614379192c780c944415dc420d9cfe8epetarj   for not having prototypes. Really this is a kludge -- the right thing to do
2974df0bfc0614379192c780c944415dc420d9cfe8epetarj   is to make these wrappers 'static' since they aren't visible outside this
2984df0bfc0614379192c780c944415dc420d9cfe8epetarj   file, but that requires even more macro magic. */
2994df0bfc0614379192c780c944415dc420d9cfe8epetarj
3004df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_set_thread_area);
3014df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_clone);
3024df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_tee);
3034df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_splice);
3044df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_vmsplice);
3054df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_ustat);
3064df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_sysfs);
3074df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_swapon);
3084df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_swapoff);
3094df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_setdomainname);
3104df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_sethostname);
3114df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_reboot);
3124df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_cacheflush);
3134df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_sched_rr_get_interval);
3144df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_unshare);
3154df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_arch_prctl);
3164df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_ptrace);
3174df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_mmap);
3184df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_rt_sigreturn);
3194df0bfc0614379192c780c944415dc420d9cfe8epetarjDECL_TEMPLATE (mips_linux, sys_pipe);
3204df0bfc0614379192c780c944415dc420d9cfe8epetarj
3214df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_tee)
3224df0bfc0614379192c780c944415dc420d9cfe8epetarj{
323b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_tee ( %ld, %ld, %lu, %#lx )", SARG1, SARG2, ARG3, ARG4);
3244df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ4(long, "sys_tee", int, fdin, int, fdout, vki_size_t, len,
3254df0bfc0614379192c780c944415dc420d9cfe8epetarj                 int, flags);
3264df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3274df0bfc0614379192c780c944415dc420d9cfe8epetarj
3284df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_splice)
3294df0bfc0614379192c780c944415dc420d9cfe8epetarj{
330b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_splice ( %ld, %#lx, %ld, %#lx, %lu, %#lx )",
331b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian         SARG1, ARG2, SARG3, ARG4, ARG5, ARG6);
3324df0bfc0614379192c780c944415dc420d9cfe8epetarj
3334df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ6(long, "sys_splice", int, fdin, vki_loff_t, sizein, int,
3344df0bfc0614379192c780c944415dc420d9cfe8epetarj                 fdout, vki_loff_t, sizeout, vki_size_t, len, int, flags);
3354df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3364df0bfc0614379192c780c944415dc420d9cfe8epetarj
3374df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_vmsplice)
3384df0bfc0614379192c780c944415dc420d9cfe8epetarj{
339b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_vmsplice ( %ld, %#lx, %lu, %ld )", SARG1, ARG2, ARG3, SARG4);
3404df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ4(long, "sys_vmsplice", int, fdin, struct vki_iovec *, v,
3414df0bfc0614379192c780c944415dc420d9cfe8epetarj                 vki_size_t, len, int, flags);
3424df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3434df0bfc0614379192c780c944415dc420d9cfe8epetarj
3444df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_unshare)
3454df0bfc0614379192c780c944415dc420d9cfe8epetarj{
346b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_unshare ( %lu )", ARG1);
347b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRE_REG_READ1(long, "sys_unshare", unsigned long, flags);
3484df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3494df0bfc0614379192c780c944415dc420d9cfe8epetarj
3504df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_sched_rr_get_interval)
3514df0bfc0614379192c780c944415dc420d9cfe8epetarj{
352b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_sched_rr_get_interval ( %ld, %#lx)", SARG1, ARG2);
353b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRE_REG_READ2(long, "sched_rr_get_interval", vki_pid_t, pid,
3544df0bfc0614379192c780c944415dc420d9cfe8epetarj                 struct timespec *, timer);
3554df0bfc0614379192c780c944415dc420d9cfe8epetarj   *flags |= SfMayBlock;
3564df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3574df0bfc0614379192c780c944415dc420d9cfe8epetarj
3584df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_ustat)
3594df0bfc0614379192c780c944415dc420d9cfe8epetarj{
360b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_ustat ( %#lx, %#lx)", ARG1, ARG2);
3614df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ2(long, "ustat", int, flags, const void *, path);
3624df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3634df0bfc0614379192c780c944415dc420d9cfe8epetarj
3644df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_swapon)
3654df0bfc0614379192c780c944415dc420d9cfe8epetarj{
366b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_swapon ( %#lx, %#lx )", ARG1, ARG2);
3674df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ2(long, "swapon", const void *, path, int, flags);
3684df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3694df0bfc0614379192c780c944415dc420d9cfe8epetarj
3704df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_swapoff)
3714df0bfc0614379192c780c944415dc420d9cfe8epetarj{
3724df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRINT("sys_swapoff ( %#lx )", ARG1);
3734df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ1(long, "swapoff", const void *, path);
3744df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3754df0bfc0614379192c780c944415dc420d9cfe8epetarj
3764df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_sysfs)
3774df0bfc0614379192c780c944415dc420d9cfe8epetarj{
378b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_sysfs ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
3794df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ3(long, "sysfs", int, flags, int, desc, const void *, path);
3804df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3814df0bfc0614379192c780c944415dc420d9cfe8epetarj
3824df0bfc0614379192c780c944415dc420d9cfe8epetarj/* Very much MIPS specific */
3834df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_cacheflush)
3844df0bfc0614379192c780c944415dc420d9cfe8epetarj{
38517da3da27c5fe84adb195bf07f204c56dfbd514adejanj   PRINT("cacheflush (%lx, %lx, %lx)", ARG1, ARG2, ARG3);
38617da3da27c5fe84adb195bf07f204c56dfbd514adejanj   PRE_REG_READ3(long, "cacheflush", unsigned long, addr,
387b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian                 unsigned long, nbytes, unsigned int, cache);
388ddd61ff058f02059064e083a8accaefed23d5548florian   VG_ (discard_translations) ((Addr)ARG1, (ULong) ARG2,
38917da3da27c5fe84adb195bf07f204c56dfbd514adejanj                               "PRE(sys_cacheflush)");
3904df0bfc0614379192c780c944415dc420d9cfe8epetarj   SET_STATUS_Success(0);
3914df0bfc0614379192c780c944415dc420d9cfe8epetarj}
3924df0bfc0614379192c780c944415dc420d9cfe8epetarj
3934df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_reboot)
3944df0bfc0614379192c780c944415dc420d9cfe8epetarj{
395b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_reboot ( %ld, %ld, %lu, %#lx )", SARG1, ARG2, ARG3, ARG4);
396b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   // An approximation. ARG4 is only read conditionally by the kernel
397b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRE_REG_READ4(int, "reboot",
398b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian                 int, magic1, int, magic2, unsigned int, cmd,
399b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian                 void *, arg);
400b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian
4014df0bfc0614379192c780c944415dc420d9cfe8epetarj   *flags |= SfMayBlock;
4024df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4034df0bfc0614379192c780c944415dc420d9cfe8epetarj
4044df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_setdomainname)
4054df0bfc0614379192c780c944415dc420d9cfe8epetarj{
406b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT ("sys_setdomainname ( %#lx, %ld )", ARG1, SARG2);
4074df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len);
4084df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4094df0bfc0614379192c780c944415dc420d9cfe8epetarj
4104df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_sethostname)
4114df0bfc0614379192c780c944415dc420d9cfe8epetarj{
412b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT ("sys_sethostname ( %#lx, %ld )", ARG1, SARG2);
4134df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ2 (long, "sethostname", const void *, name, int, len);
4144df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4154df0bfc0614379192c780c944415dc420d9cfe8epetarj
4164df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_ptrace)
4174df0bfc0614379192c780c944415dc420d9cfe8epetarj{
418b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4);
419b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRE_REG_READ4(int, "ptrace",
420b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian                 long, request, long, pid, unsigned long, addr,
421b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian                 unsigned long, data);
4224df0bfc0614379192c780c944415dc420d9cfe8epetarj   switch (ARG1) {
4234df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKTEXT:
4244df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKDATA:
4254df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKUSR:
4264df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRE_MEM_WRITE("ptrace(peek)", ARG4, sizeof(long));
4274df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4284df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_GETEVENTMSG:
4294df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRE_MEM_WRITE("ptrace(geteventmsg)", ARG4, sizeof(unsigned long));
4304df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4314df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_GETSIGINFO:
4324df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRE_MEM_WRITE("ptrace(getsiginfo)", ARG4, sizeof(vki_siginfo_t));
4334df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4344df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_SETSIGINFO:
4354df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRE_MEM_READ("ptrace(setsiginfo)", ARG4, sizeof(vki_siginfo_t));
4364df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4377160332c2127a2487446423ac3735a5baae3ade6petarj      case VKI_PTRACE_GETREGSET:
4387160332c2127a2487446423ac3735a5baae3ade6petarj         ML_(linux_PRE_getregset)(tid, ARG3, ARG4);
4397160332c2127a2487446423ac3735a5baae3ade6petarj         break;
4404df0bfc0614379192c780c944415dc420d9cfe8epetarj      default:
4414df0bfc0614379192c780c944415dc420d9cfe8epetarj        break;
4424df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
4434df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4444df0bfc0614379192c780c944415dc420d9cfe8epetarj
4454df0bfc0614379192c780c944415dc420d9cfe8epetarjPOST(sys_ptrace)
4464df0bfc0614379192c780c944415dc420d9cfe8epetarj{
4474df0bfc0614379192c780c944415dc420d9cfe8epetarj   switch (ARG1) {
4484df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKTEXT:
4494df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKDATA:
4504df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_PEEKUSR:
4514df0bfc0614379192c780c944415dc420d9cfe8epetarj         POST_MEM_WRITE (ARG4, sizeof(long));
4524df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4534df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_GETEVENTMSG:
4544df0bfc0614379192c780c944415dc420d9cfe8epetarj         POST_MEM_WRITE (ARG4, sizeof(unsigned long));
4554df0bfc0614379192c780c944415dc420d9cfe8epetarj      break;
4564df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_PTRACE_GETSIGINFO:
4574df0bfc0614379192c780c944415dc420d9cfe8epetarj         POST_MEM_WRITE (ARG4, sizeof(vki_siginfo_t));
4584df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
4597160332c2127a2487446423ac3735a5baae3ade6petarj      case VKI_PTRACE_GETREGSET:
4607160332c2127a2487446423ac3735a5baae3ade6petarj         ML_(linux_POST_getregset)(tid, ARG3, ARG4);
4617160332c2127a2487446423ac3735a5baae3ade6petarj         break;
4624df0bfc0614379192c780c944415dc420d9cfe8epetarj      default:
4634df0bfc0614379192c780c944415dc420d9cfe8epetarj      break;
4644df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
4654df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4664df0bfc0614379192c780c944415dc420d9cfe8epetarj
4674df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE (sys_mmap)
4684df0bfc0614379192c780c944415dc420d9cfe8epetarj{
4694df0bfc0614379192c780c944415dc420d9cfe8epetarj   SysRes r;
470b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian   PRINT("sys_mmap ( %#lx, %lu, %ld, %ld, %ld, %lu )",
471b26101c4d128f0bfed780434c4e4f8d67f8aeee4florian         ARG1, ARG2, SARG3, SARG4, SARG5, ARG6);
4724df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ6(long, "mmap", unsigned long, start, vki_size_t, length,
4734df0bfc0614379192c780c944415dc420d9cfe8epetarj                 int, prot, int, flags, int, fd, unsigned long, offset);
4744df0bfc0614379192c780c944415dc420d9cfe8epetarj   r = ML_(generic_PRE_sys_mmap)(tid, ARG1, ARG2, ARG3, ARG4, ARG5,
4754df0bfc0614379192c780c944415dc420d9cfe8epetarj                                 (Off64T) ARG6);
4764df0bfc0614379192c780c944415dc420d9cfe8epetarj   SET_STATUS_from_SysRes(r);
4774df0bfc0614379192c780c944415dc420d9cfe8epetarj}
4784df0bfc0614379192c780c944415dc420d9cfe8epetarj
4794df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_clone)
4804df0bfc0614379192c780c944415dc420d9cfe8epetarj{
4814df0bfc0614379192c780c944415dc420d9cfe8epetarj   Bool badarg = False;
4824df0bfc0614379192c780c944415dc420d9cfe8epetarj   UInt cloneflags;
4834df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )", ARG1, ARG2, ARG3,
4844df0bfc0614379192c780c944415dc420d9cfe8epetarj                                                      ARG4, ARG5);
4854df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ2(int, "clone", unsigned long, flags, void *, child_stack);
4864df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (ARG1 & VKI_CLONE_PARENT_SETTID) {
4874df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (VG_(tdict).track_pre_reg_read) {
4884df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRA3("clone", int *, parent_tidptr);
4894df0bfc0614379192c780c944415dc420d9cfe8epetarj      }
4904df0bfc0614379192c780c944415dc420d9cfe8epetarj      PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
4914df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int), VKI_PROT_WRITE)) {
4924df0bfc0614379192c780c944415dc420d9cfe8epetarj         badarg = True;
4934df0bfc0614379192c780c944415dc420d9cfe8epetarj      }
4944df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
4954df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
4964df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (VG_(tdict).track_pre_reg_read) {
4974df0bfc0614379192c780c944415dc420d9cfe8epetarj         PRA5("clone", int *, child_tidptr);
4984df0bfc0614379192c780c944415dc420d9cfe8epetarj      }
4994df0bfc0614379192c780c944415dc420d9cfe8epetarj      PRE_MEM_WRITE("clone(child_tidptr)", ARG5, sizeof (Int));
5004df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (!VG_(am_is_valid_for_client)(ARG5, sizeof (Int), VKI_PROT_WRITE))
5014df0bfc0614379192c780c944415dc420d9cfe8epetarj         badarg = True;
5024df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
5034df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (badarg) {
5044df0bfc0614379192c780c944415dc420d9cfe8epetarj      SET_STATUS_Failure(VKI_EFAULT);
5054df0bfc0614379192c780c944415dc420d9cfe8epetarj      return;
5064df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
5074df0bfc0614379192c780c944415dc420d9cfe8epetarj   cloneflags = ARG1;
5084df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (!ML_(client_signal_OK)(ARG1 & VKI_CSIGNAL)) {
5094df0bfc0614379192c780c944415dc420d9cfe8epetarj      SET_STATUS_Failure(VKI_EINVAL);
5104df0bfc0614379192c780c944415dc420d9cfe8epetarj      return;
5114df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
5124df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Only look at the flags we really care about */
5134df0bfc0614379192c780c944415dc420d9cfe8epetarj   switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
5144df0bfc0614379192c780c944415dc420d9cfe8epetarj           |VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
5154df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
5164df0bfc0614379192c780c944415dc420d9cfe8epetarj         /* thread creation */
5174df0bfc0614379192c780c944415dc420d9cfe8epetarj         SET_STATUS_from_SysRes(do_clone(tid,
5184df0bfc0614379192c780c944415dc420d9cfe8epetarj                                         ARG1,          /* flags */
5194df0bfc0614379192c780c944415dc420d9cfe8epetarj                                         (Addr)ARG2,    /* child SP */
5204df0bfc0614379192c780c944415dc420d9cfe8epetarj                                         (Int *)ARG3,   /* parent_tidptr */
5214df0bfc0614379192c780c944415dc420d9cfe8epetarj                                         (Int *)ARG5,   /* child_tidptr */
5224df0bfc0614379192c780c944415dc420d9cfe8epetarj                                         (Addr)ARG4));  /* child_tls */
5234df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
5244df0bfc0614379192c780c944415dc420d9cfe8epetarj
5254df0bfc0614379192c780c944415dc420d9cfe8epetarj      case VKI_CLONE_VFORK | VKI_CLONE_VM:  /* vfork */
5264df0bfc0614379192c780c944415dc420d9cfe8epetarj         /* FALLTHROUGH - assume vfork == fork */
5274df0bfc0614379192c780c944415dc420d9cfe8epetarj         cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);
5284df0bfc0614379192c780c944415dc420d9cfe8epetarj      case 0:  /* plain fork */
5294df0bfc0614379192c780c944415dc420d9cfe8epetarj         SET_STATUS_from_SysRes(ML_(do_fork_clone)(tid,
5304df0bfc0614379192c780c944415dc420d9cfe8epetarj                                cloneflags,     /* flags */
5314df0bfc0614379192c780c944415dc420d9cfe8epetarj                                (Int *)ARG3,    /* parent_tidptr */
5324df0bfc0614379192c780c944415dc420d9cfe8epetarj                                (Int *)ARG5));  /* child_tidptr */
5334df0bfc0614379192c780c944415dc420d9cfe8epetarj         break;
5344df0bfc0614379192c780c944415dc420d9cfe8epetarj
5354df0bfc0614379192c780c944415dc420d9cfe8epetarj      default:
5364df0bfc0614379192c780c944415dc420d9cfe8epetarj         /* should we just ENOSYS? */
5374df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG1);
5384df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(message)(Vg_UserMsg, "\n");
5394df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
5404df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(message)(Vg_UserMsg,
5414df0bfc0614379192c780c944415dc420d9cfe8epetarj                       " - via a threads library (LinuxThreads or NPTL)\n");
5424df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(message)(Vg_UserMsg,
5434df0bfc0614379192c780c944415dc420d9cfe8epetarj                       " - via the implementation of fork or vfork\n");
5444df0bfc0614379192c780c944415dc420d9cfe8epetarj         VG_(unimplemented)("Valgrind does not support general clone().");
5454df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
5464df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (SUCCESS) {
5474df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (ARG1 & VKI_CLONE_PARENT_SETTID)
5484df0bfc0614379192c780c944415dc420d9cfe8epetarj         POST_MEM_WRITE(ARG3, sizeof(Int));
5494df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
5504df0bfc0614379192c780c944415dc420d9cfe8epetarj         POST_MEM_WRITE(ARG5, sizeof(Int));
5514df0bfc0614379192c780c944415dc420d9cfe8epetarj      /* Thread creation was successful; let the child have the chance to run */
5524df0bfc0614379192c780c944415dc420d9cfe8epetarj      *flags |= SfYieldAfter;
5534df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
5544df0bfc0614379192c780c944415dc420d9cfe8epetarj}
5554df0bfc0614379192c780c944415dc420d9cfe8epetarj
5564df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_rt_sigreturn)
5574df0bfc0614379192c780c944415dc420d9cfe8epetarj{
5584df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* See comments on PRE(sys_rt_sigreturn) in syswrap-s390x-linux.c for
5594df0bfc0614379192c780c944415dc420d9cfe8epetarj      an explanation of what follows. */
5604df0bfc0614379192c780c944415dc420d9cfe8epetarj   ThreadState* tst;
5614df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRINT("sys_rt_sigreturn ( )");
5624df0bfc0614379192c780c944415dc420d9cfe8epetarj
5634df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(VG_(is_valid_tid)(tid));
5644df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(tid >= 1 && tid < VG_N_THREADS);
5654df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(VG_(is_running_thread)(tid));
5664df0bfc0614379192c780c944415dc420d9cfe8epetarj
5674df0bfc0614379192c780c944415dc420d9cfe8epetarj   tst = VG_(get_ThreadState)(tid);
5684df0bfc0614379192c780c944415dc420d9cfe8epetarj
5694df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* This is only so that the IA is (might be) useful to report if
5704df0bfc0614379192c780c944415dc420d9cfe8epetarj      something goes wrong in the sigreturn */
5714df0bfc0614379192c780c944415dc420d9cfe8epetarj   ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
5724df0bfc0614379192c780c944415dc420d9cfe8epetarj
5734df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Restore register state from frame and remove it */
5744df0bfc0614379192c780c944415dc420d9cfe8epetarj   VG_(sigframe_destroy)(tid, True);
5754df0bfc0614379192c780c944415dc420d9cfe8epetarj
5764df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Tell the driver not to update the guest state with the "result",
5774df0bfc0614379192c780c944415dc420d9cfe8epetarj      and set a bogus result to keep it happy. */
5784df0bfc0614379192c780c944415dc420d9cfe8epetarj   *flags |= SfNoWriteResult;
5794df0bfc0614379192c780c944415dc420d9cfe8epetarj   SET_STATUS_Success(0);
5804df0bfc0614379192c780c944415dc420d9cfe8epetarj
5814df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Check to see if any signals arose as a result of this. */
5824df0bfc0614379192c780c944415dc420d9cfe8epetarj   *flags |= SfPollAfter;
5834df0bfc0614379192c780c944415dc420d9cfe8epetarj}
5844df0bfc0614379192c780c944415dc420d9cfe8epetarj
5854df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_set_thread_area)
5864df0bfc0614379192c780c944415dc420d9cfe8epetarj{
5874df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRINT("set_thread_area (%lx)", ARG1);
5884df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ1(long, "set_thread_area", unsigned long, addr);
5894df0bfc0614379192c780c944415dc420d9cfe8epetarj   SET_STATUS_from_SysRes(sys_set_tls(tid, ARG1));
5904df0bfc0614379192c780c944415dc420d9cfe8epetarj}
5914df0bfc0614379192c780c944415dc420d9cfe8epetarj
5924df0bfc0614379192c780c944415dc420d9cfe8epetarjPRE(sys_pipe)
5934df0bfc0614379192c780c944415dc420d9cfe8epetarj{
5944df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRINT("sys_pipe ( %#lx )", ARG1);
5954df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_REG_READ1(int, "pipe", int *, filedes);
5964df0bfc0614379192c780c944415dc420d9cfe8epetarj   PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(int) );
5974df0bfc0614379192c780c944415dc420d9cfe8epetarj}
5984df0bfc0614379192c780c944415dc420d9cfe8epetarj
5994df0bfc0614379192c780c944415dc420d9cfe8epetarjPOST(sys_pipe)
6004df0bfc0614379192c780c944415dc420d9cfe8epetarj{
6014df0bfc0614379192c780c944415dc420d9cfe8epetarj   Int p0, p1;
6024df0bfc0614379192c780c944415dc420d9cfe8epetarj   vg_assert(SUCCESS);
6034df0bfc0614379192c780c944415dc420d9cfe8epetarj   p0 = RES;
6044df0bfc0614379192c780c944415dc420d9cfe8epetarj   p1 = sr_ResEx(status->sres);
6054df0bfc0614379192c780c944415dc420d9cfe8epetarj
6064df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (!ML_(fd_allowed)(p0, "pipe", tid, True) ||
6074df0bfc0614379192c780c944415dc420d9cfe8epetarj       !ML_(fd_allowed)(p1, "pipe", tid, True)) {
6084df0bfc0614379192c780c944415dc420d9cfe8epetarj      VG_(close)(p0);
6094df0bfc0614379192c780c944415dc420d9cfe8epetarj      VG_(close)(p1);
6104df0bfc0614379192c780c944415dc420d9cfe8epetarj      SET_STATUS_Failure( VKI_EMFILE );
6114df0bfc0614379192c780c944415dc420d9cfe8epetarj   } else {
6124df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (VG_(clo_track_fds)) {
6134df0bfc0614379192c780c944415dc420d9cfe8epetarj         ML_(record_fd_open_nameless)(tid, p0);
6144df0bfc0614379192c780c944415dc420d9cfe8epetarj         ML_(record_fd_open_nameless)(tid, p1);
6154df0bfc0614379192c780c944415dc420d9cfe8epetarj      }
6164df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
6174df0bfc0614379192c780c944415dc420d9cfe8epetarj}
6184df0bfc0614379192c780c944415dc420d9cfe8epetarj
6194df0bfc0614379192c780c944415dc420d9cfe8epetarj#undef PRE
6204df0bfc0614379192c780c944415dc420d9cfe8epetarj#undef POST
6214df0bfc0614379192c780c944415dc420d9cfe8epetarj
6224df0bfc0614379192c780c944415dc420d9cfe8epetarj/* ---------------------------------------------------------------------
6234df0bfc0614379192c780c944415dc420d9cfe8epetarj   The mips64/Linux syscall table
6244df0bfc0614379192c780c944415dc420d9cfe8epetarj   ------------------------------------------------------------------ */
6254df0bfc0614379192c780c944415dc420d9cfe8epetarj
6264df0bfc0614379192c780c944415dc420d9cfe8epetarj/* Add an mips64-linux specific wrapper to a syscall table. */
6274df0bfc0614379192c780c944415dc420d9cfe8epetarj#define PLAX_(sysno, name)    WRAPPER_ENTRY_X_(mips_linux, sysno, name)
6284df0bfc0614379192c780c944415dc420d9cfe8epetarj#define PLAXY(sysno, name)    WRAPPER_ENTRY_XY(mips_linux, sysno, name)
6294df0bfc0614379192c780c944415dc420d9cfe8epetarj
6304df0bfc0614379192c780c944415dc420d9cfe8epetarjstatic SyscallTableEntry syscall_main_table[] = {
6314df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_read, sys_read),  /* 5000 */
6324df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_write, sys_write),
6334df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_open, sys_open),
6344df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_close, sys_close),
6354df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_stat, sys_newstat),
6364df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_fstat, sys_newfstat),
6374df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_lstat, sys_newlstat),
6384df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_poll, sys_poll),
6394df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_lseek, sys_lseek),
6404df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_mmap, sys_mmap),
6414df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_mprotect, sys_mprotect),
6424df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_munmap, sys_munmap),
6434df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_brk, sys_brk),
6444df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_rt_sigaction, sys_rt_sigaction),
6454df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_rt_sigprocmask, sys_rt_sigprocmask),
6464df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_ioctl, sys_ioctl),
6474df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_eventfd2, sys_eventfd2),
6484df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_signalfd4, sys_signalfd4),
6494df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_pread64, sys_pread64),
6504df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_pwrite64, sys_pwrite64),
6514df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_readv, sys_readv),
6524df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_writev, sys_writev),
6534df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_access, sys_access),
6544df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAXY (__NR_pipe, sys_pipe),
6554df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_pipe2, sys_pipe2),
6564df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR__newselect,sys_select),
6574df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_yield, sys_sched_yield),
6584df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_mremap, sys_mremap),
6594df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_msync, sys_msync),
6604df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_mincore, sys_mincore),
6614df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_madvise, sys_madvise),
6626b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_shmget, sys_shmget),
6634ab0a7935c4b73730b4bd0eb634b00be2406d044petarj   LINXY (__NR_shmat, wrap_sys_shmat),
6646b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_shmctl, sys_shmctl),
6654df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_dup, sys_dup),
6664df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_dup2, sys_dup2),
6674ab0a7935c4b73730b4bd0eb634b00be2406d044petarj   LINXY (__NR_dup3, sys_dup3),
6684df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_pause, sys_pause),
6694df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_nanosleep, sys_nanosleep),
6704df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getitimer, sys_getitimer),
6714df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_setitimer, sys_setitimer),
6724df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_alarm, sys_alarm),
6734df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getpid, sys_getpid),
6744df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* LINX_(__NR_fallocate,sys_fallocate), */
6754df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_sendfile, sys_sendfile),
6766b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_socket, sys_socket),
6776b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_connect, sys_connect),
6786b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_accept, sys_accept),
6794ab0a7935c4b73730b4bd0eb634b00be2406d044petarj   LINXY (__NR_accept4, sys_accept4),
6806b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_sendto, sys_sendto),
6816b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_recvfrom, sys_recvfrom),
6826b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_sendmsg, sys_sendmsg),
6836b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_recvmsg, sys_recvmsg),
6846b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_shutdown, sys_shutdown),
6856b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_bind, sys_bind),
6866b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_listen, sys_listen),
6876b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_getsockname, sys_getsockname),
6886b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_getpeername, sys_getpeername),
6896b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_socketpair, sys_socketpair),
6906b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_setsockopt, sys_setsockopt),
6916b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_getsockopt, sys_getsockopt),
6924df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_clone, sys_clone),
6934df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fork, sys_fork),
6944df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_execve, sys_execve),
6954df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_exit, sys_exit),
6964df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_wait4, sys_wait4),
6974df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_kill, sys_kill),
6984df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_uname, sys_newuname),
6996b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_semget, sys_semget),
7006b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_semop, sys_semop),
7016b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_semctl, sys_semctl),
7026b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_shmdt, sys_shmdt),
7036b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_msgget, sys_msgget),
7046b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_msgsnd, sys_msgsnd),
7056b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_msgrcv, sys_msgrcv),
7066b087764e018db13d67e9d896f02dc34df294da4philippe   LINXY (__NR_msgctl, sys_msgctl),
7074df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_fcntl, sys_fcntl),
7084df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_flock, sys_flock),
7094df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fsync, sys_fsync),
7104df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fdatasync, sys_fdatasync),
7114df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_truncate, sys_truncate),
7124df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_ftruncate, sys_ftruncate),
7134df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getdents, sys_getdents),
7144df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getcwd, sys_getcwd),
7154df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_chdir, sys_chdir),
7164df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fchdir, sys_fchdir),
7174df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_rename, sys_rename),
7184df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_mkdir, sys_mkdir),
7194df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_rmdir, sys_rmdir),
7204df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_creat, sys_creat),
7214df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_link, sys_link),
7224df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_unlink, sys_unlink),
7234df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_symlink, sys_symlink),
7244df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_readlink, sys_readlink),
7254df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_chmod, sys_chmod),
7264df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fchmod, sys_fchmod),
7274df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_chown, sys_chown),
7284df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_fchown, sys_fchown),
7294df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_lchown, sys_lchown),
7304df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_umask, sys_umask),
7314df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_gettimeofday, sys_gettimeofday),
7324df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getrlimit, sys_getrlimit),
7334df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getrusage, sys_getrusage),
7344df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_sysinfo, sys_sysinfo),
7354df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_times, sys_times),
7364df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAXY (__NR_ptrace, sys_ptrace),
7374df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getuid, sys_getuid),
7384df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_syslog, sys_syslog),
7394df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getgid, sys_getgid),
7404df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setuid, sys_setuid),
7414df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setgid, sys_setgid),
7424df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_geteuid, sys_geteuid),
7434df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getegid, sys_getegid),
7444df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setpgid, sys_setpgid),
7454df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getppid, sys_getppid),
7464df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getpgrp, sys_getpgrp),
7474df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setsid, sys_setsid),
7484df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setreuid, sys_setreuid),
7494df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setregid, sys_setregid),
7504df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getgroups, sys_getgroups),
7514df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setgroups, sys_setgroups),
7524df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_setresuid, sys_setresuid),
7534df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_getresuid, sys_getresuid),
7544df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_setresgid, sys_setresgid),
7554df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_getresgid, sys_getresgid),
7564df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getpgid, sys_getpgid),
7574df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_setfsuid, sys_setfsuid),
7584df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_setfsgid, sys_setfsgid),
7594df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getsid, sys_getsid),
7604df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_capget, sys_capget),
7614df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_capset, sys_capset),
7624df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_rt_sigpending, sys_rt_sigpending),
7634df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_rt_sigtimedwait, sys_rt_sigtimedwait),
7644df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo),
7654df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_rt_sigsuspend, sys_rt_sigsuspend),
7664df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_sigaltstack, sys_sigaltstack),
7674df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_utime, sys_utime),
7684df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_mknod, sys_mknod),
7694df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_personality, sys_personality),
7704df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_ustat, sys_ustat),
7714df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_statfs, sys_statfs),
7724df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_fstatfs, sys_fstatfs),
7734df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_sysfs, sys_sysfs),
7744df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_getpriority, sys_getpriority),
7754df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setpriority, sys_setpriority),
7764df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_sched_setparam, sys_sched_setparam),
7774df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_sched_getparam, sys_sched_getparam),
7784df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_setscheduler, sys_sched_setscheduler),
7794df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_getscheduler, sys_sched_getscheduler),
7804df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_get_priority_max, sys_sched_get_priority_max),
7814df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_get_priority_min, sys_sched_get_priority_min),
7824df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_sched_rr_get_interval, sys_sched_rr_get_interval),
7834df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_mlock, sys_mlock),
7844df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_munlock, sys_munlock),
7854df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_mlockall, sys_mlockall),
7864df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_munlockall, sys_munlockall),
7874df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_vhangup, sys_vhangup),
7888a3377f03c4865cda1dd1e9a152861fdb77315fasewardj   LINX_ (__NR_pivot_root,sys_pivot_root),
7894df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR__sysctl, sys_sysctl),
7904df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_prctl, sys_prctl),
7914df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_adjtimex, sys_adjtimex),
7924df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_setrlimit, sys_setrlimit),
7934df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_chroot, sys_chroot),
7944df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_sync, sys_sync),
7954df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_acct, sys_acct),
7964df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_settimeofday, sys_settimeofday),
7974df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mount, sys_mount),
7984df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_umount2, sys_umount),
7994df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_swapon, sys_swapon),
8004df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_swapoff, sys_swapoff),
8014df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_reboot, sys_reboot),
8024df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_sethostname, sys_sethostname),
8034df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_setdomainname, sys_setdomainname),
8044df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_create_module, sys_ni_syscall),
8054df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_init_module, sys_init_module),
8064df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_delete_module, sys_delete_module),
8074df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_get_kernel_syms, sys_ni_syscall),
8084df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_query_module, sys_ni_syscall),
8094df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_quotactl, sys_quotactl),
8104df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* GENX_(__NR_nfsservctl,sys_nfsservctl), */
8114df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENXY (__NR_getpmsg, sys_getpmsg),
8124df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_putpmsg, sys_putpmsg),
8134df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_afs_syscall, sys_ni_syscall),
8144df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* GENX_(__NR_reserved177,sys_reserved177), */
8154df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_gettid, sys_gettid),
8164df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* GENX_(__NR_readahead,sys_readahead), */
8174df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_setxattr, sys_setxattr),
8184df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_lsetxattr, sys_lsetxattr),
8194df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fsetxattr, sys_fsetxattr),
8204df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_getxattr, sys_getxattr),
8214df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_lgetxattr, sys_lgetxattr),
8224df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_fgetxattr, sys_fgetxattr),
8234df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_listxattr, sys_listxattr),
8244df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_llistxattr, sys_llistxattr),
8254df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_flistxattr, sys_flistxattr),
8264df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_removexattr, sys_removexattr),
8274df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_lremovexattr, sys_lremovexattr),
8284df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fremovexattr, sys_fremovexattr),
8294df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_tkill, sys_tkill),
8304df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* GENX_(__NR_reserved193,sys_reserved193), */
8314df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_futex, sys_futex),
8324df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sched_setaffinity, sys_sched_setaffinity),
8334df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_sched_getaffinity, sys_sched_getaffinity),
8344df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_cacheflush, sys_cacheflush),
8354df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_io_setup, sys_io_setup),
8364df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_io_destroy, sys_io_destroy),
8374df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_io_getevents, sys_io_getevents),
8384df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_io_submit, sys_io_submit),
8394df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_io_cancel, sys_io_cancel),
8404df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_exit_group, sys_exit_group),
8414df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* LINXY (__NR_lookup_dcookie, sys_lookup_dcookie), */
8424df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_epoll_create, sys_epoll_create),
8434ab0a7935c4b73730b4bd0eb634b00be2406d044petarj   LINXY (__NR_epoll_create1, sys_epoll_create1),
8444df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_epoll_ctl, sys_epoll_ctl),
8454df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_epoll_wait, sys_epoll_wait),
8464df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_(__NR_rt_sigreturn,sys_rt_sigreturn),
8474df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* LINXY(__NR_fcntl64,sys_fcntl64), */
8484df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_set_tid_address, sys_set_tid_address),
8496b087764e018db13d67e9d896f02dc34df294da4philippe   LINX_ (__NR_semtimedop, sys_semtimedop),
8504df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fadvise64, sys_fadvise64),
8514df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_timer_create, sys_timer_create),
8524df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_timer_settime, sys_timer_settime),
8534df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_timer_gettime, sys_timer_gettime),
8544df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_timer_getoverrun, sys_timer_getoverrun),
8554df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_timer_delete, sys_timer_delete),
8564df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_clock_settime, sys_clock_settime),
8574df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_clock_gettime, sys_clock_gettime),
8584df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_clock_getres, sys_clock_getres),
8594df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_clock_nanosleep, sys_clock_nanosleep),
8604df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_tgkill, sys_tgkill),
8614df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_utimes, sys_utimes),
8624df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mbind, sys_mbind),
8634df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_get_mempolicy, sys_get_mempolicy),
8644df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_set_mempolicy, sys_set_mempolicy),
8654df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_mq_open, sys_mq_open),
8664df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mq_unlink, sys_mq_unlink),
8674df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mq_timedsend, sys_mq_timedsend),
8684df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_mq_timedreceive, sys_mq_timedreceive),
8694df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mq_notify, sys_mq_notify),
8704df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_mq_getsetattr, sys_mq_getsetattr),
8714df0bfc0614379192c780c944415dc420d9cfe8epetarj   GENX_ (__NR_vserver, sys_ni_syscall),
8724df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_waitid, sys_waitid),
8734df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_add_key, sys_add_key),
8744df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_request_key, sys_request_key),
8754df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_keyctl, sys_keyctl),
8764df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_set_thread_area, sys_set_thread_area),
8774df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_inotify_init, sys_inotify_init),
8784df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_inotify_add_watch, sys_inotify_add_watch),
8794df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_inotify_rm_watch, sys_inotify_rm_watch),
8804df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_openat, sys_openat),
8814df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mkdirat, sys_mkdirat),
8824df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_mknodat, sys_mknodat),
8834df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fchownat, sys_fchownat),
8844df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_futimesat, sys_futimesat),
8854df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_unlinkat, sys_unlinkat),
8864df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_renameat, sys_renameat),
8874df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_linkat, sys_linkat),
8884df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_symlinkat, sys_symlinkat),
8894df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_readlinkat, sys_readlinkat),
8904df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fchmodat, sys_fchmodat),
8914df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_faccessat, sys_faccessat),
8924df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_pselect6, sys_pselect6),
8934df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_ppoll, sys_ppoll),
8944df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_unshare, sys_unshare),
8954df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_splice, sys_splice),
8964df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_sync_file_range, sys_sync_file_range),
8974df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_tee, sys_tee),
8984df0bfc0614379192c780c944415dc420d9cfe8epetarj   PLAX_ (__NR_vmsplice, sys_vmsplice),
8994df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_set_robust_list, sys_set_robust_list),
9004df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_get_robust_list, sys_get_robust_list),
9014df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_epoll_pwait, sys_epoll_pwait),
9024df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_ioprio_set, sys_ioprio_set),
9034df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_ioprio_get, sys_ioprio_get),
9044df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_utimensat, sys_utimensat),
9054df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_signalfd, sys_signalfd),
9064df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_eventfd, sys_eventfd),
9074df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINX_ (__NR_fallocate, sys_fallocate),
9084df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_timerfd_create, sys_timerfd_create),
9094df0bfc0614379192c780c944415dc420d9cfe8epetarj   LINXY (__NR_timerfd_gettime, sys_timerfd_gettime),
9104ab0a7935c4b73730b4bd0eb634b00be2406d044petarj   LINXY (__NR_timerfd_settime, sys_timerfd_settime),
9113b3a0cb7e86a6c0fb1eeef3e60112d997f4d3a2fpetarj   LINXY (__NR_newfstatat, sys_newfstatat),
9123b3a0cb7e86a6c0fb1eeef3e60112d997f4d3a2fpetarj   LINXY (__NR_prlimit64, sys_prlimit64),
913ddc4a18e6aeaf9124b9d86cd515e1093ff00eeedtom   LINXY (__NR_clock_adjtime, sys_clock_adjtime),
9143b3a0cb7e86a6c0fb1eeef3e60112d997f4d3a2fpetarj   LINXY (__NR_process_vm_readv, sys_process_vm_readv),
915e6366711ec586437958764b451145749c7bcded1tom   LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
9169d7592e571487e08e2166212890e65b87e2905a4tom   LINXY(__NR_getrandom, sys_getrandom),
9179e2645c0b8d76ece8eed2d08d1b7a8021da41252tom   LINXY(__NR_memfd_create, sys_memfd_create),
9189e2645c0b8d76ece8eed2d08d1b7a8021da41252tom   LINX_(__NR_syncfs, sys_syncfs)
9194df0bfc0614379192c780c944415dc420d9cfe8epetarj};
9204df0bfc0614379192c780c944415dc420d9cfe8epetarj
9214df0bfc0614379192c780c944415dc420d9cfe8epetarjSyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
9224df0bfc0614379192c780c944415dc420d9cfe8epetarj{
9234df0bfc0614379192c780c944415dc420d9cfe8epetarj   const UInt syscall_main_table_size
9244df0bfc0614379192c780c944415dc420d9cfe8epetarj      = sizeof(syscall_main_table) / sizeof(syscall_main_table[0]);
9254df0bfc0614379192c780c944415dc420d9cfe8epetarj
9264df0bfc0614379192c780c944415dc420d9cfe8epetarj   if (sysno < syscall_main_table_size) {
9274df0bfc0614379192c780c944415dc420d9cfe8epetarj      SyscallTableEntry * sys = &syscall_main_table[sysno];
9284df0bfc0614379192c780c944415dc420d9cfe8epetarj      if (sys->before == NULL)
9294df0bfc0614379192c780c944415dc420d9cfe8epetarj         return NULL;  /* no entry */
9304df0bfc0614379192c780c944415dc420d9cfe8epetarj      else
9314df0bfc0614379192c780c944415dc420d9cfe8epetarj         return sys;
9324df0bfc0614379192c780c944415dc420d9cfe8epetarj   }
9334df0bfc0614379192c780c944415dc420d9cfe8epetarj   /* Can't find a wrapper */
9344df0bfc0614379192c780c944415dc420d9cfe8epetarj   return NULL;
9354df0bfc0614379192c780c944415dc420d9cfe8epetarj}
9364df0bfc0614379192c780c944415dc420d9cfe8epetarj
9374df0bfc0614379192c780c944415dc420d9cfe8epetarj#endif  /* defined(VGP_mips64_linux) */
9384df0bfc0614379192c780c944415dc420d9cfe8epetarj
9394df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--------------------------------------------------------------------*/
9404df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--- end                                   syswrap-mips64-linux.c ---*/
9414df0bfc0614379192c780c944415dc420d9cfe8epetarj/*--------------------------------------------------------------------*/
942