Fix warnings from compiling with gcc 4.3.0
[dyninst.git] / symtabAPI / h / Region.h
1 /*
2  * Copyright (c) 1996-2007 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
32 #ifndef __REGION__H__ 
33 #define __REGION__H__
34  
35 #include "Serialization.h"
36 #include "Annotatable.h"
37
38 namespace Dyninst{
39 namespace SymtabAPI{
40
41 class Symbol;
42 class relocationEntry;
43
44
45
46 class Region : public Serializable, public AnnotatableSparse {
47    friend class Object;
48    friend class Symtab;
49    friend class SymtabTranslatorBase;
50    friend class SymtabTranslatorBin;
51
52    public:  
53
54    enum perm_t
55    {
56       RP_R, 
57       RP_RW, 
58       RP_RX, 
59       RP_RWX
60    };
61
62    static const char *permissions2Str(perm_t);
63
64    enum RegionType 
65    {
66       RT_TEXT,
67       RT_DATA,
68       RT_TEXTDATA,
69       RT_SYMTAB,
70       RT_STRTAB,
71       RT_BSS,
72       RT_SYMVERSIONS,
73       RT_SYMVERDEF,
74       RT_SYMVERNEEDED,
75       RT_REL,
76       RT_RELA,
77       RT_DYNAMIC,
78       RT_OTHER
79    };
80
81    static const char *regionType2Str(RegionType);
82
83    DLLEXPORT Region();
84    DLLEXPORT static bool createRegion( Offset diskOff, perm_t perms, RegionType regType,
85          unsigned long diskSize = 0, Offset memOff = 0, unsigned long memSize = 0,
86          std::string name = "", char *rawDataPtr = NULL);
87    DLLEXPORT Region(const Region &reg);
88    DLLEXPORT Region& operator=(const Region &reg);
89    DLLEXPORT void serialize(SerializerBase *sb, const char *tag = "Region");
90    DLLEXPORT std::ostream& operator<< (std::ostream &os);
91    DLLEXPORT bool operator== (const Region &reg);
92
93    DLLEXPORT ~Region();
94
95    DLLEXPORT unsigned getRegionNumber() const;
96    DLLEXPORT bool setRegionNumber(unsigned regnumber);
97    DLLEXPORT std::string getRegionName() const;
98
99    //  getRegionAddr returns diskOffset on unixes, memory offset on windows
100    DLLEXPORT Offset getRegionAddr() const;
101    DLLEXPORT unsigned long getRegionSize() const;
102
103    DLLEXPORT Offset getDiskOffset() const;
104    DLLEXPORT unsigned long getDiskSize() const;
105    DLLEXPORT Offset getMemOffset() const;
106    DLLEXPORT unsigned long getMemSize() const;
107    DLLEXPORT void *getPtrToRawData() const;
108    DLLEXPORT bool setPtrToRawData(void *, unsigned long); 
109
110    DLLEXPORT bool isBSS() const;
111    DLLEXPORT bool isText() const;
112    DLLEXPORT bool isData() const;
113    DLLEXPORT bool isOffsetInRegion(const Offset &offset) const;
114    DLLEXPORT bool isLoadable() const;
115    DLLEXPORT bool setLoadable(bool isLoadable);
116    DLLEXPORT bool isDirty() const;
117    DLLEXPORT std::vector<relocationEntry> &getRelocations();
118    DLLEXPORT bool patchData(Offset off, void *buf, unsigned size);
119
120    DLLEXPORT perm_t getRegionPermissions() const;
121    DLLEXPORT bool setRegionPermissions(perm_t newPerms);
122    DLLEXPORT RegionType getRegionType() const;
123
124    DLLEXPORT bool addRelocationEntry(Offset relocationAddr, Symbol *dynref, unsigned long relType, Region::RegionType rtype = Region::RT_REL);
125
126    protected:                     
127    DLLEXPORT Region(unsigned regnum, std::string name, Offset diskOff,
128          unsigned long diskSize, Offset memOff, unsigned long memSize,
129          char *rawDataPtr, perm_t perms, RegionType regType, bool isLoadable = false);
130    private:
131    unsigned regNum_;
132    std::string name_;
133    Offset diskOff_;
134    unsigned long diskSize_;
135    Offset memOff_;
136    unsigned long memSize_;
137    void *rawDataPtr_;
138    perm_t permissions_;
139    RegionType rType_;
140    bool isDirty_;
141    std::vector<relocationEntry> rels_;
142    char *buffer_;  //To hold dirty data
143    bool isLoadable_;
144 };
145
146 }//namespace SymtabAPI
147
148 }//namespace Dyninst
149 #endif