\DWCClouserMARK{}\DWCChiuserMARK{}DW\_CC,
\DWCFAlouserMARK{}\DWCFAhiuserMARK{}DW\_CFA,
\DWENDlouserMARK{}\DWENDhiuserMARK{}DW\_END,
-\bb
\DWIDXlouserMARK{}\DWIDXhiuserMARK{}DW\_IDX,
-\eb
\DWLANGlouserMARK{}\DWLANGhiuserMARK{}DW\_LANG,
-\bb
\DWLNCTlouserMARK{}\DWLNCThiuserMARK{}DW\_LNCT,
-\eb
\DWLNElouserMARK{}\DWLNEhiuserMARK{}DW\_LNE,
\DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO,
\DWOPlouserMARK{}\DWOPhiuserMARK{}DW\_OP or
\DWTAGlouserMARK{}\DWTAGhiuserMARK{}DW\_TAG)
-\bbeb
followed by \_lo\_user or \_hi\_user.
Values in the range between \textit{prefix}\_lo\_user
and \textit{prefix}\_hi\_user inclusive,
future system\dash defined values. All other values are reserved
for use by the system.
-\textit{For example, for
-\bb
-debugging information entry
-\eb
-tags, the special
-labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
+\textit{For example, for debugging information entry
+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
number of standard opcodes varies with the DWARF version,
the range for extensions is also version dependent. Thus,
\DWLNSlouserTARG{} and
-\DWLNShiuserTARG{} symbols are not defined.
-}
+\DWLNShiuserTARG{} symbols are not defined.}
Vendor defined tags, attributes, base type encodings, location
atoms, language names, line number actions, calling conventions
\needlines{4}
\textit{Note that operands of classes
-\bbeb
\CLASSconstant{} and
\CLASSflag{} do not require relocation. Attribute operands that use
-\bb
forms \DWFORMstring{},
-\eb
\DWFORMrefone, \DWFORMreftwo, \DWFORMreffour, \DWFORMrefeight, or
\DWFORMrefudata{} also do not need relocation.}
information can remain in individual object files without
being processed by the linker.
-\bb
\textit{This reduces link time by reducing the amount of information
the linker must process.}
-\eb
\needlines{6}
\subsubsection{First Partition (with Skeleton Unit)}
\end{itemize}
The attributes contained in the skeleton compilation
unit can be used by a DWARF consumer to find the
-\bbeb
DWARF object file that contains the second partition.
-\bb
\subsubsection{Second Partition (Unlinked or in a \texttt{.dwo} File)}
-\eb
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
\item
The full compilation unit, in the \dotdebuginfodwo{} section.
\begin{itemize}
-\item
-The full compilation unit entry includes a \DWATdwoid{}
-attribute whose form and value is the same as that of the \DWATdwoid{}
-attribute of the associated skeleton unit.
-\needlines{4}
+\bbeb
\item
Attributes contained in the full compilation unit
may refer to machine addresses indirectly using the \DWFORMaddrx{}
form, which accesses the table of addresses specified by the
\DWATaddrbase{} attribute in the associated skeleton unit.
-Location expressions may similarly do so using the \DWOPaddrx{} and
+Location descriptions may similarly do so using the \DWOPaddrx{} and
\DWOPconstx{} operations.
+
\item
\DWATranges{} attributes contained in the full compilation unit
may refer to range table entries with a \DWFORMsecoffset{} offset
relative to the base offset specified by the \DWATrangesbase{}
attribute in the associated skeleton unit.
\end{itemize}
+
\item Separate type units, in the \dotdebuginfodwo{} section.
\item
Except where noted otherwise, all references in this document
to a debugging information section (for example, \dotdebuginfo),
-\bb
-apply
-\eb
-also to the corresponding split DWARF section (for example,
+apply also to the corresponding split DWARF section (for example,
\dotdebuginfodwo).
\needlines{4}
The relocated addresses in the debugging information for an
executable object are virtual addresses.
-\bb
The sections containing the debugging information are typically
not loaded as part of the memory image of the program (in ELF
terminology, the sections are not "allocatable" and are not part
debugging information entry, as shown in
Table \refersec{tab:attributeencodings}.)
-\eb
-
\needlines{6}
\subsection{Shared Object Files}
\label{datarep:sharedobjectfiles}
base address at which the object file was attached. This offset
is available in the run\dash time linker\textquoteright s data structures.}
-\bb
As with executable objects, the sections containing debugging
information are typically not loaded as part of the memory image
of the shared object, and are typically linked as if they were
each to be loaded at virtual address 0.
-\eb
\subsection{DWARF Package Files}
\label{datarep:dwarfpackagefiles}
application, and is given the same name with a \doublequote{\texttt{.dwp}}
extension.\addtoindexx{\texttt{.dwp} file extension}}
+\needlines{4}
A DWARF package file is itself an object file, using the
\addtoindexx{package files}
\addtoindexx{DWARF package files}
The DWARF package file also contains two index sections that
provide a fast way to locate debug information by compilation
-unit ID (\DWATdwoid) for compilation units, or by type
+unit ID
+\bbeb
+for compilation units, or by type
signature for type units:
\begin{alltt}
\dotdebugcuindex
A version number.
\addtoindexx{version number!CU index information}
\addtoindexx{version number!TU index information}
-\bbeb
This number is specific to the CU and TU index information
and is independent of the DWARF version number.
\item \textit{padding} (\HFTuhalf) \\
Reserved to DWARF (must be zero).
-\bb
\item \texttt{section\_count} (\HFTuword) \\
The number of entries in the table of section counts that follows.
For brevity, the contents of this field is referred to as $N$ below.
-\eb
\item \texttt{unit\_count} (\HFTuword) \\
The number of compilation units or type units in the index.
table (at offset \mbox{$16 + 12 * S$} from the beginning of the section).
The table is a two-dimensional array of 4-byte words,
%(using the byte order of the application binary),
-\bb
with $N$ sections and $U + 1$
-\eb
rows, in row-major order. Each row in the array is indexed
starting from 0. The first row provides a key to the columns:
each column in this row provides a section identifier for a debug
refer to that section. The section identifiers are shown in
Table \referfol{tab:dwarfpackagefilesectionidentifierencodings}.
-\bb
\textit{Not all sections listed in the table need be included.}
-\eb
\needlines{12}
\begin{centering}
offsets, and provides the sizes of the contributions made by each
CU or TU to the corresponding section in the package file. Like
the table of offsets, it is a two-dimensional array of 4-byte
-words, with
-\bb
-$N$
-\eb
+words, with $N$
entries and $U$ rows, in row-major order. Each row in
the array is indexed starting from 1 (row 0 of the table of
offsets also serves as the key for the table of sizes).
-\bb
For an example, see Figure \refersec{fig:examplecuindexsection}.
-\eb
\subsection{DWARF Supplementary Object Files}
\label{datarep:dwarfsupplemetaryobjectfiles}
object files into a separate
\addtoindexi{\textit{supplementary object file}}{supplementary object file}
by some post-linking utility; the moved entries and strings can
-\bb
-then be
-\eb
-referenced
+then be referenced
from the debugging information of each of those executable or
shared object files.
-\bb
This facilitates distribution of separate consolidated debug files in
a simple manner.
-\eb
\needlines{4}
A DWARF \addtoindex{supplementary object file} is itself an object file,
\addttindexx{version}
A 2-byte unsigned integer representing the version of the DWARF
information for the compilation unit.
-\bbeb
The value in this field is \versiondotdebugsup.
\item \texttt{sup\_checksum} (array of \HFTubyte) \\
\addttindexx{sup\_checksum}
-\bb
An implementation-defined integer constant value that
provides unique identification of the supplementary file.
-\eb
\end{enumerate}
Debug information entries that refer to an executable's or shared
-object's addresses must \emph{not} be moved to supplementary files (the
-addesses will likely not be the same). Similarly,
-entries referenced from within location expressions or using loclistptr
+object's addresses must \emph{not} be moved to supplementary files
+(the addesses will likely not be the same). Similarly,
+entries referenced from within location descriptions or using loclistptr
form attributes must not be moved to a \addtoindex{supplementary object file}.
Executable or shared object file compilation units can use
\hypertarget{datarep:xxbitdwffmt}{}
\addtoindexx{32-bit DWARF format}
\addtoindexx{64-bit DWARF format}
-There are two
-\bb
-closely-related DWARF
-\eb
+There are two closely-related DWARF
formats. In the 32-bit DWARF
format, all values that represent lengths of DWARF sections
and offsets relative to the beginning of DWARF sections are
FDE structures, so that the 32-bit and 64-bit DWARF formats
can coexist and be distinguished within a single linked object.
-\bb
Except where noted otherwise, all references in this document
to a debugging information section (for example, \dotdebuginfo),
apply also to the corresponding split DWARF section (for example,
\dotdebuginfodwo).
-\eb
The differences between the 32- and 64-bit DWARF formats are
detailed in the following:
\needlines{4}
\item In the body of the \dotdebugstroffsets{}
-\bbeb
sections, the size of entries in the body depend on the DWARF
format as follows: in the 32-bit DWARF format, entries are 4-byte
unsigned integer values; in the 64-bit DWARF format, they are
section of the object file. Each
such contribution consists of a
\addtoindex{type unit} header
-(see Section \refersec{datarep:typeunitheader})
+(see Section \refersec{datarep:typeunitheaders})
followed by a \DWTAGtypeunit{} entry, together with
its children.
\endlastfoot
\DWUTcompileTARG~\ddag &0x01 \\
\DWUTtypeTARG~\ddag &0x02 \\
-\DWUTpartialTARG~\ddag &0x03 \\ \hline
+\DWUTpartialTARG~\ddag &0x03 \\
+\bb
+\DWUTskeletonTARG~\ddag &0x04 \\
+\DWUTsplitcompileTARG~\ddag &0x05 \\
+\DWUTsplittypeTARG~\ddag &0x06 \\
+\DWUTlouserTARG~\ddag &0x80 \\
+\DWUThiuserTARG~\ddag &\xff
+\eb
+\\
+\hline
\end{longtable}
\end{centering}
-\needlines{5}
\bb
-\subsubsection{Compilation and Partial Unit Headers}
+\textit{All unit headers in a compilation have the same size.
+Some header types include padding bytes to achieve this.}
\eb
+
+
+\needlines{5}
+\subsubsection{Compilation and Partial Unit Headers}
\label{datarep:compilationunitheader}
\begin{enumerate}[1. ]
\addtoindexx{version number!compilation unit}
A 2-byte unsigned integer representing the version of the
DWARF information for the compilation unit.
-\bbeb
The value in this field is \versiondotdebuginfo.
-\bb
\textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
for a summary of all version numbers that apply to DWARF sections.}
-\eb
\needlines{4}
\item \texttt{unit\_type} (\HFTubyte) \\
\textit{This field is new in \DWARFVersionV.}
\needlines{4}
-\bb
\item \texttt{address\_size} (\HFTubyte) \\
\addttindexx{address\_size}
A 1-byte unsigned integer representing the size in bytes of
\addtoindexx{address space!segmented}
segmented addressing, this value represents the size of the
offset portion of an address.
-\eb
\item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
A
in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
(see Section \refersec{datarep:32bitand64bitdwarfformats}).
-\bbpareb
+\bb
+\item \HFNunitpaddingONE{} (8 bytes) \\
+Reserved to DWARF (must be zero).
+\needlines{4}
+\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
+Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
+is 8 bytes in length.
+\eb
\end{enumerate}
-\subsubsection{Type Unit Header}
-\label{datarep:typeunitheader}
+\needlines{8}
+\bb
+\subsubsection{Skeleton and Split Compilation Unit Headers}
+\label{datarep:skeletonandfullcompilationunitheaders}
+\begin{enumerate}[1. ]
+
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+\addttindexx{unit\_length}
+A 4-byte or 12-byte
+\addtoindexx{initial length}
+unsigned integer representing the length
+of the \dotdebuginfo{}
+contribution for that compilation unit,
+not including the length field itself. In the \thirtytwobitdwarfformat,
+this is a 4-byte unsigned integer (which must be less
+than \xfffffffzero); in the \sixtyfourbitdwarfformat, 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} (\HFTuhalf) \\
+\addttindexx{version}
+\addtoindexx{version number!compilation unit}
+A 2-byte unsigned integer representing the version of the
+DWARF information for the compilation unit.
+
+The value in this field is \versiondotdebuginfo.
+
+\textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
+for a summary of all version numbers that apply to DWARF sections.}
+\needlines{4}
+\item \texttt{unit\_type} (\HFTubyte) \\
+\addttindexx{unit\_type}
+A 1-byte unsigned integer identifying this unit as a compilation unit.
+The value of this field is
+\DWUTskeleton{} for a skeleton compilation unit or
+\DWUTsplitcompile{} for a split compilation unit
+(see Section \refersec{chap:skeletoncompilationunitentries}).
+
+\textit{This field is new in \DWARFVersionV.}
+
+\needlines{4}
+\item \texttt{address\_size} (\HFTubyte) \\
+\addttindexx{address\_size}
+A 1-byte unsigned integer representing the size in bytes of
+an address on the target architecture. If the system uses
+\addtoindexx{address space!segmented}
+segmented addressing, this value represents the size of the
+offset portion of an address.
+
+\item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
+A
+\addtoindexx{section offset!in .debug\_info header}
+4-byte or 8-byte unsigned offset into the
+\dotdebugabbrev{}
+section. This offset associates the compilation unit with a
+particular set of debugging information entry abbreviations. In
+the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
+in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\needlines{6}
+\item \HFNdwoid{} (unit ID) \\
+An 8-byte implementation-defined integer constant value,
+known as the compilation unit ID, that provides
+unique identification of a skeleton compilation
+unit and its associated split compilation unit in
+the object file named in the \DWATdwoname{} attribute
+of the skeleton compilation.
+
+\needlines{4}
+\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
+Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
+is 8 bytes in length.
+\eb
+\end{enumerate}
+
+\needlines{8}
+\subsubsection{Type Unit Headers}
+\label{datarep:typeunitheaders}
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
\dotdebuginfo{} section,
consists of the following information:
\begin{enumerate}[1. ]
-
-\needlines{4}
\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
\addttindexx{unit\_length}
A 4-byte or 12-byte unsigned integer
\addtoindexx{version number!type unit}
A 2-byte unsigned integer representing the version of the
DWARF information for the type unit.
-\bbeb
The value in this field is \versiondotdebuginfo.
\item \texttt{unit\_type} (\HFTubyte) \\
\addttindexx{unit\_type}
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:typeunitentries}).
+The value of this field is \DWUTtype{} for a
+\bb
+non-split
+\eb
+type unit
+(see Section \refersec{chap:typeunitentries})
+\bb
+or \DWUTsplittype{} for a split type unit.
+\eb
\textit{This field is new in \DWARFVersionV.}
\needlines{4}
-\bb
\item \texttt{address\_size} (\HFTubyte) \\
\addttindexx{address\_size}
A 1-byte unsigned integer representing the size
\addtoindexx{address space!segmented}
segmented addressing, this value represents the size of the
offset portion of an address.
-\eb
+\needlines{6}
\item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
A
\addtoindexx{section offset!in .debug\_info header}
in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
(see Section \refersec{datarep:32bitand64bitdwarfformats}).
-\bbpareb
-
\item \texttt{type\_signature} (8-byte unsigned integer) \\
\addttindexx{type\_signature}
\addtoindexx{type signature}
the primary type contained in this
\addtoindex{type unit} uses this value.}
+\needlines{8}
\item \texttt{type\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
\addttindexx{type\_offset}
A 4-byte or 8-byte unsigned offset
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 \referfol{tab:tagencodings}.
+Table \refersec{tab:tagencodings}.
+\needlines{6}
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\DWTAGunspecifiedtype&0x3b \\
\DWTAGpartialunit&0x3c \\
\DWTAGimportedunit&0x3d \\
+\bb
+\textit{Reserved}&0x3e\footnote{Code 0x3e is reserved to allow backward compatible support of the
+DW\_TAG\_mutable\_type DIE that was defined (only) in \DWARFVersionIII.}
+\eb
+\\
\DWTAGcondition&\xiiif \\
\DWTAGsharedtype&0x40 \\
\DWTAGtypeunit & 0x41 \\
\DWTAGatomictype~\ddag & 0x47 \\
\DWTAGcallsite~\ddag & 0x48 \\
\DWTAGcallsiteparameter~\ddag & 0x49 \\
+\bb
+\DWTAGskeletonunit~\ddag & 0x4a
+\eb
+\\
\DWTAGlouser&0x4080 \\
\DWTAGhiuser&\xffff \\
\end{longtable}
The series of attribute specifications ends with an
entry containing 0 for the name and 0 for the form.
+\needlines{4}
The attribute form
\DWFORMindirectTARG{} is a special case. For
attributes with this form, the attribute value itself in the
\addtoindexx{friend attribute} \\
\DWATidentifiercase&0x42&\livelink{chap:classconstant}{constant}
\addtoindexx{identifier case attribute} \\
-\bb
\textit{Reserved}&0x43\footnote{Code 0x43 is reserved to allow backward compatible support of the
DW\_AT\_macro\_info \mbox{attribute} which was
defined in \DWARFVersionIV{} and earlier.}
-\eb
&\livelink{chap:classmacptr}{macptr}
\addtoindexx{macro information attribute (legacy)!encoding} \\
\DWATnamelistitem&0x44&\livelink{chap:classreference}{reference}
\DWATrangesbase~\ddag&0x74&
\livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}
\addtoindexx{ranges base!encoding} \\
-\DWATdwoid~\ddag &0x75&
- \livelink{chap:classconstant}{constant}
- \addtoindexx{split DWARF object file id!encoding} \\
+\bb
+\textit{Reserved} &0x75& \textit{Unused}
+\eb
+\\
\DWATdwoname~\ddag &0x76&
\livelink{chap:classstring}{string}
\addtoindexx{split DWARF object file name!encoding} \\
\livelink{chap:classflag}{flag} \\
\DWATrvaluereference~\ddag &0x78&
\livelink{chap:classflag}{flag} \\
-\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr}
+\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr}
\addtoindexx{macro information attribute} \\
\DWATcallallcalls~\ddag &0x7a&\CLASSflag
\addtoindexx{all calls summary attribute} \\
case, the attribute is implicitly indicated as present, and
no value is encoded in the debugging information entry itself.
+\needlines{4}
\item \livelinki{chap:classlineptr}{lineptr}{lineptr class} \\
\livetarg{datarep:classlineptr}{}
This is an offset into
share a common representation, it is not possible for an
attribute to allow more than one of these classes}
-
+\needlines{4}
\begin{itemize}
\item \livelinki{chap:classreference}{reference}{reference class} \\
\livetarg{datarep:classreference}{}
\DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} \\
\DWLANGFortranzerothree{}~\ddag &0x0022 &1 \addtoindexx{Fortran:2004 (ISO)} \\
\DWLANGFortranzeroeight{}~\ddag &0x0023 &1 \addtoindexx{Fortran:2010 (ISO)} \\
+\bb
+\DWLANGRenderScript{}~\ddag &0x0024 &0 \addtoindexx{RenderScript Kernel Language}
+\eb
+\\
\DWLANGlouser{} &0x8000 & \\
\DWLANGhiuser{} &\xffff & \\
\label{datarep:nameindextable}
The \addtoindexi{version number}{version number!name index table}
in the name index table header is \versiondotdebugnames{}.
-\bbeb
The name index attributes and their encodings are listed in Table \referfol{datarep:indexattributeencodings}.
\item version (\HFTuhalf) \\
A 2-byte version identifier representing the version of the
DWARF information for the address range table.
-\bbeb
This value in this field \addtoindexx{version number!address range table} is 2.
The \addtoindexi{version number}{version number!line number information}
in the line number program header is \versiondotdebugline{}.
-\bbeb
The boolean values \doublequote{true} and \doublequote{false}
used by the line number information program are encoded
\label{datarep:macroinformation}
The \addtoindexi{version number}{version number!macro information}
in the macro information header is \versiondotdebugmacro{}.
-\bbeb
The source line numbers and source file indices encoded in the
macro information section are represented as
The value of the CIE \addtoindexi{version number}{version number!call frame information}
is \versiondotdebugframe.
-\bbeb
Call frame instructions are encoded in one or more bytes. The
primary opcode is encoded in the high order two bits of
\addtoindexx{version number!string offsets table}
A 2-byte version identifier containing the value
\versiondotdebugstroffsets{}.
-\bbeb
\item \textit{padding} (\HFTuhalf) \\
-\bb
Reserved to DWARF (must be zero).
-\eb
\end{enumerate}
This header is followed by a series of string table offsets
\addtoindexx{version number!address table}
A 2-byte version identifier containing the value
\versiondotdebugaddr{}.
-\bbeb
\needlines{4}
\item \texttt{address\_size} (\HFTubyte) \\
\addtoindexx{version number!range list table}
A 2-byte version identifier containing the value
\versiondotdebugranges{}.
-\bbeb
\needlines{4}
\item \texttt{address\_size} (\HFTubyte) \\
\addtoindexx{version number!location list table}
A 2-byte version identifier containing the value
\versiondotdebugloc{}.
-\bbeb
\needlines{5}
\item \texttt{address\_size} (\HFTubyte) \\
\textit{A type signature is computed only by a DWARF producer;
\addtoindexx{type signature!computation} a consumer need
+\bb
+only
+\eb
compare two type signatures to check for equality.}
\needlines{4}
in their own alphabetical suborder.
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
+as follows:
+\begin{enumerate}[ a)]
+\item
+\bb
+If
+\eb
+T is in the list V at some V[x], use the
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'
+encoding of x as the attribute value.
+
+\item
+\bb
+Otherwise, append type T to the list V, then
+\eb
+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.
+\end{enumerate}
\needlines{4}
Other attribute values use the letter 'A' as the marker, and
\DWFORMexprloc,
and \DWFORMblock.
-\needlines{4}
\item If the tag in Step 3 is one of \DWTAGpointertype,
\DWTAGreferencetype,
\DWTAGrvaluereferencetype,
name to be used is the ABI-specific name of the subprogram
(for example, the mangled linker name).
-
+\needlines{6}
\item If the tag in Step 3 is not one of \DWTAGpointertype,
\DWTAGreferencetype,
\DWTAGrvaluereferencetype,
\begin{itemize}
\item \textit{The entry has an attribute whose value is a location
-expression, and the location expression contains a reference to
+description, and the location description
+contains a reference to
another debugging information entry (for example, a \DWOPcallref{}
operator), as it is unlikely that the entry will remain
identical across compilation units.}
encoding the type to allow for cases where a complete definition
of the type might not be available in all compilation units.}
-\needlines{4}
+%\needlines{4}
\textit{If a type definition contains the definition of a member function,
it cannot be moved as is into a type unit, because the member function
contains attributes that are unique to that compilation unit.
Such a type definition can be moved to a type unit by rewriting the
-\bb
-debugging information entry
-\eb
-tree,
+debugging information entry tree,
moving the member function declaration into a separate declaration tree,
and replacing the function definition in the type with a non-defining
declaration of the function (as if the function had been defined out of
is defined in \addtoindex{C} as shown in
Figure \referfol{fig:nametablehashfunctiondefinition}.\footnoteRR{
This hash function is sometimes known as the
-\bb
"\addtoindex{Bernstein hash function}" or the
-\eb
"\addtoindex{DJB hash function}"
(see, for example,
\hrefself{http://en.wikipedia.org/wiki/List\_of\_hash\_functions} or
\hrefself{http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function)}.}
-\begin{figure}[h]
-\bb
+\begin{figure}[ht]
\begin{lstlisting}
uint32_t /* must be a 32-bit integer type */
}
\end{lstlisting}
-\eb
\caption{Name Table Hash Function Definition}
\label{fig:nametablehashfunctiondefinition}
\end{figure}