DWARF 5 Standard
By DWARF Standards Committee
February 20, 2017
DWARF Version 5 Debugging Format
Standard is based on the DWARF
Version 4 Standard. It is an upward compatible extension to the
previous version of the standard.
The major enhancements in DWARF Version 5 are
The DWARF Version 5 Standard is
compatible with DWARF Version 4 except as follows:
- Description of the
objectives and rationale for the design and evolution of the DWARF
- Merge .debug_types into .debug_info
- Support collecting common
debug information into a single supplementary object file.
- Replace the line number
program header allowing better data compression and source
- Support split object file and
package representations to allow DWARF info to be kept separate from
- Replace .debug_macinfo with .debug_macro
representation allowing much more compact representation of C/C++
- Replace .debug_pubnames and .debug_pubtypes
with much more functional .debug_names section.
- Replace location list (.debug_loc)
and range list (.debug_ranges) sections with new sections (.debug_loclists
and .debug_rnglists) allowing more compact representation and
- Add new TAG to describe call
site information, including tail call and tail recursion.
- Improve support for FORTRAN
assumend rank arrays, dynamic rank arrays, and co-arrays.
- Add new operators which
support a DWARF expression stack containing typed values.
- Add support for C++ auto
return type, deleted member functions, and defaulted constructors
- Add new attribute to identify
a subprogram which does not return to its caller.
- Add language codes for C
2011, C++ 2003, C++ 2011, C++ 2014, Dylan, Fortran 2003, Fortran
2008, Go, Haskell, Julia, Modula 3, Ocaml, OpenCL, Rust, Swift, and
- Numerous minor additions to
improve functionality and performance.
compilation unit header (in the .debug_info section) has a new
- New operand forms for
attribute values are defined (DW_FORM_addrx*, DW_FORM_data16,
DW_FORM_implicit_const, DW_FORM_line_strp, DW_FORM_loclistx,
DW_FORM_rnglistx, DW_FORM_ref_sup*, DW_FORM_strp_sup and
- The line number table header
is substantially revised.
- A location list entry with
the address range (0, maximum-address) is defined as the new default
location list entry.
- In a string type, the
DW_AT_byte_size attribute is re-defined to always describe the size
of the string type. (Previously it described the size of the
optional string length data field if the DW_AT_string_length
attribute was also present.)
- New representations for macro
definitions, symbol lookup, location lists and range lists.