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