Remove incorrect export declaration
[dyninst.git] / common / src / addrtranslate.h
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  * 
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  * 
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  * 
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  * 
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  * 
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30
31 #ifndef addrtranslate_h_
32 #define addrtranslate_h_
33
34 #include <string>
35 #include <vector>
36 #include <utility>
37
38 #include <unordered_map>
39 #include "common/src/Types.h"
40 #include "common/h/dyntypes.h"
41 #include "common/h/SymReader.h"
42 #include "common/h/ProcReader.h"
43 #include "common/src/debug_common.h"
44
45 using namespace std;
46
47 namespace Dyninst {
48
49 class COMMON_EXPORT LoadedLib {
50    friend class AddressTranslate;
51    friend class AddressTranslateSysV;
52  protected:
53    string name;
54    Address load_addr;
55    Address data_load_addr;
56    Address dynamic_addr;
57    bool should_clean;
58    vector< pair<Address, unsigned long> > mapped_regions;
59    SymReader *symreader;
60    SymbolReaderFactory *symreader_factory;
61    void *up_ptr;
62
63  public:
64     LoadedLib(string name, Address load_addr);
65     virtual ~LoadedLib();
66     void add_mapped_region(Address addr, unsigned long size);
67    
68     string getName() const;
69     void setDataLoadAddr(Address a);
70     vector< pair<Address, unsigned long> > *getMappedRegions();
71
72     virtual Address offToAddress(Offset off);
73     virtual Offset addrToOffset(Address addr);
74
75     virtual Address getCodeLoadAddr() const;
76     virtual Address getDataLoadAddr() const;
77     virtual Address getDynamicAddr() const;
78     virtual void getOutputs(string &filename, Address &code, Address &data);
79
80     void* getUpPtr();
81     void setUpPtr(void *v);
82
83     void setShouldClean(bool b);
84     bool shouldClean();
85
86     void setFactory(SymbolReaderFactory *factory);
87 };
88
89 struct LoadedLibCmp
90 {
91    COMMON_EXPORT bool operator()(const LoadedLib *a, const LoadedLib *b) const
92    {
93       if (a->getCodeLoadAddr() != b->getCodeLoadAddr()) 
94          return a->getCodeLoadAddr() < b->getCodeLoadAddr();
95       return (a->getName() < b->getName());
96    }
97 };
98
99 class COMMON_EXPORT AddressTranslate {
100  protected:
101    PID pid;
102    PROC_HANDLE phandle;
103    bool creation_error;
104
105    AddressTranslate(PID pid, PROC_HANDLE phand = INVALID_HANDLE_VALUE, std::string exename = std::string(""));
106    vector<LoadedLib *> libs;
107    std::string exec_name;
108    LoadedLib *exec;
109    SymbolReaderFactory *symfactory;
110    bool read_abort;
111  public:
112
113     static AddressTranslate *createAddressTranslator(PID pid_,
114                                          ProcessReader *reader_ = NULL,
115                                          SymbolReaderFactory *symfactory_ = NULL,
116                                          PROC_HANDLE phand = INVALID_HANDLE_VALUE,
117                                          std::string exename = std::string(""),
118                                          Address interp_base = (Address) -1);
119     static AddressTranslate *createAddressTranslator(ProcessReader *reader_ = NULL,
120                                          SymbolReaderFactory *symfactory_ = NULL,
121                                          std::string exename = std::string(""),
122                                          Address interp_base = (Address) -1);
123    
124     virtual bool refresh() = 0;
125     virtual ~AddressTranslate();
126   
127     PID getPid();
128     bool getLibAtAddress(Address addr, LoadedLib* &lib);
129     bool getLibs(vector<LoadedLib *> &libs_);
130     bool getArchLibs(vector<LoadedLib *> &olibs);
131     LoadedLib *getLoadedLib(std::string name);
132     LoadedLib *getLoadedLib(SymReader *sym);
133     LoadedLib *getExecutable();
134
135     virtual Address getLibraryTrapAddrSysV();
136    
137     void setReadAbort(bool b);
138 };
139
140 }
141
142
143 #endif