LinkMap.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #if !defined(_Link_Map_h_)
00032 #define _Link_Map_h_
00033
00034 #include "Symtab.h"
00035 #include "Region.h"
00036 #include "Symbol.h"
00037 #include "Function.h"
00038
00039 #include <deque>
00040 #include <map>
00041 #include <vector>
00042 using namespace std;
00043
00044 namespace Dyninst{
00045 namespace SymtabAPI{
00046
00047
00048
00049
00050
00051
00052 class LinkMap {
00053 public:
00054 LinkMap();
00055 ~LinkMap();
00056
00057
00058
00059
00060 typedef pair<Offset, Offset> AllocPair;
00061
00062
00063
00064 void print(Offset globalOffset);
00065 void printAll(ostream &os, Offset globalOffset);
00066 void printBySymtab(ostream &os, vector<Symtab *> &symtabs, Offset globalOffset);
00067 void printRegions(ostream &os, deque<Region *> ®ions, Offset globalOffset);
00068 void printRegion(ostream &os, Region *region, Offset globalOffset);
00069 void printRegionFromInfo(ostream &os, Region *region, Offset regionOffset, Offset padding);
00070
00071 friend ostream & operator<<(ostream &os, LinkMap &lm);
00072
00073
00074
00075 char *allocatedData;
00076 Offset allocatedSize;
00077
00078
00079 map<Region *, AllocPair> regionAllocs;
00080
00081
00082 Region *commonStorage;
00083
00084
00085
00086
00087
00088
00089
00090 Offset bssRegionOffset;
00091 Offset bssSize;
00092 Offset bssRegionAlign;
00093 deque<Region *> bssRegions;
00094
00095
00096 Offset dataRegionOffset;
00097 Offset dataSize;
00098 Offset dataRegionAlign;
00099 deque<Region *> dataRegions;
00100
00101
00102 Offset stubRegionOffset;
00103 Offset stubSize;
00104 std::map<Symbol *, Offset> stubMap;
00105
00106
00107 Offset codeRegionOffset;
00108 Offset codeSize;
00109 Offset codeRegionAlign;
00110 deque<Region *> codeRegions;
00111
00112
00113 Offset tlsRegionOffset;
00114 Offset tlsSize;
00115 Offset tlsRegionAlign;
00116 deque<Region *> tlsRegions;
00117 vector<Symbol *> tlsSymbols;
00118
00119
00120 Offset gotRegionOffset;
00121 Offset gotSize;
00122 Offset gotRegionAlign;
00123 vector<pair<Symbol *, Offset> >gotSymbolTable;
00124 map <Symbol *, Offset> gotSymbols;
00125 deque<Region *> gotRegions;
00126
00127 Symtab *ctorDtorHandler;
00128
00129
00130 Offset ctorRegionOffset;
00131 Offset ctorSize;
00132 Offset ctorRegionAlign;
00133 Region *originalCtorRegion;
00134 vector<Region *> newCtorRegions;
00135
00136
00137 Offset dtorRegionOffset;
00138 Offset dtorSize;
00139 Offset dtorRegionAlign;
00140 Region *originalDtorRegion;
00141 vector<Region *> newDtorRegions;
00142
00143
00144 vector< pair<Symbol *, Offset> > origSymbols;
00145 vector< pair<relocationEntry *, Symbol *> > origRels;
00146
00147
00148
00149
00150 Offset pltRegionOffset;
00151 Offset pltSize;
00152 Offset pltRegionAlign;
00153
00154
00155 std::map<Symbol *, std::pair<Offset, Offset> > pltEntries;
00156 std::map<Symbol *, Offset> pltEntriesInGOT;
00157
00158
00159 Offset relRegionOffset;
00160 Offset relSize;
00161 Offset relRegionAlign;
00162
00163 Offset relGotRegionOffset;
00164 Offset relGotSize;
00165 Offset relGotRegionAlign;
00166 };
00167
00168 }
00169 }
00170
00171 #endif