Move debug information parsing to SymtabAPI - - - - - - - - - - - - - -
[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 #include <iomanip>
11
12 #include "Symtab.h"
13 #include "Archive.h"
14 #define logerror printf
15
16 using namespace DynSymtab;
17 static int mutatorTest(Symtab *symtab)
18 {
19   vector <Symbol *>syms;
20 #if 0  
21   /*********************************************************************************
22                 Symtab::getAllSymbolsByType: ST_UNKNOWN
23   *********************************************************************************/    
24   if(!symtab->getAllSymbolsByType(syms,Symbol::ST_UNKNOWN))
25     {
26       logerror("unable to get all symbols\n");
27       logerror("%s\n", Dyn_Symtab::printError(Symtab::getLastSymtabError()).c_str());
28       return -1;
29     }
30   if(syms.size() != 1)
31     logerror("%s[%d]:  found %d symbols.\n",
32              __FILE__, __LINE__, syms.size());
33
34   for (unsigned i = 0; i < syms.size(); i++) {
35     cerr << *(syms[i]) << endl;
36   }
37
38   syms.clear();
39 #endif  
40   /*********************************************************************************
41                 Symtab::getAllSymbolsByType: ST_FUNCTION
42   *********************************************************************************/    
43   if(!symtab->getAllSymbolsByType(syms,Symbol::ST_FUNCTION))
44     {
45       logerror("unable to get all Functions\n");
46       logerror("%s\n", Symtab::printError(Symtab::getLastSymtabError()).c_str());
47       return -1;
48     }
49   if(syms.size() != 1)
50     logerror("%s[%d]: found %d functions.\n",
51              __FILE__, __LINE__, syms.size());
52
53   for (unsigned i = 0; i < syms.size(); i++) {
54     //cerr << (*syms[i]) << endl;
55     cout << setbase(16) << syms[i]->getAddr() << endl;
56   }
57   cout << "size of symbols: " << setbase(10) << syms.size() << endl;
58
59   syms.clear();
60 #if 0  
61   /*********************************************************************************
62                 Symtab::getAllSymbolsByType: ST_OBJECT
63   *********************************************************************************/    
64   if(!symtab->getAllSymbolsByType(syms,Symbol::ST_OBJECT))
65     {
66       logerror("unable to get all symbols\n");
67       logerror("%s\n", Symtab::printError(Symtab::getLastSymtabError()).c_str());
68       return -1;
69     }
70   if(syms.size() != 1)
71     logerror("%s[%d]: found %d variables\n",
72              __FILE__, __LINE__, syms.size());
73
74   for (unsigned i = 0; i < syms.size(); i++) {
75     cerr << (*syms[i]) << endl;
76   }
77 #endif  
78
79
80   syms.clear();
81 }
82
83 int main(int argc, char **argv)
84 {
85   // string s = "/p/paradyn/development/giri/core/testsuite/i386-unknown-linux2.4/test1.mutatee_gcc";
86   //string s = "/p/paradyn/development/giri/core/testsuite/rs6000-ibm-aix5.1/test1.mutatee_gcc";
87   string s = argv[1];
88   cerr << "Checking file " << s << endl;
89   Symtab *symtab = NULL;
90   bool err = Symtab::openFile(symtab,s);
91   if (!err) {
92     cerr << "Error: problem with opening file: " << Symtab::printError(Symtab::getLastSymtabError()) << endl;
93     cerr << s << "/" << symtab << endl;
94     exit(1);
95   }
96   //symtab = param["symtab"]->getPtr();
97   // Get log file pointers
98   //FILE *outlog = (FILE *)(param["outlog"]->getPtr());
99   //FILE *errlog = (FILE *)(param["errlog"]->getPtr());
100   //setOutputLog(outlog);
101   //setErrorLog(errlog);
102   // Run mutator code
103   return mutatorTest(symtab);
104 }