1 2 /*--------------------------------------------------------------------*/ 3 /*--- Misc client state info pub_core_clientstate.h ---*/ 4 /*--------------------------------------------------------------------*/ 5 6 /* 7 This file is part of Valgrind, a dynamic binary instrumentation 8 framework. 9 10 Copyright (C) 2000-2010 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_CLIENTSTATE_H 32 #define __PUB_CORE_CLIENTSTATE_H 33 34 //-------------------------------------------------------------------- 35 // PURPOSE: This module holds various bits of client state which don't 36 // live comfortably anywhere else. Note that the ThreadStates for the 37 // client don't live here; they instead live in m_threadstate.h. Most 38 // of these values are set once at startup and not changed later. 39 //-------------------------------------------------------------------- 40 41 #include "pub_tool_clientstate.h" 42 43 // Address space globals 44 45 extern Addr VG_(clstk_base); // client stack range 46 extern Addr VG_(clstk_end); 47 extern UWord VG_(clstk_id); // client stack id 48 49 extern Addr VG_(brk_base); // start of brk 50 extern Addr VG_(brk_limit); // current brk 51 52 /* A fd which refers to the client executable. */ 53 extern Int VG_(cl_exec_fd); 54 55 /* A fd which refers to the fake /proc/<pid>/cmdline in /tmp. The 56 idea is: make up the /proc/<pid>/cmdline file the client would 57 expect to see if it was running natively. Copy into a file in 58 /tmp. When the client then does an open of /proc/<pid>/cmdline or 59 /proc/self/cmdline, instead give it a file handle to the file in 60 /tmp. The problem of deleting said file when Valgrind exits is 61 neatly sidestepped by unlinking it as soon as it has been created, 62 but holding on to the file handle. That causes the kernel to keep 63 the file contents alive exactly until the process exits. */ 64 extern Int VG_(cl_cmdline_fd); 65 66 // Client's original rlimit data and rlimit stack 67 extern struct vki_rlimit VG_(client_rlimit_data); 68 extern struct vki_rlimit VG_(client_rlimit_stack); 69 70 // Name of the launcher, as extracted from VALGRIND_LAUNCHER at 71 // startup. 72 extern HChar* VG_(name_of_launcher); 73 74 /* Application-visible file descriptor limits */ 75 extern Int VG_(fd_soft_limit); 76 extern Int VG_(fd_hard_limit); 77 78 /* Useful addresses extracted from the client */ 79 /* Where is the __libc_freeres_wrapper routine we made? */ 80 extern Addr VG_(client___libc_freeres_wrapper); 81 82 /* x86-linux only: where is ld.so's _dl_sysinfo_int80 function? 83 Finding it isn't essential, but knowing where it is does sometimes 84 help produce better back traces. See big comment in 85 VG_(get_StackTrace) in m_stacktrace.c for further info. */ 86 extern Addr VG_(client__dl_sysinfo_int80); 87 88 89 #endif // __PUB_CORE_CLIENTSTATE_H 90 91 /*--------------------------------------------------------------------*/ 92 /*--- end ---*/ 93 /*--------------------------------------------------------------------*/ 94