% captioning as DWARF4 here with figures as they moved (floated)
% making it hard to follow. Hence this uses fewer figures.
-DWARF can use a lot of disk space.
+DWARF
+\addtoindexx{DWARF compression}
+can
+\addtoindexx{DWARF duplicate elimination}
+use a lot of disk space.
This is especially true for C++, where the depth and complexity
of headers can mean that many, many (possibly thousands of)
object file representations provide COMDAT\dash style mechanisms as
well.) There are several variations in the COMDAT schemes in
common use, any of which should be sufficient for the purposes
-of the DWARF duplicate elimination techniques described here.}
+of the
+\addtoindexx{duplication elimination|see{DWARF duplicate elimination}}
+DWARF duplicate elimination techniques described here.}
\subsection{Naming and Usage Considerations}
\label{app:namingandusageconsiderations}
\subsection{Examples}
\label{app:examples}
-This section provides several examples in order to have a
+This section provides several
+\addtoindexx{DWARF duplicate elimination!examples}
+examples in order to have a
concrete basis for discussion.
In these examples, the focus is on the arrangement of DWARF
\subsubsection{C++ Example}
-The addtoindex{C++} source in
+The addtoindex{C++} source
+\addtoindexx{DWARF duplicate elimination!C++ example}
+in
Section \refersec{app:duplicateeliminationexample1csource}
is used to illustrate the DWARF
representation intended to allow duplicate elimination.
\subsubsection{Fortran Example}
-For a Fortran example, consider
+For a Fortran
+\addtoindexx{DWARF duplicate elimination!Fortran example}
+example, consider
Figure \refersec{app:duplicateeliminationexample2fortransource}.
\subsubsection{C Example}
-The \addtoindex{C++} example in this Section might appear to be equally
+The \addtoindex{C} example
+\addtoindexx{DWARF duplicate elimination!C example}
+in this Section might appear to be equally
valid as a \addtoindex{C} example. However, it is prudent to include
a \livelink{chap:DWTAGimportedunit}{DW\-\_TAG\-\_imported\-\_unit}
in the primary unit
In an initial length field, the values 0xfffffff0 through
0xffffffff are reserved by DWARF to indicate some form of
-extension relative to DWARF Version 2; such values must not
+extension relative to \addtoindex{DWARF Version 2}; such values must not
be interpreted as a length field. The use of one such value,
0xffffffff, is defined below
(see Section \refersec{datarep:32bitand64bitdwarfformats});
\livelink{chap:DWTAGlouser}{DW\-\_TAG\-\_lo\-\_user}&0x4080 \\
\livelink{chap:DWTAGhiuser}{DW\-\_TAG\-\_hi\-\_user}&0xffff \\
\end{longtable}
-\ddag TAG new in DWARF Version 4
+\ddag TAG new in \addtoindex{DWARF Version 4}
\end{centering}
\livetarg{chap:DWAThiuser}{DW\-\_AT\-\_hi\-\_user}&0x3fff& --- \addtoindexx{high user attribute encoding} \\
\end{longtable}
-\ddag Attribute new in DWARF Version 4
+\ddag Attribute new in \addtoindex{DWARF Version 4}
\end{centering}
\begin{centering}
\livelink{chap:DWFORMrefsig8}{DW\-\_FORM\-\_ref\-\_sig8} \ddag &0x20&reference \\
\end{longtable}
-\ddag FORM new in DWARF Version 4
+\ddag FORM new in \addtoindex{DWARF Version 4}
\end{centering}
\section{Variable Length Data}
\subsection{DWARF Expressions}
\label{datarep:dwarfexpressions}
-A DWARF expression is stored in a \nolink{block} of contiguous
+A
+\addtoindexx{DWARF Expression!operator encoding}
+DWARF expression is stored in a \nolink{block} of contiguous
bytes. The bytes form a sequence of operations. Each operation
is a 1\dash byte code that identifies that operation, followed by
zero or more bytes of additional data. The encodings for the
\livetarg{chap:DWATEhiuser}{DW\-\_ATE\-\_hi\-\_user} & 0xff \\
\end{longtable}
-\ddag Base type encoding new in DWARF Version 4
+\ddag Base type encoding new in \addtoindex{DWARF Version 4}
\end{centering}
\section{Discriminant Lists}
\label{datarep:discriminantlists}
-The descriptors used in the
+The descriptors used in
+\addtoindexx{discriminant list attribute!encoding}
+the
\livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list} attribute are
encoded as 1\dash byte constants. The
defined values are given in
\livetarg{chap:DWLNEhiuser}{DW\-\_LNE\-\_hi\-\_user}&0xff \\
\end{longtable}
-\ddag Extended opcode new in DWARF Version 4.
+\ddag Extended opcode new in \addtoindex{DWARF Version 4}.
\end{centering}
\section{Macro Information}
\label{datarep:dependenciesandconstraints}
The debugging information in this format is intended to
-exist in
+exist
+\addtoindexx{DWARF section names!list of}
+in
the \addtoindex{.debug\_abbrev},
\addtoindex{.debug\_aranges},
\addtoindex{.debug\_frame},
International, Inc., a trade group organized to promote Unix
System V Release 4 (SVR4).
-PLSIG drafted a standard for DWARF Version 1, compatible with
+PLSIG drafted a standard for \addtoindex{DWARF Version 1}, compatible with
the DWARF debugging format used at the time by SVR4 compilers
and debuggers from AT\&T. This was published as Revision 1.1.0
-on October 6, 1992. PLSIG also designed the DWARF Version 2
+on October 6, 1992. PLSIG also designed the \addtoindex{DWARF Version 2}
format, which followed the same general philosophy as Version
1, but with significant new functionality and a more compact,
though incompatible, encoding. An industry review draft
-of DWARF Version 2 was published as Revision 2.0.0 on July
+of \addtoindex{DWARF Version 2} was published as Revision 2.0.0 on July
27, 1993.
Unix International dissolved shortly after the draft of
The Committee reorganized in October, 1999, and met for the
next several years to address issues that had been noted with
-DWARF Version 2 as well as to add a number of new features.
+\addtoindex{DWARF Version 2} as well as to add a number of new features.
In mid-2003, the Committee became a workgroup under the Free
Standards Group (FSG), a industry consortium chartered to
-promote open standards. DWARF Version 3 was published on
+promote open standards. \addtoindex{DWARF Version 3} was published on
December 20, 2005, following industry review and comment.
The DWARF Committee withdrew from the Free Standards Group
independent since that time.
It is the intention of the DWARF Committee that migrating
-from DWARF Version 2 or Version 3
+from \addtoindex{DWARF Version 2} or Version 3
+\addtoindexx{DWARF Version 3}
or Version 4 to later versions should
be straightforward and easily accomplished.
-Almost all DWARF
-Version 2 and Version 3 and Version 4
+Almost all
+\addtoindex{DWARF Version 2}
+and Version 3
+\addtoindexx{DWARF Version 3}
+and Version 4
+\addtoindexx{DWARF Version 4}
constructs have been retained unchanged
in DWARF Version 5.
Each general operation represents a postfix operation on
a simple stack machine. Each element of the stack is the
size of an address on the target machine. The value on the
-top of the stack after ``executing'' the DWARF expression
-is taken to be the result (the address of the object, the
+top of the stack after ``executing'' the
+\addtoindex{DWARF expression}
+is
+\addtoindex{DWARF expression|see{location description}}
+taken to be the result (the address of the object, the
value of the array bound, the length of a dynamic string,
the desired value itself, and so on).
\subsubsection{Literal Encodings}
\label{chap:literalencodings}
-The following operations all push a value onto the DWARF
-stack. If the value of a constant in one of these operations
+The
+\addtoindexx{DWARF expression!literal encodings}
+following operations all push a value onto the DWARF
+stack.
+\addtoindexx{DWARF expression!stack operations}
+If the value of a constant in one of these operations
is larger than can be stored in a single stack element, the
value is truncated to the element size and the low\dash order bits
are pushed on the stack.
\subsubsection{Register Based Addressing}
\label{chap:registerbasedaddressing}
The following operations push a value onto the stack that is
+\addtoindexx{DWARF expression!register based addressing}
the result of adding the contents of a register to a given
signed offset.
\subsubsection{Stack Operations}
\label{chap:stackoperations}
-The following operations manipulate the DWARF stack. Operations
+The following
+\addtoindexx{DWARF expression!stack operations}
+operations manipulate the DWARF stack. Operations
that index the stack assume that the top of the stack (most
recently added entry) has index 0.
\end{enumerate}
\subsubsection{Arithmetic and Logical Operations}
-The following provide arithmetic and logical operations. Except
+The
+\addtoindexx{DWARF expression!arithmetic operations}
+following
+\addtoindexx{DWARF expression!logical operations}
+provide arithmetic and logical operations. Except
as otherwise specified, the arithmetic operations perfom
addressing arithmetic, that is, unsigned arithmetic that is
performed modulo one plus the largest representable address
\subsubsection{Control Flow Operations}
\label{chap:controlflowoperations}
-The following operations provide simple control of the flow of a DWARF expression.
+The
+\addtoindexx{DWARF expression!control flow operations}
+following operations provide simple control of the flow of a DWARF expression.
\begin{enumerate}[1]
\item \livetarg{chap:DWOPle}{DW\-\_OP\-\_le}, \livetarg{chap:DWOPge}{DW\-\_OP\-\_ge}, \livetarg{chap:DWOPeq}{DW\-\_OP\-\_eq}, \livetarg{chap:DWOPlt}{DW\-\_OP\-\_lt}, \livetarg{chap:DWOPgt}{DW\-\_OP\-\_gt}, \livetarg{chap:DWOPne}{DW\-\_OP\-\_ne} \\
The six relational operators each:
\subsubsection{Special Operations}
-There is one special operation currently defined:
+There
+\addtoindexx{DWARF expression!special operations}
+is one special operation currently defined:
\begin{enumerate}[1]
\item \livetarg{chap:DWOPnop}{DW\-\_OP\-\_nop} \\
The \livelink{chap:DWOPnop}{DW\-\_OP\-\_nop} operation is a place holder. It has no effect
\end{enumerate}
\subsection{Example Stack Operations}
-\textit {The stack operations defined in
+\textit {The
+\addtoindexx{DWARF expression!examples}
+stack operations defined in
Section \refersec{chap:stackoperations}.
are fairly conventional, but the following
examples illustrate their behavior graphically.
\livelink{chap:DWATlocation}{DW\-\_AT\-\_location} attribute, whose value is a location description
(see Section \refersec{chap:locationdescriptions}).
-A DWARF procedure is represented by any
-kind of debugging information entry that has a \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}
-attribute. If a suitable entry is not otherwise available,
+A
+\addtoindex{DWARF procedure}
+is represented by any
+kind of debugging information entry that has a
+\livelink{chap:DWATlocation}{DW\-\_AT\-\_location}
+attribute.
+If a suitable entry is not otherwise available,
a DWARF procedure can be represented using a debugging
+\addtoindexx{DWARF procedure entry}
information entry with the
tag \livetarg{chap:DWTAGdwarfprocedure}{DW\-\_TAG\-\_dwarf\-\_procedure}
together with a \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} attribute.
relocated address for the entity. While the \livelink{chap:DWATentrypc}{DW\-\_AT\-\_entry\-\_pc}
attribute might also seem appropriate for this purpose,
historically the \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc} attribute was used before the
-\livelink{chap:DWATentrypc}{DW\-\_AT\-\_entry\-\_pc} was introduced (in DWARF Version 3). There is
+\livelink{chap:DWATentrypc}{DW\-\_AT\-\_entry\-\_pc} was introduced
+(in \addtoindex{DWARF Version 3}). There is
insufficient reason to change this.
\subsection{Continuous Address Range}
and \addtoindex{Fortran}; it also covers the basic needs
of various other languages.
-This document describes DWARF Version 4, the fourth generation
+This document describes \addtoindex{DWARF Version 4},
+the fourth generation
of debugging information based on the DWARF format. DWARF
-Version 4 extends DWARF Version 3 in a compatible manner.
+Version 4 extends \addtoindex{DWARF Version 3}
+in a compatible manner.
The intended audience for this document is the developers
of both producers and consumers of debugging information,
This organization closely follows that used in the DWARF
Version 3 document. Except where needed to incorporate
-new material or to correct errors, the DWARF Version 3
+new material or to correct errors, the
+\addtoindex{DWARF Version 3}
text is generally reused in this document with little or
no modification.
names and values not reserved for vendor additions, however,
are reserved for future versions of this document.
-DWARF Version 5 is intended to be permissive rather than
+\addtoindex{DWARF Version 5} is intended to be permissive rather than
prescriptive.
Where this specification provides a means for
describing the source language, implementors are expected
\item Add additional support for template parameters in instantiations.
\item Add support for strongly typed enumerations in languages (such as C++) that have two
kinds of enumeration declarations.
-DWARF Version 4 is compatible with DWARF Version 3 except as follows:
+\addtoindex{DWARF Version 4} is compatible with
+\addtoindex{DWARF Version 3} except as follows:
\item DWARF attributes that use any of the new forms of attribute value representation (for
section offsets, flag compression, type signature references, and so on) cannot be read by
-DWARF Version 3 consumers because the consumer will not know how to skip over the
+\addtoindex{DWARF Version 3}
+consumers because the consumer will not know how to skip over the
unexpected form of data.
\item DWARF frame and line table sections include a additional fields that affect the location
and interpretation of other data in the section.
\end{itemize}
-DWARF Version 3 is compatible with DWARF Version 2 except as follows:
+\addtoindex{DWARF Version 3}
+is compatible with
+\addtoindex{DWARF Version 2} except as follows:
\begin{itemize}
\item
\item
References that use the attribute form \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}
are specified to be four bytes in the DWARF 32-bit format and
-eight bytes in the DWARF 64-bit format, while DWARF Version
-2 specifies that such references have the same size as an
+eight bytes in the DWARF 64-bit format, while
+\addtoindex{DWARF Version 2}
+specifies that such references have the same size as an
address on the target system (see Sections 7.4 and 7.5.4).
\item
\section[Changes Version1 to 2]{Changes from Version 1 to Version 2}
-DWARF Version 2 describes the second generation of debugging
-information based on the DWARF format. While DWARF Version
-2 provides new debugging information not available in
+\addtoindex{DWARF Version 2}
+describes the second generation of debugging
+information based on the DWARF format. While
+\addtoindex{DWARF Version 2}
+provides new debugging information not available in
Version 1, the primary focus of the changes for Version
2 is the representation of the information, rather than
the information content itself. The basic structure of
\textit{
A summary of the major changes
-made in DWARF Version 2 compared to the DWARF Version 1 may
-be found in the DWARF Version 2 document
+made in
+\addtoindex{DWARF Version 2}
+compared to the DWARF Version 1 may
+be found in the
+\addtoindex{DWARF Version 2}
+document
}
\textit{Such a matrix, however, would be impractically large. We
shrink it with two techniques. First, we delete from
the matrix each row whose file, line, source column and
-discriminator information is identical with that of its
+\addtoindex{discriminator} information
+is identical with that of its
predecessors. Any deleted row would never be the beginning of
a source statement. Second, we design a byte\dash coded language
for a state machine and store a stream of bytes in the object
The program\dash counter value corresponding to a machine instruction
generated by the compiler. \\
-op\_index &
+\addtoindex{op\_index} &
An unsigned integer representing the index of an operation within a VLIW
instruction. The index of the first operation is 0. For non\dash VLIW
architectures, this register will always be 0.
stream. \\
-file &
+\addtoindex{file} &
An unsigned integer indicating the identity of the source file
corresponding to a machine instruction. \\
-line &
+\addtoindex{line} &
An unsigned integer indicating a source line number. Lines are numbered
beginning at 1. The compiler may emit the value 0 in cases where an
instruction cannot be attributed to any source line. \\
-column &
+\addtoindex{column} &
An unsigned integer indicating a column number within a source line.
Columns are numbered beginning at 1. The value 0 is reserved to indicate
that a statement begins at the ``left edge'' of the line. \\
-is\_stmt &
+\addtoindex{is\_stmt} &
A boolean indicating that the current instruction is a recommended
breakpoint location. A recommended breakpoint location
is intended to ``represent'' a line, a
statement and/or a semantically distinct subpart of a
statement. \\
-basic\_block &
+\addtoindex{basic\_block} &
A boolean indicating that the current instruction is the beginning of a
\addtoindex{basic block}. \\
-end\_sequence &
+\addtoindex{end\_sequence} &
A boolean indicating that the current address is that of the first byte after
the end of a sequence of target machine instructions. end\_sequence
terminates a sequence of lines; therefore other information in the same
row is not meaningful. \\
-prologue\_end &
+\addtoindex{prologue\_end} &
A boolean indicating that the current address is one (of possibly many)
where execution should be suspended for an entry breakpoint of a
function. \\
-epilogue\_begin &
+\addtoindex{epilogue\_begin} &
A boolean indicating that the current address is one (of possibly many)
where execution should be suspended for an exit breakpoint of a function. \\
-isa &
+\addtoindex{isa} &
An unsigned integer whose value encodes the applicable
instruction set architecture for the current instruction.
The encoding of instruction sets should be shared by all
encoding be defined by the ABI authoring committee for each
architecture. \\
-discriminator &
+\addtoindex{discriminator} &
An unsigned integer identifying the block to which the
current instruction belongs. Discriminator values are assigned
arbitrarily by the DWARF producer and serve to distinguish
\textit{Opcode base is typically one greater than the highest-numbered
standard opcode defined for the specified version of the line
-number information (12 in DWARF Version 3 and Version 4, 9 in
-Version 2). If opcode\_base is less than the typical value,
+number information (12 in
+\addtoindex{DWARF Version 3} and
+\addtoindexx{DWARF Version 4}
+Version 4, 9 in
+\addtoindexx{DWARF Version 2}
+Version 2).
+If opcode\_base is less than the typical value,
then standard opcode numbers greater than or equal to the
opcode base are not used in the line number table of this unit
(and the codes are treated as special opcodes). If opcode\_base
\item Set the basic\_block register to ``false.'' \addtoindexx{basic block}
\item Set the prologue\_end register to ``false.''
\item Set the epilogue\_begin register to ``false.''
-\item Set the discriminator register to 0.
+\item Set the \addtoindex{discriminator} register to 0.
\end{enumerate}
\textit{When the maximum\_operations\_per\_instruction field is 1,
op\_index is always 0 and these calculations simplify to those
-given for addresses in DWARF Version 3.}
+given for addresses in
+\addtoindex{DWARF Version 3}.}
The amount to increment the line register is the line\_base plus
the result of the adjusted opcode modulo the line\_range. That
\item \textbf{DW\-\_LNS\-\_copy} \\
The \livetarg{chap:DWLNScopy}{DW\-\_LNS\-\_copy} opcode takes no operands. It appends a row
to the matrix using the current values of the state machine
-registers. Then it sets the discriminator register to 0,
-and sets the basic\_block, prologue\_end and epilogue\_begin
+registers. Then it sets the \addtoindex{discriminator} register to 0,
+and sets the \addtoindex{basic\_block},
+\addtoindex{prologue\_end} and
+\addtoindex{epilogue\_begin}
registers to ``false.''
\item \textbf{DW\-\_LNS\-\_advance\-\_pc} \\
The \livetarg{chap:DWLNSadvancepc}{DW\-\_LNS\-\_advance\-\_pc} opcode takes a single unsigned LEB128
operand as the operation advance and modifies the address
-and op\_index registers as specified in
+and \addtoindex{op\_index} registers as specified in
Section \refersec{chap:specialopcodes}.
\item \textbf{DW\-\_LNS\-\_advance\-\_line} \\
The \livetarg{chap:DWLNEsetdiscriminator}{DW\-\_LNE\-\_set\-\_discriminator}
opcode takes a single
parameter, an unsigned LEB128 integer. It sets the
-discriminator register to the new value.
+\addtoindex{discriminator} register to the new value.
\begin{enumerate}[1]
\item Either a \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc} and \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc} pair of
-attributes or a \livelink{chap:DWATranges}{DW\-\_AT\-\_ranges} attribute whose values encode the
-contiguous or non\dash contiguous address ranges, respectively,
+attributes or a
+\livelink{chap:DWATranges}{DW\-\_AT\-\_ranges} attribute
+whose values encode
+\addtoindexx{discontiguous address ranges|see{non-contiguous address ranges}}
+the
+contiguous or
+non\dash contiguous address ranges, respectively,
of the machine instructions generated for the compilation
unit (see Section {chap:codeaddressesandranges}).
A \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc} attribute may also
Notes:
\begin{itemize}
-\item ``V2'' means DWARF Version 2, published July 1993.
-\item ``V3'' means DWARF Version 3, published December 2005.
-\item ``V4'' means DWARF Version 4, published June 2010.
+\item ``V2'' means \addtoindex{DWARF Version 2}, published July 1993.
+\item ``V3'' means \addtoindex{DWARF Version 3}, published December 2005.
+\item ``V4'' means \addtoindex{DWARF Version 4}, published June 2010.
\item ``-'' means that a version number is not applicable
(the section's header does not include a version).
\addtoindexx{bit offset attribute}
new
\addtoindexx{data bit offset attribute}
-in DWARF Version 4 and
+in
+\addtoindex{DWARF Version 4} and
is also used for bit field members
(see Section \refersec{chap:datamemberentries}).
It
little\dash endian architectures.}
\textit{The attribute \livelink{chap:DWATbitoffset}{DW\-\_AT\-\_bit\-\_offset} is
-deprecated in DWARF Version
-4 for use in base types, but implementations may continue to
+deprecated in
+\addtoindex{DWARF Version 4}
+for use in base types, but implementations may continue to
support its use for compatibility.}
-\textit{The DWARF Version 3 definition of these attributes is as follows.}
+\textit{The
+\addtoindex{DWARF Version 3}
+definition of these attributes is as follows.}
\begin{myindentpara}{1cm}
\textit{A base type entry has a \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}
order bit of the storage unit used to contain that value.}
\end{myindentpara}
-\textit{In comparing DWARF Versions 3 and 4, note that DWARF V4
+\textit{In comparing
+DWARF Versions 3
+\addtoindexx{DWARF Version 3}
+and
+\addtoindexx{DWARF Version 4} and
+4, note that DWARF V4
defines the following combinations of attributes:}
\begin{itemize}
\livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}
and optionally \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}}
\end{itemize}
-DWARF V3 defines the following combinations:
+DWARF V3
+\addtoindexx{DWARF Version 3}
+defines the following combinations:
% FIXME: the figure below interferes with the following
% bullet list, which looks horrible as a result.
\begin{itemize}
Appendix \refersec{app:pascalexample}.}
\textit{Attribute \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}
-is new in DWARF Version 4 and is also used for base types
+is new in
+\addtoindex{DWARF Version 4}
+and is also used for base types
(see Section
\refersec{chap:basetypeentries}).
It replaces the
Version 4, but implementations may continue to support this
use for compatibility.}
-\textit{The DWARF Version 3 definitions of these attributes are
+\textit{The
+\addtoindex{DWARF Version 3}
+definitions of these attributes are
as follows.}
\begin{myindentpara}{1cm}
\livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size},
\livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size} and
\livelink{chap:DWATbitoffset}{DW\-\_AT\-\_bit\-\_offset} attribute
-combination may be found in the DWARF Version 3 Standard.}
+combination may be found in the
+\addtoindex{DWARF Version 3} Standard.}
-\textit{In comparing DWARF Versions 3 and 4, note that DWARF V4
+\textit{In comparing
+DWARF Versions 3
+\addtoindexx{DWARF Version 3}
+and
+\addtoindexx{DWARF Version 4}
+4, note that DWARF V4
defines the following combinations of attributes:}
\begin{itemize}
If the variant part has a discriminant, the discriminant is
\hypertarget{chap:DWATdiscrdiscriminantofvariantpart}
-represented by a separate debugging information entry which
+represented by a
+\addtoindexx{discriminant (entry)}
+separate debugging information entry which
is a child of the variant part entry. This entry has the form
of a structure data member entry. The variant part entry will
+\addtoindexx{discriminant attribute}
have a
-\livelink{chap:DWATdiscr}{DW\-\_AT\-\_discr} attribute whose value is a reference to
+\livelink{chap:DWATdiscr}{DW\-\_AT\-\_discr} attribute
+whose value is a reference to
the member entry for the discriminant.
If the variant part does not have a discriminant (tag field),
Alternatively,
\hypertarget{chap:DWATdiscrlistlistofdiscriminantvalues}
-the variant entry may contain a
+the variant entry may contain
+\addtoindexx{discriminant list attribute}
+a
\livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list}
attribute, whose value represents a list of discriminant
values. This list is represented by any of the
item on the list is prefixed with a discriminant value
descriptor that determines whether the list item represents
a single label or a label range. A single case label is
-represented as an LEB128 number as defined above for the
+represented as an LEB128 number as defined above for
+\addtoindexx{discriminant value attribute}
+the
\livelink{chap:DWATdiscrvalue}{DW\-\_AT\-\_discr\-\_value}
attribute. A label range is represented by
two LEB128 numbers, the low value of the range followed by the