calling conventions and call frame instructions.
The labels denoting the beginning and end of the reserved
-value range for vendor specific extensions consist of the
-appropriate prefix (DW\_TAG, DW\_AT, DW\_END, DW\_ATE, DW\_OP,
-DW\_LANG, DW\_LNE, DW\_CC or DW\_CFA respectively) followed by
\hypertarget{chap:DWXXXlohiuser}{}
+value range for vendor specific extensions consist of the
+appropriate prefix
+(\DWATlouserMARK{}\DWAThiuserMARK{} DW\_AT,
+\DWATElouserMARK{}\DWATEhiuserMARK{} DW\_ATE,
+\DWCClouserMARK{}\DWCChiuserMARK{} DW\_CC,
+\DWCFAlouserMARK{}\DWCFAhiuserMARK{} DW\_CFA
+\DWENDlouserMARK{}\DWENDhiuserMARK{} DW\_END,
+\DWLANGlouserMARK{}\DWLANGhiuserMARK{} DW\_LANG,
+\DWLNElouserMARK{}\DWLNEhiuserMARK{} DW\_LNE,
+\DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO,
+\DWOPlouserMARK{}\DWOPhiuserMARK{} DW\_OP or
+\DWTAGlouserMARK{}\DWTAGhiuserMARK{} DW\_TAG,
+respectively) followed by
\_lo\_user or \_hi\_user.
-\textit{For example, for entry tags, the special
-labels are DW\_TAG\_lo\_user and DW\_TAG\_hi\_user.}
Values in the range between \textit{prefix}\_lo\_user
and \textit{prefix}\_hi\_user inclusive,
are reserved for vendor specific extensions. Vendors may
future system\dash defined values. All other values are reserved
for use by the system.
+\textit{For example, for DIE tags, the special
+labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
+
\textit{There may also be codes for vendor specific extensions
between the number of standard line number opcodes and
the first special line number opcode. However, since the
number of standard opcodes varies with the DWARF version,
the range for extensions is also version dependent. Thus,
-\livetarg{chap:DWLNSlouser}{DW\_LNS\_lo\_user} and
-\livetarg{chap:DWLNShiuser}{DW\_LNS\_hi\_user} symbols are not defined.
+\DWLNSlouserTARG{} and
+\DWLNShiuserTARG{} symbols are not defined.
}
Vendor defined tags, attributes, base type encodings, location
have a header
(\dotdebugaranges{},
\dotdebuginfo{},
-\dotdebugtypes{},
\dotdebugline{},
\dotdebugpubnames{}, and
\dotdebugpubtypes{}) or the length field
-\section{Executable Objects and Shared Objects}
+\section{Relocatable, Split, Executable and Shared Objects}
\label{datarep:executableobjectsandsharedobjects}
+\subsection{Relocatable Objects}
+
+\subsection{Split DWARF Objects}
+\label{datarep:splitdwarfobjects}
+A DWARF producer may partition the debugging
+information such that the majority of the debugging
+information can remain in individual object files without
+being processed by the linker. The first partition contains
+debugging information that must still be processed by the linker,
+and includes the following:
+\begin{itemize}
+\item
+The line number tables, range tables, frame tables, and
+accelerated access tables, in the usual sections:
+\dotdebugline, \dotdebugranges, \dotdebugframe,
+\dotdebugpubnames, \dotdebugpubtypes{} and \dotdebugaranges,
+respectively.
+\item
+An address table, in the \dotdebugaddr{} section. This table
+contains all addresses and constants that require
+link-time relocation, and items in the table can be
+referenced indirectly from the debugging information via
+the \DWFORMaddrx{} form, and by the \DWOPaddrx{} and
+\DWOPconstx{} operators.
+\item
+A skeleton compilation unit, as described in Section
+\refersec{chap:skeletoncompilationunitentries},
+in the \dotdebuginfo{} section.
+\item
+An abbreviations table for the skeleton compilation unit,
+in the \dotdebugabbrev{} section.
+\item
+A string table, in the \dotdebugstr{} section. The string
+table is necessary only if the skeleton compilation unit
+uses either indirect string form, \DWFORMstrp{} or
+\DWFORMstrx.
+\item
+A string offsets table, in the \dotdebugstroffsets{}
+section. The string offsets table is necessary only if
+the skeleton compilation unit uses the \DWFORMstrx{} form.
+\end{itemize}
+The attributes contained in the skeleton compilation
+unit can be used by a DWARF consumer to find the object file
+or DWARF object file that contains the second partition.
+
+The second partition contains the debugging information that
+does not need to be processed by the linker. These sections
+may be left in the object files and ignored by the linker
+(that is, not combined and copied to the executable object), or
+they may be placed by the producer in a separate DWARF object
+file. This partition includes the following:
+\begin{itemize}
+\item
+The full compilation unit, in the \dotdebuginfodwo{} section.
+Attributes in debugging information entries may refer to
+machine addresses indirectly using the \DWFORMaddrx{} form,
+and location expressions may do so using the \DWOPaddrx{} and
+\DWOPconstx{} forms. Attributes may refer to range table
+entries with an offset relative to a base offset in the
+range table for the compilation unit.
+
+\item Separate type units, in the \dotdebuginfodwo{} section.
+
+\item
+Abbreviations table(s) for the compilation unit and type
+units, in the \dotdebugabbrevdwo{} section.
+
+\item Location lists, in the \dotdebuglocdwo{} section.
+
+\item
+A skeleton line table (for the type units), in the
+\dotdebuglinedwo{} section (see
+Section \refersec{chap:skeletoncompilationunitentries}).
+
+\item Macro information, in the \dotdebugmacrodwo{} section.
+
+\item A string table, in the \dotdebugstrdwo{} section.
+
+\item A string offsets table, in the \dotdebugstroffsetsdwo{}
+section.
+\end{itemize}
+
+Except where noted otherwise, all references in this document
+to a debugging information section (for example, \dotdebuginfo),
+applies also to the corresponding split DWARF section (for example,
+\dotdebuginfodwo).
+
+\subsection{Executable Objects}
+\label{chap:executableobjects}
The relocated addresses in the debugging information for an
-executable object are virtual addresses and the relocated
+executable object are virtual addresses.
+
+\subsection{Shared Objects}
+\label{datarep:sharedobjects}
+The relocated
addresses in the debugging information for a shared object
are offsets relative to the start of the lowest region of
memory loaded from that shared object.
is available in the run\dash time linker\textquoteright s data structures.}
-
+\needlines{6}
\section{32-Bit and 64-Bit DWARF Formats}
\label{datarep:32bitand64bitdwarfformats}
\hypertarget{datarep:xxbitdwffmt}{}
\dotdebugpubtypes{} & \addtoindex{debug\_info\_offset} & offset in \dotdebuginfo{} \\
& \addtoindex{debug\_info\_length} & length of \dotdebuginfo{} \\
& & contribution \\
-\dotdebugtypes{} & \addtoindex{debug\_abbrev\_offset} & offset in \dotdebugabbrev{} \\
- & \addtoindex{type\_offset} & offset in \dotdebugtypes{} \\
-
\end{tabular}
\end{center}
present, consequently, these two fields must exactly overlay
each other (both offset and size).
-\item Within the body of the \dotdebuginfo{} or \dotdebugtypes{}
+\item Within the body of the \dotdebuginfo{}
section, certain forms of attribute value depend on the choice
of DWARF format as follows. For the 32\dash bit DWARF format,
the value is a 32\dash bit unsigned integer; for the 64\dash bit DWARF
\begin{center}
\begin{tabular}{ll}
Form & Role \\ \hline
-\livelink{chap:DWFORMrefaddr}{DW\_FORM\_ref\_addr}& offset in \dotdebuginfo{} \\
-\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}& offset in a section other than \\
+\DWFORMrefaddr& offset in \dotdebuginfo{} \\
+\DWFORMsecoffset& offset in a section other than \\
&\dotdebuginfo{} or \dotdebugstr{} \\
-\livelink{chap:DWFORMstrp}{DW\_FORM\_strp}&offset in \dotdebugstr{} \\
-\livelink{chap:DWOPcallref}{DW\_OP\_call\_ref}&offset in \dotdebuginfo{} \\
+\DWFORMstrp&offset in \dotdebugstr{} \\
+\DWOPcallref&offset in \dotdebuginfo{} \\
\end{tabular}
\end{center}
32\dash bit DWARF format, this field is a 32\dash bit unsigned integer;
in the 64\dash bit DWARF format, it is a 64\dash bit unsigned integer.
+\needlines{4}
+\item In the body of the \dotdebugstroffsets{} and \dotdebugstroffsetsdwo{}
+sections, the size of entries in the body depend on the DWARF
+format as follows: in the 32-bit DWARF format, entries are 32-bit
+unsigned integer values; in the 64-bit DWARF format, they are
+64-bit unsigned integers.
+
+\item In the body of the \dotdebugaddr{}, \dotdebugloc{} and \dotdebugranges{}
+sections, the contents of the address size fields depends on the
+DWARF format as follows: in the 32-bit DWARF format, these fields
+contain 4; in the 64-bit DWARF format these fields contain 8.
\end{enumerate}
compilation unit header
(see Section \refersec{datarep:compilationunitheader})
followed by a
-single \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} or
-\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} debugging
+single \DWTAGcompileunit{} or
+\DWTAGpartialunit{} debugging
information entry, together with its children.
-For each type defined in a compilation unit, a contribution may
-be made to the \dotdebugtypes{}
+For each type defined in a compilation unit, a separate
+contribution may also be made to the
+\dotdebuginfo{}
section of the object file. Each
such contribution consists of a
\addtoindex{type unit} header
(see Section \refersec{datarep:typeunitheader})
-followed by a \livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} entry, together with
+followed by a \DWTAGtypeunit{} entry, together with
its children.
Each debugging information entry begins with a code that
The appropriate entry in the
\addtoindex{abbreviations table} guides the
interpretation of the information contained directly in the
-\dotdebuginfo{} or
-\dotdebugtypes{} section.
+\dotdebuginfo{} section.
\needlines{4}
Multiple debugging information entries may share the same
abbreviation table entry. Each compilation unit is associated
with a particular abbreviation table, but multiple compilation
units may share the same table.
+
\subsection{Unit Headers}
\label{datarep:unitheaders}
+Unit headers contain a field, \texttt{unit\_type}, whose value indicates the kind of
+compilation unit that follows. The encodings for the unit type
+enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
+
+\needlines{6}
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l}
+ \caption{Unit header unit kind encodings}
+ \label{tab:unitheaderunitkindencodings}
+ \addtoindexx{Unit header unit kind encodings} \\
+ \hline \bfseries Unit header unit kind encodings&\bfseries Value \\ \hline
+\endfirsthead
+ \bfseries Unit header unit kind encodings&\bfseries Value \\ \hline
+\endhead
+ \hline \emph{Continued on next page}
+\endfoot
+ \hline
+\endlastfoot
+\DWUTcompileTARG &0x01 \\
+\DWUTtypeTARG &0x02 \\
+\DWUTpartialTARG &0x03 \\ \hline
+\end{longtable}
+\end{centering}
\subsubsection{Compilation Unit Header}
\label{datarep:compilationunitheader}
integer that gives the actual length
(see Section \refersec{datarep:32bitand64bitdwarfformats}).
-\needlines{4}
\item \texttt{version} (\addtoindex{uhalf}) \\
A 2\dash byte unsigned integer representing the version of the
DWARF information for the compilation unit \addtoindexx{version number!compilation unit}
(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
-The value in this field is 4.
+The value in this field is \versiondotdebuginfo.
+\needlines{4}
+\item \texttt{unit\_type} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer identifying this unit as a compilation unit.
+The value of this field is
+\DWUTcompile{} for a {normal compilation} unit or
+\DWUTpartial{} for a {partial compilation} unit
+(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+
+\textit{This field is new in \DWARFVersionV.}
+
+\needlines{4}
\item \addttindex{debug\_abbrev\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
A
\addtoindexx{section offset!in .debug\_info header}
The header for the series of debugging information entries
contributing to the description of a type that has been
placed in its own \addtoindex{type unit}, within the
-\dotdebugtypes{} section,
+\dotdebuginfo{} section,
consists of the following information:
\begin{enumerate}[1. ]
A 4\dash byte or 12\dash byte unsigned integer
\addtoindexx{initial length}
representing the length
-of the \dotdebugtypes{} contribution for that type unit,
+of the \dotdebuginfo{} contribution for that type unit,
not including the length field itself. In the \thirtytwobitdwarfformat,
this is a 4\dash byte unsigned integer (which must be
less than \xfffffffzero); in the \sixtyfourbitdwarfformat, this
DWARF information for the
type unit\addtoindexx{version number!type unit}
(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
-The value in this field is 4.
+The value in this field is \versiondotdebuginfo.
+
+\item \texttt{unit\_type} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer identifying this unit as a type unit.
+The value of this field is \DWUTtype{} for a type unit
+(see Section \refersec{chap:separatetypeunitentries}).
+
+\textit{This field is new in \DWARFVersionV.}
+\needlines{4}
\item \addttindex{debug\_abbrev\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
A
\addtoindexx{section offset!in .debug\_types header}
in the \sixtyfourbitdwarfformat, this is an 8\dash byte unsigned length
(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\needlines{4}
\item \texttt{address\_size} (ubyte) \\
A 1\dash byte unsigned integer representing the size
\addtoindexx{size of an address}
unit.
\textit{An attribute that refers (using
-\livelink{chap:DWFORMrefsig8}{DW\_FORM\_ref\_sig8}) to
+\DWFORMrefsigeight{}) to
the primary type contained in this
\addtoindex{type unit} uses this value.}
\subsection{Debugging Information Entry}
\label{datarep:debugginginformationentry}
-Each debugging information entry begins with an unsigned LEB128
+Each debugging information entry begins with an
+unsigned LEB128\addtoindexx{LEB128!unsigned}
number containing the abbreviation code for the entry. This
code represents an entry within the abbreviations table
associated with the compilation unit containing this entry. The
of a series of abbreviation declarations. Each declaration
specifies the tag and attributes for a particular form of
debugging information entry. Each declaration begins with
-an unsigned LEB128 number representing the abbreviation
+an unsigned LEB128\addtoindexx{LEB128!unsigned}
+number representing the abbreviation
code itself. It is this code that appears at the beginning
of a debugging information entry in the
-\dotdebuginfo{} or
-\dotdebugtypes{}
+\dotdebuginfo{}
section. As described above, the abbreviation
code 0 is reserved for null debugging information entries. The
-abbreviation code is followed by another unsigned LEB128
+abbreviation code is followed by another unsigned LEB128\addtoindexx{LEB128!unsigned}
number that encodes the entry\textquoteright s tag. The encodings for the
tag names are given in
Table \refersec{tab:tagencodings}.
\endhead
\hline \emph{Continued on next page}
\endfoot
- \hline
+ \hline \ddag\ \textit{New in DWARF Version 5}
\endlastfoot
-\livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type} &0x01 \\
-\livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}&0x02 \\
-\livelink{chap:DWTAGentrypoint}{DW\_TAG\_entry\_point}&0x03 \\
-\livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type}&0x04 \\
-\livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}&0x05 \\
-\livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration}&0x08 \\
-\livelink{chap:DWTAGlabel}{DW\_TAG\_label}&0x0a \\
-\livelink{chap:DWTAGlexicalblock}{DW\_TAG\_lexical\_block}&0x0b \\
-\livelink{chap:DWTAGmember}{DW\_TAG\_member}&0x0d \\
-\livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}&0x0f \\
-\livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type}&0x10 \\
-\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}&0x11 \\
-\livelink{chap:DWTAGstringtype}{DW\_TAG\_string\_type}&0x12 \\
-\livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}&0x13 \\
-\livelink{chap:DWTAGsubroutinetype}{DW\_TAG\_subroutine\_type}&0x15 \\
-\livelink{chap:DWTAGtypedef}{DW\_TAG\_typedef}&0x16 \\
-\livelink{chap:DWTAGuniontype}{DW\_TAG\_union\_type}&0x17 \\
-\livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters}&0x18 \\
-\livelink{chap:DWTAGvariant}{DW\_TAG\_variant}&0x19 \\
-\livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block}&0x1a \\
-\livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion}&0x1b \\
-\livelink{chap:DWTAGinheritance}{DW\_TAG\_inheritance}&0x1c \\
-\livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}&0x1d \\
-\livelink{chap:DWTAGmodule}{DW\_TAG\_module}&0x1e \\
-\livelink{chap:DWTAGptrtomembertype}{DW\_TAG\_ptr\_to\_member\_type}&0x1f \\
-\livelink{chap:DWTAGsettype}{DW\_TAG\_set\_type}&0x20 \\
-\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}&0x21 \\
-\livelink{chap:DWTAGwithstmt}{DW\_TAG\_with\_stmt}&0x22 \\
-\livelink{chap:DWTAGaccessdeclaration}{DW\_TAG\_access\_declaration}&0x23 \\
-\livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}&0x24 \\
-\livelink{chap:DWTAGcatchblock}{DW\_TAG\_catch\_block}&0x25 \\
-\livelink{chap:DWTAGconsttype}{DW\_TAG\_const\_type}&0x26 \\
-\livelink{chap:DWTAGconstant}{DW\_TAG\_constant}&0x27 \\
-\livelink{chap:DWTAGenumerator}{DW\_TAG\_enumerator}&0x28 \\
-\livelink{chap:DWTAGfiletype}{DW\_TAG\_file\_type}&0x29 \\
-\livelink{chap:DWTAGfriend}{DW\_TAG\_friend}&0x2a \\
-\livelink{chap:DWTAGnamelist}{DW\_TAG\_namelist}&0x2b \\
-\livelink{chap:DWTAGnamelistitem}{DW\_TAG\_namelist\_item}&0x2c \\
-\livelink{chap:DWTAGpackedtype}{DW\_TAG\_packed\_type}&0x2d \\
-\livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}&0x2e \\
-\livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}&0x2f \\
-\livelink{chap:DWTAGtemplatevalueparameter}{DW\_TAG\_template\_value\_parameter}&0x30 \\
-\livelink{chap:DWTAGthrowntype}{DW\_TAG\_thrown\_type}&0x31 \\
-\livelink{chap:DWTAGtryblock}{DW\_TAG\_try\_block}&0x32 \\
-\livelink{chap:DWTAGvariantpart}{DW\_TAG\_variant\_part}&0x33 \\
-\livelink{chap:DWTAGvariable}{DW\_TAG\_variable}&0x34 \\
-\livelink{chap:DWTAGvolatiletype}{DW\_TAG\_volatile\_type}&0x35 \\
-\livelink{chap:DWTAGdwarfprocedure}{DW\_TAG\_dwarf\_procedure}&0x36 \\
-\livelink{chap:DWTAGrestricttype}{DW\_TAG\_restrict\_type}&0x37 \\
-\livelink{chap:DWTAGinterfacetype}{DW\_TAG\_interface\_type}&0x38 \\
-\livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}&0x39 \\
-\livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module}&0x3a \\
-\livelink{chap:DWTAGunspecifiedtype}{DW\_TAG\_unspecified\_type}&0x3b \\
-\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit}&0x3c \\
-\livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}&0x3d \\
-\livelink{chap:DWTAGcondition}{DW\_TAG\_condition}&\xiiif \\
-\livelink{chap:DWTAGsharedtype}{DW\_TAG\_shared\_type}&0x40 \\
-\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} &0x41 \\
-\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type} &0x42 \\
-\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias} &0x43 \\
-\livelink{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type} &0x44 \\
-\livelink{chap:DWTAGgenericsubrange}{DW\_TAG\_generic\_subrange} &0x45 \\
-\livelink{chap:DWXXXlohiuser}{DW\_TAG\_lo\_user}&0x4080 \\
-\livelink{chap:DWXXXlohiuser}{DW\_TAG\_hi\_user}&\xffff \\
+\DWTAGarraytype{} &0x01 \\
+\DWTAGclasstype&0x02 \\
+\DWTAGentrypoint&0x03 \\
+\DWTAGenumerationtype&0x04 \\
+\DWTAGformalparameter&0x05 \\
+\DWTAGimporteddeclaration&0x08 \\
+\DWTAGlabel&0x0a \\
+\DWTAGlexicalblock&0x0b \\
+\DWTAGmember&0x0d \\
+\DWTAGpointertype&0x0f \\
+\DWTAGreferencetype&0x10 \\
+\DWTAGcompileunit&0x11 \\
+\DWTAGstringtype&0x12 \\
+\DWTAGstructuretype&0x13 \\
+\DWTAGsubroutinetype&0x15 \\
+\DWTAGtypedef&0x16 \\
+\DWTAGuniontype&0x17 \\
+\DWTAGunspecifiedparameters&0x18 \\
+\DWTAGvariant&0x19 \\
+\DWTAGcommonblock&0x1a \\
+\DWTAGcommoninclusion&0x1b \\
+\DWTAGinheritance&0x1c \\
+\DWTAGinlinedsubroutine&0x1d \\
+\DWTAGmodule&0x1e \\
+\DWTAGptrtomembertype&0x1f \\
+\DWTAGsettype&0x20 \\
+\DWTAGsubrangetype&0x21 \\
+\DWTAGwithstmt&0x22 \\
+\DWTAGaccessdeclaration&0x23 \\
+\DWTAGbasetype&0x24 \\
+\DWTAGcatchblock&0x25 \\
+\DWTAGconsttype&0x26 \\
+\DWTAGconstant&0x27 \\
+\DWTAGenumerator&0x28 \\
+\DWTAGfiletype&0x29 \\
+\DWTAGfriend&0x2a \\
+\DWTAGnamelist&0x2b \\
+\DWTAGnamelistitem&0x2c \\
+\DWTAGpackedtype&0x2d \\
+\DWTAGsubprogram&0x2e \\
+\DWTAGtemplatetypeparameter&0x2f \\
+\DWTAGtemplatevalueparameter&0x30 \\
+\DWTAGthrowntype&0x31 \\
+\DWTAGtryblock&0x32 \\
+\DWTAGvariantpart&0x33 \\
+\DWTAGvariable&0x34 \\
+\DWTAGvolatiletype&0x35 \\
+\DWTAGdwarfprocedure&0x36 \\
+\DWTAGrestricttype&0x37 \\
+\DWTAGinterfacetype&0x38 \\
+\DWTAGnamespace&0x39 \\
+\DWTAGimportedmodule&0x3a \\
+\DWTAGunspecifiedtype&0x3b \\
+\DWTAGpartialunit&0x3c \\
+\DWTAGimportedunit&0x3d \\
+\DWTAGcondition&\xiiif \\
+\DWTAGsharedtype&0x40 \\
+\DWTAGtypeunit & 0x41 \\
+\DWTAGrvaluereferencetype & 0x42 \\
+\DWTAGtemplatealias & 0x43 \\
+\DWTAGcoarraytype~\ddag & 0x44 \\
+\DWTAGgenericsubrange~\ddag & 0x45 \\
+\DWTAGdynamictype~\ddag & 0x46 \\
+\DWTAGatomictype~\ddag & 0x47 \\
+\DWTAGcallsite~\ddag & 0x48 \\
+\DWTAGcallsiteparameter~\ddag & 0x49 \\
+\DWTAGlouser&0x4080 \\
+\DWTAGhiuser&\xffff \\
\end{longtable}
\end{centering}
Following the tag encoding is a 1\dash byte value that determines
whether a debugging information entry using this abbreviation
has child entries or not. If the value is
-\livetarg{chap:DWCHILDRENyes}{DW\_CHILDREN\_yes},
+\DWCHILDRENyesTARG,
the next physically succeeding entry of any debugging
information entry using this abbreviation is the first
child of that entry. If the 1\dash byte value following the
abbreviation\textquoteright s tag encoding is
-\livetarg{chap:DWCHILDRENno}{DW\_CHILDREN\_no}, the next
+\DWCHILDRENnoTARG, the next
physically succeeding entry of any debugging information entry
using this abbreviation is a sibling of that entry. (Either
the first child or sibling entries may be null entries). The
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWCHILDRENno}{DW\_CHILDREN\_no}&0x00 \\
-\livelink{chap:DWCHILDRENyes}{DW\_CHILDREN\_yes}&0x01 \\ \hline
+\DWCHILDRENno&0x00 \\
+\DWCHILDRENyes&0x01 \\ \hline
\end{longtable}
\end{centering}
\needlines{4}
Finally, the child encoding is followed by a series of
attribute specifications. Each attribute specification
-consists of two parts. The first part is an unsigned LEB128
-number representing the attribute\textquoteright s name. The second part
-is an unsigned LEB128 number representing the attribute\textquoteright s
-form. The series of attribute specifications ends with an
+consists of two parts. The first part is an
+unsigned LEB128\addtoindexx{LEB128!unsigned}
+number representing the attribute\textquoteright s name.
+The second part is an
+unsigned LEB128\addtoindexx{LEB128!unsigned}
+number representing the attribute\textquoteright s form.
+The series of attribute specifications ends with an
entry containing 0 for the name and 0 for the form.
The attribute form
-\livetarg{chap:DWFORMindirect}{DW\_FORM\_indirect} is a special case. For
+\DWFORMindirectTARG{} is a special case. For
attributes with this form, the attribute value itself in the
-\dotdebuginfo{} or
-\dotdebugtypes{}
+\dotdebuginfo{}
section begins with an unsigned
LEB128 number that represents its form. This allows producers
to choose forms for particular attributes
and which are given a common interpretation according to the
attribute in which the form is used.
-Form \livetarg{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}
+Form \DWFORMsecoffsetTARG{}
is a member of more
\addtoindexx{rangelistptr class}
than
Table \refersec{tab:attributeencodings}
determines the class of the form.
-\textit{In DWARF V3 the forms \livelink{chap:DWFORMdata4}{DW\_FORM\_data4} and
-\livelink{chap:DWFORMdata8}{DW\_FORM\_data8} were
+\textit{In DWARF V3 the forms \DWFORMdatafour{} and
+\DWFORMdataeight{} were
\addtoindexx{lineptr class}
members
\addtoindexx{rangelistptr class}
\livelink{chap:classmacptr}{macptr} or
\livelink{chap:classrangelistptr}{rangelistptr}, depending on context. In
DWARF V4
-\livelink{chap:DWFORMdata4}{DW\_FORM\_data4} and
-\livelink{chap:DWFORMdata8}{DW\_FORM\_data8} are members of class
+\DWFORMdatafour{} and
+\DWFORMdataeight{} are members of class
constant in all cases.
The new
-\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset} replaces
+\DWFORMsecoffset{} replaces
their usage for the other classes.}
+\needlines{4}
Each possible form belongs to one or more of the following classes:
\begin{itemize}
\item \livelinki{chap:classaddress}{address}{address class} \\
\livetarg{datarep:classaddress}{}
-Represented as an object of appropriate size to hold an
+Represented as either:
+\begin{itemize}
+\item An object of appropriate size to hold an
address on the target machine
-(\livetarg{chap:DWFORMaddr}{DW\_FORM\_addr}).
-The size is
-encoded in the compilation unit header
+(\DWFORMaddrTARG).
+The size is encoded in the compilation unit header
(see Section \refersec{datarep:compilationunitheader}).
This address is relocatable in a relocatable object file and
is relocated in an executable file or shared object.
+\item An indirect index into a table of addresses (as
+described in the previous bullet) in the
+\dotdebugaddr{} section (\DWFORMaddrxTARG).
+The representation of a \DWFORMaddrxNAME{} value is an unsigned
+\addtoindex{LEB128} value, which is interpreted as a zero-based
+index into an array of addresses in the \dotdebugaddr{} section.
+The index is relative to the value of the \DWATaddrbase{} attribute
+of the associated compilation unit.
+\end{itemize}
+
+\needlines{5}
+\item \livelink{chap:classaddrptr}{addrptr} \\
+\livetarg{datarep:classaddrptr}{}
+This is an offset into the \dotdebugaddr{} section (\DWFORMsecoffset). It
+consists of an offset from the beginning of the \dotdebugaddr{} section to the
+beginning of the list of machine addresses information for the
+referencing entity. It is relocatable in
+a relocatable object file, and relocated in an executable or
+shared object. In the \thirtytwobitdwarfformat, this offset
+is a 4\dash byte unsigned value; in the 64\dash bit DWARF
+format, it is an 8\dash byte unsigned value (see Section
+\refersec{datarep:32bitand64bitdwarfformats}).
+
+\textit{This class is new in \DWARFVersionV.}
+
\needlines{4}
\item \livelink{chap:classblock}{block} \\
\livetarg{datarep:classblock}{}
\begin{myindentpara}{1cm}
A 1\dash byte length followed by 0 to 255 contiguous information
-bytes (\livetarg{chap:DWFORMblock1}{DW\_FORM\_block1}).
+bytes (\DWFORMblockoneTARG).
\end{myindentpara}
\begin{myindentpara}{1cm}
A 2\dash byte length followed by 0 to 65,535 contiguous information
-bytes (\livetarg{chap:DWFORMblock2}{DW\_FORM\_block2}).
+bytes (\DWFORMblocktwoTARG).
\end{myindentpara}
\begin{myindentpara}{1cm}
A 4\dash byte length followed by 0 to 4,294,967,295 contiguous
-information bytes (\livetarg{chap:DWFORMblock4}{DW\_FORM\_block4}).
+information bytes (\DWFORMblockfourTARG).
\end{myindentpara}
\begin{myindentpara}{1cm}
-An unsigned LEB128 length followed by the number of bytes
-specified by the length (\livetarg{chap:DWFORMblock}{DW\_FORM\_block}).
+An unsigned LEB128\addtoindexx{LEB128!unsigned}
+length followed by the number of bytes
+specified by the length (\DWFORMblockTARG).
\end{myindentpara}
In all forms, the length is the number of information bytes
There are six forms of constants. There are fixed length
constant data forms for one, two, four and eight byte values
(respectively,
-\livetarg{chap:DWFORMdata1}{DW\_FORM\_data1},
-\livetarg{chap:DWFORMdata2}{DW\_FORM\_data2},
-\livetarg{chap:DWFORMdata4}{DW\_FORM\_data4},
-and \livetarg{chap:DWFORMdata8}{DW\_FORM\_data8}).
+\DWFORMdataoneTARG,
+\DWFORMdatatwoTARG,
+\DWFORMdatafourTARG,
+and \DWFORMdataeightTARG).
There are also variable length constant
data forms encoded using LEB128 numbers (see below). Both
-signed (\livetarg{chap:DWFORMsdata}{DW\_FORM\_sdata}) and unsigned
-(\livetarg{chap:DWFORMudata}{DW\_FORM\_udata}) variable
+signed (\DWFORMsdataTARG) and unsigned
+(\DWFORMudataTARG) variable
length constants are available
-The data in \livelink{chap:DWFORMdata1}{DW\_FORM\_data1},
-\livelink{chap:DWFORMdata2}{DW\_FORM\_data2},
-\livelink{chap:DWFORMdata4}{DW\_FORM\_data4} and
-\livelink{chap:DWFORMdata8}{DW\_FORM\_data8}
+\needlines{4}
+The data in \DWFORMdataone,
+\DWFORMdatatwo,
+\DWFORMdatafour{} and
+\DWFORMdataeight{}
can be anything. Depending on context, it may
be a signed integer, an unsigned integer, a floating\dash point
constant, or anything else. A consumer must use context to
machine data (such as an integer or floating point constant)
will be in target machine byte\dash order.
-\textit{If one of the \livetarg{chap:DWFORMdata}{DW\_FORM\_data}\textless n\textgreater
+\textit{If one of the \DWFORMdataTARG\textless n\textgreater
forms is used to represent a
signed or unsigned integer, it can be hard for a consumer
to discover the context necessary to determine which
interpretation is intended. Producers are therefore strongly
-encouraged to use \livelink{chap:DWFORMsdata}{DW\_FORM\_sdata} or
-\livelink{chap:DWFORMudata}{DW\_FORM\_udata} for signed and
+encouraged to use \DWFORMsdata{} or
+\DWFORMudata{} for signed and
unsigned integers respectively, rather than
-\livelink{chap:DWFORMdata}{DW\_FORM\_data}\textless n\textgreater.}
+\DWFORMdata\textless n\textgreater.}
\needlines{4}
\item \livelinki{chap:classexprloc}{exprloc}{exprloc class} \\
\livetarg{datarep:classexprloc}{}
-This is an unsigned LEB128 length followed by the
+This is an unsigned LEB128\addtoindexx{LEB128!unsigned} length followed by the
number of information bytes specified by the length
-(\livetarg{chap:DWFORMexprloc}{DW\_FORM\_exprloc}).
+(\DWFORMexprlocTARG).
The information bytes contain a DWARF expression
(see Section \refersec{chap:dwarfexpressions})
or location description
\livetarg{datarep:classflag}{}
A flag \addtoindexx{flag class}
is represented explicitly as a single byte of data
-(\livetarg{chap:DWFORMflag}{DW\_FORM\_flag}) or
-implicitly (\livetarg{chap:DWFORMflagpresent}{DW\_FORM\_flag\_present}).
+(\DWFORMflagTARG) or
+implicitly (\DWFORMflagpresentTARG).
In the
first case, if the \nolink{flag} has value zero, it indicates the
absence of the attribute; if the \nolink{flag} has a non\dash zero value,
This is an offset into
\addtoindexx{section offset!in class lineptr value}
the
-\dotdebugline{} section
-(\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}).
+\dotdebugline{} or \dotdebuglinedwo{} section
+(\DWFORMsecoffset).
It consists of an offset from the beginning of the
\dotdebugline{}
section to the first byte of
This is an offset into the
\dotdebugloc{}
section
-(\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}).
+(\DWFORMsecoffset).
It consists of an offset from the
\addtoindexx{section offset!in class loclistptr value}
beginning of the
This is an
\addtoindexx{section offset!in class macptr value}
offset into the
-\dotdebugmacinfo{} section
-(\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}).
-It consists of an offset from the
-beginning of the \dotdebugmacinfo{}
-section to the first byte of
-the data making up the macro information list for the compilation
-unit.
+\dotdebugmacro{} or \dotdebugmacrodwo{} section
+(\DWFORMsecoffset).
+It consists of an offset from the beginning of the
+\dotdebugmacro{} or \dotdebugmacrodwo{}
+section to the the header making up the
+macro information list for the compilation unit.
It is relocatable in a relocatable object file, and
relocated in an executable or shared object. In the
\thirtytwobitdwarfformat, this offset is a 4\dash byte unsigned value;
This is an
\addtoindexx{section offset!in class rangelistptr value}
offset into the \dotdebugranges{} section
-(\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset}).
+(\DWFORMsecoffset).
It consists of an
offset from the beginning of the
\dotdebugranges{} section
header for the compilation unit containing the reference. There
are five forms for this type of reference. There are fixed
length forms for one, two, four and eight byte offsets
-(respectively, \livetarg{chap:DWFORMref1}{DW\_FORM\_ref1},
-\livetarg{chap:DWFORMref2}{DW\_FORM\_ref2},
-\livetarg{chap:DWFORMref4}{DW\_FORM\_ref4},
-and \livetarg{chap:DWFORMref8}{DW\_FORM\_ref8}).
+(respectively,
+\DWFORMrefnMARK
+\DWFORMrefoneTARG,
+\DWFORMreftwoTARG,
+\DWFORMreffourTARG,
+and \DWFORMrefeightTARG).
There is also an unsigned variable
-length offset encoded form that uses unsigned LEB128 numbers
-(\livetarg{chap:DWFORMrefudata}{DW\_FORM\_ref\_udata}).
+length offset encoded form that uses
+unsigned LEB128\addtoindexx{LEB128!unsigned} numbers
+(\DWFORMrefudataTARG).
Because this type of reference is within
the containing compilation unit no relocation of the value
is required.
it may refer to an entry in a different compilation unit
from the unit containing the reference, and may refer to an
entry in a different shared object. This type of reference
-(\livetarg{chap:DWFORMrefaddr}{DW\_FORM\_ref\_addr})
+(\DWFORMrefaddrTARG)
is an offset from the beginning of the
\dotdebuginfo{}
section of the target executable or shared object;
\textit{A debugging information entry that may be referenced by
another compilation unit using
-\livelink{chap:DWFORMrefaddr}{DW\_FORM\_ref\_addr} must have a
+\DWFORMrefaddr{} must have a
global symbolic name.}
\textit{For a reference from one executable or shared object to
The third type of reference can identify any debugging
information type entry that has been placed in its own
\addtoindex{type unit}. This type of
-reference (\livetarg{chap:DWFORMrefsig8}{DW\_FORM\_ref\_sig8}) is the
+reference (\DWFORMrefsigeightTARG) is the
\addtoindexx{type signature}
64\dash bit type signature
(see Section \refersec{datarep:typesignaturecomputation})
A string is a sequence of contiguous non\dash null bytes followed by
one null byte.
\addtoindexx{string class}
-A string may be represented immediately in the
-debugging information entry itself
-(\livetarg{chap:DWFORMstring}{DW\_FORM\_string}), or may
-be represented as an
+A string may be represented:
+\begin{itemize}
+\item immediately in the debugging information entry itself
+(\DWFORMstringTARG),
+\item as an
\addtoindexx{section offset!in class string value}
offset into a string table contained in
the \dotdebugstr{} section of the object file
-(\livetarg{chap:DWFORMstrp}{DW\_FORM\_strp}). In
-the \thirtytwobitdwarfformat, the representation of a
-\livelink{chap:DWFORMstrp}{DW\_FORM\_strp}
+(\DWFORMstrpTARG).
+In the \thirtytwobitdwarfformat, the representation of a
+\DWFORMstrpNAME{}
value is a 4\dash byte unsigned offset; in the \sixtyfourbitdwarfformat,
it is an 8\dash byte unsigned offset
(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\item as an indirect offset into the string table using an
+index into a table of offsets contained in the
+\dotdebugstroffsets{} section of the object file (\DWFORMstrxTARG).
+The representation of a \DWFORMstrxNAME{} value is an unsigned
+\addtoindex{LEB128} value, which is interpreted as a zero-based
+index into an array of offsets in the \dotdebugstroffsets{} section.
+The offset entries in the \dotdebugstroffsets{} section have the
+same representation as \DWFORMstrp{} values.
+\end{itemize}
+Any combination of these three forms may be used within a single compilation.
-If the \livelink{chap:DWATuseUTF8}{DW\_AT\_use\_UTF8}
+If the \DWATuseUTFeight{}
\addtoindexx{use UTF8 attribute}\addtoindexx{UTF-8} attribute is specified for the
-compilation unit entry, string values are encoded using the
+compilation, partial, skeleton or type unit entry, string values are encoded using the
UTF\dash 8 (\addtoindex{Unicode} Transformation Format\dash 8) from the Universal
Character Set standard (ISO/IEC 10646\dash 1:1993). Otherwise,
the string representation is unspecified.
of strings; for compatibility, this version also does
not. However, the UTF\dash 8 representation is strongly recommended.}
+\item \livelinki{chap:classstroffsetsptr}{stroffsetsptr}{stroffsetsptr class} \\
+\livetarg{datarep:classstroffsetsptr}{}
+This is an offset into the \dotdebugstroffsets{} section
+(\DWFORMsecoffset). It consists of an offset from the beginning of the
+\dotdebugstroffsets{} section to the
+beginning of the string offsets information for the
+referencing entity. It is relocatable in
+a relocatable object file, and relocated in an executable or
+shared object. In the \thirtytwobitdwarfformat, this offset
+is a 4\dash byte unsigned value; in the 64\dash bit DWARF
+format, it is an 8\dash byte unsigned value (see Section
+\refersec{datarep:32bitand64bitdwarfformats}).
+
+\textit{This class is new in \DWARFVersionV.}
+
\end{itemize}
In no case does an attribute use
\endfoot
\hline \ddag\ \textit{New in DWARF Version 5}
\endlastfoot
-\livelink{chap:DWATsibling}{DW\_AT\_sibling}&0x01&\livelink{chap:classreference}{reference}
- \addtoindexx{sibling attribute!encoding} \\
-\livelink{chap:DWATlocation}{DW\_AT\_location}&0x02&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr}\addtoindexx{location attribute!encoding} \\
-\livelink{chap:DWATname}{DW\_AT\_name}&0x03&\livelink{chap:classstring}{string}
- \addtoindexx{name attribute!encoding} \\
-\livelink{chap:DWATordering}{DW\_AT\_ordering}&0x09&\livelink{chap:classconstant}{constant}
- \addtoindexx{ordering attribute!encoding} \\
-\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}&0x0b&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classreference}{reference} \addtoindexx{byte size attribute!encoding} \\
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset}&0x0c&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference} \addtoindexx{bit offset attribute!encoding} \\
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}&0x0d&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference} \addtoindexx{bit size attribute!encoding} \\
-\livelink{chap:DWATstmtlist}{DW\_AT\_stmt\_list}&0x10&\livelink{chap:classlineptr}{lineptr}
- \addtoindexx{statement list attribute!encoding} \\
-\livelink{chap:DWATlowpc}{DW\_AT\_low\_pc}&0x11&\livelink{chap:classaddress}{address}
- \addtoindexx{low PC attribute!encoding} \\
-\livelink{chap:DWAThighpc}{DW\_AT\_high\_pc}&0x12&\livelink{chap:classaddress}{address}, \livelink{chap:classconstant}{constant}
- \addtoindexx{high PC attribute!encoding} \\
-\livelink{chap:DWATlanguage}{DW\_AT\_language}&0x13&\livelink{chap:classconstant}{constant}
- \addtoindexx{language attribute!encoding} \\
-\livelink{chap:DWATdiscr}{DW\_AT\_discr}&0x15&\livelink{chap:classreference}{reference}
- \addtoindexx{discriminant attribute!encoding} \\
-\livelink{chap:DWATdiscrvalue}{DW\_AT\_discr\_value}&0x16&\livelink{chap:classconstant}{constant}
- \addtoindexx{discriminant value attribute!encoding} \\
-\livelink{chap:DWATvisibility}{DW\_AT\_visibility}&0x17&\livelink{chap:classconstant}{constant}
- \addtoindexx{visibility attribute!encoding} \\
-\livelink{chap:DWATimport}{DW\_AT\_import}&0x18&\livelink{chap:classreference}{reference}
- \addtoindexx{import attribute!encoding} \\
-\livelink{chap:DWATstringlength}{DW\_AT\_string\_length}&0x19&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{string length attribute!encoding} \\
-\livelink{chap:DWATcommonreference}{DW\_AT\_common\_reference}&0x1a&\livelink{chap:classreference}{reference}
- \addtoindexx{common reference attribute!encoding} \\
-\livelink{chap:DWATcompdir}{DW\_AT\_comp\_dir}&0x1b&\livelink{chap:classstring}{string}
- \addtoindexx{compilation directory attribute!encoding} \\
-\livelink{chap:DWATconstvalue}{DW\_AT\_const\_value}&0x1c&\livelink{chap:classblock}{block}, \livelink{chap:classconstant}{constant}, \livelink{chap:classstring}{string}
- \addtoindexx{constant value attribute!encoding} \\
-\livelink{chap:DWATcontainingtype}{DW\_AT\_containing\_type}&0x1d&\livelink{chap:classreference}{reference}
- \addtoindexx{containing type attribute!encoding} \\
-\livelink{chap:DWATdefaultvalue}{DW\_AT\_default\_value}&0x1e&\livelink{chap:classreference}{reference}
- \addtoindexx{default value attribute!encoding} \\
-\livelink{chap:DWATinline}{DW\_AT\_inline}&0x20&\livelink{chap:classconstant}{constant}
- \addtoindexx{inline attribute!encoding} \\
-\livelink{chap:DWATisoptional}{DW\_AT\_is\_optional}&0x21&\livelink{chap:classflag}{flag}
- \addtoindexx{is optional attribute!encoding} \\
-\livelink{chap:DWATlowerbound}{DW\_AT\_lower\_bound}&0x22&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference} \addtoindexx{lower bound attribute!encoding} \\
-\livelink{chap:DWATproducer}{DW\_AT\_producer}&0x25&\livelink{chap:classstring}{string} \addtoindexx{producer attribute!encoding} \\
-\livelink{chap:DWATprototyped}{DW\_AT\_prototyped}&0x27&\livelink{chap:classflag}{flag}
- \addtoindexx{prototyped attribute!encoding} \\
-\livelink{chap:DWATreturnaddr}{DW\_AT\_return\_addr}&0x2a&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{return address attribute!encoding} \\
-% FIXME: lower case , not Constant
-\livelink{chap:DWATstartscope}{DW\_AT\_start\_scope}&0x2c&\livelink{chap:classconstant}{constant},
- \livelink{chap:classrangelistptr}{rangelistptr} \addtoindexx{start scope attribute!encoding} \\
-\livelink{chap:DWATbitstride}{DW\_AT\_bit\_stride}&0x2e&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference} \addtoindexx{bit stride attribute!encoding} \\
-\livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound}&0x2f&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference} \addtoindexx{upper bound attribute!encoding} \\
-\livelink{chap:DWATabstractorigin}{DW\_AT\_abstract\_origin}&0x31&\livelink{chap:classreference}{reference}
- \addtoindexx{abstract origin attribute!encoding} \\
-\livelink{chap:DWATaccessibility}{DW\_AT\_accessibility}&0x32&\livelink{chap:classconstant}{constant}
- \addtoindexx{accessibility attribute!encoding} \\
-\livelink{chap:DWATaddressclass}{DW\_AT\_address\_class}&0x33&\livelink{chap:classconstant}{constant}
- \addtoindexx{address class attribute!encoding} \\
-\livelink{chap:DWATartificial}{DW\_AT\_artificial}&0x34&\livelink{chap:classflag}{flag}
- \addtoindexx{artificial attribute!encoding} \\
-\livelink{chap:DWATbasetypes}{DW\_AT\_base\_types}&0x35&\livelink{chap:classreference}{reference}
- \addtoindexx{base types attribute!encoding} \\
-\livelink{chap:DWATcallingconvention}{DW\_AT\_calling\_convention}&0x36&\livelink{chap:classconstant}{constant}
+\DWATsibling&0x01&\livelink{chap:classreference}{reference}
+ \addtoindexx{sibling attribute!encoding} \\
+\DWATlocation&0x02&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{location attribute!encoding} \\
+\DWATname&0x03&\livelink{chap:classstring}{string}
+ \addtoindexx{name attribute!encoding} \\
+\DWATordering&0x09&\livelink{chap:classconstant}{constant}
+ \addtoindexx{ordering attribute!encoding} \\
+\DWATbytesize&0x0b&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{byte size attribute!encoding} \\
+\DWATbitoffset&0x0c&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{bit offset attribute!encoding} \\
+\DWATbitsize&0x0d&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{bit size attribute!encoding} \\
+\DWATstmtlist&0x10&\livelink{chap:classlineptr}{lineptr}
+ \addtoindexx{statement list attribute!encoding} \\
+\DWATlowpc&0x11&\livelink{chap:classaddress}{address}
+ \addtoindexx{low PC attribute!encoding} \\
+\DWAThighpc&0x12&\livelink{chap:classaddress}{address},
+ \livelink{chap:classconstant}{constant}
+ \addtoindexx{high PC attribute!encoding} \\
+\DWATlanguage&0x13&\livelink{chap:classconstant}{constant}
+ \addtoindexx{language attribute!encoding} \\
+\DWATdiscr&0x15&\livelink{chap:classreference}{reference}
+ \addtoindexx{discriminant attribute!encoding} \\
+\DWATdiscrvalue&0x16&\livelink{chap:classconstant}{constant}
+ \addtoindexx{discriminant value attribute!encoding} \\
+\DWATvisibility&0x17&\livelink{chap:classconstant}{constant}
+ \addtoindexx{visibility attribute!encoding} \\
+\DWATimport&0x18&\livelink{chap:classreference}{reference}
+ \addtoindexx{import attribute!encoding} \\
+\DWATstringlength&0x19&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{string length attribute!encoding} \\
+\DWATcommonreference&0x1a&\livelink{chap:classreference}{reference}
+ \addtoindexx{common reference attribute!encoding} \\
+\DWATcompdir&0x1b&\livelink{chap:classstring}{string}
+ \addtoindexx{compilation directory attribute!encoding} \\
+\DWATconstvalue&0x1c&\livelink{chap:classblock}{block},
+ \livelink{chap:classconstant}{constant},
+ \livelink{chap:classstring}{string}
+ \addtoindexx{constant value attribute!encoding} \\
+\DWATcontainingtype&0x1d&\livelink{chap:classreference}{reference}
+ \addtoindexx{containing type attribute!encoding} \\
+\DWATdefaultvalue&0x1e&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classreference}{reference},
+ \livelink{chap:classflag}{flag}
+ \addtoindexx{default value attribute!encoding} \\
+\DWATinline&0x20&\livelink{chap:classconstant}{constant}
+ \addtoindexx{inline attribute!encoding} \\
+\DWATisoptional&0x21&\livelink{chap:classflag}{flag}
+ \addtoindexx{is optional attribute!encoding} \\
+\DWATlowerbound&0x22&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{lower bound attribute!encoding} \\
+\DWATproducer&0x25&\livelink{chap:classstring}{string}
+ \addtoindexx{producer attribute!encoding} \\
+\DWATprototyped&0x27&\livelink{chap:classflag}{flag}
+ \addtoindexx{prototyped attribute!encoding} \\
+\DWATreturnaddr&0x2a&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{return address attribute!encoding} \\
+\DWATstartscope&0x2c&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classrangelistptr}{rangelistptr}
+ \addtoindexx{start scope attribute!encoding} \\
+\DWATbitstride&0x2e&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{bit stride attribute!encoding} \\
+\DWATupperbound&0x2f&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{upper bound attribute!encoding} \\
+\DWATabstractorigin&0x31&\livelink{chap:classreference}{reference}
+ \addtoindexx{abstract origin attribute!encoding} \\
+\DWATaccessibility&0x32&\livelink{chap:classconstant}{constant}
+ \addtoindexx{accessibility attribute!encoding} \\
+\DWATaddressclass&0x33&\livelink{chap:classconstant}{constant}
+ \addtoindexx{address class attribute!encoding} \\
+\DWATartificial&0x34&\livelink{chap:classflag}{flag}
+ \addtoindexx{artificial attribute!encoding} \\
+\DWATbasetypes&0x35&\livelink{chap:classreference}{reference}
+ \addtoindexx{base types attribute!encoding} \\
+\DWATcallingconvention&0x36&\livelink{chap:classconstant}{constant}
\addtoindexx{calling convention attribute!encoding} \\
-\livelink{chap:DWATcount}{DW\_AT\_count}&0x37&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classreference}{reference}
- \addtoindexx{count attribute!encoding} \\
-\livelink{chap:DWATdatamemberlocation}{DW\_AT\_data\_member\_location}&0x38&\livelink{chap:classconstant}{constant},
- \livelink{chap:classexprloc}{exprloc}, \livelink{chap:classloclistptr}{loclistptr}
- \addtoindexx{data member attribute!encoding} \\
-\livelink{chap:DWATdeclcolumn}{DW\_AT\_decl\_column}&0x39&\livelink{chap:classconstant}{constant}
- \addtoindexx{declaration column attribute!encoding} \\
-\livelink{chap:DWATdeclfile}{DW\_AT\_decl\_file}&0x3a&\livelink{chap:classconstant}{constant}
- \addtoindexx{declaration file attribute!encoding} \\
-\livelink{chap:DWATdeclline}{DW\_AT\_decl\_line}&0x3b&\livelink{chap:classconstant}{constant}
- \addtoindexx{declaration line attribute!encoding} \\
-\livelink{chap:DWATdeclaration}{DW\_AT\_declaration}&0x3c&\livelink{chap:classflag}{flag}
- \addtoindexx{declaration attribute!encoding} \\
-\livelink{chap:DWATdiscrlist}{DW\_AT\_discr\_list}&0x3d&\livelink{chap:classblock}{block}
- \addtoindexx{discriminant list attribute!encoding} \\
-\livelink{chap:DWATencoding}{DW\_AT\_encoding}&0x3e&\livelink{chap:classconstant}{constant}
- \addtoindexx{encoding attribute!encoding} \\
-\livelink{chap:DWATexternal}{DW\_AT\_external}&\xiiif&\livelink{chap:classflag}{flag}
- \addtoindexx{external attribute!encoding} \\
-\livelink{chap:DWATframebase}{DW\_AT\_frame\_base}&0x40&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{frame base attribute!encoding} \\
-\livelink{chap:DWATfriend}{DW\_AT\_friend}&0x41&\livelink{chap:classreference}{reference}
- \addtoindexx{friend attribute!encoding} \\
-\livelink{chap:DWATidentifiercase}{DW\_AT\_identifier\_case}&0x42&\livelink{chap:classconstant}{constant}
- \addtoindexx{identifier case attribute!encoding} \\
-\livelink{chap:DWATmacroinfo}{DW\_AT\_macro\_info}&0x43&\livelink{chap:classmacptr}{macptr}
- \addtoindexx{macro information attribute!encoding} \\
-\livelink{chap:DWATnamelistitem}{DW\_AT\_namelist\_item}&0x44&\livelink{chap:classreference}{reference}
- \addtoindexx{name list item attribute!encoding} \\
-\livelink{chap:DWATpriority}{DW\_AT\_priority}&0x45&\livelink{chap:classreference}{reference}
- \addtoindexx{priority attribute!encoding} \\
-\livelink{chap:DWATsegment}{DW\_AT\_segment}&0x46&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{segment attribute!encoding} \\
-\livelink{chap:DWATspecification}{DW\_AT\_specification}&0x47&\livelink{chap:classreference}{reference}
+\DWATcount&0x37&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{count attribute!encoding} \\
+\DWATdatamemberlocation&0x38&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{data member attribute!encoding} \\
+\DWATdeclcolumn&0x39&\livelink{chap:classconstant}{constant}
+ \addtoindexx{declaration column attribute!encoding} \\
+\DWATdeclfile&0x3a&\livelink{chap:classconstant}{constant}
+ \addtoindexx{declaration file attribute!encoding} \\
+\DWATdeclline&0x3b&\livelink{chap:classconstant}{constant}
+ \addtoindexx{declaration line attribute!encoding} \\
+\DWATdeclaration&0x3c&\livelink{chap:classflag}{flag}
+ \addtoindexx{declaration attribute!encoding} \\
+\DWATdiscrlist&0x3d&\livelink{chap:classblock}{block}
+ \addtoindexx{discriminant list attribute!encoding} \\
+\DWATencoding&0x3e&\livelink{chap:classconstant}{constant}
+ \addtoindexx{encoding attribute!encoding} \\
+\DWATexternal&\xiiif&\livelink{chap:classflag}{flag}
+ \addtoindexx{external attribute!encoding} \\
+\DWATframebase&0x40&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{frame base attribute!encoding} \\
+\DWATfriend&0x41&\livelink{chap:classreference}{reference}
+ \addtoindexx{friend attribute!encoding} \\
+\DWATidentifiercase&0x42&\livelink{chap:classconstant}{constant}
+ \addtoindexx{identifier case attribute!encoding} \\
+\DWATmacroinfo\footnote{\raggedright Not used in \DWARFVersionV.
+ Reserved for compatibility and coexistence
+ with prior DWARF versions.}
+ &0x43&\livelink{chap:classmacptr}{macptr}
+ \addtoindexx{macro information attribute (legacy)!encoding} \\
+\DWATnamelistitem&0x44&\livelink{chap:classreference}{reference}
+ \addtoindexx{name list item attribute!encoding} \\
+\DWATpriority&0x45&\livelink{chap:classreference}{reference}
+ \addtoindexx{priority attribute!encoding} \\
+\DWATsegment&0x46&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{segment attribute!encoding} \\
+\DWATspecification&0x47&\livelink{chap:classreference}{reference}
\addtoindexx{specification attribute!encoding} \\
-\livelink{chap:DWATstaticlink}{DW\_AT\_static\_link}&0x48&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{static link attribute!encoding} \\
-\livelink{chap:DWATtype}{DW\_AT\_type}&0x49&\livelink{chap:classreference}{reference}
- \addtoindexx{type attribute!encoding} \\
-\livelink{chap:DWATuselocation}{DW\_AT\_use\_location}&0x4a&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{location list attribute!encoding} \\
-\livelink{chap:DWATvariableparameter}{DW\_AT\_variable\_parameter}&0x4b&\livelink{chap:classflag}{flag}
- \addtoindexx{variable parameter attribute!encoding} \\
-\livelink{chap:DWATvirtuality}{DW\_AT\_virtuality}&0x4c&\livelink{chap:classconstant}{constant}
- \addtoindexx{virtuality attribute!encoding} \\
-\livelink{chap:DWATvtableelemlocation}{DW\_AT\_vtable\_elem\_location}&0x4d&\livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classloclistptr}{loclistptr} \addtoindexx{vtable element location attribute!encoding} \\
-\livelink{chap:DWATallocated}{DW\_AT\_allocated}&0x4e&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classreference}{reference} \addtoindexx{allocated attribute!encoding} \\
-\livelink{chap:DWATassociated}{DW\_AT\_associated}&0x4f&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classreference}{reference} \addtoindexx{associated attribute!encoding} \\
-\livelink{chap:DWATdatalocation}{DW\_AT\_data\_location}&0x50&\livelink{chap:classexprloc}{exprloc}
+\DWATstaticlink&0x48&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{static link attribute!encoding} \\
+\DWATtype&0x49&\livelink{chap:classreference}{reference}
+ \addtoindexx{type attribute!encoding} \\
+\DWATuselocation&0x4a&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{location list attribute!encoding} \\
+\DWATvariableparameter&0x4b&\livelink{chap:classflag}{flag}
+ \addtoindexx{variable parameter attribute!encoding} \\
+\DWATvirtuality&0x4c&\livelink{chap:classconstant}{constant}
+ \addtoindexx{virtuality attribute!encoding} \\
+\DWATvtableelemlocation&0x4d&\livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classloclistptr}{loclistptr}
+ \addtoindexx{vtable element location attribute!encoding} \\
+\DWATallocated&0x4e&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{allocated attribute!encoding} \\
+\DWATassociated&0x4f&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{associated attribute!encoding} \\
+\DWATdatalocation&0x50&\livelink{chap:classexprloc}{exprloc}
\addtoindexx{data location attribute!encoding} \\
-\livelink{chap:DWATbytestride}{DW\_AT\_byte\_stride}&0x51&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc},
- \livelink{chap:classreference}{reference} \addtoindexx{byte stride attribute!encoding} \\
-\livelink{chap:DWATentrypc}{DW\_AT\_entry\_pc}&0x52&\livelink{chap:classaddress}{address}
- \addtoindexx{entry pc attribute!encoding} \\
-\livelink{chap:DWATuseUTF8}{DW\_AT\_use\_UTF8}&0x53&\livelink{chap:classflag}{flag}
- \addtoindexx{use UTF8 attribute!encoding}\addtoindexx{UTF-8} \\
-\livelink{chap:DWATextension}{DW\_AT\_extension}&0x54&\livelink{chap:classreference}{reference}
- \addtoindexx{extension attribute!encoding} \\
-\livelink{chap:DWATranges}{DW\_AT\_ranges}&0x55&\livelink{chap:classrangelistptr}{rangelistptr}
- \addtoindexx{ranges attribute!encoding} \\
-\livelink{chap:DWATtrampoline}{DW\_AT\_trampoline}&0x56&\livelink{chap:classaddress}{address}, \livelink{chap:classflag}{flag},
- \livelink{chap:classreference}{reference}, \livelink{chap:classstring}{string} \addtoindexx{trampoline attribute!encoding} \\
-\livelink{chap:DWATcallcolumn}{DW\_AT\_call\_column}&0x57&\livelink{chap:classconstant}{constant}
- \addtoindexx{call column attribute!encoding} \\
-\livelink{chap:DWATcallfile}{DW\_AT\_call\_file}&0x58&\livelink{chap:classconstant}{constant}
- \addtoindexx{call file attribute!encoding} \\
-\livelink{chap:DWATcallline}{DW\_AT\_call\_line}&0x59&\livelink{chap:classconstant}{constant}
- \addtoindexx{call line attribute!encoding} \\
-\livelink{chap:DWATdescription}{DW\_AT\_description}&0x5a&\livelink{chap:classstring}{string}
- \addtoindexx{description attribute!encoding} \\
-\livelink{chap:DWATbinaryscale}{DW\_AT\_binary\_scale}&0x5b&\livelink{chap:classconstant}{constant}
- \addtoindexx{binary scale attribute!encoding} \\
-\livelink{chap:DWATdecimalscale}{DW\_AT\_decimal\_scale}&0x5c&\livelink{chap:classconstant}{constant}
- \addtoindexx{decimal scale attribute!encoding} \\
-\livelink{chap:DWATsmall}{DW\_AT\_small} &0x5d&\livelink{chap:classreference}{reference}
- \addtoindexx{small attribute!encoding} \\
-\livelink{chap:DWATdecimalsign}{DW\_AT\_decimal\_sign}&0x5e&\livelink{chap:classconstant}{constant}
- \addtoindexx{decimal scale attribute!encoding} \\
-\livelink{chap:DWATdigitcount}{DW\_AT\_digit\_count}&0x5f&\livelink{chap:classconstant}{constant}
- \addtoindexx{digit count attribute!encoding} \\
-\livelink{chap:DWATpicturestring}{DW\_AT\_picture\_string}&0x60&\livelink{chap:classstring}{string}
- \addtoindexx{picture string attribute!encoding} \\
-\livelink{chap:DWATmutable}{DW\_AT\_mutable}&0x61&\livelink{chap:classflag}{flag}
- \addtoindexx{mutable attribute!encoding} \\
-\livelink{chap:DWATthreadsscaled}{DW\_AT\_threads\_scaled}&0x62&\livelink{chap:classflag}{flag}
- \addtoindexx{thread scaled attribute!encoding} \\
-\livelink{chap:DWATexplicit}{DW\_AT\_explicit}&0x63&\livelink{chap:classflag}{flag}
- \addtoindexx{explicit attribute!encoding} \\
-\livelink{chap:DWATobjectpointer}{DW\_AT\_object\_pointer}&0x64&\livelink{chap:classreference}{reference}
- \addtoindexx{object pointer attribute!encoding} \\
-\livelink{chap:DWATendianity}{DW\_AT\_endianity}&0x65&\livelink{chap:classconstant}{constant}
- \addtoindexx{endianity attribute!encoding} \\
-\livelink{chap:DWATelemental}{DW\_AT\_elemental}&0x66&\livelink{chap:classflag}{flag}
- \addtoindexx{elemental attribute!encoding} \\
-\livelink{chap:DWATpure}{DW\_AT\_pure}&0x67&\livelink{chap:classflag}{flag}
- \addtoindexx{pure attribute!encoding} \\
-\livelink{chap:DWATrecursive}{DW\_AT\_recursive}&0x68&\livelink{chap:classflag}{flag}
- \addtoindexx{recursive attribute!encoding} \\
-\livelink{chap:DWATsignature}{DW\_AT\_signature} &0x69&\livelink{chap:classreference}{reference}
- \addtoindexx{signature attribute!encoding} \\
-\livelink{chap:DWATmainsubprogram}{DW\_AT\_main\_subprogram} &0x6a&\livelink{chap:classflag}{flag}
- \addtoindexx{main subprogram attribute!encoding} \\
-\livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset} &0x6b&\livelink{chap:classconstant}{constant}
- \addtoindexx{data bit offset attribute!encoding} \\
-\livelink{chap:DWATconstexpr}{DW\_AT\_const\_expr} &0x6c&\livelink{chap:classflag}{flag}
- \addtoindexx{constant expression attribute!encoding} \\
-\livelink{chap:DWATenumclass}{DW\_AT\_enum\_class} &0x6d&\livelink{chap:classflag}{flag}
- \addtoindexx{enumeration class attribute!encoding} \\
-\livelink{chap:DWATlinkagename}{DW\_AT\_linkage\_name} &0x6e&\livelink{chap:classstring}{string}
- \addtoindexx{linkage name attribute!encoding} \\
-\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size} \ddag&0x6f&
- \livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length} \\
-\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size} \ddag&0x70&
- \livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length} \\
- \livelink{chap:DWATrank}{DW\_AT\_rank} \ddag&0x71&
- \livelink{chap:DWATrank}{constant, exprloc}\addtoindexx{rank attribute!encoding} \\
-\livelink{chap:DWXXXlohiuser}{DW\_AT\_lo\_user}&0x2000 & --- \addtoindexx{low user attribute encoding} \\
-\livelink{chap:DWXXXlohiuser}{DW\_AT\_hi\_user}&\xiiifff& --- \addtoindexx{high user attribute encoding} \\
+\DWATbytestride&0x51&\livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc},
+ \livelink{chap:classreference}{reference}
+ \addtoindexx{byte stride attribute!encoding} \\
+\DWATentrypc&0x52&\livelink{chap:classaddress}{address},
+ \livelink{chap:classconstant}{constant}
+ \addtoindexx{entry pc attribute!encoding} \\
+\DWATuseUTFeight&0x53&\livelink{chap:classflag}{flag}
+ \addtoindexx{use UTF8 attribute!encoding}\addtoindexx{UTF-8} \\
+\DWATextension&0x54&\livelink{chap:classreference}{reference}
+ \addtoindexx{extension attribute!encoding} \\
+\DWATranges&0x55&\livelink{chap:classrangelistptr}{rangelistptr}
+ \addtoindexx{ranges attribute!encoding} \\
+\DWATtrampoline&0x56&\livelink{chap:classaddress}{address},
+ \livelink{chap:classflag}{flag},
+ \livelink{chap:classreference}{reference},
+ \livelink{chap:classstring}{string}
+ \addtoindexx{trampoline attribute!encoding} \\
+\DWATcallcolumn&0x57&\livelink{chap:classconstant}{constant}
+ \addtoindexx{call column attribute!encoding} \\
+\DWATcallfile&0x58&\livelink{chap:classconstant}{constant}
+ \addtoindexx{call file attribute!encoding} \\
+\DWATcallline&0x59&\livelink{chap:classconstant}{constant}
+ \addtoindexx{call line attribute!encoding} \\
+\DWATdescription&0x5a&\livelink{chap:classstring}{string}
+ \addtoindexx{description attribute!encoding} \\
+\DWATbinaryscale&0x5b&\livelink{chap:classconstant}{constant}
+ \addtoindexx{binary scale attribute!encoding} \\
+\DWATdecimalscale&0x5c&\livelink{chap:classconstant}{constant}
+ \addtoindexx{decimal scale attribute!encoding} \\
+\DWATsmall{} &0x5d&\livelink{chap:classreference}{reference}
+ \addtoindexx{small attribute!encoding} \\
+\DWATdecimalsign&0x5e&\livelink{chap:classconstant}{constant}
+ \addtoindexx{decimal scale attribute!encoding} \\
+\DWATdigitcount&0x5f&\livelink{chap:classconstant}{constant}
+ \addtoindexx{digit count attribute!encoding} \\
+\DWATpicturestring&0x60&\livelink{chap:classstring}{string}
+ \addtoindexx{picture string attribute!encoding} \\
+\DWATmutable&0x61&\livelink{chap:classflag}{flag}
+ \addtoindexx{mutable attribute!encoding} \\
+\DWATthreadsscaled&0x62&\livelink{chap:classflag}{flag}
+ \addtoindexx{thread scaled attribute!encoding} \\
+\DWATexplicit&0x63&\livelink{chap:classflag}{flag}
+ \addtoindexx{explicit attribute!encoding} \\
+\DWATobjectpointer&0x64&\livelink{chap:classreference}{reference}
+ \addtoindexx{object pointer attribute!encoding} \\
+\DWATendianity&0x65&\livelink{chap:classconstant}{constant}
+ \addtoindexx{endianity attribute!encoding} \\
+\DWATelemental&0x66&\livelink{chap:classflag}{flag}
+ \addtoindexx{elemental attribute!encoding} \\
+\DWATpure&0x67&\livelink{chap:classflag}{flag}
+ \addtoindexx{pure attribute!encoding} \\
+\DWATrecursive&0x68&\livelink{chap:classflag}{flag}
+ \addtoindexx{recursive attribute!encoding} \\
+\DWATsignature{} &0x69&\livelink{chap:classreference}{reference}
+ \addtoindexx{signature attribute!encoding} \\
+\DWATmainsubprogram{} &0x6a&\livelink{chap:classflag}{flag}
+ \addtoindexx{main subprogram attribute!encoding} \\
+\DWATdatabitoffset{} &0x6b&\livelink{chap:classconstant}{constant}
+ \addtoindexx{data bit offset attribute!encoding} \\
+\DWATconstexpr{} &0x6c&\livelink{chap:classflag}{flag}
+ \addtoindexx{constant expression attribute!encoding} \\
+\DWATenumclass{} &0x6d&\livelink{chap:classflag}{flag}
+ \addtoindexx{enumeration class attribute!encoding} \\
+\DWATlinkagename{} &0x6e&\livelink{chap:classstring}{string}
+ \addtoindexx{linkage name attribute!encoding} \\
+\DWATstringlengthbitsize{}~\ddag&0x6f&
+ \livelink{chap:classconstant}{constant}
+ \addtoindexx{string length attribute!size of length} \\
+\DWATstringlengthbytesize{}~\ddag&0x70&
+ \livelink{chap:classconstant}{constant}
+ \addtoindexx{string length attribute!size of length} \\
+\DWATrank~\ddag&0x71&
+ \livelink{chap:classconstant}{constant},
+ \livelink{chap:classexprloc}{exprloc}
+ \addtoindexx{rank attribute!encoding} \\
+\DWATstroffsetsbase~\ddag&0x72&
+ \livelinki{chap:classstring}{stroffsetsptr}{stroffsetsptr class}
+ \addtoindexx{string offsets base!encoding} \\
+\DWATaddrbase~\ddag &0x73&
+ \livelinki{chap:DWATaddrbase}{addrptr}{addrptr class}
+ \addtoindexx{address table base!encoding} \\
+\DWATrangesbase~\ddag&0x74&
+ \livelinki{chap:DWATrangesbase}{rangelistptr}{rangelistptr class}
+ \addtoindexx{ranges base!encoding} \\
+\DWATdwoid~\ddag &0x75&
+ \livelink{chap:DWATdwoid}{constant}
+ \addtoindexx{split DWARF object id!encoding} \\
+\DWATdwoname~\ddag &0x76&
+ \livelink{chap:DWATdwoname}{string}
+ \addtoindexx{split DWARF object file name!encoding} \\
+\DWATreference~\ddag &0x77&
+ \livelink{chap:DWATreference}{flag} \\
+\DWATrvaluereference~\ddag &0x78&
+ \livelink{chap:DWATrvaluereference}{flag} \\
+\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr}
+ \addtoindexx{macro information attribute!encoding} \\
+\DWATcallallcalls~\ddag &0x7a&\CLASSflag
+ \addtoindexx{all calls summary attribute!encoding}\\
+\DWATcallallsourcecalls~\ddag &0x7b &\CLASSflag
+ \addtoindexx{all source calls summary attribute!encoding} \\
+\DWATcallalltailcalls~\ddag &0x7c&\CLASSflag
+ \addtoindexx{all tail calls summary attribute!encoding} \\
+\DWATcalldatalocation~\ddag &0x7d&\CLASSexprloc
+ \addtoindexx{call data location attribute!encoding} \\
+\DWATcalldatavalue~\ddag &0x7e&\CLASSexprloc
+ \addtoindexx{call data value attribute!encoding} \\
+\DWATcallorigin~\ddag &0x7f &\CLASSexprloc
+ \addtoindexx{call origin attribute!encoding} \\
+\DWATcallparameter~\ddag &0x80 &\CLASSreference
+ \addtoindexx{call parameter attribute!encoding} \\
+\DWATcallpc~\ddag &0x81 &\CLASSaddress
+ \addtoindexx{call pc attribute!encoding} \\
+\DWATcallreturnpc~\ddag &0x82 &\CLASSaddress
+ \addtoindexx{call return pc attribute!encoding} \\
+\DWATcalltailcall~\ddag &0x83 &\CLASSflag
+ \addtoindexx{call tail call attribute!encoding} \\
+\DWATcalltarget~\ddag &0x84 &\CLASSexprloc
+ \addtoindexx{call target attribute!encoding} \\
+\DWATcalltargetclobbered!\ddag &0x85 &\CLASSexprloc
+ \addtoindexx{call target clobbered attribute!encoding} \\
+\DWATcallvalue~\ddag &0x86 &\CLASSexprloc
+ \addtoindexx{call value attribute!encoding} \\
+
+\DWATlouser&0x2000 & --- \addtoindexx{low user attribute encoding} \\
+\DWAThiuser&\xiiifff& --- \addtoindexx{high user attribute encoding} \\
\end{longtable}
\end{centering}
-
+\needlines{8}
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|l|l}
\endhead
\hline \emph{Continued on next page}
\endfoot
- \hline
-
+ \hline \ddag\ \textit{New in DWARF Version 5}
\endlastfoot
-\livelink{chap:DWFORMaddr}{DW\_FORM\_addr}&0x01&\livelink{chap:classaddress}{address} \\
-\livelink{chap:DWFORMblock2}{DW\_FORM\_block2}&0x03&\livelink{chap:classblock}{block} \\
-\livelink{chap:DWFORMblock4}{DW\_FORM\_block4}&0x04&\livelink{chap:classblock}{block} \\
-\livelink{chap:DWFORMdata2}{DW\_FORM\_data2}&0x05&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMdata4}{DW\_FORM\_data4}&0x06&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMdata8}{DW\_FORM\_data8}&0x07&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMstring}{DW\_FORM\_string}&0x08&\livelink{chap:classstring}{string} \\
-\livelink{chap:DWFORMblock}{DW\_FORM\_block}&0x09&\livelink{chap:classblock}{block} \\
-\livelink{chap:DWFORMblock1}{DW\_FORM\_block1}&0x0a&\livelink{chap:classblock}{block} \\
-\livelink{chap:DWFORMdata1}{DW\_FORM\_data1}&0x0b&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMflag}{DW\_FORM\_flag}&0x0c&\livelink{chap:classflag}{flag} \\
-\livelink{chap:DWFORMsdata}{DW\_FORM\_sdata}&0x0d&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMstrp}{DW\_FORM\_strp}&0x0e&\livelink{chap:classstring}{string} \\
-\livelink{chap:DWFORMudata}{DW\_FORM\_udata}&0x0f&\livelink{chap:classconstant}{constant} \\
-\livelink{chap:DWFORMrefaddr}{DW\_FORM\_ref\_addr}&0x10&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMref1}{DW\_FORM\_ref1}&0x11&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMref2}{DW\_FORM\_ref2}&0x12&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMref4}{DW\_FORM\_ref4}&0x13&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMref8}{DW\_FORM\_ref8}&0x14&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMrefudata}{DW\_FORM\_ref\_udata}&0x15&\livelink{chap:classreference}{reference} \\
-\livelink{chap:DWFORMindirect}{DW\_FORM\_indirect}&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
-\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset} &0x17&\livelink{chap:classlineptr}{lineptr}, \livelink{chap:classloclistptr}{loclistptr}, \livelink{chap:classmacptr}{macptr}, \livelink{chap:classrangelistptr}{rangelistptr} \\
-\livelink{chap:DWFORMexprloc}{DW\_FORM\_exprloc} &0x18&\livelink{chap:classexprloc}{exprloc} \\
-\livelink{chap:DWFORMflagpresent}{DW\_FORM\_flag\_present} &0x19&\livelink{chap:classflag}{flag} \\
-\livelink{chap:DWFORMrefsig8}{DW\_FORM\_ref\_sig8} &0x20&\livelink{chap:classreference}{reference} \\
-
+
+\DWFORMaddr &0x01&\livelink{chap:classaddress}{address} \\
+\textit{Reserved} &0x02& \\
+\DWFORMblocktwo &0x03&\livelink{chap:classblock}{block} \\
+\DWFORMblockfour &0x04&\livelink{chap:classblock}{block} \\
+\DWFORMdatatwo &0x05&\livelink{chap:classconstant}{constant} \\
+\DWFORMdatafour &0x06&\livelink{chap:classconstant}{constant} \\
+\DWFORMdataeight &0x07&\livelink{chap:classconstant}{constant} \\
+\DWFORMstring&0x08&\livelink{chap:classstring}{string} \\
+\DWFORMblock&0x09&\livelink{chap:classblock}{block} \\
+\DWFORMblockone &0x0a&\livelink{chap:classblock}{block} \\
+\DWFORMdataone &0x0b&\livelink{chap:classconstant}{constant} \\
+\DWFORMflag&0x0c&\livelink{chap:classflag}{flag} \\
+\DWFORMsdata&0x0d&\livelink{chap:classconstant}{constant} \\
+\DWFORMstrp&0x0e&\livelink{chap:classstring}{string} \\
+\DWFORMudata&0x0f&\livelink{chap:classconstant}{constant} \\
+\DWFORMrefaddr&0x10&\livelink{chap:classreference}{reference} \\
+\DWFORMrefone&0x11&\livelink{chap:classreference}{reference} \\
+\DWFORMreftwo&0x12&\livelink{chap:classreference}{reference} \\
+\DWFORMreffour&0x13&\livelink{chap:classreference}{reference} \\
+\DWFORMrefeight&0x14&\livelink{chap:classreference}{reference} \\
+\DWFORMrefudata&0x15&\livelink{chap:classreference}{reference} \\
+\DWFORMindirect&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
+\DWFORMsecoffset{} &0x17&\livelink{chap:classlineptr}{lineptr}, \livelink{chap:classloclistptr}{loclistptr}, \livelink{chap:classmacptr}{macptr}, \livelink{chap:classrangelistptr}{rangelistptr} \\
+\DWFORMexprloc{} &0x18&\livelink{chap:classexprloc}{exprloc} \\
+\DWFORMflagpresent{} &0x19&\livelink{chap:classflag}{flag} \\
+\DWFORMstrx{} \ddag &0x1a&\livelink{chap:classstring}{string} \\
+\DWFORMaddrx{} \ddag &0x1b&\livelink{chap:classaddress}{address} \\
+\DWFORMrefsigeight &0x20&\livelink{chap:classreference}{reference} \\
+
\end{longtable}
\end{centering}
unsigned integer, when the big end is all zeroes or sign
extension bits.}
-Unsigned LEB128 (ULEB128) numbers are encoded as follows:
+Unsigned LEB128\addtoindexx{LEB128!unsigned} (ULEB128) numbers are encoded as follows:
\addtoindexx{LEB128!unsigned, encoding as}
start at the low order end of an unsigned integer and chop
it into 7\dash bit chunks. Place each chunk into the low order 7
zero byte.
Table \refersec{tab:examplesofunsignedleb128encodings}
-gives some examples of unsigned LEB128 numbers. The
+gives some examples of unsigned LEB128\addtoindexx{LEB128!unsigned}
+numbers. The
0x80 in each case is the high order bit of the byte, indicating
that an additional byte follows.
indicates whether an encoded number is signed or unsigned. The
decoder must know what type of number to expect.
Table \refersec{tab:examplesofunsignedleb128encodings}
-gives some examples of unsigned LEB128 numbers and
-Table \refersec{tab:examplesofsignedleb128encodings}
-gives some examples of signed LEB128
+gives some examples of unsigned LEB128\addtoindexx{LEB128!unsigned}
+numbers and Table \refersec{tab:examplesofsignedleb128encodings}
+gives some examples of signed LEB128\addtoindexx{LEB128!signed}
numbers.
\textit{Appendix \refersec{app:variablelengthdataencodingdecodinginformative}
\begin{longtable}{l|l|l}
\caption{Examples of unsigned LEB128 encodings}
\label{tab:examplesofunsignedleb128encodings}
- \addtoindexx{LEB128 encoding!examples} \\
+ \addtoindexx{LEB128 encoding!examples}\addtoindexx{LEB128!unsigned} \\
\hline \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
\endfirsthead
\bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|l|l}
- \caption{Examples of signed LEB128 encodings} \label{tab:examplesofsignedleb128encodings} \\
+ \caption{Examples of signed LEB128 encodings}
+ \label{tab:examplesofsignedleb128encodings}
+ \addtoindexx{LEB128!signed} \\
\hline \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
\endfirsthead
\bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
-\begin{longtable}{l|l|c|l}
+\begin{longtable}{l|c|c|l}
\caption{DWARF operation encodings} \label{tab:dwarfoperationencodings} \\
\hline & &\bfseries No. of &\\
\bfseries Operation&\bfseries Code &\bfseries Operands &\bfseries Notes\\ \hline
\endhead
\hline \emph{Continued on next page}
\endfoot
- \hline
+ \hline \ddag\ \textit{New in DWARF Version 5}
\endlastfoot
-\livelink{chap:DWOPaddr}{DW\_OP\_addr}&0x03&1 & constant address \\
-& & &(size target specific) \\
-
-\livelink{chap:DWOPderef}{DW\_OP\_deref}&0x06&0 & \\
-
-
-\livelink{chap:DWOPconst1u}{DW\_OP\_const1u}&0x08&1&1\dash byte constant \\
-\livelink{chap:DWOPconst1s}{DW\_OP\_const1s}&0x09&1&1\dash byte constant \\
-\livelink{chap:DWOPconst2u}{DW\_OP\_const2u}&0x0a&1&2\dash byte constant \\
-\livelink{chap:DWOPconst2s}{DW\_OP\_const2s}&0x0b&1&2\dash byte constant \\
-\livelink{chap:DWOPconst4u}{DW\_OP\_const4u}&0x0c&1&4\dash byte constant \\
-\livelink{chap:DWOPconst4s}{DW\_OP\_const4s}&0x0d&1&4\dash byte constant \\
-\livelink{chap:DWOPconst8u}{DW\_OP\_const8u}&0x0e&1&8\dash byte constant \\
-\livelink{chap:DWOPconst8s}{DW\_OP\_const8s}&0x0f&1&8\dash byte constant \\
-\livelink{chap:DWOPconstu}{DW\_OP\_constu}&0x10&1&ULEB128 constant \\
-\livelink{chap:DWOPconsts}{DW\_OP\_consts}&0x11&1&SLEB128 constant \\
-\livelink{chap:DWOPdup}{DW\_OP\_dup}&0x12&0 & \\
-\livelink{chap:DWOPdrop}{DW\_OP\_drop}&0x13&0 & \\
-\livelink{chap:DWOPover}{DW\_OP\_over}&0x14&0 & \\
-\livelink{chap:DWOPpick}{DW\_OP\_pick}&0x15&1&1\dash byte stack index \\
-\livelink{chap:DWOPswap}{DW\_OP\_swap}&0x16&0 & \\
-\livelink{chap:DWOProt}{DW\_OP\_rot}&0x17&0 & \\
-\livelink{chap:DWOPxderef}{DW\_OP\_xderef}&0x18&0 & \\
-\livelink{chap:DWOPabs}{DW\_OP\_abs}&0x19&0 & \\
-\livelink{chap:DWOPand}{DW\_OP\_and}&0x1a&0 & \\
-\livelink{chap:DWOPdiv}{DW\_OP\_div}&0x1b&0 & \\
-
-
-
-\livelink{chap:DWOPminus}{DW\_OP\_minus}&0x1c&0 & \\
-\livelink{chap:DWOPmod}{DW\_OP\_mod}&0x1d&0 & \\
-\livelink{chap:DWOPmul}{DW\_OP\_mul}&0x1e&0 & \\
-\livelink{chap:DWOPneg}{DW\_OP\_neg}&0x1f&0 & \\
-\livelink{chap:DWOPnot}{DW\_OP\_not}&0x20&0 & \\
-\livelink{chap:DWOPor}{DW\_OP\_or}&0x21&0 & \\
-\livelink{chap:DWOPplus}{DW\_OP\_plus}&0x22&0 & \\
-\livelink{chap:DWOPplusuconst}{DW\_OP\_plus\_uconst}&0x23&1&ULEB128 addend \\
-\livelink{chap:DWOPshl}{DW\_OP\_shl}&0x24&0 & \\
-\livelink{chap:DWOPshr}{DW\_OP\_shr}&0x25&0 & \\
-\livelink{chap:DWOPshra}{DW\_OP\_shra}&0x26&0 & \\
-\livelink{chap:DWOPxor}{DW\_OP\_xor}&0x27&0 & \\
-
-\livelink{chap:DWOPbra}{DW\_OP\_bra}&0x28&1 & signed 2\dash byte constant \\
-\livelink{chap:DWOPeq}{DW\_OP\_eq}&0x29&0 & \\
-\livelink{chap:DWOPge}{DW\_OP\_ge}&0x2a&0 & \\
-\livelink{chap:DWOPgt}{DW\_OP\_gt}&0x2b&0 & \\
-\livelink{chap:DWOPle}{DW\_OP\_le}&0x2c&0 & \\
-\livelink{chap:DWOPlt}{DW\_OP\_lt}&0x2d&0 & \\
-\livelink{chap:DWOPne}{DW\_OP\_ne}&0x2e&0 & \\
-\livelink{chap:DWOPskip}{DW\_OP\_skip}&0x2f&1&signed 2\dash byte constant \\ \hline
-
-\livelink{chap:DWOPlit0}{DW\_OP\_lit0}&0x30 & 0 & \\
-\livelink{chap:DWOPlit1}{DW\_OP\_lit1}&0x31 & 0& literals 0 .. 31 = \\
-\ldots & & &\hspace{0.5cm}(\livelink{chap:DWOPlit0}{DW\_OP\_lit0} + literal) \\
-\livelink{chap:DWOPlit31}{DW\_OP\_lit31}&0x4f & 0 & \\ \hline
-
-\livelink{chap:DWOPreg0}{DW\_OP\_reg0} & 0x50 & 0 & \\
-\livelink{chap:DWOPreg1}{DW\_OP\_reg1} & 0x51 & 0® 0 .. 31 = \\
-\ldots & & &\hspace{0.5cm}(\livelink{chap:DWOPreg0}{DW\_OP\_reg0} + regnum) \\
-\livelink{chap:DWOPreg31}{DW\_OP\_reg31} & 0x6f & 0 & \\ \hline
-
-\livelink{chap:DWOPbreg0}{DW\_OP\_breg0} & 0x70 &1 & SLEB128 offset \\
-\livelink{chap:DWOPbreg1}{DW\_OP\_breg1} & 0x71 & 1 &base register 0 .. 31 = \\
-... & & &\hspace{0.5cm}(\livelink{chap:DWOPbreg0}{DW\_OP\_breg0} + regnum) \\
-\livelink{chap:DWOPbreg31}{DW\_OP\_breg31} & 0x8f & 1 & \\ \hline
-
-\livelink{chap:DWOPregx}{DW\_OP\_regx} & 0x90 &1&ULEB128 register \\
-\livelink{chap:DWOPfbreg}{DW\_OP\_fbreg} & 0x91&1&SLEB128 offset \\
-\livelink{chap:DWOPbregx}{DW\_OP\_bregx} & 0x92&2 &ULEB128 register followed \\
-& & & by SLEB128 offset \\
-\livelink{chap:DWOPpiece}{DW\_OP\_piece} & 0x93 &1& ULEB128 size of piece addressed \\
-\livelink{chap:DWOPderefsize}{DW\_OP\_deref\_size} & 0x94 &1& 1-byte size of data retrieved \\
-\livelink{chap:DWOPxderefsize}{DW\_OP\_xderef\_size} & 0x95&1&1-byte size of data retrieved \\
-\livelink{chap:DWOPnop}{DW\_OP\_nop} & 0x96 &0& \\
-
-
-\livelink{chap:DWOPpushobjectaddress}{DW\_OP\_push\_object\_address}&0x97&0 & \\
-\livelink{chap:DWOPcall2}{DW\_OP\_call2}&0x98&1& 2\dash byte offset of DIE \\
-\livelink{chap:DWOPcall4}{DW\_OP\_call4}&0x99&1& 4\dash byte offset of DIE \\
-\livelink{chap:DWOPcallref}{DW\_OP\_call\_ref}&0x9a&1& 4\dash\ or 8\dash byte\\
- &&& offset of DIE \\
-\livelink{chap:DWOPformtlsaddress}{DW\_OP\_form\_tls\_address}&0x9b &0& \\
-\livelink{chap:DWOPcallframecfa}{DW\_OP\_call\_frame\_cfa} &0x9c &0& \\
-\livelink{chap:DWOPbitpiece}{DW\_OP\_bit\_piece}&0x9d &2&ULEB128 size followed by \\
-&&&ULEB128 offset\\
-\livelink{chap:DWOPimplicitvalue}{DW\_OP\_implicit\_value} &0x9e &2&ULEB128 size followed by \\
-&&&\nolink{block} of that size\\
-\livelink{chap:DWOPstackvalue}{DW\_OP\_stack\_value} &0x9f &0& \\
-\livelink{chap:DWXXXlohiuser}{DW\_OP\_lo\_user} &0xe0 && \\
-\livelink{chap:DWXXXlohiuser}{DW\_OP\_hi\_user} &\xff && \\
+\DWOPaddr&0x03&1 & constant address \\
+& & &(size is target specific) \\
+
+\DWOPderef&0x06&0 & \\
+
+\DWOPconstoneu&0x08&1&1\dash byte constant \\
+\DWOPconstones&0x09&1&1\dash byte constant \\
+\DWOPconsttwou&0x0a&1&2\dash byte constant \\
+\DWOPconsttwos&0x0b&1&2\dash byte constant \\
+\DWOPconstfouru&0x0c&1&4\dash byte constant \\
+\DWOPconstfours&0x0d&1&4\dash byte constant \\
+\DWOPconsteightu&0x0e&1&8\dash byte constant \\
+\DWOPconsteights&0x0f&1&8\dash byte constant \\
+\DWOPconstu&0x10&1&ULEB128 constant \\
+\DWOPconsts&0x11&1&SLEB128 constant \\
+\DWOPdup&0x12&0 & \\
+\DWOPdrop&0x13&0 & \\
+\DWOPover&0x14&0 & \\
+\DWOPpick&0x15&1&1\dash byte stack index \\
+\DWOPswap&0x16&0 & \\
+\DWOProt&0x17&0 & \\
+\DWOPxderef&0x18&0 & \\
+\DWOPabs&0x19&0 & \\
+\DWOPand&0x1a&0 & \\
+\DWOPdiv&0x1b&0 & \\
+\DWOPminus&0x1c&0 & \\
+\DWOPmod&0x1d&0 & \\
+\DWOPmul&0x1e&0 & \\
+\DWOPneg&0x1f&0 & \\
+\DWOPnot&0x20&0 & \\
+\DWOPor&0x21&0 & \\
+\DWOPplus&0x22&0 & \\
+\DWOPplusuconst&0x23&1&ULEB128 addend \\
+\DWOPshl&0x24&0 & \\
+\DWOPshr&0x25&0 & \\
+\DWOPshra&0x26&0 & \\
+\DWOPxor&0x27&0 & \\
+
+\DWOPbra&0x28&1 & signed 2\dash byte constant \\
+\DWOPeq&0x29&0 & \\
+\DWOPge&0x2a&0 & \\
+\DWOPgt&0x2b&0 & \\
+\DWOPle&0x2c&0 & \\
+\DWOPlt&0x2d&0 & \\
+\DWOPne&0x2e&0 & \\
+\DWOPskip&0x2f&1&signed 2\dash byte constant \\ \hline
+
+\DWOPlitzero & 0x30 & 0 & \\
+\DWOPlitone & 0x31 & 0& literals 0 .. 31 = \\
+\ldots & & &\hspace{0.3cm}(\DWOPlitzero{} + literal) \\
+\DWOPlitthirtyone & 0x4f & 0 & \\ \hline
+
+\DWOPregzero & 0x50 & 0 & \\*
+\DWOPregone & 0x51 & 0® 0 .. 31 = \\*
+\ldots & & &\hspace{0.3cm}(\DWOPregzero{} + regnum) \\*
+\DWOPregthirtyone & 0x6f & 0 & \\ \hline
+
+\DWOPbregzero & 0x70 &1 & SLEB128 offset \\*
+\DWOPbregone & 0x71 & 1 &base register 0 .. 31 = \\*
+... & & &\hspace{0.3cm}(\DWOPbregzero{} + regnum) \\*
+\DWOPbregthirtyone & 0x8f & 1 & \\ \hline
+
+\DWOPregx{} & 0x90 &1&ULEB128 register \\
+\DWOPfbreg{} & 0x91&1&SLEB128 offset \\
+\DWOPbregx{} & 0x92&2 &ULEB128 register, \\*
+ & & &SLEB128 offset \\
+\DWOPpiece{} & 0x93 &1& ULEB128 size of piece \\
+\DWOPderefsize{} & 0x94 &1& 1-byte size of data retrieved \\
+\DWOPxderefsize{} & 0x95&1&1-byte size of data retrieved \\
+\DWOPnop{} & 0x96 &0& \\
+
+\DWOPpushobjectaddress&0x97&0 & \\
+\DWOPcalltwo&0x98&1& 2\dash byte offset of DIE \\
+\DWOPcallfour&0x99&1& 4\dash byte offset of DIE \\
+\DWOPcallref&0x9a&1& 4\dash\ or 8\dash byte offset of DIE \\
+\DWOPformtlsaddress&0x9b &0& \\
+\DWOPcallframecfa{} &0x9c &0& \\
+\DWOPbitpiece&0x9d &2&ULEB128 size, \\*
+ &&&ULEB128 offset\\
+\DWOPimplicitvalue{} &0x9e &2&ULEB128 size, \\*
+ &&&\nolink{block} of that size\\
+\DWOPstackvalue{} &0x9f &0& \\
+\DWOPimplicitpointer{}~\ddag &0xa0& 2 &4- or 8-byte offset of DIE, \\*
+ &&&SLEB128 constant offset \\
+\DWOPaddrx~\ddag&0xa1&1&ULEB128 indirect address \\
+\DWOPconstx~\ddag&0xa2&1&ULEB128 indirect constant \\
+\DWOPentryvalue~\ddag&0xa3&2&ULEV128 size, \\*
+ &&&\nolink{block} of that size\\
+\DWOPlouser{} &0xe0 && \\
+\DWOPhiuser{} &\xff && \\
\end{longtable}
\end{centering}
\addtoindexx{end of list entry!in location list}
end of list entry.
+\needlines{6}
+\subsubsection{Location List Entries in Non-Split Objects}
A \addtoindex{location list} entry consists of two address offsets followed
by a 2\dash byte length, followed by a block of contiguous bytes
that contains a DWARF location description. The length
the corresponding compilation unit must be defined
(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+\subsubsection{Location List Entries in Split Objects}
+An alternate form for location list entries is used in split objects.
+Each entry begins with a one-byte code that indicates the kind of entry
+that follows. The encodings for these constants are given in
+Table \refersec{tab:locationlistentryencodingvalues}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+ \caption{Location list entry encoding values} \label{tab:locationlistentryencodingvalues} \\
+ \hline \bfseries Location list entry encoding name&\bfseries Value \\ \hline
+\endfirsthead
+ \bfseries Location list entry encoding name&\bfseries Value\\ \hline
+\endhead
+ \hline \emph{Continued on next page}
+\endfoot
+ \hline
+\endlastfoot
+\DWLLEendoflistentry & 0x0 \\
+\DWLLEbaseaddressselectionentry & 0x01 \\
+\DWLLEstartendentry & 0x02 \\
+\DWLLEstartlengthentry & 0x03 \\
+\DWLLEoffsetpairentry & 0x04 \\
+\end{longtable}
+\end{centering}
+
\section{Base Type Attribute Encodings}
\label{datarep:basetypeattributeencodings}
The encodings of the
-\hypertarget{chap:DWATencodingencodingofbasetype}
+\hypertarget{chap:DWATencodingencodingofbasetype}{}
constants used in
\addtoindexx{encoding attribute!encoding}
the
-\livelink{chap:DWATencoding}{DW\_AT\_encoding}
+\DWATencoding{}
attribute are given in
Table \refersec{tab:basetypeencodingvalues}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\caption{Base type encoding values} \label{tab:basetypeencodingvalues} \\
- \hline \bfseries Base type encoding code name&\bfseries Value \\ \hline
+ \hline \bfseries Base type encoding name&\bfseries Value \\ \hline
\endfirsthead
- \bfseries Base type encoding code name&\bfseries Value\\ \hline
+ \bfseries Base type encoding name&\bfseries Value\\ \hline
\endhead
\hline \emph{Continued on next page}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWATEaddress}{DW\_ATE\_address}&0x01 \\
-\livelink{chap:DWATEboolean}{DW\_ATE\_boolean}&0x02 \\
-\livelink{chap:DWATEcomplexfloat}{DW\_ATE\_complex\_float}&0x03 \\
-\livelink{chap:DWATEfloat}{DW\_ATE\_float}&0x04 \\
-\livelink{chap:DWATEsigned}{DW\_ATE\_signed}&0x05 \\
-\livelink{chap:DWATEsignedchar}{DW\_ATE\_signed\_char}&0x06 \\
-\livelink{chap:DWATEunsigned}{DW\_ATE\_unsigned}&0x07 \\
-\livelink{chap:DWATEunsignedchar}{DW\_ATE\_unsigned\_char}&0x08 \\
-\livelink{chap:DWATEimaginaryfloat}{DW\_ATE\_imaginary\_float}&0x09 \\
-\livelink{chap:DWATEpackeddecimal}{DW\_ATE\_packed\_decimal}&0x0a \\
-\livelink{chap:DWATEnumericstring}{DW\_ATE\_numeric\_string}&0x0b \\
-\livelink{chap:DWATEedited}{DW\_ATE\_edited}&0x0c \\
-\livelink{chap:DWATEsignedfixed}{DW\_ATE\_signed\_fixed}&0x0d \\
-\livelink{chap:DWATEunsignedfixed}{DW\_ATE\_unsigned\_fixed}&0x0e \\
-\livelink{chap:DWATEdecimalfloat}{DW\_ATE\_decimal\_float} & 0x0f \\
-\livelink{chap:DWATEUTF}{DW\_ATE\_UTF} & 0x10 \\
-\livelink{chap:DWXXXlohiuser}{DW\_ATE\_lo\_user} & 0x80 \\
-\livelink{chap:DWXXXlohiuser}{DW\_ATE\_hi\_user} & \xff \\
+\DWATEaddress&0x01 \\
+\DWATEboolean&0x02 \\
+\DWATEcomplexfloat&0x03 \\
+\DWATEfloat&0x04 \\
+\DWATEsigned&0x05 \\
+\DWATEsignedchar&0x06 \\
+\DWATEunsigned&0x07 \\
+\DWATEunsignedchar&0x08 \\
+\DWATEimaginaryfloat&0x09 \\
+\DWATEpackeddecimal&0x0a \\
+\DWATEnumericstring&0x0b \\
+\DWATEedited&0x0c \\
+\DWATEsignedfixed&0x0d \\
+\DWATEunsignedfixed&0x0e \\
+\DWATEdecimalfloat{} & 0x0f \\
+\DWATEUTF{} & 0x10 \\
+\DWATElouser{} & 0x80 \\
+\DWATEhiuser{} & \xff \\
\end{longtable}
\end{centering}
\needlines{4}
The encodings of the constants used in the
-\livelink{chap:DWATdecimalsign}{DW\_AT\_decimal\_sign} attribute
+\DWATdecimalsign{} attribute
are given in
Table \refersec{tab:decimalsignencodings}.
\hline
\endlastfoot
-\livelink{chap:DWDSunsigned}{DW\_DS\_unsigned} & 0x01 \\
-\livelink{chap:DWDSleadingoverpunch}{DW\_DS\_leading\_overpunch} & 0x02 \\
-\livelink{chap:DWDStrailingoverpunch}{DW\_DS\_trailing\_overpunch} & 0x03 \\
-\livelink{chap:DWDSleadingseparate}{DW\_DS\_leading\_separate} & 0x04 \\
-\livelink{chap:DWDStrailingseparate}{DW\_DS\_trailing\_separate} & 0x05 \\
+\DWDSunsigned{} & 0x01 \\
+\DWDSleadingoverpunch{} & 0x02 \\
+\DWDStrailingoverpunch{} & 0x03 \\
+\DWDSleadingseparate{} & 0x04 \\
+\DWDStrailingseparate{} & 0x05 \\
\end{longtable}
\end{centering}
+\needlines{9}
The encodings of the constants used in the
-\livelink{chap:DWATendianity}{DW\_AT\_endianity} attribute are given in
+\DWATendianity{} attribute are given in
Table \refersec{tab:endianityencodings}.
\begin{centering}
\hline
\endlastfoot
-\livelink{chap:DWENDdefault}{DW\_END\_default} & 0x00 \\
-\livelink{chap:DWENDbig}{DW\_END\_big} & 0x01 \\
-\livelink{chap:DWENDlittle}{DW\_END\_little} & 0x02 \\
-\livelink{chap:DWXXXlohiuser}{DW\_END\_lo\_user} & 0x40 \\
-\livelink{chap:DWXXXlohiuser}{DW\_END\_hi\_user} & \xff \\
+\DWENDdefault{} & 0x00 \\
+\DWENDbig{} & 0x01 \\
+\DWENDlittle{} & 0x02 \\
+\DWENDlouser{} & 0x40 \\
+\DWENDhiuser{} & \xff \\
\end{longtable}
\end{centering}
\section{Accessibility Codes}
\label{datarep:accessibilitycodes}
The encodings of the constants used in the
-\livelink{chap:DWATaccessibility}{DW\_AT\_accessibility}
+\DWATaccessibility{}
attribute
\addtoindexx{accessibility attribute!encoding}
are given in
\hline
\endlastfoot
-\livelink{chap:DWACCESSpublic}{DW\_ACCESS\_public}&0x01 \\
-\livelink{chap:DWACCESSprotected}{DW\_ACCESS\_protected}&0x02 \\
-\livelink{chap:DWACCESSprivate}{DW\_ACCESS\_private}&0x03 \\
+\DWACCESSpublic&0x01 \\
+\DWACCESSprotected&0x02 \\
+\DWACCESSprivate&0x03 \\
\end{longtable}
\end{centering}
\section{Visibility Codes}
\label{datarep:visibilitycodes}
The encodings of the constants used in the
-\livelink{chap:DWATvisibility}{DW\_AT\_visibility} attribute are given in
+\DWATvisibility{} attribute are given in
Table \refersec{tab:visibilityencodings}.
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\caption{Visibility encodings} \label{tab:visibilityencodings}\\
- \hline \bfseries Visiibility code name&\bfseries Value \\ \hline
+ \hline \bfseries Visibility code name&\bfseries Value \\ \hline
\endfirsthead
\bfseries Visibility code name&\bfseries Value\\ \hline
\endhead
\hline
\endlastfoot
-\livelink{chap:DWVISlocal}{DW\_VIS\_local}&0x01 \\
-\livelink{chap:DWVISexported}{DW\_VIS\_exported}&0x02 \\
-\livelink{chap:DWVISqualified}{DW\_VIS\_qualified}&0x03 \\
+\DWVISlocal&0x01 \\
+\DWVISexported&0x02 \\
+\DWVISqualified&0x03 \\
\end{longtable}
\end{centering}
\label{datarep:vitualitycodes}
The encodings of the constants used in the
-\livelink{chap:DWATvirtuality}{DW\_AT\_virtuality} attribute are given in
+\DWATvirtuality{} attribute are given in
Table \refersec{tab:virtualityencodings}.
\begin{centering}
\hline
\endlastfoot
-\livelink{chap:DWVIRTUALITYnone}{DW\_VIRTUALITY\_none}&0x00 \\
-\livelink{chap:DWVIRTUALITYvirtual}{DW\_VIRTUALITY\_virtual}&0x01 \\
-\livelink{chap:DWVIRTUALITYpurevirtual}{DW\_VIRTUALITY\_pure\_virtual}&0x02 \\
+\DWVIRTUALITYnone&0x00 \\
+\DWVIRTUALITYvirtual&0x01 \\
+\DWVIRTUALITYpurevirtual&0x02 \\
\end{centering}
The value
-\livelink{chap:DWVIRTUALITYnone}{DW\_VIRTUALITY\_none} is equivalent to the absence of the
-\livelink{chap:DWATvirtuality}{DW\_AT\_virtuality}
+\DWVIRTUALITYnone{} is equivalent to the absence of the
+\DWATvirtuality{}
attribute.
\section{Source Languages}
in
\addtoindexx{language name encoding}
the
-\livelink{chap:DWATlanguage}{DW\_AT\_language}
+\DWATlanguage{}
attribute are given in
Table \refersec{tab:languageencodings}.
Names marked with
also shows the
\addtoindexx{lower bound attribute!default}
default lower bound, if any, assumed for
-an omitted \livelink{chap:DWATlowerbound}{DW\_AT\_lower\_bound} attribute in the context of a
-\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type} debugging information entry for each
+an omitted \DWATlowerbound{} attribute in the context of a
+\DWTAGsubrangetype{} debugging information entry for each
defined language.
\begin{centering}
\hline
\dag \ \textit{See text} \\ \ddag \ \textit{New in \addtoindex{DWARF Version 5}}
\endlastfoot
-
-\livelink{chap:DWLANGC89}{DW\_LANG\_C89} &0x0001 &0 \\
-\livelink{chap:DWLANGC}{DW\_LANG\_C} &0x0002 &0 \\
-\livelink{chap:DWLANGAda83}{DW\_LANG\_Ada83} \dag &0x0003 &1 \addtoindexx{Ada} \\
-\livelink{chap:DWLANGCplusplus}{DW\_LANG\_C\_plus\_plus} &0x0004 &0 \\
-\livelink{chap:DWLANGCobol74}{DW\_LANG\_Cobol74} \dag &0x0005 &1 \\
-\livelink{chap:DWLANGCobol85}{DW\_LANG\_Cobol85} \dag &0x0006 &1 \\
-\livelink{chap:DWLANGFortran77}{DW\_LANG\_Fortran77} &0x0007 &1 \\
-\livelink{chap:DWLANGFortran90}{DW\_LANG\_Fortran90} &0x0008 &1 \\
-\livelink{chap:DWLANGPascal83}{DW\_LANG\_Pascal83} &0x0009 &1 \\
-\livelink{chap:DWLANGModula2}{DW\_LANG\_Modula2} &0x000a &1 \\
-\livelink{chap:DWLANGJava}{DW\_LANG\_Java}&0x000b &0 \\
-\livelink{chap:DWLANGC99}{DW\_LANG\_C99}&0x000c &0 \\
-\livelink{chap:DWLANGAda95}{DW\_LANG\_Ada95} \dag &0x000d &1 \addtoindexx{Ada} \\
-\livelink{chap:DWLANGFortran95}{DW\_LANG\_Fortran95} &0x000e &1 \\
-\livelink{chap:DWLANGPLI}{DW\_LANG\_PLI} \dag &0x000f &1 \\
-\livelink{chap:DWLANGObjC}{DW\_LANG\_ObjC} &0x0010 &0 \\
-\livelink{chap:DWLANGObjCplusplus}{DW\_LANG\_ObjC\_plus\_plus} &0x0011 &0 \\
-\livelink{chap:DWLANGUPC}{DW\_LANG\_UPC} &0x0012 &0 \\
-\livelink{chap:DWLANGD}{DW\_LANG\_D} &0x0013 &0 \\
-\livelink{chap:DWLANGPython}{DW\_LANG\_Python} \dag &0x0014 &0 \\
-\livelink{chap:DWLANGOpenCL}{DW\_LANG\_OpenCL} \dag \ddag &0x0015 &0 \\
-\livelink{chap:DWLANGGo}{DW\_LANG\_Go} \dag \ddag &0x0016 &0 \\
-\livelink{chap:DWLANGModula3}{DW\_LANG\_Modula3} \dag \ddag &0x0017 &1 \\
-\livelink{chap:DWLANGHaskell}{DW\_LANG\_Haskell} \dag \ddag &0x0018 &0 \\
-\livelink{chap:DWXXXlohiuser}{DW\_LANG\_lo\_user} &0x8000 & \\
-\livelink{chap:DWXXXlohiuser}{DW\_LANG\_hi\_user} &\xffff & \\
+\addtoindexx{ISO-defined language names}
+
+\DWLANGCeightynine &0x0001 &0 \addtoindexx{C:1989 (ISO)} \\
+\DWLANGC{} &0x0002 &0 \addtoindexx{C!non-standard} \\
+\DWLANGAdaeightythree{} \dag &0x0003 &1 \addtoindexx{Ada:1983 (ISO)} \\
+\DWLANGCplusplus{} &0x0004 &0 \addtoindexx{C++:1998 (ISO)} \\
+\DWLANGCobolseventyfour{} \dag &0x0005 &1 \addtoindexx{COBOL:1974 (ISO)} \\
+\DWLANGCoboleightyfive{} \dag &0x0006 &1 \addtoindexx{COBOL:1985 (ISO)} \\
+\DWLANGFortranseventyseven &0x0007 &1 \addtoindexx{FORTRAN:1977 (ISO)} \\
+\DWLANGFortranninety &0x0008 &1 \addtoindexx{Fortran:1990 (ISO)} \\
+\DWLANGPascaleightythree &0x0009 &1 \addtoindexx{Pascal:1983 (ISO)} \\
+\DWLANGModulatwo &0x000a &1 \addtoindexx{Modula-2:1996 (ISO)} \\
+\DWLANGJava &0x000b &0 \addtoindexx{Java} \\
+\DWLANGCninetynine &0x000c &0 \addtoindexx{C:1999 (ISO)} \\
+\DWLANGAdaninetyfive{} \dag &0x000d &1 \addtoindexx{Ada:1995 (ISO)} \\
+\DWLANGFortranninetyfive &0x000e &1 \addtoindexx{Fortran:1995 (ISO)} \\
+\DWLANGPLI{} \dag &0x000f &1 \addtoindexx{PL/I:1976 (ANSI)}\\
+\DWLANGObjC{} &0x0010 &0 \addtoindexx{Objective C}\\
+\DWLANGObjCplusplus{} &0x0011 &0 \addtoindexx{Objective C++}\\
+\DWLANGUPC{} &0x0012 &0 \addtoindexx{UPC}\\
+\DWLANGD{} &0x0013 &0 \addtoindexx{D language}\\
+\DWLANGPython{} \dag &0x0014 &0 \addtoindexx{Python}\\
+\DWLANGOpenCL{} \dag \ddag &0x0015 &0 \addtoindexx{OpenCL}\\
+\DWLANGGo{} \dag \ddag &0x0016 &0 \addtoindexx{Go}\\
+\DWLANGModulathree{} \dag \ddag &0x0017 &1 \addtoindexx{Modula-3}\\
+\DWLANGHaskell{} \dag \ddag &0x0018 &0 \addtoindexx{Haskell}\\
+\DWLANGCpluspluszerothree{} \ddag &0x0019 &0 \addtoindexx{C++:2003 (ISO)}\\
+\DWLANGCpluspluseleven{} \ddag &0x001a &0 \addtoindexx{C++:2011 (ISO)}\\
+\DWLANGOCaml{} \ddag &0x001b &0 \addtoindexx{OCaml}\\
+\DWLANGRust{} \ddag &0x001c &0 \addtoindexx{Rust}\\
+\DWLANGCeleven{} \ddag &0x001d &0 \addtoindexx{C:2011 (ISO)}\\
+\DWLANGlouser{} &0x8000 & \\
+\DWLANGhiuser{} &\xffff & \\
\end{longtable}
\end{centering}
The value of the common
\addtoindexi{address}{address class!attribute encoding}
class encoding
-\livelink{chap:DWADDRnone}{DW\_ADDR\_none} is 0.
-
+\DWADDRnone{} is 0.
+\needlines{7}
\section{Identifier Case}
\label{datarep:identifiercase}
The encodings of the constants used in the
-\livelink{chap:DWATidentifiercase}{DW\_AT\_identifier\_case} attribute are given in
+\DWATidentifiercase{} attribute are given in
Table \refersec{tab:identifiercaseencodings}.
\begin{centering}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWIDcasesensitive}{DW\_ID\_case\_sensitive}&0x00 \\
-\livelink{chap:DWIDupcase}{DW\_ID\_up\_case}&0x01 \\
-\livelink{chap:DWIDdowncase}{DW\_ID\_down\_case}&0x02 \\
-\livelink{chap:DWIDcaseinsensitive}{DW\_ID\_case\_insensitive}&0x03 \\
+\DWIDcasesensitive&0x00 \\
+\DWIDupcase&0x01 \\
+\DWIDdowncase&0x02 \\
+\DWIDcaseinsensitive&0x03 \\
\end{longtable}
\end{centering}
\section{Calling Convention Encodings}
\label{datarep:callingconventionencodings}
The encodings of the constants used in the
-\livelink{chap:DWATcallingconvention}{DW\_AT\_calling\_convention} attribute are given in
+\DWATcallingconvention{} attribute are given in
Table \refersec{tab:callingconventionencodings}.
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\caption{Calling convention encodings} \label{tab:callingconventionencodings}\\
- \hline \bfseries Calling Convention name&\bfseries Value \\ \hline
+ \hline \bfseries Calling convention name&\bfseries Value \\ \hline
\endfirsthead
- \bfseries Calling Convention name&\bfseries Value\\ \hline
+ \bfseries Calling convention name&\bfseries Value\\ \hline
\endhead
\hline \emph{Continued on next page}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWCCnormal}{DW\_CC\_normal}&0x01 \\
-\livelink{chap:DWCCprogram}{DW\_CC\_program}&0x02 \\
-\livelink{chap:DWCCnocall}{DW\_CC\_nocall}&0x03 \\
-\livelink{chap:DWXXXlohiuser}{DW\_CC\_lo\_user}&0x40 \\
-\livelink{chap:DWXXXlohiuser}{DW\_CC\_hi\_user}&\xff \\
+\DWCCnormal&0x01 \\
+\DWCCprogram&0x02 \\
+\DWCCnocall&0x03 \\
+\DWCClouser&0x40 \\
+\DWCChiuser&\xff \\
\end{longtable}
\end{centering}
The encodings of the constants used in
\addtoindexx{inline attribute!encoding}
the
-\livelink{chap:DWATinline}{DW\_AT\_inline} attribute are given in
+\DWATinline{} attribute are given in
Table \refersec{tab:inlineencodings}.
\needlines{8}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\caption{Inline encodings} \label{tab:inlineencodings}\\
- \hline \bfseries Inline Code name&\bfseries Value \\ \hline
+ \hline \bfseries Inline code name&\bfseries Value \\ \hline
\endfirsthead
\bfseries Inline Code name&\bfseries Value\\ \hline
\endhead
\hline
\endlastfoot
-\livelink{chap:DWINLnotinlined}{DW\_INL\_not\_inlined}&0x00 \\
-\livelink{chap:DWINLinlined}{DW\_INL\_inlined}&0x01 \\
-\livelink{chap:DWINLdeclarednotinlined}{DW\_INL\_declared\_not\_inlined}&0x02 \\
-\livelink{chap:DWINLdeclaredinlined}{DW\_INL\_declared\_inlined}&0x03 \\
+\DWINLnotinlined&0x00 \\
+\DWINLinlined&0x01 \\
+\DWINLdeclarednotinlined&0x02 \\
+\DWINLdeclaredinlined&0x03 \\
\end{longtable}
\end{centering}
\label{datarep:arrayordering}
The encodings of the constants used in the
-\livelink{chap:DWATordering}{DW\_AT\_ordering} attribute are given in
+\DWATordering{} attribute are given in
Table \refersec{tab:orderingencodings}.
\needlines{8}
\hline
\endlastfoot
-\livelink{chap:DWORDrowmajor}{DW\_ORD\_row\_major}&0x00 \\
-\livelink{chap:DWORDcolmajor}{DW\_ORD\_col\_major}&0x01 \\
+\DWORDrowmajor&0x00 \\
+\DWORDcolmajor&0x01 \\
\end{longtable}
\end{centering}
The descriptors used in
\addtoindexx{discriminant list attribute!encoding}
the
-\livelink{chap:DWATdiscrlist}{DW\_AT\_discr\_list} attribute are
+\DWATdiscrlist{} attribute are
encoded as 1\dash byte constants. The
defined values are given in
Table \refersec{tab:discriminantdescriptorencodings}.
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\caption{Discriminant descriptor encodings} \label{tab:discriminantdescriptorencodings}\\
- \hline \bfseries Descriptor Name&\bfseries Value \\ \hline
+ \hline \bfseries Descriptor name&\bfseries Value \\ \hline
\endfirsthead
- \bfseries Descriptor Name&\bfseries Value\\ \hline
+ \bfseries Descriptor name&\bfseries Value\\ \hline
\endhead
\hline \emph{Continued on next page}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWDSClabel}{DW\_DSC\_label}&0x00 \\
-\livelink{chap:DWDSCrange}{DW\_DSC\_range}&0x01 \\
+\DWDSClabel&0x00 \\
+\DWDSCrange&0x01 \\
\end{longtable}
\end{centering}
\addtoindexx{section offset!in name lookup table set of entries}
4\dash byte or 8\dash byte
offset into the
-\dotdebuginfo{}
+\dotdebuginfo{} or \dotdebuginfodwo{}
section of the compilation unit header.
In the \thirtytwobitdwarfformat, this is a 4\dash byte unsigned offset;
in the \sixtyfourbitdwarfformat, this is an 8\dash byte unsigned offsets
\label{datarep:linenumberinformation}
The \addtoindexi{version number}{version number!line number information}
-in the line number program header is 4
+in the line number program header is \versiondotdebugline{}
(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
The boolean values \doublequote{true} and \doublequote{false}
\hline
\endlastfoot
-\livelink{chap:DWLNScopy}{DW\_LNS\_copy}&0x01 \\
-\livelink{chap:DWLNSadvancepc}{DW\_LNS\_advance\_pc}&0x02 \\
-\livelink{chap:DWLNSadvanceline}{DW\_LNS\_advance\_line}&0x03 \\
-\livelink{chap:DWLNSsetfile}{DW\_LNS\_set\_file}&0x04 \\
-\livelink{chap:DWLNSsetcolumn}{DW\_LNS\_set\_column}&0x05 \\
-\livelink{chap:DWLNSnegatestmt}{DW\_LNS\_negate\_stmt}&0x06 \\
-\livelink{chap:DWLNSsetbasicblock}{DW\_LNS\_set\_basic\_block}&0x07 \\
-\livelink{chap:DWLNSconstaddpc}{DW\_LNS\_const\_add\_pc}&0x08 \\
-\livelink{chap:DWLNSfixedadvancepc}{DW\_LNS\_fixed\_advance\_pc}&0x09 \\
-\livelink{chap:DWLNSsetprologueend}{DW\_LNS\_set\_prologue\_end}&0x0a \\
-\livelink{chap:DWLNSsetepiloguebegin}{DW\_LNS\_set\_epilogue\_begin}&0x0b \\
-\livelink{chap:DWLNSsetisa}{DW\_LNS\_set\_isa}&0x0c \\
+\DWLNScopy&0x01 \\
+\DWLNSadvancepc&0x02 \\
+\DWLNSadvanceline&0x03 \\
+\DWLNSsetfile&0x04 \\
+\DWLNSsetcolumn&0x05 \\
+\DWLNSnegatestmt&0x06 \\
+\DWLNSsetbasicblock&0x07 \\
+\DWLNSconstaddpc&0x08 \\
+\DWLNSfixedadvancepc&0x09 \\
+\DWLNSsetprologueend&0x0a \\*
+\DWLNSsetepiloguebegin&0x0b \\*
+\DWLNSsetisa&0x0c \\*
\end{longtable}
\end{centering}
\bfseries Opcode name&\bfseries Value\\ \hline
\endhead
\hline \emph{Continued on next page}
+\endfoot
+ \hline \ddag~\textit{New in DWARF Version 5}
+\endlastfoot
+
+\DWLNEendsequence &0x01 \\
+\DWLNEsetaddress &0x02 \\
+\DWLNEdefinefile &0x03 \\
+\DWLNEsetdiscriminator &0x04 \\
+\DWLNEdefinefileMDfive~\ddag &0x05 \\
+\DWLNElouser &0x80 \\
+\DWLNEhiuser &\xff \\
+
+\end{longtable}
+\end{centering}
+
+\needspace{10cm}
+The encodings for the file entry format are given in
+\addtoindexx{line number opcodes!file entry format encoding}
+Table \refersec{tab:linenumberfileentryformatencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+ \caption{Line number file entry format \mbox{encodings}} \label{tab:linenumberfileentryformatencodings}\\
+ \hline \bfseries File entry format name&\bfseries Value \\ \hline
+\endfirsthead
+ \bfseries File entry format name&\bfseries Value\\ \hline
+\endhead
+ \hline \emph{Continued on next page}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWLNEendsequence}{DW\_LNE\_end\_sequence}&0x01 \\
-\livelink{chap:DWLNEsetaddress}{DW\_LNE\_set\_address}&0x02\\
-\livelink{chap:DWLNEdefinefile}{DW\_LNE\_define\_file}&0x03\\
-\livelink{chap:DWLNEsetdiscriminator}{DW\_LNE\_set\_discriminator} &0x04 \\
-\livelink{chap:DWXXXlohiuser}{DW\_LNE\_lo\_user}&0x80 \\
-\livelink{chap:DWXXXlohiuser}{DW\_LNE\_hi\_user}&\xff \\
+\DWLNFtimestampsize & 0x01 \\
+\DWLNFMDfive & 0x02 \\
\end{longtable}
\end{centering}
\label{datarep:macroinformation}
The source line numbers and source file indices encoded in the
-macro information section are represented as unsigned LEB128
-numbers as are the constants in a
-\livelink{chap:DWMACINFOvendorext}{DW\_MACINFO\_vendor\_ext} entry.
+macro information section are represented as
+unsigned LEB128\addtoindexx{LEB128!unsigned} numbers.
-The macinfo type is encoded as a single byte.
+The macro information entry type is encoded as a single byte.
The encodings
-\addtoindexx{macinfo types!encoding}
+\addtoindexx{macro information entry types!encoding}
are given in
-Table \refersec{tab:macinfotypeencodings}.
+Table \refersec{tab:macroinfoentrytypeencodings}.
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
- \caption{Macinfo type encodings} \label{tab:macinfotypeencodings}\\
- \hline \bfseries Macinfo Type Name&\bfseries Value \\ \hline
+ \caption{Macro information entry type encodings} \label{tab:macroinfoentrytypeencodings}\\
+ \hline \bfseries Macro information entry type name&\bfseries Value \\ \hline
\endfirsthead
- \bfseries Macinfo Type Name&\bfseries Value\\ \hline
+ \bfseries Macro information entry type name&\bfseries Value\\ \hline
\endhead
\hline \emph{Continued on next page}
\endfoot
\hline
\endlastfoot
-\livelink{chap:DWMACINFOdefine}{DW\_MACINFO\_define}&0x01 \\
-\livelink{chap:DWMACINFOundef}{DW\_MACINFO\_undef}&0x02 \\
-\livelink{chap:DWMACINFOstartfile}{DW\_MACINFO\_start\_file}&0x03 \\
-\livelink{chap:DWMACINFOendfile}{DW\_MACINFO\_end\_file}&0x04 \\
-\livelink{chap:DWMACINFOvendorext}{DW\_MACINFO\_vendor\_ext}&\xff \\
+\DWMACROdefine &0x01 \\
+\DWMACROundef &0x02 \\
+\DWMACROstartfile &0x03 \\
+\DWMACROendfile &0x04 \\
+\DWMACROdefineindirect &0x05 \\
+\DWMACROundefindirect &0x06 \\
+\DWMACROtransparentinclude &0x07 \\
+% what about 0x08 thru 0x0a??
+\DWMACROdefineindirectx &0x0b \\
+\DWMACROundefindirectx &0x0c \\
+\DWMACROlouser &0xe0 \\
+\DWMACROhiuser &\xff \\
\end{longtable}
\end{centering}
\hline
\endlastfoot
-\livelink{chap:DWCFAadvanceloc}{DW\_CFA\_advance\_loc}&0x1&delta & \\
-\livelink{chap:DWCFAoffset}{DW\_CFA\_offset}&0x2®ister&ULEB128 offset \\
-\livelink{chap:DWCFArestore}{DW\_CFA\_restore}&0x3®ister & & \\
-\livelink{chap:DWCFAnop}{DW\_CFA\_nop}&0&0 & & \\
-\livelink{chap:DWCFAsetloc}{DW\_CFA\_set\_loc}&0&0x01&address & \\
-\livelink{chap:DWCFAadvanceloc1}{DW\_CFA\_advance\_loc1}&0&0x02&1\dash byte delta & \\
-\livelink{chap:DWCFAadvanceloc2}{DW\_CFA\_advance\_loc2}&0&0x03&2\dash byte delta & \\
-\livelink{chap:DWCFAadvanceloc4}{DW\_CFA\_advance\_loc4}&0&0x04&4\dash byte delta & \\
-\livelink{chap:DWCFAoffsetextended}{DW\_CFA\_offset\_extended}&0&0x05&ULEB128 register&ULEB128 offset \\
-\livelink{chap:DWCFArestoreextended}{DW\_CFA\_restore\_extended}&0&0x06&ULEB128 register & \\
-\livelink{chap:DWCFAundefined}{DW\_CFA\_undefined}&0&0x07&ULEB128 register & \\
-\livelink{chap:DWCFAsamevalue}{DW\_CFA\_same\_value}&0&0x08 &ULEB128 register & \\
-\livelink{chap:DWCFAregister}{DW\_CFA\_register}&0&0x09&ULEB128 register &ULEB128 offset \\
-\livelink{chap:DWCFArememberstate}{DW\_CFA\_remember\_state}&0&0x0a & & \\
-\livelink{chap:DWCFArestorestate}{DW\_CFA\_restore\_state}&0&0x0b & & \\
-\livelink{chap:DWCFAdefcfa}{DW\_CFA\_def\_cfa}&0&0x0c &ULEB128 register&ULEB128 offset \\
-\livelink{chap:DWCFAdefcfaregister}{DW\_CFA\_def\_cfa\_register}&0&0x0d&ULEB128 register & \\
-\livelink{chap:DWCFAdefcfaoffset}{DW\_CFA\_def\_cfa\_offset}&0&0x0e &ULEB128 offset & \\
-\livelink{chap:DWCFAdefcfaexpression}{DW\_CFA\_def\_cfa\_expression}&0&0x0f &BLOCK \\
-\livelink{chap:DWCFAexpression}{DW\_CFA\_expression}&0&0x10&ULEB128 register & BLOCK \\
-
-\livelink{chap:DWCFAoffsetextendedsf}{DW\_CFA\_offset\_extended\_sf}&0&0x11&ULEB128 register&SLEB128 offset \\
-\livelink{chap:DWCFAdefcfasf}{DW\_CFA\_def\_cfa\_sf}&0&0x12&ULEB128 register&SLEB128 offset \\
-\livelink{chap:DWCFAdefcfaoffsetsf}{DW\_CFA\_def\_cfa\_offset\_sf}&0&0x13&SLEB128 offset & \\
-\livelink{chap:DWCFAvaloffset}{DW\_CFA\_val\_offset}&0&0x14&ULEB128&ULEB128 \\
-\livelink{chap:DWCFAvaloffsetsf}{DW\_CFA\_val\_offset\_sf}&0&0x15&ULEB128&SLEB128 \\
-\livelink{chap:DWCFAvalexpression}{DW\_CFA\_val\_expression}&0&0x16&ULEB128&BLOCK \\
-\livelink{chap:DWXXXlohiuser}{DW\_CFA\_lo\_user}&0&0x1c & & \\
-\livelink{chap:DWXXXlohiuser}{DW\_CFA\_hi\_user}&0&\xiiif & & \\
+\DWCFAadvanceloc&0x1&delta & \\
+\DWCFAoffset&0x2®ister&ULEB128 offset \\
+\DWCFArestore&0x3®ister & & \\
+\DWCFAnop&0&0 & & \\
+\DWCFAsetloc&0&0x01&address & \\
+\DWCFAadvancelocone&0&0x02&1\dash byte delta & \\
+\DWCFAadvanceloctwo&0&0x03&2\dash byte delta & \\
+\DWCFAadvancelocfour&0&0x04&4\dash byte delta & \\
+\DWCFAoffsetextended&0&0x05&ULEB128 register&ULEB128 offset \\
+\DWCFArestoreextended&0&0x06&ULEB128 register & \\
+\DWCFAundefined&0&0x07&ULEB128 register & \\
+\DWCFAsamevalue&0&0x08 &ULEB128 register & \\
+\DWCFAregister&0&0x09&ULEB128 register &ULEB128 offset \\
+\DWCFArememberstate&0&0x0a & & \\
+\DWCFArestorestate&0&0x0b & & \\
+\DWCFAdefcfa&0&0x0c &ULEB128 register&ULEB128 offset \\
+\DWCFAdefcfaregister&0&0x0d&ULEB128 register & \\
+\DWCFAdefcfaoffset&0&0x0e &ULEB128 offset & \\
+\DWCFAdefcfaexpression&0&0x0f &BLOCK \\
+\DWCFAexpression&0&0x10&ULEB128 register & BLOCK \\
+
+\DWCFAoffsetextendedsf&0&0x11&ULEB128 register&SLEB128 offset \\
+\DWCFAdefcfasf&0&0x12&ULEB128 register&SLEB128 offset \\
+\DWCFAdefcfaoffsetsf&0&0x13&SLEB128 offset & \\
+\DWCFAvaloffset&0&0x14&ULEB128&ULEB128 \\
+\DWCFAvaloffsetsf&0&0x15&ULEB128&SLEB128 \\
+\DWCFAvalexpression&0&0x16&ULEB128&BLOCK \\
+\DWCFAlouser&0&0x1c & & \\
+\DWCFAhiuser&0&\xiiif & & \\
\end{longtable}
\end{centering}
corresponding compilation unit must be defined
(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+\section{String Offsets Table}
+\label{chap:stringoffsetstable}
+Each set of entries in the string offsets table contained in the
+\dotdebugstroffsets{} or \dotdebugstroffsetsdwo{}
+section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, this consists of the 4-byte value
+\wffffffff followed by an 8-byte unsigned integer
+that gives the actual length (see
+Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugstroffsets{}
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\item \texttt{padding} (\addtoindex{uhalf}) \\
+\end{enumerate}
+
+This header is followed by a series of string table offsets
+that have the same representation as \DWFORMstrp.
+For the 32-bit DWARF format, each offset is 4 bytes long; for
+the 64-bit DWARF format, each offset is 8 bytes long.
+
+The \DWATstroffsetsbase{} attribute points to the first
+entry following the header. The entries are indexed
+sequentially from this base entry, starting from 0.
+
+\section{Address Table}
+\label{chap:addresstable}
+Each set of entries in the address table contained in the
+\dotdebugaddr{} section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, this consists of the 4-byte value
+\wffffffff followed by an 8-byte unsigned integer
+that gives the actual length (see
+Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\needlines{4}
+\item \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugaddr{}
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of segment/address pairs.
+The segment size is given by the \texttt{segment\_size} field of the
+header, and the address size is given by the \texttt{address\_size}
+field of the header. If the \texttt{segment\_size} field in the header
+is zero, the entries consist only of an addresses.
+
+The \DWATaddrbase{} attribute points to the first entry
+following the header. The entries are indexed sequentially
+from this base entry, starting from 0.
+
+\section{Range List Table}
+\label{app:rangelisttable}
+Each set of entries in the range list table contained in the
+\dotdebugranges{} section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, this consists of the 4-byte value
+\wffffffff followed by an 8-byte unsigned integer
+that gives the actual length (see
+Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\needlines{4}
+\item \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugranges{}
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of range list entries as
+described in Section \refersec{chap:locationlists}.
+The segment size is given by the
+\texttt{segment\_size} field of the header, and the address size is
+given by the \texttt{address\_size} field of the header. If the
+\texttt{segment\_size} field in the header is zero, the segment
+selector is omitted from the range list entries.
+
+The \DWATrangesbase{} attribute points to the first entry
+following the header. The entries are referenced by a byte
+offset relative to this base address.
+
+
+\section{Location List Table}
+\label{datarep:locationlisttable}
+Each set of entries in the location list table contained in the
+\dotdebugloc{} or \dotdebuglocdwo{} sections begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, this consists of the 4-byte value
+\wffffffff followed by an 8-byte unsigned integer
+that gives the actual length (see
+Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\needlines{4}
+\item \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugloc{}
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of location list entries as
+described in Section \refersec{chap:locationlists}.
+The segment size is given by the
+\texttt{segment\_size} field of the header, and the address size is
+given by the \texttt{address\_size} field of the header. If the
+\texttt{segment\_size} field in the header is zero, the segment
+selector is omitted from the range list entries.
+
+The entries are referenced by a byte offset relative to the first
+location list following this header.
+
\section{Dependencies and Constraints}
\label{datarep:dependenciesandconstraints}
The debugging information in this format is intended to
exist
\addtoindexx{DWARF section names!list of}
-in
-the \dotdebugabbrev{},
+in the
+\dotdebugabbrev{},
+\dotdebugaddr{},
\dotdebugaranges{},
\dotdebugframe{},
\dotdebuginfo{},
\dotdebugline{},
\dotdebugloc{},
-\dotdebugmacinfo{},
+\dotdebugmacro{},
\dotdebugpubnames{},
\dotdebugpubtypes{},
\dotdebugranges{},
-\dotdebugstr{}
-and
-\dotdebugtypes{}
+\dotdebugstr{},
+and
+\dotdebugstroffsets{}
sections of an object file, or equivalent
separate file or database. The information is not
word\dash aligned. Consequently:
are given in
Table \ref{tab:integerrepresentationnames}.
+\needlines{8}
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{c|l}
\label{datarep:typesignaturecomputation}
A type signature is computed only by the DWARF producer;
-\addtoindexx{type signature computation}
+\addtoindexx{type signature!computation}
it is used by a DWARF consumer to resolve type references to
the type definitions that are contained in
\addtoindexx{type unit}
type units.
The type signature for a type T0 is formed from the
-\addtoindex{MD5 hash}
-of a flattened description of the type. The flattened
+\MDfive{}\footnote{\livetarg{def:MDfive}{MD5} Message Digest Algorithm,
+R.L. Rivest, RFC 1321, April 1992}
+hash of a flattened description of the type. The flattened
description of the type is a byte sequence derived from the
DWARF encoding of the type as follows:
\begin{enumerate}[1. ]
append the letter 'C', the DWARF tag of the construct, and
the name (taken from
\addtoindexx{name attribute}
-the \livelink{chap:DWATname}{DW\_AT\_name} attribute) of the type
+the \DWATname{} attribute) of the type
\addtoindexx{name attribute}
or namespace (including its trailing null byte).
\simplerule[\textwidth]
\begin{center}
\autocols[0pt]{c}{2}{l}{
-\livelink{chap:DWATname}{DW\_AT\_name},
-\livelink{chap:DWATaccessibility}{DW\_AT\_accessibility},
-\livelink{chap:DWATaddressclass}{DW\_AT\_address\_class},
-\livelink{chap:DWATallocated}{DW\_AT\_allocated},
-\livelink{chap:DWATartificial}{DW\_AT\_artificial},
-\livelink{chap:DWATassociated}{DW\_AT\_associated},
-\livelink{chap:DWATbinaryscale}{DW\_AT\_binary\_scale},
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset},
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size},
-\livelink{chap:DWATbitstride}{DW\_AT\_bit\_stride},
-\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size},
-\livelink{chap:DWATbytestride}{DW\_AT\_byte\_stride},
-\livelink{chap:DWATconstexpr}{DW\_AT\_const\_expr},
-\livelink{chap:DWATconstvalue}{DW\_AT\_const\_value},
-\livelink{chap:DWATcontainingtype}{DW\_AT\_containing\_type},
-\livelink{chap:DWATcount}{DW\_AT\_count},
-\livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset},
-\livelink{chap:DWATdatalocation}{DW\_AT\_data\_location},
-\livelink{chap:DWATdatamemberlocation}{DW\_AT\_data\_member\_location},
-\livelink{chap:DWATdecimalscale}{DW\_AT\_decimal\_scale},
-\livelink{chap:DWATdecimalsign}{DW\_AT\_decimal\_sign},
-\livelink{chap:DWATdefaultvalue}{DW\_AT\_default\_value},
-\livelink{chap:DWATdigitcount}{DW\_AT\_digit\_count},
-\livelink{chap:DWATdiscr}{DW\_AT\_discr},
-\livelink{chap:DWATdiscrlist}{DW\_AT\_discr\_list},
-\livelink{chap:DWATdiscrvalue}{DW\_AT\_discr\_value},
-\livelink{chap:DWATencoding}{DW\_AT\_encoding},
-\livelink{chap:DWATenumclass}{DW\_AT\_enum\_class},
-\livelink{chap:DWATendianity}{DW\_AT\_endianity},
-\livelink{chap:DWATexplicit}{DW\_AT\_explicit},
-\livelink{chap:DWATisoptional}{DW\_AT\_is\_optional},
-\livelink{chap:DWATlocation}{DW\_AT\_location},
-\livelink{chap:DWATlowerbound}{DW\_AT\_lower\_bound},
-\livelink{chap:DWATmutable}{DW\_AT\_mutable},
-\livelink{chap:DWATordering}{DW\_AT\_ordering},
-\livelink{chap:DWATpicturestring}{DW\_AT\_picture\_string},
-\livelink{chap:DWATprototyped}{DW\_AT\_prototyped},
-\livelink{chap:DWATsmall}{DW\_AT\_small},
-\livelink{chap:DWATsegment}{DW\_AT\_segment},
-\livelink{chap:DWATstringlength}{DW\_AT\_string\_length},
-\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size},
-\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size},
-\livelink{chap:DWATthreadsscaled}{DW\_AT\_threads\_scaled},
-\livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound},
-\livelink{chap:DWATuselocation}{DW\_AT\_use\_location},
-\livelink{chap:DWATuseUTF8}{DW\_AT\_use\_UTF8},
-\livelink{chap:DWATvariableparameter}{DW\_AT\_variable\_parameter},
-\livelink{chap:DWATvirtuality}{DW\_AT\_virtuality},
-\livelink{chap:DWATvisibility}{DW\_AT\_visibility},
-\livelink{chap:DWATvtableelemlocation}{DW\_AT\_vtable\_elem\_location}
+\DWATname,
+\DWATaccessibility,
+\DWATaddressclass,
+\DWATallocated,
+\DWATartificial,
+\DWATassociated,
+\DWATbinaryscale,
+\DWATbitoffset,
+\DWATbitsize,
+\DWATbitstride,
+\DWATbytesize,
+\DWATbytestride,
+\DWATconstexpr,
+\DWATconstvalue,
+\DWATcontainingtype,
+\DWATcount,
+\DWATdatabitoffset,
+\DWATdatalocation,
+\DWATdatamemberlocation,
+\DWATdecimalscale,
+\DWATdecimalsign,
+\DWATdefaultvalue,
+\DWATdigitcount,
+\DWATdiscr,
+\DWATdiscrlist,
+\DWATdiscrvalue,
+\DWATencoding,
+\DWATenumclass,
+\DWATendianity,
+\DWATexplicit,
+\DWATisoptional,
+\DWATlocation,
+\DWATlowerbound,
+\DWATmutable,
+\DWATordering,
+\DWATpicturestring,
+\DWATprototyped,
+\DWATrank,
+\DWATreference,
+\DWATrvaluereference,
+\DWATsmall,
+\DWATsegment,
+\DWATstringlength,
+\DWATstringlengthbitsize,
+\DWATstringlengthbytesize,
+\DWATthreadsscaled,
+\DWATupperbound,
+\DWATuselocation,
+\DWATuseUTFeight,
+\DWATvariableparameter,
+\DWATvirtuality,
+\DWATvisibility,
+\DWATvtableelemlocation
}
\end{center}
\simplerule[\textwidth]
\end{table}
Note that except for the initial
-\livelink{chap:DWATname}{DW\_AT\_name} attribute,
+\DWATname{} attribute,
\addtoindexx{name attribute}
attributes are appended in order according to the alphabetical
spelling of their identifier.
An attribute that refers to another type entry T is processed
as follows: (a) If T is in the list V at some V[x], use the
-letter 'R' as the marker and use the unsigned LEB128 encoding
-of x as the attribute value; otherwise, (b) use the letter 'T'
+letter 'R' as the marker and use the unsigned LEB128\addtoindexx{LEB128!unsigned}
+encoding of x as the attribute value; otherwise, (b) use the letter 'T'
as the marker, process the type T recursively by performing
Steps 2 through 7, and use the result as the attribute value.
LEB128 value) followed by the encoding of the value according
to the form code. To ensure reproducibility of the signature,
the set of forms used in the signature computation is limited
-to the following: \livelink{chap:DWFORMsdata}{DW\_FORM\_sdata},
-\livelink{chap:DWFORMflag}{DW\_FORM\_flag},
-\livelink{chap:DWFORMstring}{DW\_FORM\_string},
-and \livelink{chap:DWFORMblock}{DW\_FORM\_block}.
-
-\item If the tag in Step 3 is one of \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type},
-\livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type},
-\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type},
-\livelink{chap:DWTAGptrtomembertype}{DW\_TAG\_ptr\_to\_member\_type},
-or \livelink{chap:DWTAGfriend}{DW\_TAG\_friend}, and the referenced
-type (via the \livelink{chap:DWATtype}{DW\_AT\_type} or
-\livelink{chap:DWATfriend}{DW\_AT\_friend} attribute) has a
-\livelink{chap:DWATname}{DW\_AT\_name} attribute, append to S the letter 'N', the DWARF
-attribute code (\livelink{chap:DWATtype}{DW\_AT\_type} or
-\livelink{chap:DWATfriend}{DW\_AT\_friend}), the context of
+to the following:
+\DWFORMsdata,
+\DWFORMflag,
+\DWFORMstring,
+\DWFORMexprloc,
+and \DWFORMblock.
+
+\item If the tag in Step 3 is one of \DWTAGpointertype,
+\DWTAGreferencetype,
+\DWTAGrvaluereferencetype,
+\DWTAGptrtomembertype,
+or \DWTAGfriend, and the referenced
+type (via the \DWATtype{} or
+\DWATfriend{} attribute) has a
+\DWATname{} attribute, append to S the letter 'N', the DWARF
+attribute code (\DWATtype{} or
+\DWATfriend), the context of
the type (according to the method in Step 2), the letter 'E',
-and the name of the type. For \livelink{chap:DWTAGfriend}{DW\_TAG\_friend}, if the referenced
-entry is a \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}, the context is omitted and the
+and the name of the type. For \DWTAGfriend, if the referenced
+entry is a \DWTAGsubprogram, the context is omitted and the
name to be used is the ABI-specific name of the subprogram
-(e.g., the mangled linker name).
-
-
-\item If the tag in Step 3 is not one of \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type},
-\livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type},
-\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type},
-\livelink{chap:DWTAGptrtomembertype}{DW\_TAG\_ptr\_to\_member\_type}, or
-\livelink{chap:DWTAGfriend}{DW\_TAG\_friend}, but has
-a \livelink{chap:DWATtype}{DW\_AT\_type} attribute, or if the referenced type (via
-the \livelink{chap:DWATtype}{DW\_AT\_type} or
-\livelink{chap:DWATfriend}{DW\_AT\_friend} attribute) does not have a
-\livelink{chap:DWATname}{DW\_AT\_name} attribute, the attribute is processed according to
+(for example, the mangled linker name).
+
+
+\item If the tag in Step 3 is not one of \DWTAGpointertype,
+\DWTAGreferencetype,
+\DWTAGrvaluereferencetype,
+\DWTAGptrtomembertype, or
+\DWTAGfriend, but has
+a \DWATtype{} attribute, or if the referenced type (via
+the \DWATtype{} or
+\DWATfriend{} attribute) does not have a
+\DWATname{} attribute, the attribute is processed according to
the method in Step 4 for an attribute that refers to another
type entry.
\item Visit each child C of the debugging information
entry as follows: If C is a nested type entry or a member
function entry, and has
-a \livelink{chap:DWATname}{DW\_AT\_name} attribute, append to
+a \DWATname{} attribute, append to
\addtoindexx{name attribute}
S the letter 'S', the tag of C, and its name; otherwise,
process C recursively by performing Steps 3 through 7,
For the purposes of this algorithm, if a debugging information
entry S has a
-\livelink{chap:DWATspecification}{DW\_AT\_specification}
+\DWATspecification{}
attribute that refers to
another entry D (which has a
-\livelink{chap:DWATdeclaration}{DW\_AT\_declaration}
+\DWATdeclaration{}
attribute),
then S inherits the attributes and children of D, and S is
processed as if those attributes and children were present in
one in D is ignored.
DWARF tag and attribute codes are appended to the sequence
-as unsigned LEB128 values, using the values defined earlier
-in this chapter.
+as unsigned LEB128\addtoindexx{LEB128!unsigned} values,
+using the values defined earlier in this chapter.
\textit{A grammar describing this computation may be found in
Appendix \refersec{app:typesignaturecomputationgrammar}.
expression when possible.)
Once the string S has been formed from the DWARF encoding,
-an \addtoindex{MD5 hash} is computed for the string and the lower 64 bits
-are taken as the type signature.
+an \MDfive{} hash is computed for the string and the
+least significant 64 bits are taken as the type signature.
\textit{The string S is intended to be a flattened representation of
-the type that uniquely identifies that type (i.e., a different
+the type that uniquely identifies that type (that is, a different
type is highly unlikely to produce the same string).}
\textit{A debugging information entry should not be placed in a
\item \textit{The entry has an attribute whose value is a location
expression, and the location expression contains a reference to
-another debugging information entry (e.g., a \livelink{chap:DWOPcallref}{DW\_OP\_call\_ref}
+another debugging information entry (for example, a \DWOPcallref{}
operator), as it is unlikely that the entry will remain
identical across compilation units.}
\textit{Certain attributes are not included in the type signature:}
\begin{itemize}
-\item \textit{The \livelink{chap:DWATdeclaration}{DW\_AT\_declaration} attribute is not included because it
+\item \textit{The \DWATdeclaration{} attribute is not included because it
indicates that the debugging information entry represents an
incomplete declaration, and incomplete declarations should
not be placed in
\addtoindexx{type unit}
separate type units.}
-\item \textit{The \livelink{chap:DWATdescription}{DW\_AT\_description} attribute is not included because
+\item \textit{The \DWATdescription{} attribute is not included because
it does not provide any information unique to the defining
declaration of the type.}
-\item \textit{The \livelink{chap:DWATdeclfile}{DW\_AT\_decl\_file},
-\livelink{chap:DWATdeclline}{DW\_AT\_decl\_line}, and
-\livelink{chap:DWATdeclcolumn}{DW\_AT\_decl\_column} attributes are not included because they
+\item \textit{The \DWATdeclfile,
+\DWATdeclline, and
+\DWATdeclcolumn{} attributes are not included because they
may vary from one source file to the next, and would prevent
two otherwise identical type declarations from producing the
-\addtoindexx{MD5 hash}
-same hash.}
+same \MDfive{} hash.}
-\item \textit{The \livelink{chap:DWATobjectpointer}{DW\_AT\_object\_pointer} attribute is not included
+\item \textit{The \DWATobjectpointer{} attribute is not included
because the information it provides is not necessary for the
computation of a unique type signature.}
declaration of the function (as if the function had been defined out of
line).}
-An example that illustrates the computation of an MD5 hash may be found in
+An example that illustrates the computation of an \MDfive{} hash may be found in
Appendix \refersec{app:usingtypeunits}.