Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test1_4.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_4.C,v 1.1 2008/10/30 19:19:34 legendre Exp $
33 /*
34  * #Name: test1_4
35  * #Desc: Mutator Side (Sequence) Use the BPatch sequence operation to glue expressions together.  The test is constructed to verify the correct execution order.
36  * #Arch: all
37  * #Dep: 
38  */
39
40 #include "BPatch.h"
41 #include "BPatch_Vector.h"
42 #include "BPatch_thread.h"
43 #include "BPatch_snippet.h"
44
45 #include "test_lib.h"
46 #include "dyninst_comp.h"
47
48 class test1_4_Mutator : public DyninstMutator {
49         virtual test_results_t executeTest();
50 };
51
52 extern "C" DLLEXPORT  TestMutator *test1_4_factory() 
53 {
54         return new test1_4_Mutator();
55 }
56
57 //
58 // Start Test Case #4 - mutator side (sequence)
59 //      Use the BPatch sequence operation to glue to expressions togehter.
60 //      The test is constructed to verify the correct execution order.
61 //
62
63 test_results_t test1_4_Mutator::executeTest() 
64 {
65         // Find the entry point to the procedure "func4_1"
66         const char *funcName = "test1_4_func1";
67         BPatch_Vector<BPatch_function *> found_funcs;
68
69         if ((NULL == appImage->findFunction(funcName, found_funcs))
70                         || !found_funcs.size()) 
71         {
72                 logerror("    Unable to find function %s\n",
73                                 funcName);
74                 return FAILED;
75         }
76
77         if (1 < found_funcs.size()) 
78         {
79                 logerror("%s[%d]:  WARNING  : found %d functions named %s.  Using the first.\n", 
80                                 __FILE__, __LINE__, found_funcs.size(), funcName);
81         }
82
83         BPatch_Vector<BPatch_point *> *point4_1 = found_funcs[0]->findPoint(BPatch_entry);
84
85         if (!point4_1 || ((*point4_1).size() == 0)) 
86         {
87                 logerror("Unable to find entry point to \"%s\".\n", funcName);
88                 return FAILED;
89         }
90
91         const char *globalVar = "test1_4_globalVariable4_1";
92         BPatch_variableExpr *expr4_1 = findVariable (appImage, globalVar, point4_1);
93
94         if (!expr4_1) 
95         {
96                 logerror("**Failed** test #4 (sequence)\n");
97                 logerror("    Unable to locate variable %s\n", globalVar);
98                 return FAILED;
99         }
100
101         BPatch_arithExpr expr4_2(BPatch_assign, *expr4_1, BPatch_constExpr(42));
102         BPatch_arithExpr expr4_3(BPatch_assign, *expr4_1, BPatch_constExpr(43));
103
104         BPatch_Vector<BPatch_snippet*> vect4_1;
105         vect4_1.push_back(&expr4_2);
106         vect4_1.push_back(&expr4_3);
107
108         BPatch_sequence expr4_4(vect4_1);
109         checkCost(expr4_4);
110         appAddrSpace->insertSnippet(expr4_4, *point4_1);
111
112         return PASSED;
113 }
114