Update copyright to LGPL on all files
[dyninst.git] / symtabAPI / tests / test_findSymbol_mod.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 #include <stdlib.h>
32 #include <stdio.h>
33 #include <assert.h>
34
35 #include "symtabAPI/h/Dyn_Symtab.h"
36 #include "symtabAPI/h/Dyn_Archive.h"
37 #define logerror printf
38
39 static int mutatorTest(Dyn_Symtab *symtab)
40 {
41         vector <Dyn_Symbol *>syms;
42         Dyn_Module *mod;
43         if(!symtab->findModule("test1.mutatee.c", mod))
44         {
45                 logerror("Finding Module %s failed\n","test1.mutatee.c");
46                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
47                 return -1;
48         }
49         /*********************************************************************************
50                 findSymbolByType: function with ST_UNKNOWN
51         *********************************************************************************/      
52         if(!mod->findSymbolByType(syms,"func1_1",Dyn_Symbol::ST_UNKNOWN))
53         {
54                 logerror("unable to find symbol %s\n","func1_1");
55                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
56                 return -1;
57         }       
58         if(syms.size() != 1)
59                 logerror("%s[%d]:  WARNING  : found %d symbols named %s.  Using the first.\n",
60                             __FILE__, __LINE__, syms.size(), "func1_1");
61         if(syms[0]->getPrettyName() != "func1_1")
62         {
63                 logerror("Pretty Name for symbol %s does not match the pretty Name for the found Symbol(%s)\n","func1_1",syms[0]->getPrettyName().c_str());
64                 return -1;
65         }
66         syms.clear();
67         
68         /*********************************************************************************
69                 findSymbolByType: function with ST_FUNCTION
70         *********************************************************************************/      
71         if(!mod->findSymbolByType(syms,"func1_1",Dyn_Symbol::ST_FUNCTION))
72         {
73                 logerror("unable to find Function %s\n","func1_1");
74                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
75                 return -1;
76         }       
77         if(syms.size() != 1)
78                 logerror("%s[%d]:  WARNING  : found %d functions named %s.  Using the first.\n",
79                             __FILE__, __LINE__, syms.size(), "func1_1");
80         if(syms[0]->getPrettyName() != "func1_1")
81         {
82                 logerror("Pretty Name for function %s does not match the pretty Name for the found Symbol(%s)\n","func1_1",syms[0]->getPrettyName().c_str());
83                 return -1;
84         }
85         syms.clear();
86         
87         /*********************************************************************************
88                 findSymbolByType: Variable with ST_UNKNOWN
89         *********************************************************************************/      
90         if(!mod->findSymbolByType(syms,"globalVariable1_1",Dyn_Symbol::ST_UNKNOWN))
91         {
92                 logerror("unable to find symbol %s\n","globalVariable1_1");
93                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
94                 return -1;
95         }
96         if(syms.size() != 1)
97                 logerror("%s[%d]:  WARNING  : found %d symbols named %s.  Using the first.\n",
98                             __FILE__, __LINE__, syms.size(), "globalVariable1_1");
99         if(syms[0]->getPrettyName() != "globalVariable1_1")
100         {
101                 logerror("Pretty Name for symbol %s does not match the pretty Name for the found Symbol(%s)\n","globalVariable1_1",syms[0]->getPrettyName().c_str());
102                 return -1;
103         }
104         syms.clear();
105         /*********************************************************************************
106                 findSymbolByType: Variable with ST_OBJECT
107         *********************************************************************************/      
108         if(!mod->findSymbolByType(syms,"globalVariable1_1",Dyn_Symbol::ST_OBJECT))
109         {
110                 logerror("unable to find variable %s\n","globalVariable1_1");
111                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
112                 return -1;
113         }
114         if(syms.size() != 1)
115                 logerror("%s[%d]:  WARNING  : found %d variables named %s.  Using the first.\n",
116                             __FILE__, __LINE__, syms.size(), "globalVariable1_1");
117         if(syms[0]->getPrettyName() != "globalVariable1_1")
118         {
119                 logerror("Pretty Name for variable %s does not match the pretty Name for the found Symbol(%s)\n","globalVariable1_1",syms[0]->getPrettyName().c_str());
120                 return -1;
121         }
122         syms.clear();
123         /*********************************************************************************
124                 findSymbolByType: MODULE with ST_UNKNOWN
125         *********************************************************************************/      
126         if(!mod->findSymbolByType(syms,"test1.mutatee.c",Dyn_Symbol::ST_UNKNOWN))
127         {
128                 logerror("unable to find symbol %s\n","test1.mutatee.c");
129                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
130                 return -1;
131         }
132         if(syms[0]->getPrettyName() != "test1.mutatee.c")
133         {
134                 logerror("Pretty Name for symbol %s does not match the pretty Name for the found Symbol(%s)\n","test1.mutatee.c",syms[0]->getPrettyName().c_str());
135                 return -1;
136         }
137         syms.clear();
138
139         /*********************************************************************************
140                 findSymbolByType: Variables with ST_UNKNOWN, isRegex - true
141         *********************************************************************************/      
142         if(!mod->findSymbolByType(syms,"globalVariable*",Dyn_Symbol::ST_UNKNOWN, false, true))
143         {
144                 logerror("unable to find any variable of the form %s\n","globalVariable*");
145                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
146                 return -1;
147         }
148         if(syms.size() != 164)
149                 logerror("%s[%d]:  WARNING  : found %d symbols named %s.\n",
150                             __FILE__, __LINE__, syms.size(), "globalVariable*");
151         syms.clear();
152         
153         /*********************************************************************************
154                 findSymbolByType: Variables with ST_OBJECT, isRegex - true
155         *********************************************************************************/      
156         if(!mod->findSymbolByType(syms,"globalVariable*",Dyn_Symbol::ST_OBJECT, false, true))
157         {
158                 logerror("unable to find any variable of the form %s\n","globalVariable*");
159                 logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
160                 return -1;
161         }
162         if(syms.size() != 164)
163                 logerror("%s[%d]:  WARNING  : found %d variable named %s.\n",
164                             __FILE__, __LINE__, syms.size(), "globalVariable*");
165         syms.clear();
166         
167         /*********************************************************************************
168                 findSymbolByType: Variables with ST_UNKNOWN, isRegex - true, check case - true
169         *********************************************************************************/      
170         //should return false. no variables of starting with globalvariable
171         if(mod->findSymbolByType(syms,"globalvariable*",Dyn_Symbol::ST_UNKNOWN, false, true, true))
172         {
173                 logerror("found variables of the form %s when nothing should have been found\n","globalVariable*");
174                 return -1;
175         }
176         syms.clear();
177 }
178
179 //extern "C" TEST_DLL_EXPORT int test1__mutatorMAIN(ParameterDict &param)
180 int main()
181 {
182         // dprintf("Entered test1_1 mutatorMAIN()\n");
183         string s = "/p/paradyn/development/giri/core/testsuite/i386-unknown-linux2.4/test1.mutatee_gcc";
184         Dyn_Symtab *symtab;
185         bool err = Dyn_Symtab::openFile(s,symtab);
186         //symtab = param["symtab"]->getPtr();
187         // Get log file pointers
188         //FILE *outlog = (FILE *)(param["outlog"]->getPtr());
189         //FILE *errlog = (FILE *)(param["errlog"]->getPtr());
190         //setOutputLog(outlog);
191         //setErrorLog(errlog);
192         // Read the program's image and get an associated image object
193         // Run mutator code
194         return mutatorTest(symtab);
195 }