Added test file dynNM.
[dyninst.git] / symtabAPI / tests / dynNM.C
1 /*
2  * Test program: nm equivalent (prints all symbol data)
3  *
4  * Usage: ./dynNM <object file>
5  */
6
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <assert.h>
10
11 #include "symtabAPI/h/Dyn_Symtab.h"
12 #include "symtabAPI/h/Dyn_Archive.h"
13 #define logerror printf
14
15 static int mutatorTest(Dyn_Symtab *symtab)
16 {
17   vector <Dyn_Symbol *>syms;
18   
19   /*********************************************************************************
20                 Dyn_Symtab::getAllSymbolsByType: ST_UNKNOWN
21   *********************************************************************************/    
22   if(!symtab->getAllSymbolsByType(syms,Dyn_Symbol::ST_UNKNOWN))
23     {
24       logerror("unable to get all symbols\n");
25       logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
26       return -1;
27     }
28   if(syms.size() != 1)
29     logerror("%s[%d]:  found %d symbols.\n",
30              __FILE__, __LINE__, syms.size());
31
32   for (unsigned i = 0; i < syms.size(); i++) {
33     cerr << *(syms[i]) << endl;
34   }
35
36   syms.clear();
37   
38   /*********************************************************************************
39                 Dyn_Symtab::getAllSymbolsByType: ST_FUNCTION
40   *********************************************************************************/    
41   if(!symtab->getAllSymbolsByType(syms,Dyn_Symbol::ST_FUNCTION))
42     {
43       logerror("unable to get all Functions\n");
44       logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
45       return -1;
46     }
47   if(syms.size() != 1)
48     logerror("%s[%d]: found %d functions.\n",
49              __FILE__, __LINE__, syms.size());
50
51   for (unsigned i = 0; i < syms.size(); i++) {
52     cerr << (*syms[i]) << endl;
53   }
54
55
56   syms.clear();
57   
58   /*********************************************************************************
59                 Dyn_Symtab::getAllSymbolsByType: ST_OBJECT
60   *********************************************************************************/    
61   if(!symtab->getAllSymbolsByType(syms,Dyn_Symbol::ST_OBJECT))
62     {
63       logerror("unable to get all symbols\n");
64       logerror("%s\n", Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()).c_str());
65       return -1;
66     }
67   if(syms.size() != 1)
68     logerror("%s[%d]: found %d variables\n",
69              __FILE__, __LINE__, syms.size());
70
71   for (unsigned i = 0; i < syms.size(); i++) {
72     cerr << (*syms[i]) << endl;
73   }
74
75
76   syms.clear();
77 }
78
79 //extern "C" TEST_DLL_EXPORT int test1__mutatorMAIN(ParameterDict &param)
80 int main(int argc, char **argv)
81 {
82   // dprintf("Entered test1_1 mutatorMAIN()\n");
83   // string s = "/p/paradyn/development/giri/core/testsuite/i386-unknown-linux2.4/test1.mutatee_gcc";
84   //string s = "/p/paradyn/development/giri/core/testsuite/rs6000-ibm-aix5.1/test1.mutatee_gcc";
85   string s = argv[1];
86   cerr << "Checking file " << s << endl;
87   Dyn_Symtab *symtab = NULL;
88   bool err = Dyn_Symtab::openFile(s,symtab);
89   if (!err) {
90     cerr << "Error: problem with opening file: " << Dyn_Symtab::printError(Dyn_Symtab::getLastSymtabError()) << endl;
91     cerr << s << "/" << symtab << endl;
92     exit(1);
93   }
94   //symtab = param["symtab"]->getPtr();
95   // Get log file pointers
96   //FILE *outlog = (FILE *)(param["outlog"]->getPtr());
97   //FILE *errlog = (FILE *)(param["errlog"]->getPtr());
98   //setOutputLog(outlog);
99   //setErrorLog(errlog);
100   // Read the program's image and get an associated image object
101   // Run mutator code
102   return mutatorTest(symtab);
103 }