ReactOS  0.4.14-dev-317-g96040ec
dwarf2.h
Go to the documentation of this file.
1 /* Declarations and definitions of codes relating to the DWARF2 symbolic
2  debugging information format.
3  Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
4  2003, 2004 Free Software Foundation, Inc.
5 
6  Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
7  Office (AJPO), Florida State University and Silicon Graphics Inc.
8  provided support for this effort -- June 21, 1995.
9 
10  Derived from the DWARF 1 implementation written by Ron Guilmette
11  (rfg@netcom.com), November 1990.
12 
13  This file is part of GCC.
14 
15  GCC is free software; you can redistribute it and/or modify it under
16  the terms of the GNU General Public License as published by the Free
17  Software Foundation; either version 2, or (at your option) any later
18  version.
19 
20  GCC is distributed in the hope that it will be useful, but WITHOUT
21  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
22  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
23  License for more details.
24 
25  You should have received a copy of the GNU General Public License along
26  with this program; if not, write to the Free Software Foundation, Inc.,
27  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
28 */
29 
30 /* This file is derived from the DWARF specification (a public document)
31  Revision 2.0.0 (July 27, 1993) developed by the UNIX International
32  Programming Languages Special Interest Group (UI/PLSIG) and distributed
33  by UNIX International. Copies of this specification are available from
34  UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
35 
36  This file also now contains definitions from the DWARF 3 specification. */
37 
38 /* This file is shared between GCC and GDB, and should not contain
39  prototypes. */
40 
41 #pragma once
42 
43 //#include "list.h"
44 
45 #include <pshpack1.h>
46 /* Structure found in the .debug_line section. */
47 typedef struct
48 {
49  unsigned char li_length [4];
50  unsigned char li_version [2];
51  unsigned char li_prologue_length [4];
52  unsigned char li_min_insn_length [1];
53  unsigned char li_default_is_stmt [1];
54  unsigned char li_line_base [1];
55  unsigned char li_line_range [1];
56  unsigned char li_opcode_base [1];
57 }
59 
60 typedef struct
61 {
62  unsigned long li_length;
63  unsigned short li_version;
64  unsigned int li_prologue_length;
65  unsigned char li_min_insn_length;
66  unsigned char li_default_is_stmt;
68  unsigned char li_line_range;
69  unsigned char li_opcode_base;
70 }
72 
73 /* Structure found in .debug_pubnames section. */
74 typedef struct
75 {
76  unsigned char pn_length [4];
77  unsigned char pn_version [2];
78  unsigned char pn_offset [4];
79  unsigned char pn_size [4];
80 }
82 
83 typedef struct
84 {
85  unsigned long pn_length;
86  unsigned short pn_version;
87  unsigned long pn_offset;
88  unsigned long pn_size;
89 }
91 
92 /* Structure found in .debug_info section. */
93 typedef struct
94 {
95  unsigned char cu_length [4];
96  unsigned char cu_version [2];
97  unsigned char cu_abbrev_offset [4];
98  unsigned char cu_pointer_size [1];
99 }
101 
102 typedef struct
103 {
104  unsigned long cu_length;
105  unsigned short cu_version;
106  unsigned long cu_abbrev_offset;
107  unsigned char cu_pointer_size;
108 }
110 
111 typedef struct
112 {
113  unsigned char ar_length [4];
114  unsigned char ar_version [2];
115  unsigned char ar_info_offset [4];
116  unsigned char ar_pointer_size [1];
117  unsigned char ar_segment_size [1];
118 }
120 
121 typedef struct
122 {
123  unsigned long ar_length;
124  unsigned short ar_version;
125  unsigned long ar_info_offset;
126  unsigned char ar_pointer_size;
127  unsigned char ar_segment_size;
128 }
130 #include <poppack.h>
131 
132 /* Tag names and codes. */
134  {
142  DW_TAG_label = 0x0a,
183  /* DWARF 3. */
192  /* SGI/MIPS Extensions. */
194  /* HP extensions. See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz . */
196  /* GNU extensions. */
197  DW_TAG_format_label = 0x4101, /* For FORTRAN 77 and Fortran 90. */
198  DW_TAG_function_template = 0x4102, /* For C++. */
199  DW_TAG_class_template = 0x4103, /* For C++. */
202  /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */
206  /* PGI (STMicroelectronics) extensions. No documentation available. */
209  };
210 
211 #define DW_TAG_lo_user 0x4080
212 #define DW_TAG_hi_user 0xffff
213 
214 /* Flag that tells whether entry has a child or not. */
215 #define DW_children_no 0
216 #define DW_children_yes 1
217 
218 /* Form names and codes. */
220  {
221  DW_FORM_addr = 0x01,
231  DW_FORM_flag = 0x0c,
233  DW_FORM_strp = 0x0e,
236  DW_FORM_ref1 = 0x11,
237  DW_FORM_ref2 = 0x12,
238  DW_FORM_ref4 = 0x13,
239  DW_FORM_ref8 = 0x14,
242  };
243 
244 /* Attribute names and codes. */
246  {
249  DW_AT_name = 0x03,
257  DW_AT_low_pc = 0x11,
260  DW_AT_member = 0x14,
261  DW_AT_discr = 0x15,
264  DW_AT_import = 0x18,
271  DW_AT_inline = 0x20,
286  DW_AT_count = 0x37,
296  DW_AT_friend = 0x41,
304  DW_AT_type = 0x49,
309  /* DWARF 3 values. */
313  DW_AT_stride = 0x51,
317  DW_AT_ranges = 0x55,
322  /* SGI/MIPS extensions. */
323  DW_AT_MIPS_fde = 0x2001,
334  /* HP extensions. */
336  DW_AT_HP_unmodifiable = 0x2001, /* Same as DW_AT_MIPS_fde. */
348  DW_AT_HP_prof_flags = 0x201b, /* In comp unit of procs_info for -g. */
349  /* GNU extensions. */
350  DW_AT_sf_names = 0x2101,
351  DW_AT_src_info = 0x2102,
352  DW_AT_mac_info = 0x2103,
355  DW_AT_body_end = 0x2106,
357  /* VMS extensions. */
359  /* UPC extension. */
361  /* PGI (STMicroelectronics) extensions. */
362  DW_AT_PGI_lbase = 0x3a00,
365  };
366 
367 #define DW_AT_lo_user 0x2000 /* Implementation-defined range start. */
368 #define DW_AT_hi_user 0x3ff0 /* Implementation-defined range end. */
369 
370 /* Location atom names and codes. */
372  {
373  DW_OP_addr = 0x03,
374  DW_OP_deref = 0x06,
383  DW_OP_constu = 0x10,
384  DW_OP_consts = 0x11,
385  DW_OP_dup = 0x12,
386  DW_OP_drop = 0x13,
387  DW_OP_over = 0x14,
388  DW_OP_pick = 0x15,
389  DW_OP_swap = 0x16,
390  DW_OP_rot = 0x17,
391  DW_OP_xderef = 0x18,
392  DW_OP_abs = 0x19,
393  DW_OP_and = 0x1a,
394  DW_OP_div = 0x1b,
395  DW_OP_minus = 0x1c,
396  DW_OP_mod = 0x1d,
397  DW_OP_mul = 0x1e,
398  DW_OP_neg = 0x1f,
399  DW_OP_not = 0x20,
400  DW_OP_or = 0x21,
401  DW_OP_plus = 0x22,
403  DW_OP_shl = 0x24,
404  DW_OP_shr = 0x25,
405  DW_OP_shra = 0x26,
406  DW_OP_xor = 0x27,
407  DW_OP_bra = 0x28,
408  DW_OP_eq = 0x29,
409  DW_OP_ge = 0x2a,
410  DW_OP_gt = 0x2b,
411  DW_OP_le = 0x2c,
412  DW_OP_lt = 0x2d,
413  DW_OP_ne = 0x2e,
414  DW_OP_skip = 0x2f,
415  DW_OP_lit0 = 0x30,
416  DW_OP_lit1 = 0x31,
417  DW_OP_lit2 = 0x32,
418  DW_OP_lit3 = 0x33,
419  DW_OP_lit4 = 0x34,
420  DW_OP_lit5 = 0x35,
421  DW_OP_lit6 = 0x36,
422  DW_OP_lit7 = 0x37,
423  DW_OP_lit8 = 0x38,
424  DW_OP_lit9 = 0x39,
425  DW_OP_lit10 = 0x3a,
426  DW_OP_lit11 = 0x3b,
427  DW_OP_lit12 = 0x3c,
428  DW_OP_lit13 = 0x3d,
429  DW_OP_lit14 = 0x3e,
430  DW_OP_lit15 = 0x3f,
431  DW_OP_lit16 = 0x40,
432  DW_OP_lit17 = 0x41,
433  DW_OP_lit18 = 0x42,
434  DW_OP_lit19 = 0x43,
435  DW_OP_lit20 = 0x44,
436  DW_OP_lit21 = 0x45,
437  DW_OP_lit22 = 0x46,
438  DW_OP_lit23 = 0x47,
439  DW_OP_lit24 = 0x48,
440  DW_OP_lit25 = 0x49,
441  DW_OP_lit26 = 0x4a,
442  DW_OP_lit27 = 0x4b,
443  DW_OP_lit28 = 0x4c,
444  DW_OP_lit29 = 0x4d,
445  DW_OP_lit30 = 0x4e,
446  DW_OP_lit31 = 0x4f,
447  DW_OP_reg0 = 0x50,
448  DW_OP_reg1 = 0x51,
449  DW_OP_reg2 = 0x52,
450  DW_OP_reg3 = 0x53,
451  DW_OP_reg4 = 0x54,
452  DW_OP_reg5 = 0x55,
453  DW_OP_reg6 = 0x56,
454  DW_OP_reg7 = 0x57,
455  DW_OP_reg8 = 0x58,
456  DW_OP_reg9 = 0x59,
457  DW_OP_reg10 = 0x5a,
458  DW_OP_reg11 = 0x5b,
459  DW_OP_reg12 = 0x5c,
460  DW_OP_reg13 = 0x5d,
461  DW_OP_reg14 = 0x5e,
462  DW_OP_reg15 = 0x5f,
463  DW_OP_reg16 = 0x60,
464  DW_OP_reg17 = 0x61,
465  DW_OP_reg18 = 0x62,
466  DW_OP_reg19 = 0x63,
467  DW_OP_reg20 = 0x64,
468  DW_OP_reg21 = 0x65,
469  DW_OP_reg22 = 0x66,
470  DW_OP_reg23 = 0x67,
471  DW_OP_reg24 = 0x68,
472  DW_OP_reg25 = 0x69,
473  DW_OP_reg26 = 0x6a,
474  DW_OP_reg27 = 0x6b,
475  DW_OP_reg28 = 0x6c,
476  DW_OP_reg29 = 0x6d,
477  DW_OP_reg30 = 0x6e,
478  DW_OP_reg31 = 0x6f,
479  DW_OP_breg0 = 0x70,
480  DW_OP_breg1 = 0x71,
481  DW_OP_breg2 = 0x72,
482  DW_OP_breg3 = 0x73,
483  DW_OP_breg4 = 0x74,
484  DW_OP_breg5 = 0x75,
485  DW_OP_breg6 = 0x76,
486  DW_OP_breg7 = 0x77,
487  DW_OP_breg8 = 0x78,
488  DW_OP_breg9 = 0x79,
489  DW_OP_breg10 = 0x7a,
490  DW_OP_breg11 = 0x7b,
491  DW_OP_breg12 = 0x7c,
492  DW_OP_breg13 = 0x7d,
493  DW_OP_breg14 = 0x7e,
494  DW_OP_breg15 = 0x7f,
495  DW_OP_breg16 = 0x80,
496  DW_OP_breg17 = 0x81,
497  DW_OP_breg18 = 0x82,
498  DW_OP_breg19 = 0x83,
499  DW_OP_breg20 = 0x84,
500  DW_OP_breg21 = 0x85,
501  DW_OP_breg22 = 0x86,
502  DW_OP_breg23 = 0x87,
503  DW_OP_breg24 = 0x88,
504  DW_OP_breg25 = 0x89,
505  DW_OP_breg26 = 0x8a,
506  DW_OP_breg27 = 0x8b,
507  DW_OP_breg28 = 0x8c,
508  DW_OP_breg29 = 0x8d,
509  DW_OP_breg30 = 0x8e,
510  DW_OP_breg31 = 0x8f,
511  DW_OP_regx = 0x90,
512  DW_OP_fbreg = 0x91,
513  DW_OP_bregx = 0x92,
514  DW_OP_piece = 0x93,
517  DW_OP_nop = 0x96,
518  /* DWARF 3 extensions. */
520  DW_OP_call2 = 0x98,
521  DW_OP_call4 = 0x99,
523  /* GNU extensions. */
525  /* HP extensions. */
526  DW_OP_HP_unknown = 0xe0, /* Ouch, the same as GNU_push_tls_address. */
533  };
534 
535 #define DW_OP_lo_user 0xe0 /* Implementation-defined range start. */
536 #define DW_OP_hi_user 0xff /* Implementation-defined range end. */
537 
538 /* Type encodings. */
540  {
541  DW_ATE_void = 0x0,
550  /* DWARF 3. */
552  /* HP extensions. */
553  DW_ATE_HP_float80 = 0x80, /* Floating-point (80 bit). */
554  DW_ATE_HP_complex_float80 = 0x81, /* Complex floating-point (80 bit). */
555  DW_ATE_HP_float128 = 0x82, /* Floating-point (128 bit). */
556  DW_ATE_HP_complex_float128 = 0x83, /* Complex floating-point (128 bit). */
557  DW_ATE_HP_floathpintel = 0x84, /* Floating-point (82 bit IA64). */
560  };
561 
562 #define DW_ATE_lo_user 0x80
563 #define DW_ATE_hi_user 0xff
564 
565 /* Array ordering names and codes. */
567  {
570  };
571 
572 /* Access attribute. */
574  {
578  };
579 
580 /* Visibility. */
582  {
586  };
587 
588 /* Virtuality. */
590  {
594  };
595 
596 /* Case sensitivity. */
598  {
603  };
604 
605 /* Calling convention. */
607  {
612  };
613 
614 #define DW_CC_lo_user 0x40
615 #define DW_CC_hi_user 0xff
616 
617 /* Inline attribute. */
619  {
624  };
625 
626 /* Discriminant lists. */
628  {
631  };
632 
633 /* Line number opcodes. */
635  {
646  /* DWARF 3. */
650  };
651 
652 /* Line number extended opcodes. */
654  {
658  /* HP extensions. */
669  };
670 
671 /* Call frame information. */
673  {
677  DW_CFA_nop = 0x00,
692  /* DWARF 3. */
698  /* SGI/MIPS specific. */
700  /* GNU extensions. */
704  };
705 
706 #define DW_CIE_ID 0xffffffff
707 #define DW_CIE_VERSION 1
708 
709 #define DW_CFA_extended 0
710 #define DW_CFA_lo_user 0x1c
711 #define DW_CFA_hi_user 0x3f
712 
713 #define DW_CHILDREN_no 0x00
714 #define DW_CHILDREN_yes 0x01
715 
716 #define DW_ADDR_none 0
717 
718 /* Source language names and codes. */
720  {
721  DW_LANG_C89 = 0x0001,
722  DW_LANG_C = 0x0002,
723  DW_LANG_Ada83 = 0x0003,
725  DW_LANG_Cobol74 = 0x0005,
726  DW_LANG_Cobol85 = 0x0006,
730  DW_LANG_Modula2 = 0x000a,
731  DW_LANG_Java = 0x000b,
732  /* DWARF 3. */
733  DW_LANG_C99 = 0x000c,
734  DW_LANG_Ada95 = 0x000d,
736  /* MIPS. */
738  /* UPC. */
739  DW_LANG_Upc = 0x8765
740  };
741 
742 #define DW_LANG_lo_user 0x8000 /* Implementation-defined range start. */
743 #define DW_LANG_hi_user 0xffff /* Implementation-defined range start. */
744 
745 /* Names and codes for macro information. */
747  {
753  };
754 
755 /* @@@ For use with GNU frame unwind information. */
756 
757 #define DW_EH_PE_absptr 0x00
758 #define DW_EH_PE_omit 0xff
759 
760 #define DW_EH_PE_uleb128 0x01
761 #define DW_EH_PE_udata2 0x02
762 #define DW_EH_PE_udata4 0x03
763 #define DW_EH_PE_udata8 0x04
764 #define DW_EH_PE_sleb128 0x09
765 #define DW_EH_PE_sdata2 0x0A
766 #define DW_EH_PE_sdata4 0x0B
767 #define DW_EH_PE_sdata8 0x0C
768 #define DW_EH_PE_signed 0x08
769 
770 #define DW_EH_PE_pcrel 0x10
771 #define DW_EH_PE_textrel 0x20
772 #define DW_EH_PE_datarel 0x30
773 #define DW_EH_PE_funcrel 0x40
774 #define DW_EH_PE_aligned 0x50
775 
776 #define DW_EH_PE_indirect 0x80
777 
780 typedef struct
781 {
784 } DW2CIEFDE;
785 
786 typedef struct
787 {
789  char *Next;
791  char Version;
794  char *AugString;
796  char *AugData;
800 } DW2CIE, *PDW2CIE;
801 
802 typedef struct
803 {
804  unsigned long Length;
805  char *Next;
806  char *CiePointer;
807  unsigned long PcBegin;
808  unsigned long PcRange;
809  unsigned long AugLength;
810  char *AugData;
812 } DW2FDE, *PDW2FDE;
813 
814 typedef struct _SEHBLOCK
815 {
816  unsigned long BeginTry;
817  unsigned long EndTry;
818  unsigned long Target;
819  unsigned long Handler;
820  unsigned long End;
821 } SEHBLOCK, *PSEHBLOCK;
822 
823 typedef struct _CFSTATE
824 {
825  unsigned long Location;
826  unsigned long Code;
827  unsigned long Reg;
828  unsigned long Reg2;
829  long FramePtr;
831  long Offset;
832  unsigned long IsUwop;
833  unsigned long Scope;
834  unsigned long cScopes;
835  unsigned long TryLevel;
838 
839 #define NextCIE(p) ((void*)((char*)p + p->Length + 4))
unsigned long PcBegin
Definition: dwarf2.h:807
unsigned short li_version
Definition: dwarf2.h:63
char * AugData
Definition: dwarf2.h:810
long FramePtr
Definition: dwarf2.h:829
char Version
Definition: dwarf2.h:791
unsigned long Length
Definition: dwarf2.h:804
char * Instructions
Definition: dwarf2.h:799
dwarf_access_attribute
Definition: dwarf2.h:573
dwarf_line_number_ops
Definition: dwarf2.h:634
unsigned long AugLength
Definition: dwarf2.h:809
dwarf_call_frame_info
Definition: dwarf.h:505
dwarf_line_number_x_ops
Definition: dwarf2.h:653
dwarf_virtuality_attribute
Definition: dwarf2.h:589
dwarf_discrim_list
Definition: dwarf2.h:627
unsigned long li_length
Definition: dwarf2.h:62
unsigned char ar_segment_size
Definition: dwarf2.h:127
char * Next
Definition: dwarf2.h:805
ULONG ReturnAddressRegister
Definition: dwarf2.h:792
unsigned long Reg
Definition: dwarf2.h:827
ULONG AugStringLength
Definition: dwarf2.h:793
long Offset
Definition: dwarf2.h:831
SEHBLOCK SehBlock[20]
Definition: dwarf2.h:836
struct _CFSTATE * PDW2CFSTATE
struct _SEHBLOCK SEHBLOCK
struct _SEHBLOCK * PSEHBLOCK
struct DW2CIE * PDW2CIE
unsigned long pn_size
Definition: dwarf2.h:88
dwarf_form
Definition: dwarf2.h:219
unsigned long Handler
Definition: dwarf2.h:819
dwarf_tag
Definition: dwarf2.h:133
unsigned long PcRange
Definition: dwarf2.h:808
char * AugData
Definition: dwarf2.h:796
long LONG
Definition: pedump.c:60
long FramePtrDiff
Definition: dwarf2.h:830
dwarf_visibility_attribute
Definition: dwarf2.h:581
unsigned long cu_length
Definition: dwarf2.h:104
unsigned long TryLevel
Definition: dwarf2.h:835
unsigned long End
Definition: dwarf2.h:820
dwarf_macinfo_record_type
Definition: dwarf2.h:746
struct DW2FDE * PDW2FDE
unsigned int li_prologue_length
Definition: dwarf2.h:64
unsigned long ar_length
Definition: dwarf2.h:123
ULONG CodeAlign
Definition: dwarf2.h:797
unsigned short pn_version
Definition: dwarf2.h:86
dwarf_id_case
Definition: dwarf2.h:597
unsigned long EndTry
Definition: dwarf2.h:817
dwarf_inline_attribute
Definition: dwarf2.h:618
dwarf_type
Definition: dwarf2.h:539
dwarf_calling_convention
Definition: dwarf.h:472
char * Instructions
Definition: dwarf2.h:811
unsigned long IsUwop
Definition: dwarf2.h:832
unsigned long Target
Definition: dwarf2.h:818
ULONG CieId
Definition: dwarf2.h:790
unsigned long Code
Definition: dwarf2.h:826
unsigned short ar_version
Definition: dwarf2.h:124
unsigned long Location
Definition: dwarf2.h:825
unsigned short cu_version
Definition: dwarf2.h:105
ULONG CiePointer
Definition: dwarf2.h:783
unsigned long Scope
Definition: dwarf2.h:833
struct _CFSTATE DW2CFSTATE
ULONG Length
Definition: dwarf2.h:782
unsigned char li_default_is_stmt
Definition: dwarf2.h:66
unsigned long cScopes
Definition: dwarf2.h:834
dwarf_source_language
Definition: dwarf2.h:719
dwarf_array_dim_ordering
Definition: dwarf2.h:566
Definition: dwarf2.h:786
char * AugString
Definition: dwarf2.h:794
ULONG Length
Definition: dwarf2.h:788
dwarf_location_atom
Definition: dwarf2.h:371
unsigned long Reg2
Definition: dwarf2.h:828
unsigned char cu_pointer_size
Definition: dwarf2.h:107
dwarf_attribute
Definition: dwarf2.h:245
ULONG AugLength
Definition: dwarf2.h:795
unsigned int ULONG
Definition: retypes.h:1
unsigned char li_min_insn_length
Definition: dwarf2.h:65
unsigned long pn_offset
Definition: dwarf2.h:87
unsigned long ar_info_offset
Definition: dwarf2.h:125
unsigned char ar_pointer_size
Definition: dwarf2.h:126
char * Next
Definition: dwarf2.h:789
char * CiePointer
Definition: dwarf2.h:806
unsigned char li_opcode_base
Definition: dwarf2.h:69
LONG DataAlign
Definition: dwarf2.h:798
unsigned long BeginTry
Definition: dwarf2.h:816
unsigned long cu_abbrev_offset
Definition: dwarf2.h:106
Definition: dwarf2.h:802
unsigned long pn_length
Definition: dwarf2.h:85
unsigned char li_line_range
Definition: dwarf2.h:68