Fortran Common block references are now linked.
basic_block references are not yet linked, and
a few other 'block' strings not handled, the proper
target is not yet set.
This section presents the debugging information entries that
describe individual data objects: variables, parameters and
constants, and lists of those objects that may be grouped in
-a single declaration, such as a common \nolink{block}.
+a single declaration, such as
+a common \livelink{chap:commonblockentry}{block}.
\section{Data Object Entries}
\label{chap:dataobjectentries}
\textit{The scope of a variable may begin somewhere in the middle of
-a lexical \nolink{block} in a language that allows executable code in a
+a lexical \livelink{chap:lexicalblock}{block} in a language
+that allows executable code in a
\nolink{block} before a variable declaration, or where one declaration
containing initialization code may change the scope of a
subsequent declaration. For example, in the following C code:}
\section{Common Block Entries}
\label{chap:commonblockentries}
-A Fortran common \nolink{block} may be described by a debugging
+A Fortran \livetargi{chap:fortrancommonblock}{common}{Fortran!common block} \livetargi{chap:commonblockentry}{block}{common block entry}
+may be described by a debugging
information entry with the
tag \livetarg{chap:DWTAGcommonblock}{DW\-\_TAG\-\_common\-\_block}.
The
common \nolink{block}
entry has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose value
-is a null-terminated string containing the common \nolink{block}
+is a null-terminated string containing the
+\livetargi{chap:commonblockreferenceattribute}{common}{common block reference attribute} \nolink{block}
name as it appears in the source program. It may also have a
\livelink{chap:DWATlinkagename}{DW\-\_AT\-\_linkage\-\_name} attribute as described in
Section \refersec{chap:linkagenames}.
a base address selection entry, or an end of list entry.
A location list entry consists of two address offsets followed
-by a 2\dash byte length, followed by a \nolink{block} of contiguous bytes
+by a 2\dash byte length, followed by a block of contiguous bytes
that contains a DWARF location description. The length
-specifies the number of bytes in that \nolink{block}. The two offsets
+specifies the number of bytes in that block. The two offsets
are the same size as an address on the target machine.
A base address selection entry and an end of list entry each
\livetarg{chap:DWATcallingconvention}{DW\-\_AT\-\_calling\-\_convention}
&Subprogram calling convention \\
&\livetarg{chap:DWATcommonreference}{DW\-\_AT\-\_common\-\_reference} \\
-&Common \nolink{block} usage \\
+&Common \livelink{chap:commonblockreferenceattribute} usage \\
\livetarg{chap:DWATcompdir}{DW\-\_AT\-\_comp\-\_dir}
&Compilation directory \\
\livetarg{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}
\item \livetarg{chap:DWOPimplicitvalue}{DW\-\_OP\-\_implicit\-\_value} \\
The \livelink{chap:DWOPimplicitvalue}{DW\-\_OP\-\_implicit\-\_value} operation specifies an immediate value
using two operands: an unsigned LEB128 length, followed by
+%FIXME: should this block be a reference? To what?
a \nolink{block} representing the value in the memory representation
of the target machine. The length operand gives the length
in bytes of the \nolink{block}.
\section{Data Locations and DWARF Procedures}
Any debugging information entry describing a data object (which
-includes variables and parameters) or common \nolink{block} may have a
+includes variables and parameters) or common \livelink{chap:commonblockentry}{block} may have a
\livelink{chap:DWATlocation}{DW\-\_AT\-\_location} attribute, whose value is a location description
(see Section 2.6).
\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 \nolink{block}}
+\item \textit{whether this insruction is the beginning of a basic block}
\item \textit{and so on}
\end{itemize}
line number information instructions representing
one compilation unit. \\
-basic \nolink{block} &
+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 \nolink{block}.
+procedure invocation is defined to be an exit from a basic block.
-\textit{A basic \nolink{block} does not necessarily correspond to a specific source code
+\textit{A 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
+A boolean indicating that the current instruction is the beginning of a basic
\nolink{block}. \\
end\_sequence &
architecture. \\
discriminator &
-An unsigned integer identifying the \nolink{block} to which the
+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
-among multiple \nolink{block} that may all be associated with the
-same source file, line, and column. Where only one \nolink{block}
+among multiple blocks that may all be associated with the
+same source file, line, and column. Where only one block
exists for a given source position, the discriminator value
should be zero. \\
\end{longtable}
\begin{itemize} % bullet list
\item \textit{Prologue and epilogue code is not always in
-distinct \nolink{block}
+distinct block
at the beginning and end of a subroutine. It is common
to duplicate the epilogue code at the site of each return
from the code. Sometimes a compiler breaks up the register
calling address, but that need not be the case, especially if
the producer knows in some way the call never will return. The
context of the 'return address' might be on a different line,
-in a different lexical \nolink{block}, or past the end of the calling
+in a different lexical \livelink{chap:lexicalblock}{block},
+or past the end of the calling
subroutine. If a consumer were to assume that it was in the
same context as the calling address, the unwind might fail.}
represented by a debugging information entry with the tag
\livetarg{chap:DWTAGunspecifiedparameters}{DW\-\_TAG\-\_unspecified\-\_parameters}.
-The entry for a subroutine that includes a Fortran common \nolink{block}
+The entry for a subroutine that includes a
+Fortran \livelink{chap:fortrancommonblock}{common} \livelink{chap:commonblockentry}{block}
+\index{common block|see{Fortran common block}}
has a child entry with the
tag \livetarg{chap:DWTAGcommoninclusion}{DW\-\_TAG\-\_common\-\_inclusion}.
The
attributes or a \livelink{chap:DWATranges}{DW\-\_AT\-\_ranges} attribute
whose values encode the contiguous or non-contiguous address
ranges, respectively, of the machine instructions generated
-for the lexical \livelink(chap:lexicalblock}{block}
+for the lexical \livelink{chap:lexicalblock}{block}
(see Section \refersec{chap:codeaddressesandranges}).
-If a name has been given to the lexical \livelink(chap:lexicalblock}{block}
+If a name has been given to the
+lexical \livelink{chap:lexicalblock}{block}
in the source
program, then the corresponding
lexical \livelink{chap:lexicalblockentry}{block} entry has a
\livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute whose
value is a null\dash terminated string
-containing the name of the lexical \livelink(chap:lexicalblock}{block}
+containing the name of the lexical \livelink{chap:lexicalblock}{block}
as it appears in
the source program.
\textit{This is not the same as a C or C++ label (see below).}
-The lexical \livelink(chap:lexicalblockentry}{block} entry owns
+The lexical \livelink{chap:lexicalblockentry}{block} entry owns
debugging information entries that
-describe the declarations within that lexical \livelink(chap:lexicalblock}{block}.
+describe the declarations within that lexical \livelink{chap:lexicalblock}{block}.
There is
one such debugging information entry for each local declaration
-of an identifier or inner lexical \livelink(chap:lexicalblock}{block}.
+of an identifier or inner lexical \livelink{chap:lexicalblock}{block}.
\section{Label Entries}
\label{chap:labelentries}
\section{Try and Catch Block Entries}
\label{chap:tryandcatchblockentries}
-\textit{In C++ a lexical \livelink(chap:lexicalblock}{block} may be
+\textit{In C++ a lexical \livelink{chap:lexicalblock}{block} may be
designated as a ``catch \nolink{block}.''
A catch \livetargi{chap:catchblock}{block}{catch block} is an
exception handler that handles