\begin{enumerate}[1.]
\item A \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, whose value is a null-terminated
string, containing the data object name as it appears in the
-source program. If a variable entry describes an anonymous
-union, the name attribute is omitted or consists of a single
+source program. If a variable entry describes
+an
+\addtoindex{anonymous union},
+the name attribute is omitted or consists of a single
zero byte.
\item A \livelink{chap:DWATexternal}{DW\-\_AT\-\_external} attribute,
offsets are the same size as an address on the target machine.
For a location list to be specified, the base address of
+\addtoindexx{base address selection entry!in location list}
the corresponding compilation unit must be defined
(see Section \refersec{chap:normalandpartialcompilationunitentries}).
Each entry in a range list
(see Section \refersec{chap:noncontiguousaddressranges})
is either a
+\addtoindexx{base address selection entry!in range list}
range list entry, a base address selection entry, or an end
of list entry.
addresses are the same size as addresses on the target machine.
A base address selection entry and an end of list entry each
+\addtoindexx{base address selection entry!in range list}
consist of two (constant or relocated) addresses. The two
addresses are the same size as addresses on the target machine.
For a range list to be specified, the base address of the
+\addtoindexx{base address selection entry!in range list}
corresponding compilation unit must be defined
(see Section \refersec{chap:normalandpartialcompilationunitentries}).
\subsection{Fortran 90 Example}
\label{app:fortran90example}
Consider the Fortran 90 source fragment in
+\addtoindexx{array type entry!examples}
Figure \refersec{fig:fortran90examplesourcefragment}.
\begin{figure}[here]
For allocatable and pointer arrays, it is essentially required
by the Fortran 90 semantics that each array consist of two
+\addtoindexx{array!descriptor for}
parts, which we here call 1) the descriptor and 2) the raw
data. (A descriptor has often been called a dope vector in
other contexts, although it is often a structure of some kind
define a low\dash{} level
representation of a source program.
Each debugging information entry consists of an identifying
-tag and a series of attributes.
+tag and a series of
+\addtoindex{attributes}.
An entry, or group of entries together, provide a description of a
corresponding entity in the source program.
The tag specifies the class to which an entry belongs
sections of an object file.
-
\section{Attribute Types}
\label{chap:attributetypes}
Each attribute value is characterized by an attribute name.
+\addtoindexx{attribute duplication}
No more than one attribute with a given name may appear in any
debugging information entry.
There are no limitations on the
+\addtoindexx{attribute ordering}
ordering of attributes within a debugging information entry.
The attributes are listed in Figure 2.
The permissible values
+\addtoindexx{attribute value classes}
for an attribute belong to one or more classes of attribute
value forms.
Each form class may be represented in one or more ways.
Attribute value forms belong
to one of the classes shown in Figure \refersec{tab:classesofattributevalue}.
+\addtoindex{attributes!list of}
% These each need to link to definition page: FIXME
\begin{figure}[here]
functions.}
Any debugging information entry representing the
+\addtoindexx{artificial attribute}
declaration of an object or type artificially generated by
a compiler and not explicitly declared by the source program
\hypertarget{chap:DWATartificialobjectsortypesthat}
\addtoindex{.debug\_ranges} section to the beginning of the range list.
Each entry in a range list is either a range list entry,
+\addtoindexx{base address selection entry!in range list}
a base address selection entry, or an end of list entry.
A range list entry consists of:
\textit{Some computer architectures employ more than one instruction
set (for example, the ARM and MIPS architectures support
+\addtoindexx{ARM instruction set architecture}
a 32\dash bit as well as a 16\dash bit instruction set). Because the
instruction set is a function of the program counter, it is
convenient to encode the applicable instruction set in the
\item \textit{the source file name}
\item \textit{the source line number}
\item \textit{the source column number}
-\item \textit{whether this insruction is the beginning of a basic block}
+\item \textit{whether this insruction is the beginning of a \addtoindex{basic block}}
\item \textit{and so on}
\end{itemize}
line number information instructions representing
one compilation unit. \\
-basic block &
+\addtoindex{basic block} &
A sequence of instructions where only the first instruction may be a
branch target and only the last instruction may transfer control. A
-procedure invocation is defined to be an exit from a basic block.
+procedure invocation is defined to be an exit from a
+\addtoindex{basic block}.
-\textit{A basic block does not necessarily correspond to a specific source code
+\textit{A \addtoindex{basic block} does not
+necessarily correspond to a specific source code
construct.} \\
sequence &
statement. \\
basic\_block &
-A boolean indicating that the current instruction is the beginning of a basic
-\nolink{block}. \\
+A boolean indicating that the current instruction is the beginning of a
+\addtoindex{basic block}. \\
end\_sequence &
A boolean indicating that the current address is that of the first byte after
line & 1 \\
column & 0 \\
is\_stmt & determined by default\_is\_stmt in the line number program header \\
-basic\_block & ``false'' \\
+basic\_block & ``false'' \addtoindexx{basic block} \\
end\_sequence & ``false'' \\
prologue\_end & ``false'' \\
epilogue\_begin & ``false'' \\
\item Append a row to the matrix using the current values
of the state machine registers.
-\item Set the basic\_block register to ``false.''
+\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.
to the logical negation of its current value.
\item \textbf{DW\-\_LNS\-\_set\-\_basic\-\_block} \\
-The \livetarg{chap:DWLNSsetbasicblock}{DW\-\_LNS\-\_set\-\_basic\-\_block} opcode
-takes no operands. It sets the basic\_block register of the
+The \livetarg{chap:DWLNSsetbasicblock}{DW\-\_LNS\-\_set\-\_basic\-\_block}
+opcode
+\addtoindexx{basic block}
+takes no operands.
+It sets the basic\_block register of the
state machine to ``true.''
This
\hypertarget{chap:DWATbasetypesprimitivedatatypesofcompilationunit}
-attribute points to a debugging information entry
+attribute
+\addtoindexx{base types attribute}
+points to a debugging information entry
representing another compilation unit. It may be used
to specify the compilation unit containing the base type
entries used by entries in the current compilation unit
given another name.
}
-An imported declaration is represented by one or
+An
+imported declaration is represented by one or
+\addtoindex{imported declaration entry}
more debugging information entries with the
tag \livetarg{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}.
When
An imported declaration entry with a name attribute may be
used as a general means to rename or provide an alias for
+\addtoindexx{alias declaration|see{imported declaration entry}}
an entity, regardless of the context in which the importing
declaration or the imported entity occurs.
The entry for a subroutine that includes a
Fortran \livelink{chap:fortrancommonblock}{common} \livelink{chap:commonblockentry}{block}
-\index{common block|see{Fortran common block}}
+\addtoindexx{common block|see{Fortran common block}}
has a child entry with the
tag \livetarg{chap:DWTAGcommoninclusion}{DW\-\_TAG\-\_common\-\_inclusion}.
The
with the tag
\livetarg{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}.
-A base type entry has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose value is
+A \addtoindex{base type entry}
+has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose value is
a null\dash terminated string containing the name of the base type
as recognized by the programming language of the compilation
unit containing the base type entry.
\label{chap:arraytypeentries}
Many languages share the concept of an ``array,'' which is
+\addtoindexx{array type entry}
a table of components of identical type.
An array type is represented by a debugging information entry
with the tag \livetarg{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}.
-If a name has been given to
+If a name has been
+given to
+\addtoindexx{array!declaration of type}
the array type in the source program, then the corresponding
array type entry has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose value is a
null-terminated string containing the array type name as it
The
\hypertarget{chap:DWATorderingarrayrowcolumnordering}
array type entry describing a multidimensional array may
+\addtoindexx{array!element ordering}
have a \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering} attribute whose integer constant value is
interpreted to mean either row-major or column-major ordering
of array elements. The set of values and their meanings
The ordering attribute may optionally appear on one-dimensional
arrays; it will be ignored.
-An array type entry has a \livelink{chap:DWATtype}{DW\-\_AT\-\_type} attribute describing
+An array type entry has a \livelink{chap:DWATtype}{DW\-\_AT\-\_type}
+\addtoindexx{array!element type}
+attribute describing
the type of each element of the array.
If the amount of storage allocated to hold each element of an
The member entry for a named member has
a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose value is a null-terminated
string containing the member name as it appears in the source
-program. If the member entry describes an anonymous union, the
+program. If the member entry describes an
+\addtoindex{anonymous union},
+the
name attribute is omitted or consists of a single zero byte.
The data member entry has a \livelink{chap:DWATtype}{DW\-\_AT\-\_type} attribute to denote
This attribute indicates whether the data
member was declared with the mutable storage class specifier.
-The beginning of a data member is described relative to
+The
+\addtoindex{beginning of a data member}
+is described relative to
the beginning of the object in which it is immediately
contained. In general, the beginning is characterized by
both an address and a bit offset within the byte at that
\hypertarget{chap:DWATallocatedallocationstatusoftypes}
The
\livelink{chap:DWATallocated}{DW\-\_AT\-\_allocated}
-attribute may optionally be used with any
+attribute
+\addtoindexx{allocated attribute}
+may optionally be used with any
type for which objects of the type can be explicitly allocated
and deallocated. The presence of the attribute indicates that
objects of the type are allocatable and deallocatable. The
\hypertarget{chap:DWATassociatedassociationstatusoftypes}
The
\livelink{chap:DWATassociated}{DW\-\_AT\-\_associated} attribute
-may optionally be used with
+may
+\addtoindexx{associated attribute}
+optionally be used with
any type for which objects of the type can be dynamically
associated with other objects. The presence of the attribute
indicates that objects of the type can be associated. The