xref: /dflybsd-src/contrib/gcc-8.0/include/dwarf2.h (revision 38fd149817dfbff97799f62fcb70be98c4e32523)
1*38fd1498Szrj /* Declarations and definitions of codes relating to the DWARF2 and
2*38fd1498Szrj    DWARF3 symbolic debugging information formats.
3*38fd1498Szrj    Copyright (C) 1992-2018 Free Software Foundation, Inc.
4*38fd1498Szrj 
5*38fd1498Szrj    Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
6*38fd1498Szrj    Office (AJPO), Florida State University and Silicon Graphics Inc.
7*38fd1498Szrj    provided support for this effort -- June 21, 1995.
8*38fd1498Szrj 
9*38fd1498Szrj    Derived from the DWARF 1 implementation written by Ron Guilmette
10*38fd1498Szrj    (rfg@netcom.com), November 1990.
11*38fd1498Szrj 
12*38fd1498Szrj    This file is part of GCC.
13*38fd1498Szrj 
14*38fd1498Szrj    GCC is free software; you can redistribute it and/or modify it under
15*38fd1498Szrj    the terms of the GNU General Public License as published by the Free
16*38fd1498Szrj    Software Foundation; either version 3, or (at your option) any later
17*38fd1498Szrj    version.
18*38fd1498Szrj 
19*38fd1498Szrj    GCC is distributed in the hope that it will be useful, but WITHOUT
20*38fd1498Szrj    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21*38fd1498Szrj    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
22*38fd1498Szrj    License for more details.
23*38fd1498Szrj 
24*38fd1498Szrj    Under Section 7 of GPL version 3, you are granted additional
25*38fd1498Szrj    permissions described in the GCC Runtime Library Exception, version
26*38fd1498Szrj    3.1, as published by the Free Software Foundation.
27*38fd1498Szrj 
28*38fd1498Szrj    You should have received a copy of the GNU General Public License and
29*38fd1498Szrj    a copy of the GCC Runtime Library Exception along with this program;
30*38fd1498Szrj    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
31*38fd1498Szrj    <http://www.gnu.org/licenses/>.  */
32*38fd1498Szrj 
33*38fd1498Szrj /* This file is derived from the DWARF specification (a public document)
34*38fd1498Szrj    Revision 2.0.0 (July 27, 1993) developed by the UNIX International
35*38fd1498Szrj    Programming Languages Special Interest Group (UI/PLSIG) and distributed
36*38fd1498Szrj    by UNIX International.  Copies of this specification are available from
37*38fd1498Szrj    UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
38*38fd1498Szrj 
39*38fd1498Szrj    This file also now contains definitions from the DWARF 3 specification
40*38fd1498Szrj    published Dec 20, 2005, available from: http://dwarf.freestandards.org.  */
41*38fd1498Szrj 
42*38fd1498Szrj #ifndef _DWARF2_H
43*38fd1498Szrj #define _DWARF2_H
44*38fd1498Szrj 
45*38fd1498Szrj #define DW_TAG(name, value) , name = value
46*38fd1498Szrj #define DW_TAG_DUP(name, value) , name = value
47*38fd1498Szrj #define DW_FORM(name, value) , name = value
48*38fd1498Szrj #define DW_AT(name, value) , name = value
49*38fd1498Szrj #define DW_AT_DUP(name, value) , name = value
50*38fd1498Szrj #define DW_OP(name, value) , name = value
51*38fd1498Szrj #define DW_OP_DUP(name, value) , name = value
52*38fd1498Szrj #define DW_ATE(name, value) , name = value
53*38fd1498Szrj #define DW_ATE_DUP(name, value) , name = value
54*38fd1498Szrj #define DW_CFA(name, value) , name = value
55*38fd1498Szrj #define DW_CFA_DUP(name, value) , name = value
56*38fd1498Szrj #define DW_IDX(name, value) , name = value
57*38fd1498Szrj #define DW_IDX_DUP(name, value) , name = value
58*38fd1498Szrj 
59*38fd1498Szrj #define DW_FIRST_TAG(name, value) enum dwarf_tag { \
60*38fd1498Szrj   name = value
61*38fd1498Szrj #define DW_END_TAG };
62*38fd1498Szrj #define DW_FIRST_FORM(name, value) enum dwarf_form { \
63*38fd1498Szrj   name = value
64*38fd1498Szrj #define DW_END_FORM };
65*38fd1498Szrj #define DW_FIRST_AT(name, value) enum dwarf_attribute { \
66*38fd1498Szrj   name = value
67*38fd1498Szrj #define DW_END_AT };
68*38fd1498Szrj #define DW_FIRST_OP(name, value) enum dwarf_location_atom { \
69*38fd1498Szrj   name = value
70*38fd1498Szrj #define DW_END_OP };
71*38fd1498Szrj #define DW_FIRST_ATE(name, value) enum dwarf_type { \
72*38fd1498Szrj   name = value
73*38fd1498Szrj #define DW_END_ATE };
74*38fd1498Szrj #define DW_FIRST_CFA(name, value) enum dwarf_call_frame_info { \
75*38fd1498Szrj   name = value
76*38fd1498Szrj #define DW_END_CFA };
77*38fd1498Szrj #define DW_FIRST_IDX(name, value) enum dwarf_name_index_attribute { \
78*38fd1498Szrj   name = value
79*38fd1498Szrj #define DW_END_IDX };
80*38fd1498Szrj 
81*38fd1498Szrj #include "dwarf2.def"
82*38fd1498Szrj 
83*38fd1498Szrj #undef DW_FIRST_TAG
84*38fd1498Szrj #undef DW_END_TAG
85*38fd1498Szrj #undef DW_FIRST_FORM
86*38fd1498Szrj #undef DW_END_FORM
87*38fd1498Szrj #undef DW_FIRST_AT
88*38fd1498Szrj #undef DW_END_AT
89*38fd1498Szrj #undef DW_FIRST_OP
90*38fd1498Szrj #undef DW_END_OP
91*38fd1498Szrj #undef DW_FIRST_ATE
92*38fd1498Szrj #undef DW_END_ATE
93*38fd1498Szrj #undef DW_FIRST_CFA
94*38fd1498Szrj #undef DW_END_CFA
95*38fd1498Szrj #undef DW_FIRST_IDX
96*38fd1498Szrj #undef DW_END_IDX
97*38fd1498Szrj 
98*38fd1498Szrj #undef DW_TAG
99*38fd1498Szrj #undef DW_TAG_DUP
100*38fd1498Szrj #undef DW_FORM
101*38fd1498Szrj #undef DW_AT
102*38fd1498Szrj #undef DW_AT_DUP
103*38fd1498Szrj #undef DW_OP
104*38fd1498Szrj #undef DW_OP_DUP
105*38fd1498Szrj #undef DW_ATE
106*38fd1498Szrj #undef DW_ATE_DUP
107*38fd1498Szrj #undef DW_CFA
108*38fd1498Szrj #undef DW_CFA_DUP
109*38fd1498Szrj #undef DW_IDX
110*38fd1498Szrj #undef DW_IDX_DUP
111*38fd1498Szrj 
112*38fd1498Szrj /* Flag that tells whether entry has a child or not.  */
113*38fd1498Szrj #define DW_children_no   0
114*38fd1498Szrj #define	DW_children_yes  1
115*38fd1498Szrj 
116*38fd1498Szrj #define DW_AT_stride_size   DW_AT_bit_stride  /* Note: The use of DW_AT_stride_size is deprecated.  */
117*38fd1498Szrj #define DW_AT_stride   DW_AT_byte_stride  /* Note: The use of DW_AT_stride is deprecated.  */
118*38fd1498Szrj 
119*38fd1498Szrj /* Decimal sign encodings.  */
120*38fd1498Szrj enum dwarf_decimal_sign_encoding
121*38fd1498Szrj   {
122*38fd1498Szrj     /* DWARF 3.  */
123*38fd1498Szrj     DW_DS_unsigned = 0x01,
124*38fd1498Szrj     DW_DS_leading_overpunch = 0x02,
125*38fd1498Szrj     DW_DS_trailing_overpunch = 0x03,
126*38fd1498Szrj     DW_DS_leading_separate = 0x04,
127*38fd1498Szrj     DW_DS_trailing_separate = 0x05
128*38fd1498Szrj   };
129*38fd1498Szrj 
130*38fd1498Szrj /* Endianity encodings.  */
131*38fd1498Szrj enum dwarf_endianity_encoding
132*38fd1498Szrj   {
133*38fd1498Szrj     /* DWARF 3.  */
134*38fd1498Szrj     DW_END_default = 0x00,
135*38fd1498Szrj     DW_END_big = 0x01,
136*38fd1498Szrj     DW_END_little = 0x02,
137*38fd1498Szrj 
138*38fd1498Szrj     DW_END_lo_user = 0x40,
139*38fd1498Szrj     DW_END_hi_user = 0xff
140*38fd1498Szrj   };
141*38fd1498Szrj 
142*38fd1498Szrj /* Array ordering names and codes.  */
143*38fd1498Szrj enum dwarf_array_dim_ordering
144*38fd1498Szrj   {
145*38fd1498Szrj     DW_ORD_row_major = 0,
146*38fd1498Szrj     DW_ORD_col_major = 1
147*38fd1498Szrj   };
148*38fd1498Szrj 
149*38fd1498Szrj /* Access attribute.  */
150*38fd1498Szrj enum dwarf_access_attribute
151*38fd1498Szrj   {
152*38fd1498Szrj     DW_ACCESS_public = 1,
153*38fd1498Szrj     DW_ACCESS_protected = 2,
154*38fd1498Szrj     DW_ACCESS_private = 3
155*38fd1498Szrj   };
156*38fd1498Szrj 
157*38fd1498Szrj /* Visibility.  */
158*38fd1498Szrj enum dwarf_visibility_attribute
159*38fd1498Szrj   {
160*38fd1498Szrj     DW_VIS_local = 1,
161*38fd1498Szrj     DW_VIS_exported = 2,
162*38fd1498Szrj     DW_VIS_qualified = 3
163*38fd1498Szrj   };
164*38fd1498Szrj 
165*38fd1498Szrj /* Virtuality.  */
166*38fd1498Szrj enum dwarf_virtuality_attribute
167*38fd1498Szrj   {
168*38fd1498Szrj     DW_VIRTUALITY_none = 0,
169*38fd1498Szrj     DW_VIRTUALITY_virtual = 1,
170*38fd1498Szrj     DW_VIRTUALITY_pure_virtual = 2
171*38fd1498Szrj   };
172*38fd1498Szrj 
173*38fd1498Szrj /* Case sensitivity.  */
174*38fd1498Szrj enum dwarf_id_case
175*38fd1498Szrj   {
176*38fd1498Szrj     DW_ID_case_sensitive = 0,
177*38fd1498Szrj     DW_ID_up_case = 1,
178*38fd1498Szrj     DW_ID_down_case = 2,
179*38fd1498Szrj     DW_ID_case_insensitive = 3
180*38fd1498Szrj   };
181*38fd1498Szrj 
182*38fd1498Szrj /* Calling convention.  */
183*38fd1498Szrj enum dwarf_calling_convention
184*38fd1498Szrj   {
185*38fd1498Szrj     DW_CC_normal = 0x1,
186*38fd1498Szrj     DW_CC_program = 0x2,
187*38fd1498Szrj     DW_CC_nocall = 0x3,
188*38fd1498Szrj 
189*38fd1498Szrj     /* DWARF 5.  */
190*38fd1498Szrj     DW_CC_pass_by_reference = 0x4,
191*38fd1498Szrj     DW_CC_pass_by_value = 0x5,
192*38fd1498Szrj 
193*38fd1498Szrj     DW_CC_lo_user = 0x40,
194*38fd1498Szrj     DW_CC_hi_user = 0xff,
195*38fd1498Szrj 
196*38fd1498Szrj     DW_CC_GNU_renesas_sh = 0x40,
197*38fd1498Szrj     DW_CC_GNU_borland_fastcall_i386 = 0x41,
198*38fd1498Szrj 
199*38fd1498Szrj     /* This DW_CC_ value is not currently generated by any toolchain.  It is
200*38fd1498Szrj        used internally to GDB to indicate OpenCL C functions that have been
201*38fd1498Szrj        compiled with the IBM XL C for OpenCL compiler and use a non-platform
202*38fd1498Szrj        calling convention for passing OpenCL C vector types.  This value may
203*38fd1498Szrj        be changed freely as long as it does not conflict with any other DW_CC_
204*38fd1498Szrj        value defined here.  */
205*38fd1498Szrj     DW_CC_GDB_IBM_OpenCL = 0xff
206*38fd1498Szrj   };
207*38fd1498Szrj 
208*38fd1498Szrj /* Inline attribute.  */
209*38fd1498Szrj enum dwarf_inline_attribute
210*38fd1498Szrj   {
211*38fd1498Szrj     DW_INL_not_inlined = 0,
212*38fd1498Szrj     DW_INL_inlined = 1,
213*38fd1498Szrj     DW_INL_declared_not_inlined = 2,
214*38fd1498Szrj     DW_INL_declared_inlined = 3
215*38fd1498Szrj   };
216*38fd1498Szrj 
217*38fd1498Szrj /* Discriminant lists.  */
218*38fd1498Szrj enum dwarf_discrim_list
219*38fd1498Szrj   {
220*38fd1498Szrj     DW_DSC_label = 0,
221*38fd1498Szrj     DW_DSC_range = 1
222*38fd1498Szrj   };
223*38fd1498Szrj 
224*38fd1498Szrj /* Line number opcodes.  */
225*38fd1498Szrj enum dwarf_line_number_ops
226*38fd1498Szrj   {
227*38fd1498Szrj     DW_LNS_extended_op = 0,
228*38fd1498Szrj     DW_LNS_copy = 1,
229*38fd1498Szrj     DW_LNS_advance_pc = 2,
230*38fd1498Szrj     DW_LNS_advance_line = 3,
231*38fd1498Szrj     DW_LNS_set_file = 4,
232*38fd1498Szrj     DW_LNS_set_column = 5,
233*38fd1498Szrj     DW_LNS_negate_stmt = 6,
234*38fd1498Szrj     DW_LNS_set_basic_block = 7,
235*38fd1498Szrj     DW_LNS_const_add_pc = 8,
236*38fd1498Szrj     DW_LNS_fixed_advance_pc = 9,
237*38fd1498Szrj     /* DWARF 3.  */
238*38fd1498Szrj     DW_LNS_set_prologue_end = 10,
239*38fd1498Szrj     DW_LNS_set_epilogue_begin = 11,
240*38fd1498Szrj     DW_LNS_set_isa = 12
241*38fd1498Szrj   };
242*38fd1498Szrj 
243*38fd1498Szrj /* Line number extended opcodes.  */
244*38fd1498Szrj enum dwarf_line_number_x_ops
245*38fd1498Szrj   {
246*38fd1498Szrj     DW_LNE_end_sequence = 1,
247*38fd1498Szrj     DW_LNE_set_address = 2,
248*38fd1498Szrj     DW_LNE_define_file = 3,
249*38fd1498Szrj     DW_LNE_set_discriminator = 4,
250*38fd1498Szrj     /* HP extensions.  */
251*38fd1498Szrj     DW_LNE_HP_negate_is_UV_update      = 0x11,
252*38fd1498Szrj     DW_LNE_HP_push_context             = 0x12,
253*38fd1498Szrj     DW_LNE_HP_pop_context              = 0x13,
254*38fd1498Szrj     DW_LNE_HP_set_file_line_column     = 0x14,
255*38fd1498Szrj     DW_LNE_HP_set_routine_name         = 0x15,
256*38fd1498Szrj     DW_LNE_HP_set_sequence             = 0x16,
257*38fd1498Szrj     DW_LNE_HP_negate_post_semantics    = 0x17,
258*38fd1498Szrj     DW_LNE_HP_negate_function_exit     = 0x18,
259*38fd1498Szrj     DW_LNE_HP_negate_front_end_logical = 0x19,
260*38fd1498Szrj     DW_LNE_HP_define_proc              = 0x20,
261*38fd1498Szrj     DW_LNE_HP_source_file_correlation  = 0x80,
262*38fd1498Szrj 
263*38fd1498Szrj     DW_LNE_lo_user = 0x80,
264*38fd1498Szrj     DW_LNE_hi_user = 0xff
265*38fd1498Szrj   };
266*38fd1498Szrj 
267*38fd1498Szrj /* Sub-opcodes for DW_LNE_HP_source_file_correlation.  */
268*38fd1498Szrj enum dwarf_line_number_hp_sfc_ops
269*38fd1498Szrj   {
270*38fd1498Szrj     DW_LNE_HP_SFC_formfeed = 1,
271*38fd1498Szrj     DW_LNE_HP_SFC_set_listing_line = 2,
272*38fd1498Szrj     DW_LNE_HP_SFC_associate = 3
273*38fd1498Szrj   };
274*38fd1498Szrj 
275*38fd1498Szrj /* Content type codes in line table directory_entry_format
276*38fd1498Szrj    and file_name_entry_format sequences.  */
277*38fd1498Szrj enum dwarf_line_number_content_type
278*38fd1498Szrj   {
279*38fd1498Szrj     DW_LNCT_path = 0x1,
280*38fd1498Szrj     DW_LNCT_directory_index = 0x2,
281*38fd1498Szrj     DW_LNCT_timestamp = 0x3,
282*38fd1498Szrj     DW_LNCT_size = 0x4,
283*38fd1498Szrj     DW_LNCT_MD5 = 0x5,
284*38fd1498Szrj     DW_LNCT_lo_user = 0x2000,
285*38fd1498Szrj     DW_LNCT_hi_user = 0x3fff
286*38fd1498Szrj   };
287*38fd1498Szrj 
288*38fd1498Szrj /* Type codes for location list entries.  */
289*38fd1498Szrj enum dwarf_location_list_entry_type
290*38fd1498Szrj   {
291*38fd1498Szrj     DW_LLE_end_of_list = 0x00,
292*38fd1498Szrj     DW_LLE_base_addressx = 0x01,
293*38fd1498Szrj     DW_LLE_startx_endx = 0x02,
294*38fd1498Szrj     DW_LLE_startx_length = 0x03,
295*38fd1498Szrj     DW_LLE_offset_pair = 0x04,
296*38fd1498Szrj     DW_LLE_default_location = 0x05,
297*38fd1498Szrj     DW_LLE_base_address = 0x06,
298*38fd1498Szrj     DW_LLE_start_end = 0x07,
299*38fd1498Szrj     DW_LLE_start_length = 0x08,
300*38fd1498Szrj 
301*38fd1498Szrj     /* <http://lists.dwarfstd.org/private.cgi/dwarf-discuss-dwarfstd.org/2017-April/004347.html>
302*38fd1498Szrj        has the proposal for now; only available to list members.
303*38fd1498Szrj 
304*38fd1498Szrj        A (possibly updated) copy of the proposal is available at
305*38fd1498Szrj        <http://people.redhat.com/aoliva/papers/sfn/dwarf6-sfn-lvu.txt>.  */
306*38fd1498Szrj     DW_LLE_GNU_view_pair = 0x09,
307*38fd1498Szrj #define DW_LLE_view_pair DW_LLE_GNU_view_pair
308*38fd1498Szrj 
309*38fd1498Szrj     /* Former extension for Fission.
310*38fd1498Szrj        See http://gcc.gnu.org/wiki/DebugFission.  */
311*38fd1498Szrj     DW_LLE_GNU_end_of_list_entry = 0x00,
312*38fd1498Szrj     DW_LLE_GNU_base_address_selection_entry = 0x01,
313*38fd1498Szrj     DW_LLE_GNU_start_end_entry = 0x02,
314*38fd1498Szrj     DW_LLE_GNU_start_length_entry = 0x03
315*38fd1498Szrj   };
316*38fd1498Szrj 
317*38fd1498Szrj #define DW_CIE_ID	  0xffffffff
318*38fd1498Szrj #define DW64_CIE_ID	  0xffffffffffffffffULL
319*38fd1498Szrj #define DW_CIE_VERSION	  1
320*38fd1498Szrj 
321*38fd1498Szrj #define DW_CFA_extended   0
322*38fd1498Szrj 
323*38fd1498Szrj #define DW_CHILDREN_no		     0x00
324*38fd1498Szrj #define DW_CHILDREN_yes		     0x01
325*38fd1498Szrj 
326*38fd1498Szrj #define DW_ADDR_none		0
327*38fd1498Szrj 
328*38fd1498Szrj /* Source language names and codes.  */
329*38fd1498Szrj enum dwarf_source_language
330*38fd1498Szrj   {
331*38fd1498Szrj     DW_LANG_C89 = 0x0001,
332*38fd1498Szrj     DW_LANG_C = 0x0002,
333*38fd1498Szrj     DW_LANG_Ada83 = 0x0003,
334*38fd1498Szrj     DW_LANG_C_plus_plus = 0x0004,
335*38fd1498Szrj     DW_LANG_Cobol74 = 0x0005,
336*38fd1498Szrj     DW_LANG_Cobol85 = 0x0006,
337*38fd1498Szrj     DW_LANG_Fortran77 = 0x0007,
338*38fd1498Szrj     DW_LANG_Fortran90 = 0x0008,
339*38fd1498Szrj     DW_LANG_Pascal83 = 0x0009,
340*38fd1498Szrj     DW_LANG_Modula2 = 0x000a,
341*38fd1498Szrj     /* DWARF 3.  */
342*38fd1498Szrj     DW_LANG_Java = 0x000b,
343*38fd1498Szrj     DW_LANG_C99 = 0x000c,
344*38fd1498Szrj     DW_LANG_Ada95 = 0x000d,
345*38fd1498Szrj     DW_LANG_Fortran95 = 0x000e,
346*38fd1498Szrj     DW_LANG_PLI = 0x000f,
347*38fd1498Szrj     DW_LANG_ObjC = 0x0010,
348*38fd1498Szrj     DW_LANG_ObjC_plus_plus = 0x0011,
349*38fd1498Szrj     DW_LANG_UPC = 0x0012,
350*38fd1498Szrj     DW_LANG_D = 0x0013,
351*38fd1498Szrj     /* DWARF 4.  */
352*38fd1498Szrj     DW_LANG_Python = 0x0014,
353*38fd1498Szrj     /* DWARF 5.  */
354*38fd1498Szrj     DW_LANG_OpenCL = 0x0015,
355*38fd1498Szrj     DW_LANG_Go = 0x0016,
356*38fd1498Szrj     DW_LANG_Modula3 = 0x0017,
357*38fd1498Szrj     DW_LANG_Haskell = 0x0018,
358*38fd1498Szrj     DW_LANG_C_plus_plus_03 = 0x0019,
359*38fd1498Szrj     DW_LANG_C_plus_plus_11 = 0x001a,
360*38fd1498Szrj     DW_LANG_OCaml = 0x001b,
361*38fd1498Szrj     DW_LANG_Rust = 0x001c,
362*38fd1498Szrj     DW_LANG_C11 = 0x001d,
363*38fd1498Szrj     DW_LANG_Swift = 0x001e,
364*38fd1498Szrj     DW_LANG_Julia = 0x001f,
365*38fd1498Szrj     DW_LANG_Dylan = 0x0020,
366*38fd1498Szrj     DW_LANG_C_plus_plus_14 = 0x0021,
367*38fd1498Szrj     DW_LANG_Fortran03 = 0x0022,
368*38fd1498Szrj     DW_LANG_Fortran08 = 0x0023,
369*38fd1498Szrj     DW_LANG_RenderScript = 0x0024,
370*38fd1498Szrj 
371*38fd1498Szrj     DW_LANG_lo_user = 0x8000,	/* Implementation-defined range start.  */
372*38fd1498Szrj     DW_LANG_hi_user = 0xffff,	/* Implementation-defined range start.  */
373*38fd1498Szrj 
374*38fd1498Szrj     /* MIPS.  */
375*38fd1498Szrj     DW_LANG_Mips_Assembler = 0x8001,
376*38fd1498Szrj     /* UPC.  */
377*38fd1498Szrj     DW_LANG_Upc = 0x8765,
378*38fd1498Szrj     /* HP extensions.  */
379*38fd1498Szrj     DW_LANG_HP_Bliss     = 0x8003,
380*38fd1498Szrj     DW_LANG_HP_Basic91   = 0x8004,
381*38fd1498Szrj     DW_LANG_HP_Pascal91  = 0x8005,
382*38fd1498Szrj     DW_LANG_HP_IMacro    = 0x8006,
383*38fd1498Szrj     DW_LANG_HP_Assembler = 0x8007,
384*38fd1498Szrj 
385*38fd1498Szrj     /* Rust extension, but replaced in DWARF 5.  */
386*38fd1498Szrj     DW_LANG_Rust_old = 0x9000
387*38fd1498Szrj   };
388*38fd1498Szrj 
389*38fd1498Szrj /* Names and codes for macro information.  */
390*38fd1498Szrj enum dwarf_macinfo_record_type
391*38fd1498Szrj   {
392*38fd1498Szrj     DW_MACINFO_define = 1,
393*38fd1498Szrj     DW_MACINFO_undef = 2,
394*38fd1498Szrj     DW_MACINFO_start_file = 3,
395*38fd1498Szrj     DW_MACINFO_end_file = 4,
396*38fd1498Szrj     DW_MACINFO_vendor_ext = 255
397*38fd1498Szrj   };
398*38fd1498Szrj 
399*38fd1498Szrj /* DW_TAG_defaulted/DW_TAG_GNU_defaulted attributes.  */
400*38fd1498Szrj enum dwarf_defaulted_attribute
401*38fd1498Szrj   {
402*38fd1498Szrj     DW_DEFAULTED_no = 0x00,
403*38fd1498Szrj     DW_DEFAULTED_in_class = 0x01,
404*38fd1498Szrj     DW_DEFAULTED_out_of_class = 0x02
405*38fd1498Szrj   };
406*38fd1498Szrj 
407*38fd1498Szrj /* Names and codes for new style macro information.  */
408*38fd1498Szrj enum dwarf_macro_record_type
409*38fd1498Szrj   {
410*38fd1498Szrj     DW_MACRO_define = 0x01,
411*38fd1498Szrj     DW_MACRO_undef = 0x02,
412*38fd1498Szrj     DW_MACRO_start_file = 0x03,
413*38fd1498Szrj     DW_MACRO_end_file = 0x04,
414*38fd1498Szrj     DW_MACRO_define_strp = 0x05,
415*38fd1498Szrj     DW_MACRO_undef_strp = 0x06,
416*38fd1498Szrj     DW_MACRO_import = 0x07,
417*38fd1498Szrj     DW_MACRO_define_sup = 0x08,
418*38fd1498Szrj     DW_MACRO_undef_sup = 0x09,
419*38fd1498Szrj     DW_MACRO_import_sup = 0x0a,
420*38fd1498Szrj     DW_MACRO_define_strx = 0x0b,
421*38fd1498Szrj     DW_MACRO_undef_strx = 0x0c,
422*38fd1498Szrj     DW_MACRO_lo_user = 0xe0,
423*38fd1498Szrj     DW_MACRO_hi_user = 0xff,
424*38fd1498Szrj 
425*38fd1498Szrj     /* Compatibility macros for the GNU .debug_macro extension.  */
426*38fd1498Szrj     DW_MACRO_GNU_define = 0x01,
427*38fd1498Szrj     DW_MACRO_GNU_undef = 0x02,
428*38fd1498Szrj     DW_MACRO_GNU_start_file = 0x03,
429*38fd1498Szrj     DW_MACRO_GNU_end_file = 0x04,
430*38fd1498Szrj     DW_MACRO_GNU_define_indirect = 0x05,
431*38fd1498Szrj     DW_MACRO_GNU_undef_indirect = 0x06,
432*38fd1498Szrj     DW_MACRO_GNU_transparent_include = 0x07,
433*38fd1498Szrj     /* Extensions for DWZ multifile.
434*38fd1498Szrj        See http://www.dwarfstd.org/ShowIssue.php?issue=120604.1&type=open .  */
435*38fd1498Szrj     DW_MACRO_GNU_define_indirect_alt = 0x08,
436*38fd1498Szrj     DW_MACRO_GNU_undef_indirect_alt = 0x09,
437*38fd1498Szrj     DW_MACRO_GNU_transparent_include_alt = 0x0a,
438*38fd1498Szrj     DW_MACRO_GNU_lo_user = 0xe0,
439*38fd1498Szrj     DW_MACRO_GNU_hi_user = 0xff
440*38fd1498Szrj   };
441*38fd1498Szrj 
442*38fd1498Szrj /* Range list entry kinds in .debug_rnglists* section.  */
443*38fd1498Szrj enum dwarf_range_list_entry
444*38fd1498Szrj   {
445*38fd1498Szrj     DW_RLE_end_of_list = 0x00,
446*38fd1498Szrj     DW_RLE_base_addressx = 0x01,
447*38fd1498Szrj     DW_RLE_startx_endx = 0x02,
448*38fd1498Szrj     DW_RLE_startx_length = 0x03,
449*38fd1498Szrj     DW_RLE_offset_pair = 0x04,
450*38fd1498Szrj     DW_RLE_base_address = 0x05,
451*38fd1498Szrj     DW_RLE_start_end = 0x06,
452*38fd1498Szrj     DW_RLE_start_length = 0x07
453*38fd1498Szrj   };
454*38fd1498Szrj 
455*38fd1498Szrj /* Unit types in unit_type unit header field.  */
456*38fd1498Szrj enum dwarf_unit_type
457*38fd1498Szrj   {
458*38fd1498Szrj     DW_UT_compile = 0x01,
459*38fd1498Szrj     DW_UT_type = 0x02,
460*38fd1498Szrj     DW_UT_partial = 0x03,
461*38fd1498Szrj     DW_UT_skeleton = 0x04,
462*38fd1498Szrj     DW_UT_split_compile = 0x05,
463*38fd1498Szrj     DW_UT_split_type = 0x06,
464*38fd1498Szrj     DW_UT_lo_user = 0x80,
465*38fd1498Szrj     DW_UT_hi_user = 0xff
466*38fd1498Szrj   };
467*38fd1498Szrj 
468*38fd1498Szrj /* @@@ For use with GNU frame unwind information.  */
469*38fd1498Szrj 
470*38fd1498Szrj #define DW_EH_PE_absptr		0x00
471*38fd1498Szrj #define DW_EH_PE_omit		0xff
472*38fd1498Szrj 
473*38fd1498Szrj #define DW_EH_PE_uleb128	0x01
474*38fd1498Szrj #define DW_EH_PE_udata2		0x02
475*38fd1498Szrj #define DW_EH_PE_udata4		0x03
476*38fd1498Szrj #define DW_EH_PE_udata8		0x04
477*38fd1498Szrj #define DW_EH_PE_sleb128	0x09
478*38fd1498Szrj #define DW_EH_PE_sdata2		0x0A
479*38fd1498Szrj #define DW_EH_PE_sdata4		0x0B
480*38fd1498Szrj #define DW_EH_PE_sdata8		0x0C
481*38fd1498Szrj #define DW_EH_PE_signed		0x08
482*38fd1498Szrj 
483*38fd1498Szrj #define DW_EH_PE_pcrel		0x10
484*38fd1498Szrj #define DW_EH_PE_textrel	0x20
485*38fd1498Szrj #define DW_EH_PE_datarel	0x30
486*38fd1498Szrj #define DW_EH_PE_funcrel	0x40
487*38fd1498Szrj #define DW_EH_PE_aligned	0x50
488*38fd1498Szrj 
489*38fd1498Szrj #define DW_EH_PE_indirect	0x80
490*38fd1498Szrj 
491*38fd1498Szrj /* Codes for the debug sections in a dwarf package (.dwp) file.
492*38fd1498Szrj    Extensions for Fission.  See http://gcc.gnu.org/wiki/DebugFissionDWP.  */
493*38fd1498Szrj enum dwarf_sect
494*38fd1498Szrj   {
495*38fd1498Szrj     DW_SECT_INFO = 1,
496*38fd1498Szrj     DW_SECT_TYPES = 2,
497*38fd1498Szrj     DW_SECT_ABBREV = 3,
498*38fd1498Szrj     DW_SECT_LINE = 4,
499*38fd1498Szrj     DW_SECT_LOC = 5,
500*38fd1498Szrj     DW_SECT_STR_OFFSETS = 6,
501*38fd1498Szrj     DW_SECT_MACINFO = 7,
502*38fd1498Szrj     DW_SECT_MACRO = 8,
503*38fd1498Szrj     DW_SECT_MAX = 8
504*38fd1498Szrj   };
505*38fd1498Szrj 
506*38fd1498Szrj #ifdef __cplusplus
507*38fd1498Szrj extern "C" {
508*38fd1498Szrj #endif /* __cplusplus */
509*38fd1498Szrj 
510*38fd1498Szrj /* Return the name of a DW_TAG_ constant, or NULL if the value is not
511*38fd1498Szrj    recognized.  */
512*38fd1498Szrj extern const char *get_DW_TAG_name (unsigned int tag);
513*38fd1498Szrj 
514*38fd1498Szrj /* Return the name of a DW_AT_ constant, or NULL if the value is not
515*38fd1498Szrj    recognized.  */
516*38fd1498Szrj extern const char *get_DW_AT_name (unsigned int attr);
517*38fd1498Szrj 
518*38fd1498Szrj /* Return the name of a DW_FORM_ constant, or NULL if the value is not
519*38fd1498Szrj    recognized.  */
520*38fd1498Szrj extern const char *get_DW_FORM_name (unsigned int form);
521*38fd1498Szrj 
522*38fd1498Szrj /* Return the name of a DW_OP_ constant, or NULL if the value is not
523*38fd1498Szrj    recognized.  */
524*38fd1498Szrj extern const char *get_DW_OP_name (unsigned int op);
525*38fd1498Szrj 
526*38fd1498Szrj /* Return the name of a DW_ATE_ constant, or NULL if the value is not
527*38fd1498Szrj    recognized.  */
528*38fd1498Szrj extern const char *get_DW_ATE_name (unsigned int enc);
529*38fd1498Szrj 
530*38fd1498Szrj /* Return the name of a DW_CFA_ constant, or NULL if the value is not
531*38fd1498Szrj    recognized.  */
532*38fd1498Szrj extern const char *get_DW_CFA_name (unsigned int opc);
533*38fd1498Szrj 
534*38fd1498Szrj /* Return the name of a DW_IDX_ constant, or NULL if the value is not
535*38fd1498Szrj    recognized.  */
536*38fd1498Szrj extern const char *get_DW_IDX_name (unsigned int idx);
537*38fd1498Szrj 
538*38fd1498Szrj #ifdef __cplusplus
539*38fd1498Szrj }
540*38fd1498Szrj #endif /* __cplusplus */
541*38fd1498Szrj 
542*38fd1498Szrj #endif /* _DWARF2_H */
543