OSDN Git Service

6f0405a30c5439d3154dc97666e34f4bce4efe28
[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  32
42
43 #define LIBGOBLIN_DWARF_STATUS_EVALUATED        0x00
44 #define LIBGOBLIN_DWARF_STATUS_REQUESTED        0x01
45 #define LIBGOBLIN_DWARF_STATUS_ERROR            0x10
46
47 // bit 4-0 is REG num. (MASK: 0x1f)
48 #define LIBGOBLIN_DWARF_DATA_NONE                       0x00000000
49 #define LIBGOBLIN_DWARF_DATA_REG                        0x00000100
50 #define LIBGOBLIN_DWARF_DATA_ADDRSIZE           0x00000200
51 #define LIBGOBLIN_DWARF_DATA_FRAME_BASE         0x00000400
52
53 /*=====================================================================*/
54 #define LIBGOBLIN_DWARF_STACK_SIGN      0x01
55 typedef struct  {
56         Byte    b_flag;
57         union   {
58                 QWord   qw_value;
59                 Int64   ii_value;
60         } value;
61 } LibGoblin_DWARF_Expression_Stack;
62
63 /*=====================================================================*/
64 typedef struct  {
65         DWord   dw_status;
66         DWord   dw_requested;
67         DWord   dw_setdata;
68
69         Byte    b_flag;
70         union   {
71                 QWord   qw_value;
72                 Int64   ii_value;
73         } result;
74
75         QWord   qw_reg[32];             // for DW_OP_bregX
76         DWord   dw_addrsize;    // for DW_OP_addr
77         QWord   qw_frame_base;  // for DW_OP_fbreg (value is DW_AT_frame_base)
78 } LibGoblin_DWARF_Expression;
79
80 /*=====================================================================*/
81 /*
82 typedef struct  {
83         QWord   qw_address;
84         QWord   qw_line;
85         DWord   dw_file;
86         Byte    b_is_stmt;
87         Byte    b_basic_block;
88         Byte    b_prologue_end;
89         Byte    b_epilogue_begin;
90         QWord   qw_column;
91         QWord   qw_isa;
92 } LibGoblin_Dwarf_Line_Register;
93 */
94
95 /*=====================================================================*/
96 /*
97 typedef struct  {
98         char    *pstr_srcfilename;
99         DWord   dw_dirindex;
100         QWord   qw_date;
101         QWord   qw_filesize;
102 } LibGoblin_Dwarf_Line_FileNames;
103 */
104
105 /*=====================================================================*/
106 #define DWARF_LINE_MAX_STDOPERANDS      32
107 //#define       LIBGOBLIN_DWARF_OLDLINE_MAX_SRCFILES            512
108
109 typedef struct  {
110         Word    w_version;
111         Byte    b_bits;
112         QWord   qw_headerlength;
113         Byte    b_minimum_inst_length;
114         Byte    b_default_is_stmt;
115         INT             i_line_base;
116         INT             i_line_range;
117         Byte    b_opcode_base;
118         DWord   dw_stdoperand_length[DWARF_LINE_MAX_STDOPERANDS];
119
120         int             i_path;
121         Byte    *pb_path;
122
123
124         //int           i_num_includepath;
125         //char  *pstr_includepath;
126         //int           i_num_filename;
127         //LibGoblin_Dwarf_Line_FileNames t_filename[LIBGOBLIN_DWARF_OLDLINE_MAX_SRCFILES];
128
129 } LibGoblin_DWARF_Line_Header;
130
131
132 /*=====================================================================*/
133 #define DWARF_RANGES_MAX        32
134
135 typedef struct  {
136         int             i_ranges;
137         Ptr             ptr_low[DWARF_RANGES_MAX];
138         Ptr             ptr_high[DWARF_RANGES_MAX];
139 } LibGoblin_DWARF_Ranges;
140
141 /*=====================================================================*/
142 #define DWARF_ANCESTRY_MAX      64
143
144 typedef struct  {
145         Byte    *pb_dwinfo;
146         int             i_objid;
147 } LibGoblin_DWARF_Info_Ancestry;
148
149
150 /*=====================================================================*/
151 typedef struct  {
152         QWord   qw_unitsize;
153         Word    w_version;
154         Byte    b_pointersize;
155         Byte    b_bits;
156         Byte    b_offsetsize;
157         QWord   qw_abbrev_offset;
158         Byte    *pb_custart;
159
160         QWord   qw_type_signature;      // for DWARF4
161         QWord   qw_type_offset;         // for DWARF4
162 } LibGoblin_DWARF_Info_CUHeader;
163
164
165 /*=====================================================================*/
166 #define DWARF_ABBREV_MAXITEMS   30
167
168 typedef struct  {
169         DWord   dw_id;
170         DWord   dw_tag;
171         Byte    b_children;
172         int             i_items;
173         DWord   dw_attribute[ DWARF_ABBREV_MAXITEMS ];
174         DWord   dw_format[ DWARF_ABBREV_MAXITEMS ];
175 } DWARF_AbbrevEntry;
176
177
178 /*=====================================================================*/
179 #define LIBGOBLIN_DWARF_INFO_TYPE_NONE          0x00
180 #define LIBGOBLIN_DWARF_INFO_TYPE_BYTE          0x01
181 #define LIBGOBLIN_DWARF_INFO_TYPE_WORD          0x02
182 #define LIBGOBLIN_DWARF_INFO_TYPE_DWORD         0x03
183 #define LIBGOBLIN_DWARF_INFO_TYPE_QWORD         0x04
184 #define LIBGOBLIN_DWARF_INFO_TYPE_INT64         0x05
185 #define LIBGOBLIN_DWARF_INFO_TYPE_POINTER       0x06
186 #define LIBGOBLIN_DWARF_INFO_TYPE_STRING        0x07
187 #define LIBGOBLIN_DWARF_INFO_TYPE_BLOCK         0x08
188 #define LIBGOBLIN_DWARF_INFO_TYPE_LINK          0x09
189
190 typedef struct  {
191         Byte    b_type;
192         QWord   qw_size;
193         DWord   dw_format;
194
195         union   {
196                 Byte    b_value;
197                 Word    w_value;
198                 DWord   dw_value;
199                 QWord   qw_value;
200                 QWord   qw_link;
201                 Int64   ii_value;
202                 void    *p_value;
203                 Byte    *pb_link;
204                 char    *pstr_value;
205                 Byte    *pb_data;               // for BlockData
206         } value;
207 } LibGoblin_DWARF_DIEValue;
208
209
210 /*=====================================================================*/
211 typedef struct  {
212         DWord                           dw_attribute;
213         LibGoblin_DWARF_DIEValue        *p_val;
214 } LibGoblin_DWARF_Attribute;
215
216
217 #endif  /* DRD64_HEADER_LIBGOBLIN_TYPE*/
218
219 /* EOF of drd64_.h ----------------------------------- */