Update copyright to LGPL on all files
[dyninst.git] / codeCoverage / h / FCUseDominator.h
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 #ifndef _FCUseDominator_h_
33 #define _FCUseDominator_h_
34
35 #include <FunctionCoverage.h>
36
37 /** class to represent a function in the executable
38   * whose source code line information is available.
39   * This class is introduced for instrumentation of the function 
40   * using the dominator information of its control flow graph
41   * for code coverage.
42   */
43 class FCUseDominator : public FunctionCoverage {
44 private:
45         /** private constructor of the class */
46         FCUseDominator();
47
48         /** method that fill the dominator information
49           * of the control flow graph it contains
50           */
51         void fillDominatorInfo();
52
53         /** method to decide which basic block will
54           * be instrumented when the function is instrumented
55           * for code coverage. A basic block is validated
56           * if it is a leaf in dominator tree or has an 
57           * outgoing edge to a basic block it does not dominate.
58           * @param bb basic block pointer
59           */
60         bool validateBasicBlock(BPatch_basicBlock* bb);
61
62         /** if interval deletion is given to be >= 0
63           * then in fixed intervals the mutatee is stopped
64           * and the execution counts of the basic blocks are
65           * updated for all blocks. This method
66           * updates the execution count of the basic block
67           * with the given count using the dominator information.
68           * @param bb basic block whose execution count will be
69           *        updated
70           * @param ec number of executions to add
71           */
72         int updateExecutionCounts(BPatch_basicBlock* bb,int ec);
73
74 public:
75
76         /** constructor of the class
77           * @param f function to instrument later
78           * @param t thread object of the mutatee
79           * @param i image that the function belongs to
80           * @param funcN the name of the function
81           * @param fileN the name of the source file the function is in
82           */
83         FCUseDominator(BPatch_function* f,BPatch_thread* t,BPatch_image* i,
84                        const char* funcN);
85
86         /** destructor of the class */
87         ~FCUseDominator();
88 };
89
90 #endif /* _FCUseDominator_h_ */