syswrap-ppc64-linux.c revision 78bc77046d4c6152509c4a5a53e6ceab82ce079e
1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--------------------------------------------------------------------*/
3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--- Platform-specific syscalls stuff.      syswrap-ppc64-linux.c ---*/
4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--------------------------------------------------------------------*/
5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*
7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   This file is part of Valgrind, a dynamic binary instrumentation
8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   framework.
9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   Copyright (C) 2005-2013 Nicholas Nethercote <njn@valgrind.org>
11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   Copyright (C) 2005-2013 Cerion Armour-Brown <cerion@open-works.co.uk>
12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   This program is free software; you can redistribute it and/or
14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   modify it under the terms of the GNU General Public License as
15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   published by the Free Software Foundation; either version 2 of the
16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   License, or (at your option) any later version.
17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   This program is distributed in the hope that it will be useful, but
19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   WITHOUT ANY WARRANTY; without even the implied warranty of
20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   General Public License for more details.
22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
23aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   You should have received a copy of the GNU General Public License
24aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   along with this program; if not, write to the Free Software
25aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   02111-1307, USA.
27aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
28aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   The GNU General Public License is contained in the file COPYING.
29aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
30aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
31aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#if defined(VGP_ppc64_linux)
32aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
33aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_basics.h"
34aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_vki.h"
35aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_vkiscnums.h"
36aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcsetjmp.h"    // to keep _threadstate.h happy
37aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_threadstate.h"
38aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_aspacemgr.h"
39aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_debuglog.h"
40aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcbase.h"
41aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcassert.h"
42aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcprint.h"
43aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcproc.h"
44aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_libcsignal.h"
45aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_options.h"
46aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_scheduler.h"
47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_sigframe.h"      // For VG_(sigframe_destroy)()
48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_signals.h"
49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_syscall.h"
50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_syswrap.h"
51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_tooliface.h"
52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "pub_core_stacks.h"        // VG_(register_stack)
53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "priv_types_n_macros.h"
55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "priv_syswrap-generic.h"   /* for decls of generic wrappers */
56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "priv_syswrap-linux.h"     /* for decls of linux-ish wrappers */
57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "priv_syswrap-main.h"
58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* ---------------------------------------------------------------------
61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   clone() handling
62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ------------------------------------------------------------------ */
63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* Call f(arg1), but first switch stacks, using 'stack' as the new
65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   stack, and use 'retaddr' as f's return-to address.  Also, clear all
66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   the integer registers before entering f.*/
67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani__attribute__((noreturn))
68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid ML_(call_on_new_stack_0_1) ( Addr stack,
69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                  Addr retaddr,
70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                  void (*f_desc)(Word),
71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                  Word arg1 );
72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    r3 = stack
73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    r4 = retaddr
74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    r5 = function descriptor
75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//    r6 = arg1
76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* On PPC64, a func ptr is represented by a TOC entry ptr.
77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   This TOC entry contains three words; the first word is the function
78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   address, the second word is the TOC ptr (r2), and the third word is
79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   the static chain value. */
80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniasm(
81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .align   2\n"
82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .globl   vgModuleLocal_call_on_new_stack_0_1\n"
83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .section \".opd\",\"aw\"\n"
84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .align   3\n"
85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"vgModuleLocal_call_on_new_stack_0_1:\n"
86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .quad    .vgModuleLocal_call_on_new_stack_0_1,.TOC.@tocbase,0\n"
87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .previous\n"
88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .type    .vgModuleLocal_call_on_new_stack_0_1,@function\n"
89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .globl   .vgModuleLocal_call_on_new_stack_0_1\n"
90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani".vgModuleLocal_call_on_new_stack_0_1:\n"
91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mr    %r1,%r3\n\t"     // stack to %sp
92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mtlr  %r4\n\t"         // retaddr to %lr
93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   ld 5,0(5)\n\t"         // load f_ptr from f_desc[0]
94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mtctr %r5\n\t"         // f_ptr to count reg
95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mr %r3,%r6\n\t"        // arg1 to %r3
96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 0,0\n\t"            // zero all GP regs
97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 4,0\n\t"
98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 5,0\n\t"
99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 6,0\n\t"
100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 7,0\n\t"
101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 8,0\n\t"
102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 9,0\n\t"
103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 10,0\n\t"
104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 11,0\n\t"
105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 12,0\n\t"
106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 13,0\n\t"
107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 14,0\n\t"
108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 15,0\n\t"
109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 16,0\n\t"
110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 17,0\n\t"
111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 18,0\n\t"
112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 19,0\n\t"
113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 20,0\n\t"
114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 21,0\n\t"
115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 22,0\n\t"
116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 23,0\n\t"
117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 24,0\n\t"
118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 25,0\n\t"
119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 26,0\n\t"
120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 27,0\n\t"
121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 28,0\n\t"
122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 29,0\n\t"
123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 30,0\n\t"
124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   li 31,0\n\t"
125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mtxer 0\n\t"           // CAB: Need this?
126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   mtcr 0\n\t"            // CAB: Need this?
127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   bctr\n\t"              // jump to dst
128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   trap\n"                // should never get here
129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani);
130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*
133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        Perform a clone system call.  clone is strange because it has
134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        fork()-like return-twice semantics, so it needs special
135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        handling here.
136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        Upon entry, we have:
138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            word (fn)(void*)    in r3
140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void* child_stack   in r4
141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            word flags          in r5
142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void* arg           in r6
143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            pid_t* child_tid    in r7
144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            pid_t* parent_tid   in r8
145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void* ???           in r9
146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        Note: r3 contains fn desc ptr, not fn ptr -- p_fn = p_fn_desc[0]
148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        System call requires:
149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            int    $__NR_clone  in r0  (sc number)
151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            int    flags        in r3  (sc arg1)
152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void*  child_stack  in r4  (sc arg2)
153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            pid_t* parent_tid   in r5  (sc arg3)
154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ??     child_tls    in r6  (sc arg4)
155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            pid_t* child_tid    in r7  (sc arg5)
156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            void*  ???          in r8  (sc arg6)
157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        Returns a ULong encoded as: top half is %cr following syscall,
159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        low half is syscall return value (r3).
160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani */
161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define __NR_CLONE        VG_STRINGIFY(__NR_clone)
162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define __NR_EXIT         VG_STRINGIFY(__NR_exit)
163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniextern
165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniULong do_syscall_clone_ppc64_linux ( Word (*fn)(void *),
166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     void* stack,
167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     Int   flags,
168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     void* arg,
169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     Int*  child_tid,
170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     Int*  parent_tid,
171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     void/*vki_modify_ldt_t*/ * );
172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhaniasm(
173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .align   2\n"
174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .globl   do_syscall_clone_ppc64_linux\n"
175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .section \".opd\",\"aw\"\n"
176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .align   3\n"
177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"do_syscall_clone_ppc64_linux:\n"
178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .quad    .do_syscall_clone_ppc64_linux,.TOC.@tocbase,0\n"
179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .previous\n"
180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .type    .do_syscall_clone_ppc64_linux,@function\n"
181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"   .globl   .do_syscall_clone_ppc64_linux\n"
182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani".do_syscall_clone_ppc64_linux:\n"
183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       stdu    1,-64(1)\n"
184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       std     29,40(1)\n"
185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       std     30,48(1)\n"
186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       std     31,56(1)\n"
187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      30,3\n"              // preserve fn
188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      31,6\n"              // preserve arg
189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // setup child stack
191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       rldicr  4,4, 0,59\n"         // trim sp to multiple of 16 bytes
192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                     // (r4 &= ~0xF)
193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       li      0,0\n"
194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       stdu    0,-32(4)\n"          // make initial stack frame
195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      29,4\n"              // preserve sp
196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // setup syscall
198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       li      0,"__NR_CLONE"\n"    // syscall number
199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      3,5\n"               // syscall arg1: flags
200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // r4 already setup          // syscall arg2: child_stack
201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      5,8\n"               // syscall arg3: parent_tid
202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      6,13\n"              // syscall arg4: REAL THREAD tls
203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      7,7\n"               // syscall arg5: child_tid
204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      8,8\n"               // syscall arg6: ????
205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      9,9\n"               // syscall arg7: ????
206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       sc\n"                        // clone()
208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mfcr    4\n"                 // CR now in low half r4
210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       sldi    4,4,32\n"            // CR now in hi half r4
211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       sldi    3,3,32\n"
213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       srdi    3,3,32\n"            // zero out hi half r3
214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       or      3,3,4\n"             // r3 = CR : syscall-retval
216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       cmpwi   3,0\n"               // child if retval == 0 (note, cmpw)
217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       bne     1f\n"                // jump if !child
218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* CHILD - call thread function */
220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Note: 2.4 kernel doesn't set the child stack pointer,
221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani           so we do it here.
222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani           That does leave a small window for a signal to be delivered
223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani           on the wrong stack, unfortunately. */
224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      1,29\n"
225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       ld      30, 0(30)\n"         // convert fn desc ptr to fn ptr
226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mtctr   30\n"                // ctr reg = fn
227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       mr      3,31\n"              // r3 = arg
228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       bctrl\n"                     // call fn()
229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // exit with result
231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       li      0,"__NR_EXIT"\n"
232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       sc\n"
233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // Exit returned?!
235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       .long   0\n"
236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // PARENT or ERROR - return
238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"1:     ld      29,40(1)\n"
239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       ld      30,48(1)\n"
240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       ld      31,56(1)\n"
241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       addi    1,1,64\n"
242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani"       blr\n"
243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani);
244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#undef __NR_CLONE
246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#undef __NR_EXIT
247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// forward declarations
249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistatic void setup_child ( ThreadArchState*, ThreadArchState* );
250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*
252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   When a client clones, we need to keep track of the new thread.  This means:
253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   1. allocate a ThreadId+ThreadState+stack for the the thread
254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   2. initialize the thread's new VCPU state
256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   3. create the thread using the same args as the client requested,
258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   but using the scheduler entrypoint for IP, and a separate stack
259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   for SP.
260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani */
261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistatic SysRes do_clone ( ThreadId ptid,
262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                         UInt flags, Addr sp,
263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                         Int *parent_tidptr,
264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                         Int *child_tidptr,
265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                         Addr child_tls)
266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   const Bool debug = False;
268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ThreadId     ctid = VG_(alloc_ThreadState)();
270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ThreadState* ptst = VG_(get_ThreadState)(ptid);
271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ThreadState* ctst = VG_(get_ThreadState)(ctid);
272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ULong        word64;
273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   UWord*       stack;
274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   NSegment const* seg;
275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   SysRes       res;
276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vki_sigset_t blockall, savedmask;
277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   VG_(sigfillset)(&blockall);
279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(VG_(is_running_thread)(ptid));
281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(VG_(is_valid_tid)(ctid));
282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   stack = (UWord*)ML_(allocstack)(ctid);
284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (stack == NULL) {
285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      goto out;
287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//?   /* make a stack frame */
290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//?   stack -= 16;
291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//?   *(UWord *)stack = 0;
292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Copy register state
295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      Both parent and child return to the same place, and the code
297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      following the clone syscall works out which is which, so we
298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      don't need to worry about it.
299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      The parent gets the child's new tid returned from clone, but the
301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      child gets 0.
302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      If the clone call specifies a NULL SP for the new thread, then
304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      it actually gets a copy of the parent's SP.
305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      The child's TLS register (r2) gets set to the tlsaddr argument
307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if the CLONE_SETTLS flag is set.
308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   */
309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   setup_child( &ctst->arch, &ptst->arch );
310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Make sys_clone appear to have returned Success(0) in the
312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      child. */
313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   { UInt old_cr = LibVEX_GuestPPC64_get_CR( &ctst->arch.vex );
314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     /* %r3 = 0 */
315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     ctst->arch.vex.guest_GPR3 = 0;
316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     /* %cr0.so = 0 */
317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     LibVEX_GuestPPC64_put_CR( old_cr & ~(1<<28), &ctst->arch.vex );
318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (sp != 0)
321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->arch.vex.guest_GPR1 = sp;
322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ctst->os_state.parent = ptid;
324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* inherit signal mask */
326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ctst->sig_mask = ptst->sig_mask;
327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ctst->tmp_sig_mask = ptst->sig_mask;
328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Start the child with its threadgroup being the same as the
330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      parent's.  This is so that any exit_group calls that happen
331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      after the child is created but before it sets its
332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      os_state.threadgroup field for real (in thread_wrapper in
333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      syswrap-linux.c), really kill the new thread.  a.k.a this avoids
334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      a race condition in which the thread is unkillable (via
335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      exit_group) because its threadgroup is not set.  The race window
336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      is probably only a few hundred or a few thousand cycles long.
337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      See #226116. */
338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ctst->os_state.threadgroup = ptst->os_state.threadgroup;
339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* We don't really know where the client stack is, because its
341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      allocated by the client.  The best we can do is look at the
342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      memory mappings and try to derive some useful information.  We
343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      assume that esp starts near its highest possible value, and can
344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      only go down to the start of the mmaped segment. */
345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   seg = VG_(am_find_nsegment)(sp);
346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (seg && seg->kind != SkResvn) {
347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->client_stack_highest_word = (Addr)VG_PGROUNDUP(sp);
348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->client_stack_szB = ctst->client_stack_highest_word - seg->start;
349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(register_stack)(seg->start, ctst->client_stack_highest_word);
351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (debug)
353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani	 VG_(printf)("\ntid %d: guessed client stack range %#lx-%#lx\n",
354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani		     ctid, seg->start, VG_PGROUNDUP(sp));
355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   } else {
356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg,
357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                   "!? New thread %d starts with R1(%#lx) unmapped\n",
358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani		   ctid, sp);
359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->client_stack_szB  = 0;
360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Assume the clone will succeed, and tell any tool that wants to
363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      know that this thread has come into existence.  If the clone
364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      fails, we'll send out a ll_exit notification for it at the out:
365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      label below, to clean up. */
366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(VG_(owns_BigLock_LL)(ptid));
367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   VG_TRACK ( pre_thread_ll_create, ptid, ctid );
368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (flags & VKI_CLONE_SETTLS) {
370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (debug)
371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         VG_(printf)("clone child has SETTLS: tls at %#lx\n", child_tls);
372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->arch.vex.guest_GPR13 = child_tls;
373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   flags &= ~VKI_CLONE_SETTLS;
376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* start the thread with everything blocked */
378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Create the new thread */
381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   word64 = do_syscall_clone_ppc64_linux(
382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               ML_(start_thread_NORETURN),
383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               stack, flags, &VG_(threads)[ctid],
384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani               child_tidptr, parent_tidptr, NULL
385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            );
386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3876f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   /* Low half word64 is syscall return value.  Hi half is
388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      the entire CR, from which we need to extract CR0.SO. */
3896f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   /* VG_(printf)("word64 = 0x%llx\n", word64); */
390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   res = VG_(mk_SysRes_ppc64_linux)(
391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /*val*/(UInt)(word64 & 0xFFFFFFFFULL),
3926f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen            /*errflag*/ (UInt)((word64 >> (32+28)) & 1)
393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         );
3946f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
3966f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani  out:
3986f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   if (sr_isError(res)) {
399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      /* clone failed */
4006f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      VG_(cleanup_thread)(&ctst->arch);
401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      ctst->status = VgTs_Empty;
4026f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      /* oops.  Better tell the tool the thread exited in a hurry :-) */
403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_TRACK( pre_thread_ll_exit, ctid );
4046f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   }
405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
4066f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   return res;
407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
4086f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
4106f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* ---------------------------------------------------------------------
412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   More thread stuff
413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ------------------------------------------------------------------ */
414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid VG_(cleanup_thread) ( ThreadArchState* arch )
416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid setup_child ( /*OUT*/ ThreadArchState *child,
420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                   /*IN*/  ThreadArchState *parent )
421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* We inherit our parent's guest state. */
423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   child->vex = parent->vex;
424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   child->vex_shadow1 = parent->vex_shadow1;
425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   child->vex_shadow2 = parent->vex_shadow2;
426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* ---------------------------------------------------------------------
430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRE/POST wrappers for ppc64/Linux-specific syscalls
431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ------------------------------------------------------------------ */
432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define PRE(name)       DEFN_PRE_TEMPLATE(ppc64_linux, name)
4346f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen#define POST(name)      DEFN_POST_TEMPLATE(ppc64_linux, name)
4356f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
4366f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen/* Add prototypes for the wrappers declared here, so that gcc doesn't
4376f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   harass us for not having prototypes.  Really this is a kludge --
438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   the right thing to do is to make these wrappers 'static' since they
4396f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   aren't visible outside this file, but that requires even more macro
4406f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   magic. */
441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniDECL_TEMPLATE(ppc64_linux, sys_mmap);
443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz DECL_TEMPLATE(ppc64_linux, sys_mmap2);
444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz DECL_TEMPLATE(ppc64_linux, sys_stat64);
4456f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz DECL_TEMPLATE(ppc64_linux, sys_lstat64);
4466f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz DECL_TEMPLATE(ppc64_linux, sys_fstat64);
4476f1a83d66c7093abfb3504f45273513ef17393b1Marco NelissenDECL_TEMPLATE(ppc64_linux, sys_clone);
4486f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz DECL_TEMPLATE(ppc64_linux, sys_sigreturn);
449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniDECL_TEMPLATE(ppc64_linux, sys_rt_sigreturn);
450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniDECL_TEMPLATE(ppc64_linux, sys_fadvise64);
451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniPRE(sys_mmap)
453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   SysRes r;
455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRINT("sys_mmap ( %#lx, %llu, %ld, %ld, %ld, %ld )",
457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRE_REG_READ6(long, "mmap",
459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 unsigned long, start, unsigned long, length,
460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 unsigned long, prot,  unsigned long, flags,
461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 unsigned long, fd,    unsigned long, offset);
462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5,
464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                       (Off64T)ARG6 );
465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   SET_STATUS_from_SysRes(r);
466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz PRE(sys_mmap2)
469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz {
470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    SysRes r;
471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    // Exactly like old_mmap() except:
473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    //  - the file offset is specified in 4K units rather than bytes,
474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    //    so that it can be used for files bigger than 2^32 bytes.
475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRINT("sys_mmap2 ( %p, %llu, %d, %d, %d, %d )",
476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz          ARG1, (ULong)ARG2, ARG3, ARG4, ARG5, ARG6 );
477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRE_REG_READ6(long, "mmap2",
478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz                  unsigned long, start, unsigned long, length,
479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz                  unsigned long, prot,  unsigned long, flags,
480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz                  unsigned long, fd,    unsigned long, offset);
481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    r = ML_(generic_PRE_sys_mmap)( tid, ARG1, ARG2, ARG3, ARG4, ARG5,
483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz                                        4096 * (Off64T)ARG6 );
484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    SET_STATUS_from_SysRes(r);
485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz }
486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz // XXX: lstat64/fstat64/stat64 are generic, but not necessarily
488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz // applicable to every architecture -- I think only to 32-bit archs.
489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz // We're going to need something like linux/core_os32.h for such
490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz // things, eventually, I think.  --njn
491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz PRE(sys_stat64)
492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz {
493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRINT("sys_stat64 ( %p, %p )",ARG1,ARG2);
494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRE_REG_READ2(long, "stat64", char *, file_name, struct stat64 *, buf);
495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRE_MEM_RASCIIZ( "stat64(file_name)", ARG1 );
496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) );
497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz }
498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz POST(sys_stat64)
500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz {
501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz }
503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz PRE(sys_lstat64)
5056f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz {
5066f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz    PRINT("sys_lstat64 ( %p(%s), %p )",ARG1,ARG1,ARG2);
5076f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz    PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf);
5086f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz    PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 );
509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) );
5106f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz }
5116f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz
5126f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz POST(sys_lstat64)
5136f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz {
514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    vg_assert(SUCCESS);
5156f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz    if (RES == 0) {
5166f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz       POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz    }
5186f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//zz }
519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz PRE(sys_fstat64)
521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz {
522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz   PRINT("sys_fstat64 ( %d, %p )",ARG1,ARG2);
523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz   PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf);
524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz   PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) );
525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz }
526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz
527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz POST(sys_fstat64)
528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz {
529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//zz }
531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniPRE(sys_clone)
534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   UInt cloneflags;
536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRE_REG_READ5(int, "clone",
539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 unsigned long, flags,
540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 void *,        child_stack,
541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 int *,         parent_tidptr,
542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 void *,        child_tls,
543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 int *,         child_tidptr);
544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (ARG1 & VKI_CLONE_PARENT_SETTID) {
546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      PRE_MEM_WRITE("clone(parent_tidptr)", ARG3, sizeof(Int));
547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (!VG_(am_is_valid_for_client)(ARG3, sizeof(Int),
548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                             VKI_PROT_WRITE)) {
549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         SET_STATUS_Failure( VKI_EFAULT );
550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         return;
551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      }
552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID)) {
554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      PRE_MEM_WRITE("clone(child_tidptr)", ARG5, sizeof(Int));
555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (!VG_(am_is_valid_for_client)(ARG5, sizeof(Int),
556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                             VKI_PROT_WRITE)) {
5576f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen         SET_STATUS_Failure( VKI_EFAULT );
5586f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen         return;
5596f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      }
5606f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   }
561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
5626f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   cloneflags = ARG1;
5636f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
5646f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   if (!ML_(client_signal_OK)(ARG1 & VKI_CSIGNAL)) {
5656f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      SET_STATUS_Failure( VKI_EINVAL );
566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      return;
5676f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   }
5686f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Only look at the flags we really care about */
5706f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
5716f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen                         | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
5736f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      /* thread creation */
5746f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      SET_STATUS_from_SysRes(
5756f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen         do_clone(tid,
5766f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen                  ARG1,         /* flags */
577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  (Addr)ARG2,   /* child SP */
5786f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen                  (Int *)ARG3,  /* parent_tidptr */
5796f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen                  (Int *)ARG5,  /* child_tidptr */
580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                  (Addr)ARG4)); /* child_tls */
581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      break;
582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
5846f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      /* FALLTHROUGH - assume vfork == fork */
5856f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);
5866f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
5876f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   case 0: /* plain fork */
588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      SET_STATUS_from_SysRes(
589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         ML_(do_fork_clone)(tid,
590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                       cloneflags,      /* flags */
591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                       (Int *)ARG3,     /* parent_tidptr */
592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                       (Int *)ARG5));   /* child_tidptr */
593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      break;
594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   default:
596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      /* should we just ENOSYS? */
597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg, "Unsupported clone() flags: 0x%lx\n", ARG1);
598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg, "\n");
599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg, "The only supported clone() uses are:\n");
600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg, " - via a threads library (LinuxThreads or NPTL)\n");
601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(message)(Vg_UserMsg, " - via the implementation of fork or vfork\n");
602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      VG_(unimplemented)
603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         ("Valgrind does not support general clone().");
604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (SUCCESS) {
607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (ARG1 & VKI_CLONE_PARENT_SETTID)
608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         POST_MEM_WRITE(ARG3, sizeof(Int));
609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (ARG1 & (VKI_CLONE_CHILD_SETTID | VKI_CLONE_CHILD_CLEARTID))
610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         POST_MEM_WRITE(ARG5, sizeof(Int));
611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      /* Thread creation was successful; let the child have the chance
613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         to run */
614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      *flags |= SfYieldAfter;
615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniPRE(sys_fadvise64)
619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRINT("sys_fadvise64 ( %ld, %ld, %lu, %ld )", ARG1,ARG2,ARG3,ARG4);
621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRE_REG_READ4(long, "fadvise64",
622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 int, fd, vki_loff_t, offset, vki_size_t, len, int, advice);
623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniPRE(sys_rt_sigreturn)
626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* See comments on PRE(sys_rt_sigreturn) in syswrap-amd64-linux.c for
628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      an explanation of what follows. */
629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //ThreadState* tst;
631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PRINT("sys_rt_sigreturn ( )");
632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(VG_(is_valid_tid)(tid));
634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(tid >= 1 && tid < VG_N_THREADS);
635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   vg_assert(VG_(is_running_thread)(tid));
636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ///* Adjust esp to point to start of frame; skip back up over handler
638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //   ret addr */
639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //tst = VG_(get_ThreadState)(tid);
640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //tst->arch.vex.guest_ESP -= sizeof(Addr);
641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   // Should we do something equivalent on ppc64-linux?  Who knows.
642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ///* This is only so that the EIP is (might be) useful to report if
644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //   something goes wrong in the sigreturn */
645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   //ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   // Should we do something equivalent on ppc64?  Who knows.
647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Restore register state from frame and remove it */
649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   VG_(sigframe_destroy)(tid, True);
6506f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
6516f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   /* Tell the driver not to update the guest state with the "result",
6526f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen      and set a bogus result to keep it happy. */
6536f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   *flags |= SfNoWriteResult;
654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   SET_STATUS_Success(0);
6556f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
6566f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   /* Check to see if any signals arose as a result of this. */
6576f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   *flags |= SfPollAfter;
6586f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen}
659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
6606f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen#undef PRE
661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#undef POST
662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
6636f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen/* ---------------------------------------------------------------------
6646f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   The ppc64/Linux syscall table
665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   ------------------------------------------------------------------ */
666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* Add an ppc64-linux specific wrapper to a syscall table. */
668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define PLAX_(sysno, name)    WRAPPER_ENTRY_X_(ppc64_linux, sysno, name)
669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define PLAXY(sysno, name)    WRAPPER_ENTRY_XY(ppc64_linux, sysno, name)
670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// This table maps from __NR_xxx syscall numbers (from
672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// linux/include/asm-ppc/unistd.h) to the appropriate PRE/POST sys_foo()
673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// wrappers on ppc64 (as per sys_call_table in linux/arch/ppc/kernel/entry.S).
674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani//
675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// For those syscalls not handled by Valgrind, the annotation indicate its
676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// arch/OS combination, eg. */* (generic), */Linux (Linux only), ?/?
677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// (unknown).
678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistatic SyscallTableEntry syscall_table[] = {
680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_restart_syscall,   sys_restart_syscall),    //   0
681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_exit,              sys_exit),               //   1
682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fork,              sys_fork),               //   2
683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_read,              sys_read),               //   3
684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_write,             sys_write),              //   4
685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_open,              sys_open),               //   5
687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_close,             sys_close),              //   6
688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_waitpid,           sys_waitpid),            //   7
689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_creat,             sys_creat),              //   8
690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_link,              sys_link),               //   9
691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_unlink,            sys_unlink),             //  10
693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_execve,            sys_execve),             //  11
694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_chdir,             sys_chdir),              //  12
695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_time,              sys_time),               //  13
696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_mknod,             sys_mknod),              //  14
697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_chmod,             sys_chmod),              //  15
699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_lchown,            sys_lchown),             //  16
700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_break,             sys_break),              //  17
701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_oldstat,           sys_oldstat),            //  18
702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_lseek,             sys_lseek),              //  19
703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getpid,            sys_getpid),             //  20
705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_mount,             sys_mount),              //  21
706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_umount,            sys_umount),             //  22
707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setuid,            sys_setuid),             //  23
708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getuid,            sys_getuid),             //  24
709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_stime,             sys_stime),              //  25
711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ptrace,            sys_ptrace),             //  26
712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_alarm,             sys_alarm),              //  27
713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_oldfstat,          sys_oldfstat),           //  28
714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_pause,             sys_pause),              //  29
715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_utime,             sys_utime),              //  30
717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_stty,              sys_stty),               //  31
718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_gtty,              sys_gtty),               //  32
719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_access,            sys_access),             //  33
720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_nice,              sys_nice),               //  34
721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ftime,             sys_ftime),              //  35
723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sync,              sys_sync),               //  36
724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_kill,              sys_kill),               //  37
725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_rename,            sys_rename),             //  38
726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_mkdir,             sys_mkdir),              //  39
727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_rmdir,             sys_rmdir),              //  40
729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_dup,               sys_dup),                //  41
7306f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_pipe,              sys_pipe),               //  42
731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_times,             sys_times),              //  43
7326f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_prof,              sys_prof),               //  44
7336f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
7346f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   GENX_(__NR_brk,               sys_brk),                //  45
735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setgid,            sys_setgid),             //  46
7366f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   GENX_(__NR_getgid,            sys_getgid),             //  47
7376f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_signal,            sys_signal),             //  48
7386f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   GENX_(__NR_geteuid,           sys_geteuid),            //  49
7396f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
7406f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   GENX_(__NR_getegid,           sys_getegid),            //  50
7416f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_acct,              sys_acct),               //  51
7426f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_umount2,           sys_umount),             //  52
743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_lock,              sys_lock),               //  53
744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_ioctl,             sys_ioctl),              //  54
745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_fcntl,             sys_fcntl),              //  55
747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_mpx,               sys_mpx),                //  56
748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setpgid,           sys_setpgid),            //  57
749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ulimit,            sys_ulimit),             //  58
750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_oldolduname,       sys_oldolduname),        //  59
751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_umask,             sys_umask),              //  60
753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_chroot,            sys_chroot),             //  61
754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ustat,             sys_ustat),              //  62
755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_dup2,              sys_dup2),               //  63
756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getppid,           sys_getppid),            //  64
757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getpgrp,           sys_getpgrp),            //  65
759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setsid,            sys_setsid),             //  66
760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sigaction,         sys_sigaction),          //  67
761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sgetmask,          sys_sgetmask),           //  68
762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ssetmask,          sys_ssetmask),           //  69
763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setreuid,          sys_setreuid),           //  70
765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setregid,          sys_setregid),           //  71
766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sigsuspend,        sys_sigsuspend),         //  72
767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sigpending,        sys_sigpending),         //  73
768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sethostname,       sys_sethostname),        //  74
769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setrlimit,         sys_setrlimit),          //  75
771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_getrlimit,         sys_getrlimit),          //  76
772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_getrusage,         sys_getrusage),          //  77
773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_gettimeofday,      sys_gettimeofday),       //  78
774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_settimeofday,      sys_settimeofday),       //  79
775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_getgroups,         sys_getgroups),          //  80
777aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setgroups,         sys_setgroups),          //  81
778aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_select,            sys_select),             //  82
779aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_symlink,           sys_symlink),            //  83
780aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_oldlstat,          sys_oldlstat),           //  84
781aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
782aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_readlink,          sys_readlink),           //  85
783aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_uselib,            sys_uselib),             //  86
784aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_swapon,            sys_swapon),             //  87
785aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_reboot,            sys_reboot),             //  88
786aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_readdir,           sys_readdir),            //  89
787aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
788aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PLAX_(__NR_mmap,              sys_mmap),               //  90
789aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_munmap,            sys_munmap),             //  91
790aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_truncate,          sys_truncate),           //  92
791aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_ftruncate,         sys_ftruncate),          //  93
792aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fchmod,            sys_fchmod),             //  94
793aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
794aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fchown,            sys_fchown),             //  95
795aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getpriority,       sys_getpriority),        //  96
796aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_setpriority,       sys_setpriority),        //  97
797aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_profil,            sys_profil),             //  98
798aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_statfs,            sys_statfs),             //  99
799aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
800aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_fstatfs,           sys_fstatfs),            // 100
801aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_ioperm,            sys_ioperm),             // 101
802aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_socketcall,        sys_socketcall),         // 102
803aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_syslog,            sys_syslog),             // 103
804aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_setitimer,         sys_setitimer),          // 104
805aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
806aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_getitimer,         sys_getitimer),          // 105
807aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_stat,              sys_newstat),            // 106
808aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_lstat,             sys_newlstat),           // 107
809aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_fstat,             sys_newfstat),           // 108
810aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_olduname,          sys_olduname),           // 109
811aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
812aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_iopl,              sys_iopl),               // 110
813aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_vhangup,           sys_vhangup),            // 111
814aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_idle,              sys_idle),               // 112
815aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_vm86,              sys_vm86),               // 113
816aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_wait4,             sys_wait4),              // 114
817aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
818aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_swapoff,           sys_swapoff),            // 115
819aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sysinfo,           sys_sysinfo),            // 116
820aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_ipc,               sys_ipc),                // 117
821aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fsync,             sys_fsync),              // 118
822aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sigreturn,         sys_sigreturn),          // 119
823aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
824aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PLAX_(__NR_clone,             sys_clone),              // 120
825aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_setdomainname,     sys_setdomainname),      // 121
826aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_uname,             sys_newuname),           // 122
827aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_modify_ldt,        sys_modify_ldt),         // 123
828aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_adjtimex,          sys_adjtimex),           // 124
829aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
830aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_mprotect,          sys_mprotect),           // 125
831aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sigprocmask,       sys_sigprocmask),        // 126
832aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_create_module,     sys_ni_syscall),         // 127
833aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_init_module,       sys_init_module),        // 128
834aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_delete_module,     sys_delete_module),      // 129
835aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
836aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_get_kernel_syms,   sys_get_kernel_syms),    // 130
837aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_quotactl,          sys_quotactl),           // 131
838aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_getpgid,           sys_getpgid),            // 132
839aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fchdir,            sys_fchdir),             // 133
840aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_bdflush,           sys_bdflush),            // 134
841aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
842aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_sysfs,             sys_sysfs),              // 135
843aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_personality,       sys_personality),        // 136
844aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_afs_syscall,       sys_afs_syscall),        // 137
845aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_setfsuid,          sys_setfsuid),           // 138
846aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_setfsgid,          sys_setfsgid),           // 139
847aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
848aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR__llseek,           sys_llseek),             // 140
849aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_getdents,          sys_getdents),           // 141
850aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR__newselect,        sys_select),             // 142
851aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_flock,             sys_flock),              // 143
852aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_msync,             sys_msync),              // 144
853aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
854aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_readv,             sys_readv),              // 145
855aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_writev,            sys_writev),             // 146
856aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_getsid,            sys_getsid),             // 147
857aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_fdatasync,         sys_fdatasync),          // 148
858aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR__sysctl,           sys_sysctl),             // 149
859aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
860aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_mlock,             sys_mlock),              // 150
861aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_munlock,           sys_munlock),            // 151
862aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_mlockall,          sys_mlockall),           // 152
863aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_munlockall,        sys_munlockall),         // 153
864aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sched_setparam,    sys_sched_setparam),     // 154
865aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
866aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sched_getparam,         sys_sched_getparam),        // 155
867aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_setscheduler,     sys_sched_setscheduler),    // 156
868aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_getscheduler,     sys_sched_getscheduler),    // 157
869aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_yield,            sys_sched_yield),           // 158
870aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max),// 159
871aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
872aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 160
873aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sched_rr_get_interval,  sys_sched_rr_get_interval), // 161
874aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_nanosleep,         sys_nanosleep),          // 162
875aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_mremap,            sys_mremap),             // 163
876aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_setresuid,         sys_setresuid),          // 164
877aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
878aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_getresuid,         sys_getresuid),          // 165
879aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_query_module,      sys_query_module),       // 166
880aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_poll,              sys_poll),               // 167
881aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_nfsservctl,        sys_nfsservctl),         // 168
882aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_setresgid,         sys_setresgid),          // 169
883aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
884aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_getresgid,         sys_getresgid),          // 170
885aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_prctl,             sys_prctl),              // 171
886aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PLAX_(__NR_rt_sigreturn,      sys_rt_sigreturn),       // 172
887aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_rt_sigaction,      sys_rt_sigaction),       // 173
888aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_rt_sigprocmask,    sys_rt_sigprocmask),     // 174
889aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
890aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_rt_sigpending,     sys_rt_sigpending),      // 175
891aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_rt_sigtimedwait,   sys_rt_sigtimedwait),    // 176
892aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_rt_sigqueueinfo,   sys_rt_sigqueueinfo),    // 177
893aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_rt_sigsuspend,     sys_rt_sigsuspend),      // 178
894aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_pread64,           sys_pread64),            // 179
895aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
896aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_pwrite64,          sys_pwrite64),           // 180
897aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_chown,             sys_chown),              // 181
898aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_getcwd,            sys_getcwd),             // 182
899aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_capget,            sys_capget),             // 183
900aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_capset,            sys_capset),             // 184
901aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
902aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_sigaltstack,       sys_sigaltstack),        // 185
903aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sendfile,          sys_sendfile),           // 186
904aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_getpmsg,           sys_getpmsg),            // 187
905aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_putpmsg,           sys_putpmsg),            // 188
906aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_vfork,             sys_fork),               // 189 treat as fork
907aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
908aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENXY(__NR_ugetrlimit,        sys_getrlimit),          // 190
909aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_readahead,         sys_readahead),          // 191
910aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* #define __NR_mmap2           192     32bit only */
9116f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// /* #define __NR_truncate64      193     32bit only */
9126f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// /* #define __NR_ftruncate64     194     32bit only */
9136f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
9146f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// /* #define __NR_stat64          195     32bit only */
915aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* #define __NR_lstat64         196     32bit only */
9166f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// /* #define __NR_fstat64         197     32bit only */
9176f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_pciconfig_read,    sys_pciconfig_read),     // 198
9186f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_pciconfig_write,   sys_pciconfig_write),    // 199
9196f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
920aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_pciconfig_iobase,  sys_pciconfig_iobase),   // 200
9216f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_multiplexer,       sys_multiplexer),        // 201
9226f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   GENXY(__NR_getdents64,        sys_getdents64),         // 202
923aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_pivot_root,        sys_pivot_root),         // 203
9246f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_fcntl64,           sys_fcntl64),            // 204 !!!!?? 32bit only */
9256f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
926aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   GENX_(__NR_madvise,           sys_madvise),            // 205
927aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_mincore,           sys_mincore),            // 206
9286f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_gettid,            sys_gettid),             // 207
9296f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen// _____(__NR_tkill,             sys_tkill),              // 208
9306f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_setxattr,          sys_setxattr),           // 209
9316f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
932aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_lsetxattr,         sys_lsetxattr),          // 210
9336f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_fsetxattr,         sys_fsetxattr),          // 211
9346f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_getxattr,          sys_getxattr),           // 212
935aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_lgetxattr,         sys_lgetxattr),          // 213
936aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_fgetxattr,         sys_fgetxattr),          // 214
937aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_listxattr,         sys_listxattr),          // 215
938aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_llistxattr,        sys_llistxattr),         // 216
9396f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_flistxattr,        sys_flistxattr),         // 217
9406f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_removexattr,       sys_removexattr),        // 218
9416f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_lremovexattr,      sys_lremovexattr),       // 219
9426f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_fremovexattr,      sys_fremovexattr),       // 220
943aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
944aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_futex,             sys_futex),              // 221
945aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sched_setaffinity, sys_sched_setaffinity),  // 222
946aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_sched_getaffinity, sys_sched_getaffinity),  // 223
947aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* 224 currently unused */
948aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
949aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_tuxcall,           sys_tuxcall),            // 225
950aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* #define __NR_sendfile64      226     32bit only */
951aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_io_setup,          sys_io_setup),           // 227
952aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_io_destroy,        sys_io_destroy),         // 228
953aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_io_getevents,      sys_io_getevents),       // 229
954aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_io_submit,         sys_io_submit),          // 230
955aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_io_cancel,         sys_io_cancel),          // 231
956aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_set_tid_address,   sys_set_tid_address),    // 232
957aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   PLAX_(__NR_fadvise64,         sys_fadvise64),          // 233
958aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_exit_group,        sys_exit_group),         // 234
959aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
960aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_lookup_dcookie,    sys_lookup_dcookie),     // 235
961aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_epoll_create,      sys_epoll_create),       // 236
962aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_epoll_ctl,         sys_epoll_ctl),          // 237
963aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_epoll_wait,        sys_epoll_wait),         // 238
964aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_remap_file_pages,  sys_remap_file_pages),   // 239
965aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
966aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timer_create,      sys_timer_create),       // 240
967aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timer_settime,     sys_timer_settime),      // 241
968aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timer_gettime,     sys_timer_gettime),      // 242
969aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_timer_getoverrun,  sys_timer_getoverrun),   // 243
970aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_timer_delete,      sys_timer_delete),       // 244
971aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_clock_settime,     sys_clock_settime),      // 245
972aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_clock_gettime,     sys_clock_gettime),      // 246
973aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_clock_getres,      sys_clock_getres),       // 247
974aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_clock_nanosleep,   sys_clock_nanosleep),    // 248
975aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
976aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_swapcontext,       sys_swapcontext),        // 249
977aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
978aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_tgkill,            sys_tgkill),             // 250
979aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_utimes,            sys_utimes),             // 251
980aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_statfs64,          sys_statfs64),           // 252
981aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_fstatfs64,         sys_fstatfs64),          // 253
982aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* #define __NR_fadvise64_64    254     32bit only */
983aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
984aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_rtas,              sys_rtas),               // 255
985aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* Number 256 is reserved for sys_debug_setcontext */
986aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* Number 257 is reserved for vserver */
987aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// /* 258 currently unused */
988aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_mbind,             sys_mbind),              // 259
989aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
990aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_get_mempolicy,     sys_get_mempolicy),      // 260
991aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_set_mempolicy,     sys_set_mempolicy),      // 261
992aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_mq_open,           sys_mq_open),            // 262
993aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_mq_unlink,         sys_mq_unlink),          // 263
994aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_mq_timedsend,      sys_mq_timedsend),       // 264
995aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
996aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_mq_timedreceive,   sys_mq_timedreceive),    // 265
997aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_mq_notify,         sys_mq_notify),          // 266
998aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_mq_getsetattr,     sys_mq_getsetattr),      // 267
999aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_kexec_load,        sys_kexec_load),         // 268
1000aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_add_key,           sys_add_key),            // 269
1001aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1002aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_request_key,       sys_request_key),        // 270
1003aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_keyctl,            sys_keyctl),             // 271
1004aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani// _____(__NR_waitid,            sys_waitid),             // 272
1005aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_ioprio_set,        sys_ioprio_set),         // 273
1006aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_ioprio_get,        sys_ioprio_get),         // 274
10076f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
10086f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_inotify_init,  sys_inotify_init),           // 275
10096f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_inotify_add_watch,  sys_inotify_add_watch), // 276
10106f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_inotify_rm_watch,   sys_inotify_rm_watch),  // 277
10116f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
10126f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_pselect6,          sys_pselect6),           // 280
10136f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_ppoll,             sys_ppoll),              // 281
10146f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
10156f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_openat,            sys_openat),             // 286
10166f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_mkdirat,           sys_mkdirat),            // 287
10176f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_mknodat,           sys_mknodat),            // 288
10186f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_fchownat,          sys_fchownat),           // 289
10196f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_futimesat,         sys_futimesat),          // 290
1020aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_newfstatat,        sys_newfstatat),         // 291
1021aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_unlinkat,          sys_unlinkat),           // 292
10226f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_renameat,          sys_renameat),           // 293
1023aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_linkat,            sys_linkat),             // 294
1024aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_symlinkat,         sys_symlinkat),          // 295
10256f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_readlinkat,        sys_readlinkat),         // 296
1026aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_fchmodat,          sys_fchmodat),           // 297
1027aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_faccessat,         sys_faccessat),          // 298
10286f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINX_(__NR_set_robust_list,   sys_set_robust_list),    // 299
1029aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_get_robust_list,   sys_get_robust_list),    // 300
1030aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_move_pages,        sys_move_pages),        // 301
10316f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_getcpu,            sys_getcpu),            // 302
1032aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_epoll_pwait,       sys_epoll_pwait),       // 303
1033aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_utimensat,         sys_utimensat),         // 304
10346f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_signalfd,          sys_signalfd),          // 305
1035aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timerfd_create,    sys_timerfd_create),    // 306
1036aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_eventfd,           sys_eventfd),           // 307
1037aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_sync_file_range2,  sys_sync_file_range2),  // 308
1038aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_fallocate,         sys_fallocate),         // 309
10396f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen//   LINXY(__NR_subpage_prot,       sys_ni_syscall),       // 310
1040aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timerfd_settime,   sys_timerfd_settime),  // 311
1041aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 312
1042aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_signalfd4,         sys_signalfd4),        // 313
1043aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_eventfd2,          sys_eventfd2),         // 314
1044aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_epoll_create1,     sys_epoll_create1),    // 315
1045aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_dup3,              sys_dup3),             // 316
10466f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_pipe2,             sys_pipe2),            // 317
1047aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_inotify_init1,     sys_inotify_init1),    // 318
1048aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_perf_event_open,   sys_perf_event_open),  // 319
1049aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_preadv,            sys_preadv),           // 320
1050aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_pwritev,           sys_pwritev),          // 321
1051aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322
10526f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen
10536f1a83d66c7093abfb3504f45273513ef17393b1Marco Nelissen   LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 347
1054aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1055aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 351
1056aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352
1057aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani};
1058aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1059aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniSyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
1060aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1061aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   const UInt syscall_table_size
1062aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      = sizeof(syscall_table) / sizeof(syscall_table[0]);
1063aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1064aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Is it in the contiguous initial section of the table? */
1065aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   if (sysno < syscall_table_size) {
1066aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      SyscallTableEntry* sys = &syscall_table[sysno];
1067aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      if (sys->before == NULL)
1068aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         return NULL; /* no entry */
1069aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      else
1070aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         return sys;
1071aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   }
1072aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1073aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   /* Can't find a wrapper */
1074aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani   return NULL;
1075aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1076aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1077aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif // defined(VGP_ppc64_linux)
1078aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1079aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--------------------------------------------------------------------*/
1080aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--- end                                                          ---*/
1081aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*--------------------------------------------------------------------*/
1082aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani