Home | History | Annotate | Download | only in coregrind
      1 
      2 /*--------------------------------------------------------------------*/
      3 /*--- Process-related libc stuff.              pub_core_libcproc.h ---*/
      4 /*--------------------------------------------------------------------*/
      5 
      6 /*
      7    This file is part of Valgrind, a dynamic binary instrumentation
      8    framework.
      9 
     10    Copyright (C) 2000-2017 Julian Seward
     11       jseward (at) acm.org
     12 
     13    This program is free software; you can redistribute it and/or
     14    modify it under the terms of the GNU General Public License as
     15    published by the Free Software Foundation; either version 2 of the
     16    License, or (at your option) any later version.
     17 
     18    This program is distributed in the hope that it will be useful, but
     19    WITHOUT ANY WARRANTY; without even the implied warranty of
     20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     21    General Public License for more details.
     22 
     23    You should have received a copy of the GNU General Public License
     24    along with this program; if not, write to the Free Software
     25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     26    02111-1307, USA.
     27 
     28    The GNU General Public License is contained in the file COPYING.
     29 */
     30 
     31 #ifndef __PUB_CORE_LIBCPROC_H
     32 #define __PUB_CORE_LIBCPROC_H
     33 
     34 //--------------------------------------------------------------------
     35 // PURPOSE: This module contains libc code related to the process.
     36 // It's a bit of a mixed bag.
     37 //--------------------------------------------------------------------
     38 
     39 #include "config.h"           // Crucial: ensure we get ENABLE_INNER
     40 #include "pub_tool_libcproc.h"
     41 
     42 /* The directory we look for all our auxiliary files in.  Useful for
     43    running Valgrind out of a build tree without having to do "make
     44    install".  Inner valgrinds require a different lib variable, else
     45    they end up picking up .so's etc intended for the outer
     46    valgrind. */
     47 #ifdef ENABLE_INNER
     48 #  define VALGRIND_LIB     "VALGRIND_LIB_INNER"
     49 #else
     50 #  define VALGRIND_LIB     "VALGRIND_LIB"
     51 #endif
     52 
     53 /* Additional command-line arguments; they are overridden by actual
     54    command-line option.  Each argument is separated by spaces.  There
     55    is no quoting mechanism.  */
     56 #define VALGRIND_OPTS    "VALGRIND_OPTS"
     57 
     58 /* The full name of Valgrind's stage1 (launcher) executable.  This is
     59    set by stage1 and read by stage2, and is used for recursive
     60    invocations of Valgrind on child processes.
     61 
     62    For self-hosting, the inner and outer Valgrinds must use different
     63    names to avoid collisions.  */
     64 #ifdef ENABLE_INNER
     65 #  define VALGRIND_LAUNCHER  "VALGRIND_LAUNCHER_INNER"
     66 #else
     67 #  define VALGRIND_LAUNCHER  "VALGRIND_LAUNCHER"
     68 #endif
     69 
     70 
     71 // Environment manipulations
     72 extern HChar **VG_(env_setenv)   ( HChar ***envp, const HChar* varname,
     73                                    const HChar *val );
     74 extern void    VG_(env_unsetenv) ( HChar **env, const HChar *varname,
     75                                    void (*free_fn) ( void *) );
     76 extern void    VG_(env_remove_valgrind_env_stuff) ( HChar** env,
     77                                                     Bool ro_strings,
     78                                                     void (*free_fn) (void *) );
     79 extern HChar **VG_(env_clone)    ( HChar **env_clone );
     80 
     81 // misc
     82 extern Int  VG_(getgroups)( Int size, UInt* list );
     83 extern Int  VG_(ptrace)( Int request, Int pid, void *addr, void *data );
     84 
     85 // atfork
     86 extern void VG_(do_atfork_pre)    ( ThreadId tid );
     87 extern void VG_(do_atfork_parent) ( ThreadId tid );
     88 extern void VG_(do_atfork_child)  ( ThreadId tid );
     89 
     90 // icache invalidation
     91 extern void VG_(invalidate_icache) ( void *ptr, SizeT nbytes );
     92 
     93 // dcache flushing
     94 extern void VG_(flush_dcache) ( void *ptr, SizeT nbytes );
     95 
     96 #endif   // __PUB_CORE_LIBCPROC_H
     97 
     98 /*--------------------------------------------------------------------*/
     99 /*--- end                                                          ---*/
    100 /*--------------------------------------------------------------------*/
    101