1
{ $Id: dbgdwarfconst.pas 18302 2009-01-16 00:26:10Z marc $ }
3
---------------------------------------------------------------------------
4
dbgdwarfconst.pas - Freepascal debugger - Dwarf constants
5
---------------------------------------------------------------------------
7
This unit contains the constants defined for the dward debugging format.
9
---------------------------------------------------------------------------
11
@created(Fri Jul 7th WET 2006)
12
@lastmod($Date: 2009-01-16 01:26:10 +0100 (Fr, 16 Jan 2009) $)
13
@author(Marc Weustink <marc@@dommelstein.nl>)
15
*****************************************************************************
17
* This file is part of the Lazarus Project *
19
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
20
* for details about the copyright. *
22
* This program 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. *
26
*****************************************************************************
38
DW_TAG_array_type = $01;
39
DW_TAG_class_type = $02;
40
DW_TAG_entry_point = $03;
41
DW_TAG_enumeration_type = $04;
42
DW_TAG_formal_parameter = $05;
43
DW_TAG_imported_declaration = $08;
45
DW_TAG_lexical_block = $0b;
47
DW_TAG_pointer_type = $0f;
48
DW_TAG_reference_type = $10;
49
DW_TAG_compile_unit = $11;
50
DW_TAG_string_type = $12;
51
DW_TAG_structure_type = $13;
52
DW_TAG_subroutine_type = $15;
54
DW_TAG_union_type = $17;
55
DW_TAG_unspecified_parameters = $18;
57
DW_TAG_common_block = $1a;
58
DW_TAG_common_inclusion = $1b;
59
DW_TAG_inheritance = $1c;
60
DW_TAG_inlined_subroutine = $1d;
62
DW_TAG_ptr_to_member_type = $1f;
63
DW_TAG_set_type = $20;
64
DW_TAG_subrange_type = $21;
65
DW_TAG_with_stmt = $22;
66
DW_TAG_access_declaration = $23;
67
DW_TAG_base_type = $24;
68
DW_TAG_catch_block = $25;
69
DW_TAG_const_type = $26;
70
DW_TAG_constant = $27;
71
DW_TAG_enumerator = $28;
72
DW_TAG_file_type = $29;
74
DW_TAG_namelist = $2b;
75
DW_TAG_namelist_item = $2c;
76
DW_TAG_packed_type = $2d;
77
DW_TAG_subprogram = $2e;
78
DW_TAG_template_type_parameter = $2f;
79
DW_TAG_template_value_parameter = $30;
80
DW_TAG_thrown_type = $31;
81
DW_TAG_try_block = $32;
82
DW_TAG_variant_part = $33;
83
DW_TAG_variable = $34;
84
DW_TAG_volatile_type = $35;
86
DW_TAG_dwarf_procedure = $36;
87
DW_TAG_restrict_type = $37;
88
DW_TAG_interface_type = $38;
89
DW_TAG_namespace = $39;
90
DW_TAG_imported_module = $3a;
91
DW_TAG_unspecified_type = $3b;
92
DW_TAG_partial_unit = $3c;
93
DW_TAG_imported_unit = $3d;
94
DW_TAG_condition = $3f;
95
DW_TAG_shared_type = $40;
97
DW_TAG_lo_user = $4080;
98
DW_TAG_hi_user = $ffff;
101
{ Child determination encodings }
103
DW_CHILDREN_no = $00;
104
DW_CHILDREN_yes = $01;
107
{ Attribute encodings }
109
DW_AT_sibling = $01 ; // reference
110
DW_AT_location = $02 ; // block, loclistptr
111
DW_AT_name = $03 ; // string
112
DW_AT_ordering = $09 ; // constant
113
DW_AT_byte_size = $0b ; // block, constant, reference
114
DW_AT_bit_offset = $0c ; // block, constant, reference
115
DW_AT_bit_size = $0d ; // block, constant, reference
116
DW_AT_stmt_list = $10 ; // lineptr
117
DW_AT_low_pc = $11 ; // address
118
DW_AT_high_pc = $12 ; // address
119
DW_AT_language = $13 ; // constant
120
DW_AT_discr = $15 ; // reference
121
DW_AT_discr_value = $16 ; // constant
122
DW_AT_visibility = $17 ; // constant
123
DW_AT_import = $18 ; // reference
124
DW_AT_string_length = $19 ; // block, loclistptr
125
DW_AT_common_reference = $1a ; // reference
126
DW_AT_comp_dir = $1b ; // string
127
DW_AT_const_value = $1c ; // block, constant, string
128
DW_AT_containing_type = $1d ; // reference
129
DW_AT_default_value = $1e ; // reference
130
DW_AT_inline = $20 ; // constant
131
DW_AT_is_optional = $21 ; // flag
132
DW_AT_lower_bound = $22 ; // block, constant, reference
133
DW_AT_producer = $25 ; // string
134
DW_AT_prototyped = $27 ; // flag
135
DW_AT_return_addr = $2a ; // block, loclistptr
136
DW_AT_start_scope = $2c ; // constant
137
DW_AT_bit_stride = $2e ; // constant
138
DW_AT_upper_bound = $2f ; // block, constant, reference
139
DW_AT_abstract_origin = $31 ; // reference
140
DW_AT_accessibility = $32 ; // constant
141
DW_AT_address_class = $33 ; // constant
142
DW_AT_artificial = $34 ; // flag
143
DW_AT_base_types = $35 ; // reference
144
DW_AT_calling_convention = $36 ; // constant
145
DW_AT_count = $37 ; // block, constant, reference
146
DW_AT_data_member_location = $38 ; // block, constant, loclistptr
147
DW_AT_decl_column = $39 ; // constant
148
DW_AT_decl_file = $3a ; // constant
149
DW_AT_decl_line = $3b ; // constant
150
DW_AT_declaration = $3c ; // flag
151
DW_AT_discr_list = $3d ; // block
152
DW_AT_encoding = $3e ; // constant
153
DW_AT_external = $3f ; // flag
154
DW_AT_frame_base = $40 ; // block, loclistptr
155
DW_AT_friend = $41 ; // reference
156
DW_AT_identifier_case = $42 ; // constant
157
DW_AT_macro_info = $43 ; // macptr
158
DW_AT_namelist_item = $44 ; // block
159
DW_AT_priority = $45 ; // reference
160
DW_AT_segment = $46 ; // block, loclistptr
161
DW_AT_specification = $47 ; // reference
162
DW_AT_static_link = $48 ; // block, loclistptr
163
DW_AT_type = $49 ; // reference
164
DW_AT_use_location = $4a ; // block, loclistptr
165
DW_AT_variable_parameter = $4b ; // flag
166
DW_AT_virtuality = $4c ; // constant
167
DW_AT_vtable_elem_location = $4d ; // block, loclistptr
169
DW_AT_allocated = $4e ; // block, constant, reference
170
DW_AT_associated = $4f ; // block, constant, reference
171
DW_AT_data_location = $50 ; // block
172
DW_AT_byte_stride = $51 ; // block, constant, reference
173
DW_AT_entry_pc = $52 ; // address
174
DW_AT_use_UTF8 = $53 ; // flag
175
DW_AT_extension = $54 ; // reference
176
DW_AT_ranges = $55 ; // rangelistptr
177
DW_AT_trampoline = $56 ; // address, flag, reference, string
178
DW_AT_call_column = $57 ; // constant
179
DW_AT_call_file = $58 ; // constant
180
DW_AT_call_line = $59 ; // constant
181
DW_AT_description = $5a ; // string
182
DW_AT_binary_scale = $5b ; // constant
183
DW_AT_decimal_scale = $5c ; // constant
184
DW_AT_small = $5d ; // reference
185
DW_AT_decimal_sign = $5e ; // constant
186
DW_AT_digit_count = $5f ; // constant
187
DW_AT_picture_string = $60 ; // string
188
DW_AT_mutable = $61 ; // flag
189
DW_AT_threads_scaled = $62 ; // flag
190
DW_AT_explicit = $63 ; // flag
191
DW_AT_object_pointer = $64 ; // reference
192
DW_AT_endianity = $65 ; // constant
193
DW_AT_elemental = $66 ; // flag
194
DW_AT_pure = $67 ; // flag
195
DW_AT_recursive = $68 ; // flag
197
DW_AT_lo_user = $2000; // ---
198
DW_AT_hi_user = $3fff; // ---
201
{ Attribute form encodings }
203
DW_FORM_addr = $01; // address
204
DW_FORM_block2 = $03; // block
205
DW_FORM_block4 = $04; // block
206
DW_FORM_data2 = $05; // constant
207
DW_FORM_data4 = $06; // constant, lineptr, loclistptr, macptr, rangelistptr
208
DW_FORM_data8 = $07; // constant, lineptr, loclistptr, macptr, rangelistptr
209
DW_FORM_string = $08; // string
210
DW_FORM_block = $09; // block
211
DW_FORM_block1 = $0a; // block
212
DW_FORM_data1 = $0b; // constant
213
DW_FORM_flag = $0c; // flag
214
DW_FORM_sdata = $0d; // constant
215
DW_FORM_strp = $0e; // string
216
DW_FORM_udata = $0f; // constant
217
DW_FORM_ref_addr = $10; // reference
218
DW_FORM_ref1 = $11; // reference
219
DW_FORM_ref2 = $12; // reference
220
DW_FORM_ref4 = $13; // reference
221
DW_FORM_ref8 = $14; // reference
222
DW_FORM_ref_udata = $15; // reference
223
DW_FORM_indirect = $16; //
226
{ DWARF operation encodings }
228
DW_OP_addr = $03; // 1 constant address (size target specific)
229
DW_OP_deref = $06; // 0
230
DW_OP_const1u = $08; // 1 1-byte constant
231
DW_OP_const1s = $09; // 1 1-byte constant
232
DW_OP_const2u = $0a; // 1 2-byte constant
233
DW_OP_const2s = $0b; // 1 2-byte constant
234
DW_OP_const4u = $0c; // 1 4-byte constant
235
DW_OP_const4s = $0d; // 1 4-byte constant
236
DW_OP_const8u = $0e; // 1 8-byte constant
237
DW_OP_const8s = $0f; // 1 8-byte constant
238
DW_OP_constu = $10; // 1 ULEB128 constant
239
DW_OP_consts = $11; // 1 SLEB128 constant
240
DW_OP_dup = $12; // 0
241
DW_OP_drop = $13; // 0
242
DW_OP_over = $14; // 0
243
DW_OP_pick = $15; // 1 1-byte stack index
244
DW_OP_swap = $16; // 0
245
DW_OP_rot = $17; // 0
246
DW_OP_xderef = $18; // 0
247
DW_OP_abs = $19; // 0
248
DW_OP_and = $1a; // 0
249
DW_OP_div = $1b; // 0
250
DW_OP_minus = $1c; // 0
251
DW_OP_mod = $1d; // 0
252
DW_OP_mul = $1e; // 0
253
DW_OP_neg = $1f; // 0
254
DW_OP_not = $20; // 0
256
DW_OP_plus = $22; // 0
257
DW_OP_plus_uconst = $23; // 1 ULEB128 addend
258
DW_OP_shl = $24; // 0
259
DW_OP_shr = $25; // 0
260
DW_OP_shra = $26; // 0
261
DW_OP_xor = $27; // 0
262
DW_OP_skip = $2f; // 1 signed 2-byte constant
263
DW_OP_bra = $28; // 1 signed 2-byte constant
270
DW_OP_lit0 = $30; // 0 literals 0..31 = (DW_OP_lit0 + literal)
271
DW_OP_lit1 = $31; // 0
272
DW_OP_lit2 = $32; // 0
273
DW_OP_lit3 = $33; // 0
274
DW_OP_lit4 = $34; // 0
275
DW_OP_lit5 = $35; // 0
276
DW_OP_lit6 = $36; // 0
277
DW_OP_lit7 = $37; // 0
278
DW_OP_lit8 = $38; // 0
279
DW_OP_lit9 = $39; // 0
280
DW_OP_lit10 = $3a; // 0
281
DW_OP_lit11 = $3b; // 0
282
DW_OP_lit12 = $3c; // 0
283
DW_OP_lit13 = $3d; // 0
284
DW_OP_lit14 = $3e; // 0
285
DW_OP_lit15 = $3f; // 0
286
DW_OP_lit16 = $40; // 0
287
DW_OP_lit17 = $41; // 0
288
DW_OP_lit18 = $42; // 0
289
DW_OP_lit19 = $43; // 0
290
DW_OP_lit20 = $44; // 0
291
DW_OP_lit21 = $45; // 0
292
DW_OP_lit22 = $46; // 0
293
DW_OP_lit23 = $47; // 0
294
DW_OP_lit24 = $48; // 0
295
DW_OP_lit25 = $49; // 0
296
DW_OP_lit26 = $4a; // 0
297
DW_OP_lit27 = $4b; // 0
298
DW_OP_lit28 = $4c; // 0
299
DW_OP_lit29 = $4d; // 0
300
DW_OP_lit30 = $4e; // 0
301
DW_OP_lit31 = $4f; // 0
302
DW_OP_reg0 = $50; // 0 reg 0..31 = (DW_OP_reg0 + regnum)
303
DW_OP_reg1 = $51; // 0
304
DW_OP_reg2 = $52; // 0
305
DW_OP_reg3 = $53; // 0
306
DW_OP_reg4 = $54; // 0
307
DW_OP_reg5 = $55; // 0
308
DW_OP_reg6 = $56; // 0
309
DW_OP_reg7 = $57; // 0
310
DW_OP_reg8 = $58; // 0
311
DW_OP_reg9 = $59; // 0
312
DW_OP_reg10 = $5a; // 0
313
DW_OP_reg11 = $5b; // 0
314
DW_OP_reg12 = $5c; // 0
315
DW_OP_reg13 = $5d; // 0
316
DW_OP_reg14 = $5e; // 0
317
DW_OP_reg15 = $5f; // 0
318
DW_OP_reg16 = $60; // 0
319
DW_OP_reg17 = $61; // 0
320
DW_OP_reg18 = $62; // 0
321
DW_OP_reg19 = $63; // 0
322
DW_OP_reg20 = $64; // 0
323
DW_OP_reg21 = $65; // 0
324
DW_OP_reg22 = $66; // 0
325
DW_OP_reg23 = $67; // 0
326
DW_OP_reg24 = $68; // 0
327
DW_OP_reg25 = $69; // 0
328
DW_OP_reg26 = $6a; // 0
329
DW_OP_reg27 = $6b; // 0
330
DW_OP_reg28 = $6c; // 0
331
DW_OP_reg29 = $6d; // 0
332
DW_OP_reg30 = $6e; // 0
333
DW_OP_reg31 = $6f; // 0
334
DW_OP_breg0 = $70; // 1 SLEB128 offsetbase register 0..31 = (DW_OP_breg0 + regnum)
335
DW_OP_breg1 = $71; // 1
336
DW_OP_breg2 = $72; // 1
337
DW_OP_breg3 = $73; // 1
338
DW_OP_breg4 = $74; // 1
339
DW_OP_breg5 = $75; // 1
340
DW_OP_breg6 = $76; // 1
341
DW_OP_breg7 = $77; // 1
342
DW_OP_breg8 = $78; // 1
343
DW_OP_breg9 = $79; // 1
344
DW_OP_breg10 = $7a; // 1
345
DW_OP_breg11 = $7b; // 1
346
DW_OP_breg12 = $7c; // 1
347
DW_OP_breg13 = $7d; // 1
348
DW_OP_breg14 = $7e; // 1
349
DW_OP_breg15 = $7f; // 1
350
DW_OP_breg16 = $80; // 1
351
DW_OP_breg17 = $81; // 1
352
DW_OP_breg18 = $82; // 1
353
DW_OP_breg19 = $83; // 1
354
DW_OP_breg20 = $84; // 1
355
DW_OP_breg21 = $85; // 1
356
DW_OP_breg22 = $86; // 1
357
DW_OP_breg23 = $87; // 1
358
DW_OP_breg24 = $88; // 1
359
DW_OP_breg25 = $89; // 1
360
DW_OP_breg26 = $8a; // 1
361
DW_OP_breg27 = $8b; // 1
362
DW_OP_breg28 = $8c; // 1
363
DW_OP_breg29 = $8d; // 1
364
DW_OP_breg30 = $8e; // 1
365
DW_OP_breg31 = $8f; // 1
366
DW_OP_regx = $90; // 1 ULEB128 register
367
DW_OP_fbreg = $91; // 1 SLEB128 offset
368
DW_OP_bregx = $92; // 2 ULEB128 register followed bySLEB128 offset
369
DW_OP_piece = $93; // 1 ULEB128 size of piece addressed
370
DW_OP_deref_size = $94; // 1 1-byte size of data retrieved
371
DW_OP_xderef_size = $95; // 1 1-byte size of data retrieved
372
DW_OP_nop = $96; // 0
374
DW_OP_push_object_address = $97; // 0
375
DW_OP_call2 = $98; // 1 2-byte offset of DIE
376
DW_OP_call4 = $99; // 1 4-byte offset of DIE
377
DW_OP_call_ref = $9a; // 1 4- or 8-byte offset of DIE
378
DW_OP_form_tls_address = $9b; // 0
379
DW_OP_call_frame_cfa = $9c; // 0
380
DW_OP_bit_piece = $9d; // 2
382
DW_OP_lo_user = $e0; //
383
DW_OP_hi_user = $ff; //
386
{ Base type encoding values }
388
DW_ATE_address = $01;
389
DW_ATE_boolean = $02;
390
DW_ATE_complex_float = $03;
393
DW_ATE_signed_char = $06;
394
DW_ATE_unsigned = $07;
395
DW_ATE_unsigned_char = $08;
397
DW_ATE_imaginary_float = $09;
398
DW_ATE_packed_decimal = $0a;
399
DW_ATE_numeric_string = $0b;
401
DW_ATE_signed_fixed = $0d;
402
DW_ATE_unsigned_fixed = $0e;
403
DW_ATE_decimal_float = $0f;
405
DW_ATE_lo_user = $80;
406
DW_ATE_hi_user = $ff;
409
{ Decimal sign encodings }
412
DW_DS_unsigned = $01;
413
DW_DS_leading_overpunch = $02;
414
DW_DS_trailing_overpunch = $03;
415
DW_DS_leading_separate = $04;
416
DW_DS_trailing_separate = $05;
420
{ Endianity encodings }
423
DW_END_default = $00;
426
DW_END_lo_user = $40;
427
DW_END_hi_user = $ff;
431
{ Accessibility encodings }
433
DW_ACCESS_public = $01;
434
DW_ACCESS_protected = $02;
435
DW_ACCESS_private = $03;
438
{ Visibility encodings }
441
DW_VIS_exported = $02;
442
DW_VIS_qualified = $03;
445
{ Virtuality encodings }
447
DW_VIRTUALITY_none = $00;
448
DW_VIRTUALITY_virtual = $01;
449
DW_VIRTUALITY_pure_virtual = $02;
456
DW_LANG_Ada83 = $0003; // reserved
457
DW_LANG_C_plus_plus = $0004;
458
DW_LANG_Cobol74 = $0005; // reserved
459
DW_LANG_Cobol85 = $0006; // reserved
460
DW_LANG_Fortran77 = $0007;
461
DW_LANG_Fortran90 = $0008;
462
DW_LANG_Pascal83 = $0009;
463
DW_LANG_Modula2 = $000a;
465
DW_LANG_Java = $000b;
467
DW_LANG_Ada95 = $000d; // reserved
468
DW_LANG_Fortran95 = $000e;
469
DW_LANG_PLI = $000f; // reserved
470
DW_LANG_ObjC = $0010;
471
DW_LANG_ObjC_plus_plus = $0011;
475
DW_LANG_lo_user = $8000;
476
DW_LANG_hi_user = $ffff;
479
{ Address class encoding }
484
{ Identifier case encodings }
486
DW_ID_case_sensitive = $00;
488
DW_ID_down_case = $02;
489
DW_ID_case_insensitive = $03;
492
{ Calling convention encodings }
503
DW_INL_not_inlined = $00;
504
DW_INL_inlined = $01;
505
DW_INL_declared_not_inlined = $02;
506
DW_INL_declared_inlined = $03;
509
{ Ordering encodings }
511
DW_ORD_row_major = $00;
512
DW_ORD_col_major = $01;
515
{ Discriminant descriptor encodings }
521
{ Line Number Standard Opcode Encodings }
522
DW_LNS_extended_opcode = $00;
525
DW_LNS_advance_pc = $02;
526
DW_LNS_advance_line = $03;
527
DW_LNS_set_file = $04;
528
DW_LNS_set_column = $05;
529
DW_LNS_negate_stmt = $06;
530
DW_LNS_set_basic_block = $07;
531
DW_LNS_const_add_pc = $08;
532
DW_LNS_fixed_advance_pc = $09;
534
DW_LNS_set_prologue_end = $0a;
535
DW_LNS_set_epilogue_begin = $0b;
536
DW_LNS_set_isa = $0c;
540
{ Line Number Extended Opcode Encodings }
542
DW_LNE_end_sequence = $01;
543
DW_LNE_set_address = $02;
544
DW_LNE_define_file = $03;
546
DW_LNE_lo_user = $80;
547
DW_LNE_hi_user = $ff;
551
{ Macinfo Type Encodings }
553
DW_MACINFO_define = $01;
554
DW_MACINFO_undef = $02;
555
DW_MACINFO_start_file = $03;
556
DW_MACINFO_end_file = $04;
557
DW_MACINFO_vendor_ext = $ff;
560
{ Call frame instruction encodings }
562
// Special codes, operand is encoded in bit 5..0
563
DW_CFA_advance_loc = $40; // delta
564
DW_CFA_offset = $80; // register ULEB128 offset
565
DW_CFA_restore = $C0; // register
568
DW_CFA_set_loc = $01; // address
569
DW_CFA_advance_loc1 = $02; // 1-byte delta
570
DW_CFA_advance_loc2 = $03; // 2-byte delta
571
DW_CFA_advance_loc4 = $04; // 4-byte delta
572
DW_CFA_offset_extended = $05; // ULEB128 register, ULEB128 offset
573
DW_CFA_restore_extended = $06; // ULEB128 register
574
DW_CFA_undefined = $07; // ULEB128 register
575
DW_CFA_same_value = $08; // ULEB128 register
576
DW_CFA_register = $09; // ULEB128 register, ULEB128 register
577
DW_CFA_remember_state = $0a;
578
DW_CFA_restore_state = $0b;
579
DW_CFA_def_cfa = $0c; // ULEB128 register, ULEB128 offset
580
DW_CFA_def_cfa_register = $0d; // ULEB128 register
581
DW_CFA_def_cfa_offset = $0e; // ULEB128 offset
583
DW_CFA_def_cfa_expression = $0f; // BLOCK
584
DW_CFA_expression = $10; // ULEB128 register, BLOCK
585
DW_CFA_offset_extended_sf = $11; // ULEB128 register, SLEB128 offset
586
DW_CFA_def_cfa_sf = $12; // ULEB128 register, SLEB128 offset
587
DW_CFA_def_cfa_offset_sf = $13; // SLEB128 offset
588
DW_CFA_val_offset = $14; // ULEB128 , ULEB128
589
DW_CFA_val_offset_sf = $15; // ULEB128 , SLEB128
590
DW_CFA_val_expression = $16; // ULEB128 , BLOCK
592
DW_CFA_lo_user = $1c;
593
DW_CFA_hi_user = $3f;