pub_tool_libcproc.h revision 8eb8bab992e3998c33770b0cdb16059a8b918a06
1
2/*--------------------------------------------------------------------*/
3/*--- Process-related libc stuff               pub_tool_libcproc.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7   This file is part of Valgrind, a dynamic binary instrumentation
8   framework.
9
10   Copyright (C) 2000-2013 Julian Seward
11      jseward@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_TOOL_LIBCPROC_H
32#define __PUB_TOOL_LIBCPROC_H
33
34#include "pub_tool_basics.h"   // VG_ macro
35#include "pub_tool_vki.h"      // vki_rlimit
36
37/* ---------------------------------------------------------------------
38   Command-line and environment stuff
39   ------------------------------------------------------------------ */
40
41/* Client environment. */
42extern HChar** VG_(client_envp);
43
44/* Looks up VG_(client_envp) */
45extern HChar* VG_(getenv) ( const HChar* name );
46
47/* Path to all our library/aux files */
48extern const HChar *VG_(libdir);
49
50// The name of the LD_PRELOAD-equivalent variable.  It varies across
51// platforms.
52extern const HChar* VG_(LD_PRELOAD_var_name);
53
54/* Resolves filename of VG_(cl_exec_fd) and copies it to the buffer.
55   Buffer must not be NULL and buf_size must be at least 1.
56   If buffer is not large enough it is terminated with '\0' only
57   when 'terminate_with_NUL == True'. */
58extern void VG_(client_fname)(HChar *buffer, SizeT buf_size,
59                              Bool terminate_with_NUL);
60
61/* Concatenates client exename and command line arguments into
62   the buffer. Buffer must not be NULL and buf_size must be
63   at least 1. Buffer is always terminated with '\0'. */
64extern void VG_(client_cmd_and_args)(HChar *buffer, SizeT buf_size);
65
66/* ---------------------------------------------------------------------
67   Important syscalls
68   ------------------------------------------------------------------ */
69
70extern Int  VG_(waitpid)( Int pid, Int *status, Int options );
71extern Int  VG_(system) ( const HChar* cmd );
72extern Int  VG_(spawn)  ( const HChar *filename, const HChar **argv );
73extern Int  VG_(fork)   ( void);
74extern void VG_(execv)  ( const HChar* filename, const HChar** argv );
75extern Int  VG_(sysctl) ( Int *name, UInt namelen, void *oldp, SizeT *oldlenp, void *newp, SizeT newlen );
76
77/* ---------------------------------------------------------------------
78   Resource limits and capabilities
79   ------------------------------------------------------------------ */
80
81extern Int VG_(getrlimit) ( Int resource, struct vki_rlimit *rlim );
82extern Int VG_(setrlimit) ( Int resource, const struct vki_rlimit *rlim );
83extern Int VG_(prctl) (Int option,
84                       ULong arg2, ULong arg3, ULong arg4, ULong arg5);
85
86/* ---------------------------------------------------------------------
87   pids, etc
88   ------------------------------------------------------------------ */
89
90extern Int VG_(gettid)  ( void );
91extern Int VG_(getpid)  ( void );
92extern Int VG_(getppid) ( void );
93extern Int VG_(getpgrp) ( void );
94extern Int VG_(geteuid) ( void );
95extern Int VG_(getegid) ( void );
96
97/* ---------------------------------------------------------------------
98   Timing
99   ------------------------------------------------------------------ */
100
101// Returns the number of milliseconds passed since the progam started
102// (roughly;  it gets initialised partway through Valgrind's initialisation
103// steps).
104extern UInt VG_(read_millisecond_timer) ( void );
105extern Int  VG_(gettimeofday)(struct vki_timeval *tv, struct vki_timezone *tz);
106
107/* ---------------------------------------------------------------------
108   atfork
109   ------------------------------------------------------------------ */
110
111typedef void (*vg_atfork_t)(ThreadId);
112extern void VG_(atfork)(vg_atfork_t pre, vg_atfork_t parent, vg_atfork_t child);
113
114
115#endif   // __PUB_TOOL_LIBCPROC_H
116
117/*--------------------------------------------------------------------*/
118/*--- end                                                          ---*/
119/*--------------------------------------------------------------------*/
120