Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test1_31.C
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 // $Id: test1_31.C,v 1.1 2008/10/30 19:18:57 legendre Exp $
33 /*
34  * #Name: test1_31
35  * #Desc: Mutator Side - Non-Recursive Base Tramp
36  * #Dep: 
37  * #Arch:
38  * #Notes:
39  */
40
41 #include "BPatch.h"
42 #include "BPatch_Vector.h"
43 #include "BPatch_thread.h"
44 #include "BPatch_snippet.h"
45
46 #include "test_lib.h"
47 #include "dyninst_comp.h"
48
49 class test1_31_Mutator : public DyninstMutator {
50         virtual test_results_t executeTest();
51 };
52
53 extern "C" DLLEXPORT  TestMutator *test1_31_factory() 
54 {
55         return new test1_31_Mutator();
56 }
57
58 //
59 // Start Test Case #31 - (non-recursive base tramp)
60 //
61
62 test_results_t test1_31_Mutator::executeTest() 
63 {
64         const char * func31_2_name = "test1_31_func2";
65         const char * func31_3_name = "test1_31_func3";
66         const char * func31_4_name = "test1_31_func4";
67
68         BPatch_image * app_image = appImage;
69
70         BPatch_Vector<BPatch_function *> bpfv;
71
72         if (NULL == appImage->findFunction(func31_2_name, bpfv) || !bpfv.size()
73                         || NULL == bpfv[0])
74         {
75                 logerror("    Unable to find function %s\n", func31_2_name);
76                 return FAILED;
77         }
78
79         BPatch_function *func31_2_function = bpfv[0];
80
81         bpfv.clear();
82
83         if (NULL == appImage->findFunction(func31_3_name, bpfv) || !bpfv.size()
84                         || NULL == bpfv[0])
85         {
86                 logerror("    Unable to find function %s\n", func31_3_name);
87                 return FAILED;
88         }
89
90         BPatch_function *func31_3_function = bpfv[0];
91
92         bpfv.clear();
93
94         if (NULL == appImage->findFunction(func31_4_name, bpfv) || !bpfv.size()
95                         || NULL == bpfv[0])
96         {
97                 logerror("    Unable to find function %s\n", func31_4_name);
98                 return FAILED;
99         }
100
101         BPatch_function *func31_4_function = bpfv[0];
102
103         bool old_value = BPatch::bpatch->isTrampRecursive();
104         BPatch::bpatch->setTrampRecursive( false );
105
106         BPatch_Vector<BPatch_snippet *> func31_2_args;
107         BPatch_snippet * func31_2_snippet =
108                 new BPatch_funcCallExpr( * func31_3_function,
109                                 func31_2_args );
110         instrument_entry_points( appAddrSpace, app_image, func31_2_function, func31_2_snippet );
111
112         BPatch_Vector<BPatch_snippet *> func31_3_args_1;
113         func31_3_args_1.push_back( new BPatch_constExpr( 1 ) );
114         BPatch_snippet * func31_3_snippet_1 =
115                 new BPatch_funcCallExpr( * func31_4_function,
116                                 func31_3_args_1 );
117         instrument_entry_points(appAddrSpace, app_image, func31_3_function, func31_3_snippet_1);
118
119         BPatch_Vector<BPatch_snippet *> bar_args_2;
120         bar_args_2.push_back( new BPatch_constExpr( 2 ) );
121         BPatch_snippet * bar_snippet_2 =
122                 new BPatch_funcCallExpr( * func31_4_function,
123                                 bar_args_2 );
124         instrument_exit_points(appAddrSpace, app_image, func31_3_function, bar_snippet_2);
125
126         BPatch::bpatch->setTrampRecursive( old_value );
127
128         return PASSED;
129 }