Jump to content

DWARF: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m Correct acronym explanation of DWARF (according to the same reference as cited before)
m added link to the wikipedia article for the word 'pun'
Line 8: Line 8:
| year = 2007
| year = 2007
| month = February
| month = February
}}</ref> The name is a pun on "ELF" that has no official meaning but "may be an acronym for 'Debugging With Attributed Record Formats'".<ref name=eager/>
}}</ref> The name is a [[pun]] on "ELF" that has no official meaning but "may be an acronym for 'Debugging With Attributed Record Formats'".<ref name=eager/>


==History==
==History==

Revision as of 06:19, 15 May 2009

DWARF is a widely used, standardized debugging data format. DWARF was originally designed along with ELF, although it is independent of object file formats.[1] The name is a pun on "ELF" that has no official meaning but "may be an acronym for 'Debugging With Attributed Record Formats'".[1]

History

The first version of DWARF proved to use excessive amounts of storage, and it was superseded by an incompatible successor DWARF-2, which added various encoding schemes to reduce data size. DWARF was not immediately successful; for instance, when Sun Microsystems adopted ELF as part of their move to Solaris, they opted to continue using stabs, in an embedding known as "stabs-in-elf". Linux followed suit, and DWARF-2 did not become the default until the late 1990s. DWARF version 3, which was released in January 2006,[2] adds (among other things) support for C++ namespaces, Fortran 90 allocatable data and additional compiler optimization techniques.

Michael Eager, chair of the DWARF Standards Committee, has written an introduction to debugging formats and DWARF 3, Introduction to the DWARF Debugging Format.[1]

Structure

DWARF uses a data structure called a Debugging Information Entry (DIE) to represent each variable, type, procedure, etc. A DIE has a tag (eg., DW_TAG_variable, DW_TAG_pointer_type, DW_TAG_subprogram) and attributes (key-value pairs), A DIE can have nested (child) DIEs, forming a tree structure. A DIE attribute can refer to another DIE anywhere in the tree — for instance, a DIE representing a variable would have a DW_AT_type entry pointing to the DIE describing the variable's type.

To save space, two large tables needed by symbolic debuggers are represented as byte-coded instructions for simple, special-purpose finite state machines. The Line Number Table, which maps code locations to source code locations and vice versa, also specifies which instructions are part of function prologues and epilogues. The Call Frame Information table allows debuggers to locate frames on the call stack.

References

  1. ^ a b c Michael J. Eager (2007). "Introduction to the DWARF Debugging Format" (PDF). Retrieved 2007-06-25. {{cite web}}: Unknown parameter |month= ignored (help)
  2. ^ "DWARF Version 3 Standard Released" (Press release). Free Standards Group. January 4, 2006. Retrieved 2007-06-25. {{cite press release}}: Check date values in: |date= (help); Cite has empty unknown parameter: |1= (help)

See also

  • stabs - Symbol TABle entrieS debugging format