Potential fixes needed for relocating libraries (#754)
[dyninst.git] / dyninstAPI / src / syscallNotification.h
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  * 
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  * 
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  * 
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  * 
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  * 
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30
31 // $Id: syscallNotification.h,v 1.3 2005/09/09 18:07:12 legendre Exp $
32
33 #if !defined(SYSCALL_NOTIFICATION_H)
34 #define SYSCALL_NOTIFICATION_H
35
36 // Non-NULL for platforms where we don't need the instMapping
37 #define SYSCALL_INSTALLED ((instMapping *)1)
38
39 #include <cassert>
40 #include <cstdlib>
41
42 class instMapping;
43 class PCProcess;
44
45 class syscallNotification {
46   private:
47     // If we use instrumentation to get notification of a syscall
48     instMapping *preForkInst;
49     instMapping *postForkInst;
50     instMapping *preExecInst;
51     instMapping *postExecInst;
52     instMapping *preExitInst;
53     instMapping *preLwpExitInst;
54     PCProcess *proc;
55
56     // platform dependent
57     const char *getForkFuncName();
58     const char *getExecFuncName();
59     const char *getExitFuncName();
60     
61   public:
62     syscallNotification() :
63     preForkInst(NULL), postForkInst(NULL),
64     preExecInst(NULL), postExecInst(NULL),
65     preExitInst(NULL), preLwpExitInst(NULL)
66        { assert(0 && "ILLEGAL USE OF DEFAULT CONSTRUCTOR"); }
67
68     syscallNotification(PCProcess *p) :
69     preForkInst(NULL), postForkInst(NULL),
70     preExecInst(NULL), postExecInst(NULL),
71     preExitInst(NULL), preLwpExitInst(NULL), proc(p) {};
72
73     // fork constructor
74     syscallNotification(syscallNotification *parentSN,
75                         PCProcess *p);
76     
77     ~syscallNotification() {
78     }
79     
80     bool installPreFork();
81     bool installPostFork();
82     bool installPreExec();
83     bool installPostExec();
84     bool installPreExit();
85     bool installPreLwpExit();
86
87     bool removePreFork();
88     bool removePostFork();
89     bool removePreExec();
90     bool removePostExec();
91     bool removePreExit();
92     bool removePreLwpExit();
93 };
94
95 #endif
96