Added support for using CodeView NB11 symbols in addition to COFF
[dyninst.git] / common / h / Object-nt.h
1 /*
2  * Copyright (c) 1996 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  * This license is for research uses.  For such uses, there is no
12  * charge. We define "research use" to mean you may freely use it
13  * inside your organization for whatever purposes you see fit. But you
14  * may not re-distribute Paradyn or parts of Paradyn, in any form
15  * source or binary (including derivatives), electronic or otherwise,
16  * to any other organization or entity without our permission.
17  * 
18  * (for other uses, please contact us at paradyn@cs.wisc.edu)
19  * 
20  * All warranties, including without limitation, any warranty of
21  * merchantability or fitness for a particular purpose, are hereby
22  * excluded.
23  * 
24  * By your use of Paradyn, you understand and agree that we (or any
25  * other person or entity with proprietary rights in Paradyn) are
26  * under no obligation to provide either maintenance services,
27  * update services, notices of latent defects, or correction of
28  * defects for Paradyn.
29  * 
30  * Even if advised of the possibility of such damages, under no
31  * circumstances shall we (or any other person or entity with
32  * proprietary rights in the software licensed hereunder) be liable
33  * to you or any third party for direct, indirect, or consequential
34  * damages of any character regardless of type of action, including,
35  * without limitation, loss of profits, loss of use, loss of good
36  * will, or computer failure or malfunction.  You agree to indemnify
37  * us (and any other person or entity with proprietary rights in the
38  * software licensed hereunder) for any and all liability it may
39  * incur to third parties resulting from your use of Paradyn.
40  */
41
42 /************************************************************************
43  * Windows NT/2000 object files.
44  * $Id: Object-nt.h,v 1.6 1999/06/17 18:35:16 pcroth Exp $
45 ************************************************************************/
46
47
48 \f
49
50
51 #if !defined(_Object_nt_h_)
52 #define _Object_nt_h_
53
54 \f
55
56
57 /************************************************************************
58  * header files.
59 ************************************************************************/
60
61 #include "util/h/Dictionary.h"
62 #include "util/h/String.h"
63 #include "util/h/Symbol.h"
64 #include "util/h/Types.h"
65 #include "util/h/Vector.h"
66
67 #include <stdlib.h>
68 #include <winnt.h>
69
70
71 \f
72
73
74 /************************************************************************
75  * class Object
76 ************************************************************************/
77
78 class Object : public AObject
79 {
80 public:
81         Object(const string, void (*)(const char *) = log_msg);
82         Object(const string, Address baseAddress = NULL,
83                         void (*)(const char *) = log_msg);
84         Object(const Object&);
85
86         virtual ~Object( void );
87
88         Object&   operator=(const Object &);
89
90 private:
91         static  string  FindName(const char* stringTable, const IMAGE_SYMBOL& sym);
92
93     void    ParseDebugInfo( void );
94         void    ParseSectionMap( IMAGE_DEBUG_INFORMATION* pDebugInfo );
95         void    ParseCOFFSymbols( IMAGE_DEBUG_INFORMATION* pDebugInfo );
96         void    ParseCodeViewSymbols( IMAGE_DEBUG_INFORMATION* pDebugInfo );
97
98         Address baseAddr;                                               // location of this object in 
99                                                                                         // mutatee address space
100         IMAGE_DEBUG_INFORMATION* pDebugInfo;    // debugging information 
101                                                                                         // mapped into our address space
102         unsigned int textSectionId;                             // id of .text segment (section)
103         unsigned int dataSectionId;                             // id of .data segment (section)
104 };
105
106
107 inline
108 Object::Object(const string file, 
109                                 Address baseAddress,
110                                 void (*err_func)(const char *))
111   : AObject(file, err_func),
112         baseAddr( baseAddress ),
113         pDebugInfo( NULL )
114 {
115         ParseDebugInfo();
116 }
117
118
119 inline
120 Object::Object(const string file, void (*err_func)(const char *))
121   : AObject(file, err_func),
122         baseAddr( 0 ),
123         pDebugInfo( NULL )
124 {
125         ParseDebugInfo();
126 }
127
128
129 inline
130 Object::Object(const Object& obj)
131   : AObject(obj),
132         baseAddr( obj.baseAddr ),
133         pDebugInfo( obj.pDebugInfo )
134 {
135         ParseDebugInfo();
136 }
137
138
139 inline
140 Object&
141 Object::operator=(const Object& obj)
142 {
143         if( &obj != this )
144         {
145                 AObject::operator=(obj);
146                 baseAddr = obj.baseAddr;
147                 pDebugInfo = obj.pDebugInfo;
148         }
149     return *this;
150 }
151
152
153 #endif /* !defined(_Object_nt_h_) */