OSDN Git Service

(LibGoblin)
[drdeamon64/drdeamon64.git] / libgoblin / drd64_libgoblin_type_dwarf.h
1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2
3                          D r . D e a m o n  6 4
4                         for INTEL64(R), AMD64(R)
5         
6    Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
10
11  1. Redistributions of source code must retain the above copyright notice,
12     this list of conditions and the following disclaimer.
13  2. Redistributions in binary form must reproduce the above copyright
14     notice, this list of conditions and the following disclaimer in the
15     documentation and/or other materials provided with the distribution.
16
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30
31 /* File Info -----------------------------------------------------------
32 File: drd64_.h
33 Function: Header 
34 Comment: 
35 ----------------------------------------------------------------------*/
36
37 #ifndef DRD64_HEADER_LIBGOBLIN_TYPE_DWARF
38 #define DRD64_HEADER_LIBGOBLIN_TYPE_DWARF
39
40 /*=====================================================================*/
41 #define LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH  256
42
43 #define LIBGOBLIN_DWARF_STATUS_EVALUATED        0x00
44 #define LIBGOBLIN_DWARF_STATUS_NOTEVALUATE      0x01
45 #define LIBGOBLIN_DWARF_STATUS_REQUESTED        0x02
46 #define LIBGOBLIN_DWARF_STATUS_CALLING          0x03    // resume stack
47 #define LIBGOBLIN_DWARF_STATUS_RETCALL          0x04    // resume stack
48 #define LIBGOBLIN_DWARF_STATUS_ERROR            0x10
49
50 // bit 4-0 is REG num. (MASK: 0x1f)
51 #define LIBGOBLIN_DWARF_REQUEST_NONE                    0x00000000
52 #define LIBGOBLIN_DWARF_REQUEST_REG                             0x00000100
53 #define LIBGOBLIN_DWARF_REQUEST_ADDRSIZE                0x00000200
54 #define LIBGOBLIN_DWARF_REQUEST_FRAME_BASE              0x00000400
55 #define LIBGOBLIN_DWARF_REQUEST_DEREF                   0x00000800
56 #define LIBGOBLIN_DWARF_REQUEST_XDEREF                  0x00001000
57 #define LIBGOBLIN_DWARF_REQUEST_OBJADDR                 0x00002000
58 #define LIBGOBLIN_DWARF_REQUEST_TLSADDR                 0x00004000
59 #define LIBGOBLIN_DWARF_REQUEST_CFAADDR                 0x00008000
60
61 #define LIBGOBLIN_DWARF_REQDATA_MAX                                       0x40
62 #define LIBGOBLIN_DWARF_DATAID_REG                              0x0000001f      // 0x00 - 0x1f
63 #define LIBGOBLIN_DWARF_DATAID_ADDRSIZE                 0x00000020
64 #define LIBGOBLIN_DWARF_DATAID_FRAME_BASE               0x00000021
65 #define LIBGOBLIN_DWARF_DATAID_DEREF                    0x00000022
66 #define LIBGOBLIN_DWARF_DATAID_XDEREF                   0x00000023
67 #define LIBGOBLIN_DWARF_DATAID_OBJADDR                  0x00000024
68 #define LIBGOBLIN_DWARF_DATAID_TLSADDR                  0x00000025
69 #define LIBGOBLIN_DWARF_DATAID_CFAADDR                  0x00000026
70
71
72 /*=====================================================================*/
73 #define LIBGOBLIN_DWARF_STACK_SIGN      0x01
74 typedef struct  {
75         Byte    b_flag;
76         union   {
77                 QWord   qw_value;
78                 Int64   ii_value;
79         } value;
80 } LibGoblin_DWARF_Expression_Stack;
81
82 /*=====================================================================*/
83 typedef struct  {
84         // Internal Data ---
85         int             i_id;
86         void    *p_next;
87
88         DWord   dw_status;
89         DWord   dw_requested;
90         DWord   dw_setdata;
91
92         Byte    b_flag;
93         union   {
94                 QWord   qw_value;
95                 Int64   ii_value;
96         } result;
97
98         struct  {
99                 Byte    *pb_resume;
100                 QWord   qw_remain;
101         } resume;
102
103         struct  {
104                 Byte    *pb_return;
105                 QWord   qw_retremain;
106         } caller[4];
107         Byte    b_callers;
108
109         QWord   qw_calloffset;
110         DWord   dw_reqsize;                     // for DW_OP_deref_size & DW_OP_xderef_size
111         Ptr             ptr_reference;          // for DW_OP_deref(_size) & DW_OP_xderef(_size)
112         Ptr             ptr_tlsbase;                    // for DW_OP_form_tls_address
113         QWord   qw_ident_addrspace;
114         QWord   qw_reqdata[LIBGOBLIN_DWARF_REQDATA_MAX];
115
116         DWord   dw_depth;
117         LibGoblin_DWARF_Expression_Stack        t_stack[ LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH ];
118
119 } LibGoblin_DWARF_Expression;
120
121 /*=====================================================================*/
122 /*
123 typedef struct  {
124         QWord   qw_address;
125         QWord   qw_line;
126         DWord   dw_file;
127         Byte    b_is_stmt;
128         Byte    b_basic_block;
129         Byte    b_prologue_end;
130         Byte    b_epilogue_begin;
131         QWord   qw_column;
132         QWord   qw_isa;
133 } LibGoblin_Dwarf_Line_Register;
134 */
135
136 /*=====================================================================*/
137 /*
138 typedef struct  {
139         char    *pstr_srcfilename;
140         DWord   dw_dirindex;
141         QWord   qw_date;
142         QWord   qw_filesize;
143 } LibGoblin_Dwarf_Line_FileNames;
144 */
145
146 /*=====================================================================*/
147 #define DWARF_LINE_MAX_STDOPERANDS      32
148 //#define       LIBGOBLIN_DWARF_OLDLINE_MAX_SRCFILES            512
149
150 typedef struct  {
151         Word    w_version;
152         Byte    b_bits;
153         QWord   qw_headerlength;
154         Byte    b_minimum_inst_length;
155         Byte    b_default_is_stmt;
156         INT             i_line_base;
157         INT             i_line_range;
158         Byte    b_opcode_base;
159         DWord   dw_stdoperand_length[DWARF_LINE_MAX_STDOPERANDS];
160
161         int             i_path;
162         Byte    *pb_path;
163
164
165         //int           i_num_includepath;
166         //char  *pstr_includepath;
167         //int           i_num_filename;
168         //LibGoblin_Dwarf_Line_FileNames t_filename[LIBGOBLIN_DWARF_OLDLINE_MAX_SRCFILES];
169
170 } LibGoblin_DWARF_Line_Header;
171
172
173 /*=====================================================================*/
174 #define DWARF_RANGES_MAX        32
175
176 typedef struct  {
177         int             i_ranges;
178         Ptr             ptr_low[DWARF_RANGES_MAX];
179         Ptr             ptr_high[DWARF_RANGES_MAX];
180 } LibGoblin_DWARF_Ranges;
181
182 /*=====================================================================*/
183 #define DWARF_ANCESTRY_MAX      64
184
185 typedef struct  {
186         Byte    *pb_dwinfo;
187         int             i_objid;
188 } LibGoblin_DWARF_Info_Ancestry;
189
190
191 /*=====================================================================*/
192 typedef struct  {
193         QWord   qw_unitsize;
194         Word    w_version;
195         Byte    b_pointersize;
196         Byte    b_bits;
197         Byte    b_offsetsize;
198         QWord   qw_abbrev_offset;
199         Byte    *pb_custart;
200
201         QWord   qw_type_signature;      // for DWARF4
202         QWord   qw_type_offset;         // for DWARF4
203 } LibGoblin_DWARF_Info_CUHeader;
204
205
206 /*=====================================================================*/
207 #define DWARF_ABBREV_MAXITEMS   30
208
209 typedef struct  {
210         DWord   dw_id;
211         DWord   dw_tag;
212         Byte    b_children;
213         int             i_items;
214         DWord   dw_attribute[ DWARF_ABBREV_MAXITEMS ];
215         DWord   dw_format[ DWARF_ABBREV_MAXITEMS ];
216 } DWARF_AbbrevEntry;
217
218
219 /*=====================================================================*/
220 #define LIBGOBLIN_DWARF_INFO_TYPE_NONE          0x00
221 #define LIBGOBLIN_DWARF_INFO_TYPE_BYTE          0x01
222 #define LIBGOBLIN_DWARF_INFO_TYPE_WORD          0x02
223 #define LIBGOBLIN_DWARF_INFO_TYPE_DWORD         0x03
224 #define LIBGOBLIN_DWARF_INFO_TYPE_QWORD         0x04
225 #define LIBGOBLIN_DWARF_INFO_TYPE_INT64         0x05
226 #define LIBGOBLIN_DWARF_INFO_TYPE_POINTER       0x06
227 #define LIBGOBLIN_DWARF_INFO_TYPE_STRING        0x07
228 #define LIBGOBLIN_DWARF_INFO_TYPE_BLOCK         0x08
229 #define LIBGOBLIN_DWARF_INFO_TYPE_LINK          0x09
230
231 typedef struct  {
232         Byte    b_type;
233         QWord   qw_size;
234         DWord   dw_format;
235
236         union   {
237                 Byte    b_value;
238                 Word    w_value;
239                 DWord   dw_value;
240                 QWord   qw_value;
241                 QWord   qw_link;
242                 Int64   ii_value;
243                 void    *p_value;
244                 Byte    *pb_link;
245                 char    *pstr_value;
246                 Byte    *pb_data;               // for BlockData
247         } value;
248 } LibGoblin_DWARF_DIEValue;
249
250
251 /*=====================================================================*/
252 typedef struct  {
253         DWord                           dw_attribute;
254         LibGoblin_DWARF_DIEValue        *p_val;
255 } LibGoblin_DWARF_Attribute;
256
257
258 #endif  /* DRD64_HEADER_LIBGOBLIN_TYPE*/
259
260 /* EOF of drd64_.h ----------------------------------- */