Backup of editorial work to date. Not intended to be
authorRon Brender <ron.brender@gmail.com>
Sat, 9 Jan 2016 21:55:28 +0000 (16:55 -0500)
committerRon Brender <ron.brender@gmail.com>
Sat, 9 Jan 2016 21:55:28 +0000 (16:55 -0500)
distributed as a .pdf to the committee.

Signed-off-by: Ron Brender <ron.brender@gmail.com>
15 files changed:
dwarf5/latexdoc/attributesbytag.tex
dwarf5/latexdoc/changesummary.tex
dwarf5/latexdoc/copyright.tex
dwarf5/latexdoc/dataobject.tex
dwarf5/latexdoc/datarepresentation.tex
dwarf5/latexdoc/dwarf5.tex
dwarf5/latexdoc/examples.tex
dwarf5/latexdoc/foreword.tex
dwarf5/latexdoc/generaldescription.tex
dwarf5/latexdoc/introduction.tex
dwarf5/latexdoc/otherdebugginginformation.tex
dwarf5/latexdoc/programscope.tex
dwarf5/latexdoc/sectionversionnumbers.tex
dwarf5/latexdoc/splitobjects.tex
dwarf5/latexdoc/typeentries.tex

index 45f08bd..a618f70 100644 (file)
@@ -24,11 +24,22 @@ stands for all three of the
 \DWATdeclcolumn,
 \DWATdeclfile{} and 
 \DWATdeclline.
-\item The attribute \DWATsibling{} can be used on any DIE.
+\item The attribute \DWATsibling{} can be used on any 
+\bb
+debugging information entry.
+\eb
 For simplicity, this attribute is not explicitly shown.
 \item The attribute \DWATabstractorigin{} can be used with
-almost any DIE; the exceptions are mostly the compilation
-unit-like DIEs. For simplicity, this attribute is not 
+almost any 
+\bb
+debugging information entry;
+\eb
+the exceptions are mostly the compilation
+unit-like 
+\bb
+entries.
+\eb
+For simplicity, this attribute is not 
 explicitly shown. 
 \end{enumerate}
 
index 39457b7..89ecab4 100644 (file)
@@ -15,6 +15,13 @@ This change summary is included only in draft versions of this document.
 \begin{longtable}{ll}
 \textbf{Date}  & \textbf{Issue Incorporated or Other Change}   \\ \hline       \\
 \endhead
+1/9/2016        & Correct Figure F.8 (add expression location length), \\
+                & Clarify various call site entry and entry value matters, \\
+                & Other editorial clean-ups from online review \\
+1/6/2016        & Editorial work from 12-17-2015 group review \\
+1/5/2016        & Add new material for sections 7.3.3 and 7.3.4 \\
+11/29/2015      & DIE -> debugging information entry in most places \\
+11/2/2015       & Clear change bars in preparation for next version \\
 10/14-19/2015   & Editorial work from group review II, including fix double spaces problems \\
 8/26-28/2015    & Editorial work from group review, add change bars \\
 8/17/2015       & Editorial work XI \\
index ba6a218..9fca3fb 100644 (file)
@@ -7,7 +7,9 @@
 \begin{center}
 \dwf, Version 5
 
-Copyright~\copyright~2005, 2010, 2015 \dwf\ Committee
+\bb
+Copyright~\copyright~2005, 2010, 2016 \dwf\ Committee
+\eb
 \end{center}
 
 \vspace{4ex}
index 633f6e5..b277758 100644 (file)
@@ -26,10 +26,9 @@ have true named constants.}
 The debugging information entry for a program variable,
 formal parameter or constant may have the following attributes:
 \begin{enumerate}[1. ]
-\item A \DWATname{} attribute,
-\addtoindexx{name attribute}
+\item A \DWATname{} attribute,\addtoindexx{name attribute}
 whose value is a null-terminated string containing the data object 
-name.\bbeb
+name.
 
 If a variable entry describes an anonymous object (for example
 an \addtoindex{anonymous union}),
@@ -135,9 +134,7 @@ The value of this attribute may be a constant, or a reference to the
 debugging information entry for a variable, or a reference to a
 debugging information entry containing a DWARF procedure.  If the
 attribute form is of class constant, that constant is interpreted as
-\bb
-a value whose type is the same as
-\eb
+a value whose type is the same as 
 the type of the formal parameter. If the attribute
 form is of class reference, and the referenced entry is for a
 variable, the default value of the parameter is the value of the
@@ -171,8 +168,6 @@ with a constant value and no location can arise is for a
 formal parameter of an inlined subprogram that corresponds
 to a constant actual parameter of a call that is inlined.}
 
-\bbpareb
-
 \item \hypertarget{chap:DWATendianityendianityofdata}{}
 A \DWATendianityDEFN{} attribute,
 \addtoindexx{endianity attribute}
@@ -187,7 +182,6 @@ of data for the given type is assumed.
 The set of values
 and their meaning for this attribute is given in 
 Table \ref{tab:endianityattributevalues}.
-\bbeb
 These represent the default encoding formats as defined by
 the target architecture's ABI or processor definition. The
 exact definition of these formats may differ in subtle ways
@@ -242,14 +236,10 @@ be described by a debugging information entry with the
 tag \DWTAGcommonblockTARG. 
 
 The common \nolink{block} 
-entry has a \DWATname{} attribute 
-\addtoindexx{name attribute}
-whose value is a null-terminated
-string containing the
+entry has a \DWATname{} attribute\addtoindexx{name attribute}
+whose value is a null-terminated string containing the
 \livetargi{chap:commonblockreferenceattribute}{common block}{common block reference attribute} 
-name.
-\bbeb
-It may also have a \DWATlinkagename{} attribute as described 
+name. It may also have a \DWATlinkagename{} attribute as described 
 in Section \refersec{chap:linkagenames}. 
 
 A common block entry also has a \DWATlocation{} attribute
@@ -273,16 +263,13 @@ set of declared objects. The namelist object itself may be used
 as a replacement for the list of names in various contexts.}
 
 A namelist is represented by a debugging information entry
-with the 
-tag \DWTAGnamelistTARG. 
-\addtoindexx{namelist entry}
+with the tag \DWTAGnamelistTARG.\addtoindexx{namelist entry}
 If the namelist itself has a
 name, the namelist entry has a \DWATname{} attribute,
 \addtoindexx{name attribute}
 whose value is a null-terminated
 string containing the namelist\textquoteright{}s
 name.
-\bbeb
 
 Each\hypertarget{chap:DWATnamelistitemnamelistitem}{}
 name that is part of the namelist is represented
index abb7005..7329294 100644 (file)
@@ -22,18 +22,24 @@ The labels denoting the beginning and end of the
 \hypertarget{chap:DWXXXlohiuser}{reserved 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. 
+(\DWATlouserMARK{}\DWAThiuserMARK{}DW\_AT, 
+\DWATElouserMARK{}\DWATEhiuserMARK{}DW\_ATE, 
+\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,
 are reserved for vendor specific extensions. Vendors may
@@ -41,7 +47,11 @@ use values in this range without conflicting with current or
 future system\dash defined values. All other values are reserved
 for use by the system.
 
-\textit{For example, for DIE tags, the special
+\textit{For example, for 
+\bb
+debugging information entry
+\eb
+tags, the special
 labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
 
 \textit{There may also be codes for vendor specific extensions
@@ -119,16 +129,12 @@ In an \addtoindex{initial length} field, the values \wfffffffzero through
 \wffffffff are reserved by DWARF to indicate some form of
 extension relative to \DWARFVersionII; such values must not
 be interpreted as a length field. The use of one such value,
-\xffffffff, is defined 
-\bb
-in
-\eb
+\xffffffff, is defined in
 Section \refersec{datarep:32bitand64bitdwarfformats}); 
 the use of
 the other values is reserved for possible future extensions.
 
 
-
 \section{Relocatable, Split, Executable, Shared and Package Object Files} 
 \label{datarep:executableobjectsandsharedobjects}
 
@@ -223,12 +229,15 @@ space of the program and require relocation.
 \end{itemize}
 
 \needlines{4}
-\textit{Note that operands of classes \CLASSblock, \CLASSconstant{} and 
+\textit{Note that operands of classes 
+\bbeb
+\CLASSconstant{} and 
 \CLASSflag{} do not require relocation. Attribute operands that use 
-form \DWFORMstring{} also do not require relocation. Further, 
-attribute operands that use form
+\bb
+forms \DWFORMstring{},
+\eb 
 \DWFORMrefone, \DWFORMreftwo, \DWFORMreffour, \DWFORMrefeight, or
-\DWFORMrefudata{} do not need relocation.}
+\DWFORMrefudata{} also do not need relocation.}
 
 \subsection{Split DWARF Object Files}
 \label{datarep:splitdwarfobjectfiles}
@@ -238,6 +247,11 @@ information such that the majority of the debugging
 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)}
 The first partition contains
@@ -276,10 +290,13 @@ 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 split or 
-hybrid DWARF object file that contains the second partition.
+unit can be used by a DWARF consumer to find the 
+\bbeb
+DWARF object file that contains the second partition.
 
-\subsubsection{Second Partition (Unlinked or In \texttt{.dwo} File)}
+\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
@@ -333,7 +350,10 @@ section.
 
 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,
+\bb
+apply 
+\eb
+also to the corresponding split DWARF section (for example,
 \dotdebuginfodwo).
 
 \needlines{4}
@@ -347,6 +367,22 @@ references within or between sections are not possible.
 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
+of a loadable segment). Therefore, the debugging information
+sections described in this document are typically linked as if
+they were each to be loaded at virtual address 0, and references
+within the debugging information always implicitly indicate which
+section a particular offset refers to. (For example, a reference
+of form \DWFORMsecoffset{} may refer to one of several sections,
+depending on the class allowed by a particular attribute of a
+debugging information entry, as shown in 
+Table \refersec{tab:attributeencodings}.)
+
+\eb
+
 \needlines{6}
 \subsection{Shared Object Files}
 \label{datarep:sharedobjectfiles}
@@ -362,6 +398,13 @@ shared object file may be calculated by adding the offset to the
 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}
 \textit{Using \splitDWARFobjectfile{s} allows the developer to compile, 
@@ -462,10 +505,10 @@ boundaries in the DWARF package file.
 The index section header contains the following fields:
 \begin{enumerate}[1. ]
 \item \texttt{version} (\HFTuhalf) \\
-A version number
+A version number.
 \addtoindexx{version number!CU index information} 
 \addtoindexx{version number!TU index information}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+\bbeb 
 This number is specific to the CU and TU index information
 and is independent of the DWARF version number.
 
@@ -473,10 +516,11 @@ The version number is \versiondotdebugcuindex.
 
 \item \textit{padding} (\HFTuhalf) \\
 Reserved to DWARF (must be zero).
-
-\item \texttt{column\_count} (\HFTuword) \\
-The number of columns in the table of section counts that follows.
-For brevity, the contents of this field is referred to as $C$ below.
+\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.
@@ -532,8 +576,10 @@ guaranteed to stop at an unused slot or find the match.
 The table of offsets begins immediately following the parallel
 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), 
-with $C$ columns and $U + 1$
+%(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
@@ -541,6 +587,10 @@ section, and the offsets in the same column of subsequent rows
 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}
 \setlength{\extrarowheight}{0.1cm}
@@ -584,18 +634,37 @@ The table of sizes begins immediately following the table of
 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 $C$ columns and $U$ rows, in row-major order. Each row in
+words, with 
+\bb
+$N$ 
+\eb
+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}
-In order to minimize the size of debugging information, it is possible
-to move duplicate debug information entries, strings and macro entries from
-several executables or shared object files into a separate 
-\addtoindexi{\textit{supplementary object file}}{supplementary object file} by some
-post-linking utility; the moved entries and strings can be then referenced
-from the debugging information of each of those executable or shared object files.
+In order to minimize the size of debugging information, 
+it is possible to move duplicate debug information entries, 
+strings and macro entries from several executables or shared 
+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
+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, 
@@ -612,8 +681,10 @@ The \dotdebugsup{} section contains:
 \item \texttt{version} (\HFTuhalf) \\
 \addttindexx{version}
 A 2-byte unsigned integer representing the version of the DWARF
-information for the compilation unit (see Appendix G). The
-value in this field is \versiondotdebugsup.
+information for the compilation unit. 
+\bbeb
+
+The value in this field is \versiondotdebugsup.
 
 \item \texttt{is\_supplementary} (\HFTubyte) \\
 \addttindexx{is\_supplementary}
@@ -635,17 +706,15 @@ is not needed and must be an empty string (a single null byte).
 \item \texttt{sup\_checksum\_len} (unsigned LEB128) \\
 \addttindexx{sup\_checksum\_len}
 Length of the following \addttindex{sup\_checksum} field; 
-his value can be 0 if no checksum is provided.
-
+this value can be 0 if no checksum is provided.
 
 \item \texttt{sup\_checksum} (array of \HFTubyte) \\
 \addttindexx{sup\_checksum}
-Some checksum or cryptographic hash function of the \dotdebuginfo{}, 
-\dotdebugstr{} and \dotdebugmacro{} sections of the 
-\addtoindex{supplementary object file}, or some unique identifier
-which the implementation can choose to verify that the supplementary 
-section object file matches what the debug information in the executable 
-or shared object file expects.
+\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
@@ -682,7 +751,11 @@ the executable or shared object file.
 \hypertarget{datarep:xxbitdwffmt}{}
 \addtoindexx{32-bit DWARF format}
 \addtoindexx{64-bit DWARF format}
-There are two closely related file formats. In the 32-bit DWARF
+There are two 
+\bb
+closely-related DWARF
+\eb
+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
 represented using four bytes. In the 64-bit DWARF format, all
@@ -693,6 +766,13 @@ length field of certain DWARF sections, as well as the CIE and
 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:
 \begin{enumerate}[1. ]
@@ -790,7 +870,8 @@ section, depends on the DWARF format as follows: in the
 in the 64-bit DWARF format, it is a 8-byte unsigned integer.
 
 \needlines{4}
-\item In the body of the \dotdebugstroffsets{} and \dotdebugstroffsetsdwo{}
+\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
@@ -831,7 +912,6 @@ separate 32-bit format versions of system supplied shared
 executable libraries can still be used.}
 
 
-
 \section{Format of Debugging Information}
 \label{datarep:formatofdebugginginformation}
 
@@ -899,7 +979,9 @@ enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 \end{centering}
 
 \needlines{5}
-\subsubsection{Compilation Unit Header}
+\bb
+\subsubsection{Compilation and Partial Unit Headers}
+\eb
 \label{datarep:compilationunitheader}
 \begin{enumerate}[1. ]
 
@@ -919,11 +1001,18 @@ integer that gives the actual length
 
 \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 \addtoindexx{version number!compilation unit} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+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) \\
 \addttindexx{unit\_type}
@@ -936,6 +1025,16 @@ The value of this field is
 \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
+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.
+\eb
+
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -947,13 +1046,7 @@ the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
-\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.
+\bbpareb
 
 \end{enumerate}
 
@@ -967,6 +1060,7 @@ placed in its own \addtoindex{type unit}, within the
 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 
@@ -983,10 +1077,11 @@ consists of the 4-byte value \wffffffff followed by an
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
 \addttindexx{version}
+\addtoindexx{version number!type unit}
 A 2-byte unsigned integer representing the version of the
-DWARF information for the 
-type unit\addtoindexx{version number!type unit} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+DWARF information for the type unit.
+\bbeb
 The value in this field is \versiondotdebuginfo.
 
 \item \texttt{unit\_type} (\HFTubyte) \\
@@ -998,6 +1093,18 @@ The value of this field is \DWUTtype{} for a type unit
 \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{size of an address}
+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.
+\eb
+
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -1009,16 +1116,7 @@ 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{4}
-\item \texttt{address\_size} (\HFTubyte) \\
-\addttindexx{address\_size}
-A 1-byte unsigned integer representing the size 
-\addtoindexx{size of an address}
-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.
+\bbpareb
 
 \item \texttt{type\_signature} (8-byte unsigned integer) \\
 \addttindexx{type\_signature}
@@ -1287,8 +1385,8 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classreference}{reference}
             \addtoindexx{byte size attribute} \\
 \textit{Reserved}&0x0c\footnote{Code 0x0c is reserved to allow backward compatible support of the 
-                                       DW\_AT\_bit\_offset \mbox{attribute} which was 
-                                       defined in \DWARFVersionIII{} and earlier.}
+             DW\_AT\_bit\_offset \mbox{attribute} which was 
+             defined in \DWARFVersionIII{} and earlier.}
        &\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
@@ -1399,10 +1497,12 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{friend attribute}  \\
 \DWATidentifiercase&0x42&\livelink{chap:classconstant}{constant} 
             \addtoindexx{identifier case attribute}  \\
-\DWATmacroinfo\footnote{\raggedright Not used in \DWARFVersionV. 
-                        Reserved for compatibility and coexistence
-                        with prior DWARF versions.}
-            &0x43&\livelink{chap:classmacptr}{macptr} 
+\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} 
             \addtoindexx{name list item attribute}  \\
@@ -1698,10 +1798,8 @@ constant data forms for one-, two-, four-, eight- and sixteen-byte values
 \DWFORMdatasixteenTARG). 
 There are variable length constant
 data forms encoded using 
-\bb
 signed LEB128 numbers (\DWFORMsdataTARG) and unsigned 
 LEB128 numbers (\DWFORMudataTARG).
-\eb
 There is also an implicit constant (\DWFORMimplicitconst),
 whose value is provided as part of the abbreviation
 declaration.
@@ -2624,10 +2722,7 @@ defined language.
 \DWLANGCeightynine &0x0001 &0 \addtoindexx{C:1989 (ISO)}      \\
 \DWLANGC{} &0x0002 &0  \addtoindexx{C!non-standard} \\
 \DWLANGAdaeightythree{} \dag &0x0003 &1  \addtoindexx{Ada:1983 (ISO)}     \\
-\bb
-\DWLANGCplusplus{} &0x0004 &0 \addtoindexx{C++98 (ISO)} 
-\eb
-\\
+\DWLANGCplusplus{} &0x0004 &0 \addtoindexx{C++98 (ISO)} \\
 \DWLANGCobolseventyfour{} \dag &0x0005 &1 \addtoindexx{COBOL:1974 (ISO)}      \\
 \DWLANGCoboleightyfive{} \dag &0x0006 &1 \addtoindexx{COBOL:1985 (ISO)}      \\
 \DWLANGFortranseventyseven &0x0007 &1 \addtoindexx{FORTRAN:1977 (ISO)}      \\
@@ -2648,21 +2743,15 @@ defined language.
 \DWLANGGo{} \dag \ddag &0x0016 &0 \addtoindexx{Go}\\
 \DWLANGModulathree{} \dag \ddag &0x0017 &1 \addtoindexx{Modula-3}\\
 \DWLANGHaskell{} \dag \ddag &0x0018 &0 \addtoindexx{Haskell}\\
-\bb
 \DWLANGCpluspluszerothree{} \ddag &0x0019 &0 \addtoindexx{C++03 (ISO)}\\
-\DWLANGCpluspluseleven{} \ddag &0x001a &0 \addtoindexx{C++11 (ISO)}
-\eb
-\\
+\DWLANGCpluspluseleven{} \ddag &0x001a &0 \addtoindexx{C++11 (ISO)} \\
 \DWLANGOCaml{} \ddag &0x001b &0        \addtoindexx{OCaml}\\
 \DWLANGRust{} \ddag &0x001c &0 \addtoindexx{Rust}\\
 \DWLANGCeleven{} \ddag &0x001d &0 \addtoindexx{C:2011 (ISO)}\\
 \DWLANGSwift{} \ddag &0x001e &0 \addtoindexx{Swift} \\
 \DWLANGJulia{} \ddag &0x001f &1 \addtoindexx{Julia} \\
 \DWLANGDylan{} \ddag &0x0020 &0 \addtoindexx{Dylan} \\
-\bb
-\DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} 
-\eb
-\\
+\DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} \\
 \DWLANGFortranzerothree{}~\ddag  &0x0022 &1 \addtoindexx{Fortran:2004 (ISO)} \\
 \DWLANGFortranzeroeight{}~\ddag  &0x0023 &1 \addtoindexx{Fortran:2010 (ISO)} \\
 \DWLANGlouser{} &0x8000 & \\
@@ -2834,8 +2923,8 @@ Table \refersec{tab:discriminantdescriptorencodings}.
 \section{Name Index Table}
 \label{datarep:nameindextable}
 The \addtoindexi{version number}{version number!name index table}
-in the name index table header is \versiondotdebugnames{}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+in the name index table header is \versiondotdebugnames{}.
+\bbeb
 
 The name index attributes and their encodings are listed in Table \referfol{datarep:indexattributeencodings}.
 
@@ -2917,8 +3006,8 @@ the actual length
 
 \item version (\HFTuhalf) \\
 A 2-byte version identifier representing the version of the
-DWARF information for the address range table
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+DWARF information for the address range table.
+\bbeb
 
 This value in this field \addtoindexx{version number!address range table} is 2. 
  
@@ -2969,8 +3058,8 @@ the terminating tuple.
 \label{datarep:linenumberinformation}
 
 The \addtoindexi{version number}{version number!line number information}
-in the line number program header is \versiondotdebugline{}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+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
@@ -3072,8 +3161,8 @@ Table \refersec{tab:linenumberheaderentryformatencodings}.
 \section{Macro Information}
 \label{datarep:macroinformation}
 The \addtoindexi{version number}{version number!macro information}
-in the macro information header is \versiondotdebugmacro{}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+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 
@@ -3127,7 +3216,8 @@ CIE header is \xffffffff; in the \sixtyfourbitdwarfformat, the
 value is \xffffffffffffffff.
 
 The value of the CIE \addtoindexi{version number}{version number!call frame information}
-is 4 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+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
@@ -3232,11 +3322,15 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 %\needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!string offsets table}
 A 2-byte version identifier containing the value
-\versiondotdebugstroffsets{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugstroffsets{}.
+\bbeb 
 
-\item \texttt{padding} (\HFTuhalf) \\
+\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
@@ -3267,9 +3361,10 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!address table}
 A 2-byte version identifier containing the value
-\versiondotdebugaddr{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugaddr{}.
+\bbeb 
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3314,9 +3409,10 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
-\versiondotdebugranges{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugranges{}. 
+\bbeb
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3363,9 +3459,10 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
-\versiondotdebugloc{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugloc{}.
+\bbeb 
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3778,7 +3875,11 @@ of the type might not be available in all compilation units.}
 \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 DIE tree, 
+Such a type definition can be moved to a type unit by rewriting the 
+\bb
+debugging information entry
+\eb
+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 
@@ -3792,20 +3893,24 @@ Appendix \refersec{app:usingtypeunits}.
 The hash function used for hashing name strings in the accelerated 
 access name index table (see Section \refersec{chap:acceleratedaccess})
 is defined in \addtoindex{C} as shown in 
-Figure \referfol{fig:nametablehashfunctiondefinition}.\footnote{
-This hash function is sometimes informally known as the 
-"\addtoindex{DJB hash function}" or the "\addtoindex{Berstein hash function}"
+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{lstlisting}
 
-unsigned long \* must be a 32-bit integer type *\
+uint32_t /* must be a 32-bit integer type */
     hash(unsigned char *str)
     {
-        unsigned long hash = 5381;
+        uint32_t hash = 5381;
         int c;
 
         while (c = *str++)
@@ -3815,6 +3920,7 @@ unsigned long \* must be a 32-bit integer type *\
     }
 
 \end{lstlisting}
+\eb
 \caption{Name Table Hash Function Definition}
 \label{fig:nametablehashfunctiondefinition}
 \end{figure}
index a772092..37a9c7f 100644 (file)
@@ -3,7 +3,7 @@
 % If draft is in the document class list, pix are just suggested
 % by an outline, the pic does not appear as a picture.
 %
-\newcommand{\docdate}{October 19, 2015}
+\newcommand{\docdate}{January 9, 2016}
 %
 \usepackage{ifthen}
     \newcommand{\ifthen}[2]{\ifthenelse{#1}{#2}{}}
@@ -115,8 +115,8 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \newcommand{\refersec}[1]{\vref{#1}}  % beware possible rerun loop
 \newcommand{\referfol}[1]{\ref{#1} following}
 
-% Generate a live link in the document
-% use like \livelink{chap:DWOPdup}{DW\_OP\_dup}
+% Generate a live link in the document that gets indexed as well
+% Use like \livelink{chap:DWOPdup}{DW\_OP\_dup}
 \newcommand{\livelink}[2]{\hyperlink{#1}{#2}\index{#2}}
 % use when the index is different from the text and target.
 \newcommand{\livelinki}[3]{\hyperlink{#1}{#2}\index{#3}}
@@ -172,6 +172,12 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \renewcommand{\descriptionlabel}[1]{\hspace{\labelsep}\textnormal{#1}}
 \newcommand{\descriptionlabelnl}[1]{\item[#1] \mbox{}\\}
 
+% Define an alternate footnote command that creates ragged right text
+% (using \raggedright in the parameter does not work)
+\newcommand\footnoteRR[1]{\footnote{\raggedright#1}}
+
+% Emit an empty page
+%
 \newcommand{\emptypage}{
     \clearpage
     \vspace*{4in}
@@ -229,7 +235,9 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 %
 \include{pgfcmdsfornameindexfig}
 
-%--- Begin the document pages
+% --------------------------------
+% --- Begin the document pages ---
+% --------------------------------
 %
 \begin{document}
 \frontmatter
@@ -259,7 +267,9 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \url{http://www.dwarfstd.org}
 \\
 \vspace{2cm}
+\bb
 {\Large \textbf{\docdate}}
+\eb
 \\
 \ifthenelse{\boolean{isdraft}}{
        \vspace{2cm}
@@ -337,8 +347,8 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 % Define the levels of sectionality that are numbered.
 \setcounter{secnumdepth}{5}
 
-\uselinenos\include{introduction}              %\emptypage
-\uselinenos\include{generaldescription}        %\emptypage
+\uselinenos\include{introduction}              \emptypage
+\uselinenos\include{generaldescription}        \emptypage
 \uselinenos\include{programscope}              %\emptypage
 \uselinenos\include{dataobject}                \emptypage
 \uselinenos\include{typeentries}               \emptypage
index e3268bb..2ded5e8 100644 (file)
@@ -1829,7 +1829,9 @@ void g() {
          
 \end{alltt}
 \end{dwflisting}
-\caption{Reference- and rvalue-reference-qualification example: DWARF \mbox{description}}
+% The extra ~ at the end of the following caption is present to get the entry in the
+% List of Figures to wrap the page number properly (to align the numbers)...
+\caption{Reference- and rvalue-reference-qualification example: DWARF \mbox{description} ~}
 \label{fig:memberfunctionrefqualexampledwarfdescription}
 \end{figure}
 
index 56a77c5..3cf6959 100644 (file)
@@ -41,9 +41,7 @@ It is the intention of the DWARF Committee that migrating from
 an earlier version of the DWARF standard to the current version
 should be straightforward and easily accomplished. 
 Almost all constructs from
-\bb
 \DWARFVersionII\addtoindexx{DWARF Version 3}\addtoindexx{DWARF Version 4}
-\eb
 onward have been retained unchanged in \DWARFVersionV, although a few
 have been compatibly superseded by improved constructs which are
 more compact and/or more expressive.
@@ -68,27 +66,22 @@ David Anderson, Associate Editor\\
 John Bishop             & Intel\\
 Ron Brender, Editor\\
 Andrew Cagney\\
-\bb
-Soumitra Chatterjee     & Hewlett-Packard Enterprise\eb\\
+Soumitra Chatterjee     & Hewlett-Packard Enterprise\\
 Eric Christopher        & Google\\
 Cary Coutant            & Google\\
 John DelSignore         & Rogue Wave\\
 Michael Eager, Chair    & Eager Consulting\\
-\bb
-Jini Susan George       & Hewlett-Packard\eb\\
+Jini Susan George       & Hewlett-Packard\\
 Mathhew Gretton-Dan     & ARM\\
 Tommy Hoffner           & Altera\\
-\bb
-Jakub Jelinek           & Red Hat\eb\\
+Jakub Jelinek           & Red Hat\\
 Andrew Johnson          & Linaro\\
-\bb
-Jason Merrill           & Red Hat\eb\\
+Jason Merrill           & Red Hat\\
 Jason Molenda           & Apple\\
 Adrian Prantl           & Apple\\
 Hafiz Abid Qadeer       & Mentor Graphics\\
 Paul Robinson           & Sony\\
-\bb
-Syamala Sarma           & Hewlett-Packard\eb\\
+Syamala Sarma           & Hewlett-Packard\\
 Keith Walker            & ARM\\
 Kendrick Wong           & IBM\\
 Brock Wyma              & Intel\\
@@ -116,19 +109,14 @@ traditional paper forms. Both online and paper forms include
 page numbers, a Table of Contents, a List of Figures,
 a List of Tables and an Index.
 
-\bb
 Text in normal font describes
 required aspects of the DWARF format.  Text in \textit{italics} is
 explanatory or supplementary material, and not part of the
 format definition itself.
-\eb
 
 \textit{Online Form}
 
-In the online form, 
-\bb
-\textcolor{blue}{blue text} 
-\eb
+In the online form, \textcolor{blue}{blue text} 
 is used to indicate hyperlinks.
 Most hyperlinks link to the definition of a term or
 construct, or to a cited Section or Figure.
@@ -140,10 +128,7 @@ contains hyperlinks for the multiple usages.
 
 The occurrence of
 a DWARF name in its definition (or one of its definitions in the
-case of some attributes) is shown in 
-\bb
-\definition{this color}. 
-\eb
+case of some attributes) is shown in \definition{red text}. 
 Other occurrences of the same name in the same or possibly following
 paragraphs are generally in normal text color.)
 
index 24ae01f..4b4a5f1 100644 (file)
@@ -18,7 +18,7 @@ corresponding
 The tag specifies the class to which an entry belongs
 and the attributes define the specific characteristics of the entry.
 
-The set of tag names 
+The set of tag names
 \addtoindexx{tag names|see{debugging information entry}}
 is listed in Table \refersec{tab:tagnames}. 
 The debugging information entries they identify are
@@ -101,10 +101,7 @@ described in Chapters 3, 4 and 5.
 
 
 \textit{The debugging information entry descriptions in
-\bb
-Chapters
-\eb
-3, 4 and 5 generally include mention of
+Chapters 3, 4 and 5 generally include mention of
 most, but not necessarily all, of the attributes 
 that are normally or possibly used with the entry.
 Some attributes, whose applicability tends to be 
@@ -125,9 +122,7 @@ The debugging information entries are contained in the
 Optionally, debugging information may be partitioned such
 that the majority of the debugging information can remain in
 individual object files without being processed by the
-linker. 
-\bb\eb
-See Section \refersec{datarep:splitdwarfobjectfiles} and
+linker. See Section \refersec{datarep:splitdwarfobjectfiles} and
 Appendix \refersec{app:splitdwarfobjectsinformative} for details.
 
 \needlines{4}
@@ -135,7 +130,6 @@ As a further option, debugging information entries and other debugging
 information that are the same in multiple executable or shared object files 
 may be found in a separate \addtoindex{supplementary object file} that 
 contains supplementary debug sections.
-\bb\eb
 See Section \refersec{datarep:dwarfsupplemetaryobjectfiles} for
 further details.
  
@@ -155,11 +149,7 @@ The attributes are listed in Table \referfol{tab:attributenames}.
 \addtoindexx{attributes!list of}
 \begin{longtable}{P{6.2cm}|P{8.5cm}}
   \caption{Attribute names} \label{tab:attributenames} \\
-  \hline \bfseries Attribute$^*$&\bfseries 
-\bb 
-Usage 
-\eb 
-\\ \hline
+  \hline \bfseries Attribute$^*$&\bfseries Usage \\ \hline
 \endfirsthead
   \bfseries Attribute$^*$&\bfseries Identifies or Specifies \\ \hline
 \endhead
@@ -186,7 +176,6 @@ Usage
         {Out-of-line instances of inline subprograms}
         {out-of-line instances of inline subprograms} \\
 \DWATaccessibilityTARG
-\bb
 &\livelink{chap:DWATaccessdeclaration}
         {Access declaration} (\addtoindex{C++}, \addtoindex{Ada}) \\
 &\livelink{chap:DWATaccessibilitycppinheritedmembers}
@@ -194,7 +183,6 @@ Usage
 &\livelinki{chap:DWATaccessibilityattribute}
         {Accessibility of data member or member function}
         {accessibility attribute} 
-\eb
         \\
 \DWATaddressclassTARG
 &\livelinki{chap:DWATadressclasspointerorreferencetypes}
@@ -286,8 +274,7 @@ Usage
            {column position of inlined subroutine call} \\
 &\livelinki{chap:DWATcallcolumnofcallsite}
            {Column position of call site of non-inlined call} 
-           {column position of call site of non-inlined call}
-\bbeb          \\
+           {column position of call site of non-inlined call} \\
 \DWATcalldatalocationTARG{}
 &\livelinki{chap:DWATcalldatalocationofcallparameter}
            {Address of the value pointed to by an argument passed in a call}
@@ -301,12 +288,10 @@ Usage
 \DWATcallfileTARG
 &\livelinki{chap:DWATcallfilefilecontaininginlinedsubroutinecall}
            {File containing inlined subroutine call}
-           {file containing inlined subroutine call} 
-\bbeb          \\
+           {file containing inlined subroutine call} \\
 &\livelinki{chap:DWATcallfileofcallsite}
            {File containing call site of non-inlined call} 
-           {file containing call site of non-inlined call} 
-\bbeb           \\
+           {file containing call site of non-inlined call} \\
 \DWATcalllineTARG{} 
 &\livelinki{chap:DWATcalllinelinenumberofinlinedsubroutinecall}
            {Line number of inlined subroutine call}
@@ -761,12 +746,9 @@ Usage
         {Non-constant parameter flag}
         {non-constant parameter flag}  \\
 \DWATvirtualityTARG
-\bb
 &\livelinki{chap:DWATvirtualityvirtualityindication}
         {virtuality attribute} 
-        {Virtuality of member function or base class}
-\eb
-        \\
+        {Virtuality of member function or base class} \\
 \DWATvisibilityTARG
 &\livelinki{chap:DWATvisibilityvisibilityofdeclaration}
         {Visibility of declaration}
@@ -816,11 +798,8 @@ of a single piece of constant data.
 \doublequote{Constant data}
 is the class of attribute value that those attributes may have. 
 There are several representations of constant data,
-\bb
 including fixed length data of one, two, four, eight or 16 bytes 
-in size, 
-\eb
-and variable length data). 
+in size, and variable length data). 
 The particular representation for any given instance
 of an attribute is encoded along with the attribute name as
 part of the information that guides the interpretation of a
@@ -851,24 +830,25 @@ to one of the classes shown in Table \referfol{tab:classesofattributevalue}.
 \hypertarget{chap:classaddrptr}{}
 \livelinki{datarep:classaddrptr}{addrptr}{addrptr class}
 &
-\bb
 Specifies a location in the DWARF section that holds
 a series of machine address values. Certain attributes use
 one of these addresses by indexing relative to this location.
-\eb
 \\
 
 \hypertarget{chap:classblock}{}
 \livelinki{datarep:classblock}{block}{block class}
 & An arbitrary number of uninterpreted bytes of data.
+\bb
+The number of data bytes may be implicit from context
+or explicitly specified by an initial unsigned LEB128 value
+(see Section \refersec{datarep:variablelengthdata}) 
+that precedes that number of data bytes.
+\eb
 \\
  
 \hypertarget{chap:classconstant}{}
 \livelinki{datarep:classconstant}{constant}{constant class}
-&One, two, four, eight 
-\bb
-or sixteen 
-\eb
+&One, two, four, eight or sixteen 
 bytes of uninterpreted data, or data
 encoded in the variable length format known as LEB128 
 (see Section \refersec{datarep:variablelengthdata}).
@@ -876,50 +856,45 @@ encoded in the variable length format known as LEB128
 
 \hypertarget{chap:classexprloc}{}
 \livelinki{datarep:classexprloc}{exprloc}{exprloc class}
-&A DWARF expression for a value or a location in the \mbox{address} space of the described program.
+&A DWARF expression for a value or a location in the 
+address space of the described program.
+\bb
+A leading unsigned LEB128 value 
+(see Section \refersec{datarep:variablelengthdata})
+specifies the number of bytes in the expression.
+\eb
 \\
 
 \hypertarget{chap:classflag}{}
 \livelinki{datarep:classflag}{flag}{flag class}
-&A small constant that indicates the presence or absence of an attribute.
+&A small constant that indicates the presence or absence 
+of an attribute.
 \\
 
 \hypertarget{chap:classlineptr}{}
 \livelinki{datarep:classlineptr}{lineptr}{lineptr class}
-&
-\bb
-Specifies
-\eb
-a location in the DWARF section that holds line number information.
+&Specifies a location in the DWARF section that holds line 
+number information.
 \\
 
 \hypertarget{chap:classloclistptr}{}
 \livelinki{datarep:classloclistptr}{loclistptr}{loclistptr class}
-&
-\bb
-Specifies
-\eb
-a location in the DWARF section that holds \mbox{location} lists, which
-describe objects whose location can change during their lifetime.
+&Specifies a location in the DWARF section that holds location 
+lists, which describe objects whose location can change during 
+their lifetime.
 \\
 
 \hypertarget{chap:classmacptr}{}
 \livelinki{datarep:classmacptr}{macptr}{macptr class}
-&
-\bb
-Specifies 
-\eb
+&Specifies 
 a location in the DWARF section that holds macro definition
 information.
 \\
 
 \hypertarget{chap:classrangelistptr}{}
 \livelinki{datarep:classrangelistptr}{rangelistptr}{rangelistptr class}
-&
-\bb
-Specifies 
-\eb
-a location in the DWARF section that holds non-contiguous address ranges.
+&Specifies a location in the DWARF section that holds 
+non-contiguous address ranges.
 \\
 
 \hypertarget{chap:classreference}{}
@@ -934,11 +909,7 @@ entry in any compilation unit, including one different from
 the unit containing the reference. The third type of reference
 is an indirect reference to a 
 \addtoindexx{type signature}
-type definition using 
-\bb
-an 
-\eb
-8-byte \mbox{signature} 
+type definition using an 8-byte signature 
 for that type. The fourth type of reference is a reference from within the 
 \dotdebuginfo{} section of the executable or shared object file to
 a debugging information entry in the \dotdebuginfo{} section of 
@@ -956,22 +927,10 @@ string table.
 
 \hypertarget{chap:classstroffsetsptr}{}
 \livelinki{datarep:classstroffsetsptr}{stroffsetsptr}{stroffsetsptr class}
-&
-\bb
-Specifies a
-\eb
-location in the DWARF section that holds
-a series of offsets 
-\bb
-into 
-\eb
-the DWARF section that holds strings.
-Certain attributes 
-\bb
-use 
-\eb
-one of these offsets by indexing 
-\mbox{relative} to this location. The resulting offset is then 
+&Specifies a location in the DWARF section that holds
+a series of offsets into the DWARF section that holds strings.
+Certain attributes use one of these offsets by indexing 
+relative to this location. The resulting offset is then 
 used to index into the DWARF string section.
 \\
 
@@ -1044,21 +1003,17 @@ to any debugging information entry.
 The value of this attribute is a reference to the sibling entry
 of the entry to which the attribute is attached.
 
-\bb
 \section{Target Addresses}
 \label{chap:targetaddressableunitsandaddresses}
 \label{chap:targetaddresses}
-\eb
 \addtoindexx{size of an address}
 \addtoindexx{size of an address|see{\textit{also} \texttt{address\_size}}}
 \addtoindexx{address size|see{size of an address}}
 \addtoindexx{address size|see{\textit{also} \texttt{address\_size}}}
 
-\bb
 Addresses, bytes and bits in DWARF use the numbering and direction
 conventions that are appropriate to the current language on
 the target system.
-\eb
 
 Many places in this document refer to the size of an address
 on the target architecture (or equivalently, target machine)
@@ -1079,28 +1034,16 @@ address sizes. In
 that case, the DWARF debugging information contained in this
 object file will use the same address size.}
 
-\bbpareb
-
 \needlines{6}
 \section{DWARF Expressions}
 \label{chap:dwarfexpressions}
 DWARF expressions describe how to compute a value or 
-\bb
-specify a location.
-\eb
-They are expressed in
+specify a location. They are expressed in
 terms of DWARF operations that operate on a stack of values.
 
-\bb
 A DWARF expression is encoded as a stream of operations, 
-each consisting of an opcode
-\eb
-followed by zero or more literal operands. 
-The number of operands is 
-\bb
-implied 
-\eb
-by the opcode.  
+each consisting of an opcode followed by zero or more literal 
+operands. The number of operands is implied by the opcode.  
 
 In addition to the
 general operations that are defined here, operations that are
@@ -1126,7 +1069,6 @@ 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).
 
-\bbpareb
 
 \needlines{4}
 \subsubsection{Literal Encodings}
@@ -1202,9 +1144,7 @@ information entry in the current compilation unit, which must be a
 second operand is 1-byte unsigned integer that specifies the size of the
 constant value, which is the same as the size of the base type referenced
 by the first operand. The third operand is a 
-\bb
 sequence of bytes of the given size that is 
-\eb
 interpreted as a value of the referenced type.
 
 \textit{While the size of the constant can be inferred from the base type
@@ -1234,18 +1174,13 @@ signed LEB128\addtoindexx{LEB128!signed} offset
 from the address specified by the location description in the
 \DWATframebase{} attribute of the current function.
  
-\bb
 \textit{This is typically a stack pointer register plus or minus some offset.}
-\eb
 
 \itembfnl{\DWOPbregzeroTARG, \DWOPbregoneTARG, \dots, \DWOPbregthirtyoneTARG}
 The single operand of the \DWOPbregnTARG{} 
 operations provides
 a signed LEB128\addtoindexx{LEB128!signed} offset from
-\bb
-the contents of
-\eb
-the specified register.
+the contents of the specified register.
 
 \itembfnl{\DWOPbregxTARG}
 The \DWOPbregxNAME{} operation provides the sum of two values specified
@@ -1276,9 +1211,7 @@ operations manipulate the DWARF stack. Operations
 that index the stack assume that the top of the stack (most
 recently added entry) has index 0.
 
-\bb
-Each entry on the stack has an associated type.
-\eb
+Each entry on the stack has an associated type. 
 
 \needlines{4}
 \begin{enumerate}[1. ]
@@ -1321,9 +1254,7 @@ becomes the second entry.
 The \DWOPderefNAME{} operation pops the top stack entry and 
 treats it as an address. The popped value must have an integral type.
 The value retrieved from that address is pushed, 
-\bb
 and has the \specialaddresstype{}.
-\eb 
 The size of the data retrieved from the 
 \addtoindexi{dereferenced}{address!dereference operator}
 address is the \addtoindex{size of an address} on the target machine.
@@ -1335,9 +1266,7 @@ The \DWOPderefsizeNAME{} operation behaves like the
 operation: it pops the top stack entry and treats it as an
 address. The popped value must have an integral type.
 The value retrieved from that address is pushed,
-\bb
 and has the \specialaddresstype{}.
-\eb 
 In the \DWOPderefsizeNAME{} operation, however, the size in bytes
 of the data retrieved from the dereferenced address is
 specified by the single operand. This operand is a 1-byte
@@ -1504,9 +1433,7 @@ found in Appendix \refersec{app:dwarfstackoperationexamples}.}
 \addtoindexx{DWARF expression!arithmetic operations}
 \addtoindexx{DWARF expression!logical operations}
 The following provide arithmetic and logical operations. 
-\bb
 Operands of an operation with two operands
-\eb
 must have the same type,
 either the same base type or both the \specialaddresstype.
 The result of the operation which is pushed back has the same type
@@ -1576,11 +1503,8 @@ adds them together, and pushes the result.
 The \DWOPplusuconstNAME{} operation pops the top stack entry,
 adds it to the unsigned LEB128\addtoindexx{LEB128!unsigned}
 constant operand 
-\bb
 interpreted as the same type as the operand popped from the 
-top of the stack
-\eb
-and pushes the result.
+top of the stack and pushes the result.
 
 \textit{This operation is supplied specifically to be
 able to encode more field offsets in two bytes than can be
@@ -1624,7 +1548,7 @@ following operations provide simple control of the flow of a DWARF expression.
 \itembfnl{\DWOPleTARG, \DWOPgeTARG, \DWOPeqTARG, \DWOPltTARG, \DWOPgtTARG, \DWOPneTARG}
 The six relational operators each:
 \begin{itemize}
-\item pop the top two stack values, which \bb\eb have the same type,
+\item pop the top two stack values, which have the same type,
 either the same base type or both the \specialaddresstype, 
 
 \item compare the operands:
@@ -1754,29 +1678,24 @@ description, \DWOPentryvalueNAME{} pushes the value that register had upon
 entering the current subprogram.  If the block contains a DWARF expression,
 the DWARF expression is evaluated as if it has been evaluated upon entering
 the current subprogram.  The DWARF expression 
-\bb
 assumes no values are present on the DWARF stack initially and results
-\eb
-in exactly one
-value being pushed on the DWARF stack when completed.
-\bb\eb 
+in exactly one value being pushed on the DWARF stack when completed.
 
 \DWOPpushobjectaddress{} is not meaningful inside of this DWARF operation.
 
-\textit{The \DWOPentryvalueNAME{} operation can be used by consumers if they are able
-to find the call site in the caller function, can unwind to it, and the corresponding
-\DWTAGcallsiteparameter{} entry has \DWATcallvalue{} or
-\DWATcalldatavalue{} attributes that can be evaluated to find the
-value a function parameter had on the first instruction in the function.
-Non-interactive consumers which know what variables will need to be
-inspected in advance of running the debugged program could put breakpoints
-on the first instruction in functions where there is no way to find
-some variable's value other than by evaluating the \DWOPentryvalueNAME{} 
-operation.  The consumer can collect the value of registers or 
-memory referenced in
-\DWOPentryvalueNAME{} operations, then continue to breakpoints where the values
-of variables or parameters need to be inspected and use the remembered
-register or memory values during \DWOPentryvalueNAME{} evaluation.}
+\bb
+\textit{
+The values needed to evaluate \DWOPentryvalueNAME{} could be obtained in
+several ways. The consumer could suspend execution on entry to the
+subprogram, record values needed by \DWOPentryvalueNAME{} expressions within
+the subprogram, and then continue; when evaluating \DWOPentryvalueNAME{},
+the consumer would use these recorded values rather than the current
+values.  Or, when evaluating \DWOPentryvalueNAME{}, the consumer could
+"virtually unwind" using the Call Frame Information 
+(see Section \refersec{chap:callframeinformation}) 
+to recover register values that might have been clobbered since the
+subprogram entry point.}
+\eb
 
 \end{enumerate}
 
@@ -1815,7 +1734,6 @@ as its lifetime is either static or the same as the
 \livelink{chap:lexicalblock}{lexical block} that owns it, 
 and it does not move during its lifetime.
 
-\bbpareb
 
 \needlines{4}
 \item \textit{Location lists}, which are used to 
@@ -1858,7 +1776,6 @@ describes the location of one piece of the object; each
 composition operation describes which part of the object is
 located there. Each simple location description that is a
 DWARF expression is evaluated independently of any others.
-\bb\eb
 \end{enumerate}
 
 
@@ -1869,7 +1786,6 @@ A
 simple location description consists of one 
 contiguous piece or all of an object or value.
 
-\bb
 \needlines{4}
 \subsubsubsection{Empty Location Descriptions}
 An \addtoindex{empty location description}
@@ -1878,7 +1794,6 @@ consists of a DWARF expression
 containing no operations. It represents a piece or all of an
 object that is present in the source but not in the object code
 (perhaps due to optimization).
-\eb
 
 \subsubsubsection{Memory Location Descriptions}
 A 
@@ -1909,9 +1824,7 @@ description of an object or a piece of an object.
 }
 
 The following DWARF operations can be used to 
-\bb
 specify a register location.
-\eb
 
 \textit{Note that the register number represents a DWARF specific
 mapping of numbers onto the actual registers of a given
@@ -1955,9 +1868,7 @@ or is computed from other locations and values in the program.
 The \DWOPimplicitvalueNAME{} operation specifies an immediate value
 using two operands: an unsigned LEB128\addtoindexx{LEB128!unsigned}
 length, followed by a 
-\bb
 sequence of bytes of the given length that contain the value.
-\eb
 
 \itembfnl{\DWOPstackvalueTARG}
 The \DWOPstackvalueNAME{} 
@@ -1970,11 +1881,9 @@ actual value of the object, rather than its location. The
 
 \needlines{4}
 \itembfnl{\DWOPimplicitpointerTARG}
-\bb
 \textit{An optimizing compiler may eliminate a pointer, while
 still retaining the value that the pointer addressed.  
 \DWOPimplicitpointerNAME{} allows a producer to describe this value.}
-\eb
 
 The \DWOPimplicitpointerNAME{} operation specifies that the object
 is a pointer that cannot be represented as a real pointer,
@@ -2030,8 +1939,7 @@ describe the location of a value when that value exists in a
 register but not in memory. The operations in this section are
 used to describe values that exist neither in memory nor in a
 single register.}
-
-\bbpareb
 
 \needlines{6}
 \subsubsection{Composite Location Descriptions}
@@ -2075,11 +1983,9 @@ unsigned LEB128\addtoindexx{LEB128!unsigned} number that
 gives the offset in bits from the location defined by the
 preceding DWARF location description.  
 
-Interpretation of the
-offset depends on the 
-\bb\eb
-location description. If the
-location description is empty, the offset doesn\textquoteright t matter and
+Interpretation of the offset depends on the location description. 
+If the location description is empty, the offset 
+doesn\textquoteright{}t matter and
 the \DWOPbitpieceNAME{} operation describes a piece consisting
 of the given number of bits whose values are undefined. If
 the location is a register, the offset is from the least
@@ -2109,7 +2015,6 @@ while the second is intended for use in a \splitDWARFobjectfile{}
 (see Section \refersec{datarep:splitdwarfobjectfiles}). The two
 forms are otherwise equivalent.
 
-\bbpareb
 
 \needlines{4}
 \subsubsection{Location Lists in Non-split Objects}
@@ -2205,12 +2110,9 @@ A \addtoindex{default location list entry} consists of:
 \item The value 0.
 \item The value of the largest representable address offset (for
       example, \wffffffff when the size of an address is 32 bits).
-\item 
-\bb
-An unsigned 2-byte length describing the length of the location 
+\item An unsigned 2-byte length describing the length of the location 
       description that follows.
-\eb
-\item A \bb single \eb location description describing the location of the
+\item A single location description describing the location of the
       object when there is no prior normal location list entry
       that applies in the same location list.
 \end{enumerate}
@@ -2223,7 +2125,7 @@ A default location list entry must be the last location list
 entry of a location list except for the terminating end-of-list
 entry.
 
-A \addtoindex{default location list entry} describes a \bb single \eb 
+A \addtoindex{default location list entry} describes a single 
 location which applies to all addresses which are not included 
 in any range defined earlier in the same location list.
 
@@ -2344,11 +2246,7 @@ This index is relative to the value of the
 The starting address given by this
 type of entry is not relative to the compilation unit
 base address. The second value is the
-length of the range
-\bb
-in bytes. 
-\eb
-A single location
+length of the range in bytes. A single location
 description follows the fields that define the address range.
 
 \itembfnl{\DWLLEoffsetpairentryTARG}
@@ -2386,11 +2284,7 @@ modifier, such as constant, packed, pointer, reference or
 volatile, which in turn will reference another entry describing
 a type or type modifier (using a
 \DWATtypeNAME{} attribute\addtoindexx{type attribute} of its
-own). See 
-\bb
-Chapter 
-\eb
-\referfol{chap:typeentries} 
+own). See Chapter \referfol{chap:typeentries} 
 for descriptions of the entries describing
 base types, user-defined types and type modifiers.
 
@@ -2612,13 +2506,10 @@ of a program entity has a
 \DWATdeclarationDEFN{} attribute, which is a 
 \livelink{chap:classflag}{flag}.
 
-\textit{
-\bb
-A non-defining type declaration may nonetheless have 
+\textit{A non-defining type declaration may nonetheless have 
 children as illustrated in Section
-\refersec{app:declarationscompletingnondefiningdeclarations}.
-\eb
-}
+\refersec{app:declarationscompletingnondefiningdeclarations}.}
+
 
 \subsection{Declarations Completing Non-Defining Declarations}
 \hypertarget{chap:DWATspecificationincompletenondefiningorseparatedeclaration}{}
@@ -2716,11 +2607,7 @@ representing
 a program entity that has been given a name may have a 
 \DWATnameDEFN{} 
 attribute\addtoindexx{name attribute}, whose value of 
-\bb
-class 
-\eb
-\CLASSstring{} represents the name.
-\bbeb
+class \CLASSstring{} represents the name.
 A debugging information entry containing
 no name attribute, or containing a name attribute whose value
 consists of a name containing a single null byte, represents
@@ -2741,6 +2628,12 @@ Section \referfol{chap:linkagenames} regarding the use of
 \addtoindex{mangled names}.
 Sequences of multiple whitespace characters may be compressed.}
 
+\bb
+\textit{For additional discussion, see the Best Practices section 
+of the DWARF Wiki 
+(\url{http://wiki.dwarfstd.org/index.php?title=Best_Practices}.)}
+\eb
+
 \section{Data Locations and DWARF Procedures}
 \hypertarget{chap:DWATlocationdataobjectlocation}{}
 Any debugging information entry describing a data object (which
@@ -2752,44 +2645,26 @@ whose value is a location description
 (see Section \refersec{chap:locationdescriptions}).
 
 \needlines{4}
-A 
-\addtoindex{DWARF procedure}
-is represented by any
-\bb\eb
+A \addtoindex{DWARF procedure} is represented by any
 debugging information entry that has a
-\addtoindexx{location attribute}
-\DWATlocationNAME{}
-attribute. 
-\addtoindexx{location attribute}
+\DWATlocationNAME{} attribute.\addtoindexx{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 \DWTAGdwarfprocedureTARG{}
-together with 
-\addtoindexx{location attribute}
-a \DWATlocationNAME{} attribute.  
+information entry \addtoindexx{DWARF procedure entry}
+with the tag \DWTAGdwarfprocedureTARG{} together with a 
+\DWATlocationNAME{} attribute.\addtoindexx{location attribute}  
 
-A DWARF procedure
-is called by a \DWOPcalltwo, 
-\DWOPcallfour{} or 
-\DWOPcallref{}
-DWARF expression operator 
+A DWARF procedure is called by a \DWOPcalltwo, \DWOPcallfour{} 
+or \DWOPcallref{} DWARF expression operator 
 (see Section \refersec{chap:controlflowoperations}).
 
 \needlines{5}
-\bb
 \section{Code Addresses, Ranges and Base Addresses}
-\eb
 \label{chap:codeaddressesandranges}
 Any debugging information entry describing an entity that has
 a machine code address or range of machine code addresses,
 which includes compilation units, module initialization,
-subroutines, 
-\bb
-lexical
-\eb
-\nolink{blocks}, 
+subroutines, lexical \nolink{blocks}, 
 try/catch \nolink{blocks} (see Section \refersec{chap:tryandcatchblockentries}), 
 labels and the like, may have
 \begin{itemize}
@@ -2807,42 +2682,34 @@ A \DWATrangesDEFN{} attribute\addtoindexx{ranges attribute}
 for a non-contiguous range of addresses.
 \end{itemize}
 
-\bbpareb
-
 If an entity has no associated machine code, 
 none of these attributes are specified.
 
-\bb
 The \definitionx{base address} of the scope for any of the
 debugging information entries listed above is given by either the 
 \DWATlowpcNAME{}\livetargi{chap:DWATlowpcbaseaddressofscope}{}{base address of scope} 
 attribute or the first address in the first range entry 
 in the list of ranges given by the \DWATrangesNAME{} attribute.
 If there is no such attribute, the base address is undefined.
-\eb
 
-\subsection{Single Address} 
+\subsection{Single Address}
+\label{chap:singleaddress} 
 When there is a single address associated with an entity,
 such as a label or alternate entry point of a subprogram,
 the entry has a \DWATlowpc{} attribute whose value is the
-\bb\eb address for the entity.
-
-\bbpareb
+address for the entity.
 
 \needlines{8}
-\bb
 \subsection{Contiguous Address Range}
-\eb
 \label{chap:contiguousaddressranges}
 When the set of addresses of a debugging information entry can
-be described as a single contiguous range, the entry 
+be described as a single contiguous range, the entry may
 \addtoindexx{high PC attribute}
-may 
 \addtoindexx{low PC attribute}
 have a \DWATlowpc{} and \DWAThighpc{} pair of attributes. 
-The value of the \DWATlowpc{} attribute is the \bb\eb address of the
+The value of the \DWATlowpc{} attribute is the address of the
 first instruction associated with the entity. If the value of
-the \DWAThighpc{} is of class address, it is the \bb\eb
+the \DWAThighpc{} is of class address, it is the 
 address of the first location past the last instruction
 associated with the entity; if it is of class constant, the
 value is an unsigned integer offset which when added to the
@@ -2852,36 +2719,24 @@ instruction associated with the entity.
 \textit{The high PC value
 may be beyond the last valid instruction in the executable.}
 
-\bbpareb
-
 \subsection{Non-Contiguous Address Ranges}
 \label{chap:noncontiguousaddressranges}
 When the set of addresses of a debugging information entry
 \addtoindexx{non-contiguous address ranges}
 cannot be described as a single contiguous range, the entry 
-\bb
-may have
-\eb
-a \DWATranges{} attribute\addtoindexx{ranges attribute}
+may have a \DWATranges{} attribute\addtoindexx{ranges attribute}
 whose value is of class \livelink{chap:classrangelistptr}{rangelistptr}
 and indicates the beginning of a \addtoindex{range list}.
 Similarly,
 a \DWATstartscope{} attribute\addtoindexx{start scope attribute}
-\bb
 (see Section \refersec{chap:dataobjectentries}).
-\eb
 may have a value of class
 \livelink{chap:classrangelistptr}{rangelistptr} for the same reason.  
 
-Range lists are contained in 
-\bb
-the \dotdebugranges{} section. 
-\eb
+Range lists are contained in the \dotdebugranges{} section. 
 A \addtoindex{range list} is indicated by a 
 \DWATranges{} attribute\addtoindexx{ranges attribute}
-whose value is 
-\bb\eb
-an offset from the beginning of the
+whose value is an offset from the beginning of the
 \dotdebugranges{} section to the beginning of the 
 \addtoindex{range list}.
 
@@ -2892,15 +2747,11 @@ offset within the \dotdebugranges{} section for the compilation
 unit. The offset given by the \DWATranges{} attribute is
 relative to that base.
 
-\bbpareb
-
 The \definitionx{applicable base address} of a \addtoindex{range list} 
 entry is determined by the closest preceding base address 
 selection entry in the same range list (see
-\bb
 Section \refersec{chap:baseaddressselectionentry}). 
-\eb
- If there is no such selection
+If there is no such selection
 entry, then the applicable base address defaults to the base
 address of the compilation unit 
 (see Section \refersec{chap:fullandpartialcompilationunitentries}).
@@ -2959,11 +2810,7 @@ of subsequent entries of the location list.
 \end{enumerate}
 
 \textit{A base address selection entry affects only the 
-remainder of 
-\bb
-the 
-\eb
-list in which it is contained.}
+remainder of the list in which it is contained.}
 
 \subsubsection{End-of-List Entry}
 The end of any given \addtoindex{range list} is marked by an 
@@ -2998,26 +2845,20 @@ module initialization, subroutines,
 \livelink{chap:lexicalblock}{lexical \nolink{blocks}},
 \livelink{chap:tryandcatchblockentries}{try/catch \nolink{blocks}},
 and the like, may have a \DWATentrypcDEFN{} attribute 
-\addtoindexx{entry PC address}
-to indicate the 
-\bb
+\addtoindexx{entry PC address} to indicate the 
 \definitionx{entry address} which is the address of the 
 instruction where execution should begin
-\eb
 within that range\hypertarget{chap:entryaddressofscope}{}
 of addresses. 
-\bb
 If the value of the \DWATentrypcNAME{} attribute is of
 class \CLASSaddress{} that address is the entry address;
-or, 
-\eb
-if it is of class
-\CLASSconstant, the value is an unsigned integer offset which, when
-added to the base address of the function, gives the entry
+or, if it is of class
+\CLASSconstant, the value is an unsigned integer offset which, 
+when added to the base address of the function, gives the entry
 address. 
 
 
-If \bb\eb no \DWATentrypcNAME{} attribute is present,
+If no \DWATentrypcNAME{} attribute is present,
 then the entry address is assumed to be the same as the
 base address of the containing scope.
 
@@ -3038,20 +2879,15 @@ attributes is determined based on the class as follows:
 of the constant is the value of the attribute.
 
 \item For a \livelink{chap:classreference}{reference}, the
-value is a reference to another 
-\bb
-debugging information entry.  This entry may:
-\eb
+value is a reference to another debugging information entry.  
+This entry may:
 \begin{itemize}
 \renewcommand{\itemsep}{0cm}
 \item describe a constant which is the attribute value,
 \item describe a variable which contains the attribute value, or
-\item 
-\bb
-      contain a \DWATlocation{} attribute whose value is a
-\eb
+\item contain a \DWATlocation{} attribute whose value is a
       DWARF expression which computes the attribute value
-      (for example, \bb\eb a \DWTAGdwarfprocedure{} entry).
+      (for example, a \DWTAGdwarfprocedure{} entry).
 \end{itemize}
 
 \item For an \livelink{chap:classexprloc}{exprloc}, the value 
@@ -3059,19 +2895,18 @@ is interpreted as a DWARF expression; evaluation of the expression
 yields the value of the attribute.
 \end{itemize}
 
-\bbpareb
 
 \needlines{4}
 \section{Entity Descriptions}
 \textit{Some debugging information entries may describe entities
 in the program that are artificial, or which otherwise have a 
 \doublequote{name} that is not a valid identifier in the
-programming language. For example, several languages may
-capture or freeze the value of a variable at a particular
-point in the program and hold that value in an artificial variable. 
-\addtoindex{Ada} 95 has package elaboration routines,
-type descriptions of the form \texttt{typename\textquoteright Class}, and 
-\doublequote{\texttt{access} typename} parameters.}
+programming language. 
+\bb
+This attribute provides a means for the producer to indicate
+the purpose or usage of the containing debugging information entry.
+\eb
+}
 
 Generally, any debugging information entry that 
 has,\hypertarget{chap:DWATdescriptionartificialnameordescription}{}
@@ -3081,7 +2916,11 @@ or may have, a \DWATname{} attribute, may also have a
 null-terminated string providing a description of the entity.
 
 \textit{It is expected that a debugger will only display these
-descriptions as part of the description of other entities.}
+descriptions as part of 
+\bb
+displaying other properties of an entity.
+\eb
+}
 
 \needlines{4}
 \section{Byte and Bit Sizes}
@@ -3170,18 +3009,14 @@ A type or value parameter entry may have a \DWATname{} attribute,
 \addtoindexx{name attribute}
 whose value is a
 null-terminated string containing the name of the corresponding 
-formal parameter.
-\bbeb
-The entry may also have a 
+formal parameter. The entry may also have a 
 \DWATdefaultvalue{} attribute, which is a flag indicating 
 that the value corresponds to the default argument for the 
 template parameter.
 
-A
-\addtoindexx{formal type parameter|see{template type parameter entry}}
+A\addtoindexx{formal type parameter|see{template type parameter entry}}
 template type parameter entry has a
-\addtoindexx{type attribute}
-\DWATtype{} attribute
+\DWATtype{} attribute\addtoindexx{type attribute}
 describing the actual type by which the formal is replaced.
 
 A template value parameter entry has a \DWATtype{} attribute 
@@ -3203,12 +3038,9 @@ single location description for the run-time constant address.
 \livetarg{chap:DWATalignmentnondefault}{}
 A debugging information entry may have a 
 \DWATalignmentDEFN{} attribute\addtoindexx{alignment attribute}
-\bb
 whose value of class \CLASSconstant{} is
 a positive, non-zero, integer describing the 
-\eb 
 alignment of the entity. 
-\bb\eb
 
 \textit{For example, an alignment attribute whose value is 8 indicates
 that the entity to which it applies occurs at an address that is a
index 795b5dd..720dc92 100644 (file)
@@ -55,35 +55,22 @@ content of the debugging entries. The second piece is the
 way the debugging information is encoded and represented in
 an object file.
 
-The informational content is described in
-\bb 
-Chapters
-\eb
-\ref{chap:generaldescription} 
-through
-\ref{chap:otherdebugginginformation}. 
-Chapter \ref{chap:generaldescription}
+The informational content is described in Chapters
+\ref{chap:generaldescription} through
+\ref{chap:otherdebugginginformation}. Chapter 
+\ref{chap:generaldescription}
 describes the overall structure of the information
 and attributes that are common to many or all of the different
-debugging information entries. 
-\bb
-Chapters
-\eb \ref{chap:programscopeentries}, 
+debugging information entries. Chapters
+\ref{chap:programscopeentries}, 
 \ref{chap:dataobjectandobjectlistentries} and 
 \ref{chap:typeentries} describe
 the specific debugging information entries and how they
 communicate the necessary information about the source program
-to a debugger. 
-\bb
-Chapter
-\eb
-\ref{chap:otherdebugginginformation} 
+to a debugger. Chapter \ref{chap:otherdebugginginformation} 
 describes debugging information
 contained outside of the debugging information entries. The
-encoding of the DWARF information is presented in 
-\bb
-Chapter
-\eb
+encoding of the DWARF information is presented in Chapter
 \ref{datarep:datarepresentation}.
 
 This organization closely follows that used in the 
@@ -109,9 +96,7 @@ understanding of the DWARF Debugging Format.
 Although DWARF Version 1 was developed in the late 1980's as a 
 format to support debugging C programs written for AT\&T hardware 
 running SVR4, \DWARFVersionII{} and later has evolved far beyond 
-this origin. One difference between DWARF and other 
-\bb\eb
-formats 
+this origin. One difference between DWARF and other formats 
 is that the latter are often specific to a particular language, 
 architecture, and/or operating system. 
 
@@ -133,8 +118,8 @@ particular language and which doesn't appear to have more
 general application.  For these, DWARF has a description 
 designed to meet the language requirements, although, to the 
 extent possible, an effort is made to generalize the attribute. 
-An example of this is the \DWTAGconditionNAME{} DIE, 
-\bb\eb 
+An example of this is the \DWTAGconditionNAME{} 
+\bb debugging information entry,\eb 
 used to describe \addtoindex{COBOL} level 88 conditions, which 
 is described in abstract terms rather than COBOL-specific terms.  
 Conceivably, this TAG might be used with a different language 
@@ -162,10 +147,7 @@ systems like BSD and Linux.  DWARF fits well with the section
 organization of the ELF object file format. Nonetheless, DWARF 
 attempts to be independent of either the OS or the object file 
 format.  There have been implementations of DWARF debugging 
-data in 
-\bb
-COFF, Mach-O and other object file formats. 
-\eb
+data in COFF, Mach-O and other object file formats. 
 
 DWARF assumes that any object file format will be able to 
 distinguish the various DWARF data sections in some fashion, 
@@ -174,8 +156,7 @@ preferably by name.
 DWARF makes a few assumptions about functionality provided by 
 the underlying operating system.  DWARF data sections can be 
 read sequentially and independently.
-\bb\eb
-Each DWARF data section is a \bb\eb sequence of 8-bit bytes, 
+Each DWARF data section is a sequence of 8-bit bytes, 
 numbered starting with zero.  The presence of offsets from one 
 DWARF data section into other data sections does not imply that 
 the underlying OS must be able to position files randomly; a 
@@ -183,7 +164,7 @@ data section could be read sequentially and indexed using the offset.
 
 \subsection{Compact Data Representation} 
 The DWARF description is designed to be a compact file-oriented 
-representation.\bb\eb
+representation. 
 
 There are several encodings which achieve this goal, such as the 
 TAG and attribute abbreviations or the line number encoding.  
@@ -199,13 +180,12 @@ which allow a consumer to find DWARF data in files other than
 the executable, or the type units, which allow similar type 
 definitions from multiple compilations to be combined. 
 
-\bb
 In most cases, it is anticipated that DWARF 
 debug data will be read by a consumer (usually a debugger) and 
 converted into a more efficiently accessed internal representation.  
 For the most part, the DWARF data in a section is not the same as 
 this internal representation.
-\eb
+
 
 \subsection{Efficient Processing} 
 DWARF is designed to be processed efficiently, so that a 
@@ -224,14 +204,9 @@ the possible implementations.
 DWARF attempts to allow developers the greatest flexibility 
 in designing implementations, without mandating any particular 
 design decisions. Issues which can be described as 
-\bb
-quality-of-implementation
-\eb
-are avoided.
+quality-of-implementation are avoided.
 
-\bb
 \subsection{Explicit Rather Than Implicit Description}
-\eb
 DWARF describes the source to object translation explicitly 
 rather than using common practice or convention as an implicit 
 understanding between producer and consumer.  For example, where 
@@ -245,25 +220,15 @@ DWARF has a goal of describing characteristics of a program once,
 rather than repeating the same information multiple times.  The 
 string sections can be compacted to eliminate duplicate strings, 
 for example.  Other compaction schemes or references between 
-\bb
-sections 
-\eb
-support this. Whether a particular implementation is 
+sections support this. Whether a particular implementation is 
 effective at eliminating duplicate data, or even attempts to, 
-is a 
-\bb
-quality-of-implementation
-\eb
-issue.  
+is a quality-of-implementation issue.  
 
 \subsection{Leverage Other Standards}
 Where another standard exists which describes how to interpret 
 aspects of a program, DWARF defers to that standard rather than 
 attempting to duplicate the description.  For example, C++ has 
-\bb
-specific 
-\eb
-rules for deciding which function to call depending 
+specific rules for deciding which function to call depending 
 name, scope, argument types, and other factors.  DWARF describes 
 the functions and arguments, but doesn't attempt to describe 
 how one would be selected by a consumer performing any particular 
@@ -276,18 +241,13 @@ without requiring additional functionality specifically to
 support DWARF data.  This may require the implementer to be 
 careful that they do not generate DWARF data which cannot be 
 processed by these programs.  Conversely, an assembler which 
-can generate LEB128 
-\bb
-(Little-Endian Base 128) 
-\eb
+can generate LEB128 (Little-Endian Base 128) 
 values may allow the compiler to generate 
 more compact descriptions, and a linker which understands the 
 format of string sections can merge these sections.  Whether 
 or not an implementation includes these functions is a 
-\bb
-quality-of-implementation 
-\eb
-issue, not mandated by the DWARF specification.
+quality-of-implementation issue, not mandated by the DWARF 
+specification.
 
 \subsection{Separate Description From Implementation}
 DWARF intends to describe the translation of a program from 
@@ -297,31 +257,26 @@ describes how the arguments and local variables in a function
 are to be described, but doesn't specify how this data is 
 collected or organized by a producer.  Where a particular DWARF 
 feature anticipates that it will be implemented in a certain 
-fashion, 
-\bb
-informative 
-\eb
-text will suggest but not require this design.
+fashion, informative text will suggest but not require this design.
 
-\bb 
 \subsection{Permissive Rather Than Prescriptive}
-\eb
-The DWARF Standard specifies the meaning of DWARF descriptions.  
-It does not specify what a particular producer should generate 
-for any source to object conversion, nor what a particular 
-consumer should do with this description.  DWARF is permissive, 
-allowing different producer to generate different descriptions 
-for the same source to object conversion.  As long as the DWARF 
-description follows this specification, the producer is 
-generating valid DWARF.
-For example, DWARF allows 
 \bb
-a producer 
+The DWARF standard specifies the meaning of DWARF descriptions. It does
+not require that a particular producer describe any particular source
+construct or aspect of the source to object mapping; nor does it specify
+how a particular consumer should make use of this description.  DWARF is
+permissive, allowing different producers to generate different
+descriptions for the same source to object conversion.  As long as the
+content of the generated DWARF description follows this specification,
+the producer is conforming to the specification; as long as the consumer
+follows this specification when interpreting the generated description,
+the consumer is conforming to the specification.
+
+For example, DWARF allows a producer to identify the end of a function
+prologue in the Line Information so that a debugger can stop at this
+location. A producer which does this is generating valid DWARF, as is
+another which doesn't.
 \eb
-to identify the end of a 
-function prologue in the Line Information so that a debugger 
-can stop at this location.  A producer which does this is 
-generating valid DWARF, as is another which doesn't.  
 
 \subsection{Vendor Extensibility}
 This document does not attempt to cover all interesting
@@ -339,8 +294,7 @@ debugging information entries and attributes defined here in
 new situations. 
 Future versions of this document will not use
 names or values reserved for vendor specific additions. 
-All
-names and values not reserved for vendor additions, however,
+All names and values not reserved for vendor additions, however,
 are reserved for future versions of this document.
 
 Where this specification provides a means for
@@ -355,41 +309,28 @@ to be compatible with this specification in the absence of
 those extensions.
 
 The DWARF format is organized so that a consumer can skip over
-data which it does not recognize. 
-This may allow a consumer
+data which it does not recognize. This may allow a consumer
 to read and process files generated according to a later
 version of this standard or which contain vendor extensions,
 albeit possibly in a degraded manner.
 
-\bb
 \section{Changes From Version 4 to Version 5}
-\eb
 \addtoindexx{DWARF Version 5}
-The following is a list of the major changes made to the DWARF Debugging Information
-Format since Version 4 was published. The list is not meant to be exhaustive.
+The following is a list of the major changes made to the 
+DWARF Debugging Information Format since Version 4 was published. 
+The list is not meant to be exhaustive.
 \begin{itemize}
 \item The \dotdebugtypes{}
 %\addtoindexi{\texttt{.debug\_types}}{\texttt{.debug\_types} (Version 4)}
 section introduced in \DWARFVersionIV{} 
 is eliminated and its contents instead contained in \dotdebuginfo{} sections.
-\bb\eb
 \item Add support for collecting common DWARF information 
-\bb
-(debugging information entries 
-\eb
-and macro definitions)
+(debugging information entries and macro definitions)
 across multiple executable and shared files and keeping it in a single
 \addtoindex{supplementary object file}.
-\item A new line number program header 
-\bb
-format 
-\eb
-provides the ability to 
-use an MD5 hash to validate 
-\bb
-the
-\eb
-source file version in use, allows pooling 
+\item A new line number program header format 
+provides the ability to use an MD5 hash to validate 
+the source file version in use, allows pooling 
 of directory and file name strings and makes provision for vendor-defined
 extensions. It also adds a string section specific to the line number table 
 (\dotdebuglinestr)
@@ -397,55 +338,35 @@ to properly support the common practice of stripping all DWARF sections
 except for line number information.
 \needlines{4}
 \item Add a split object file and package representations to allow most 
-DWARF information to be 
-\bb\eb
-kept separate from an executable 
+DWARF information to be kept separate from an executable 
 or shared image. This includes new sections 
 \dotdebugaddr, \dotdebugstroffsets, \dotdebugabbrevdwo, \dotdebuginfodwo, 
 \dotdebuglinedwo, \dotdebuglocdwo, \dotdebugmacrodwo, \dotdebugstrdwo,
 \dotdebugstroffsetsdwo, \dotdebugcuindex{} and \dotdebugtuindex{} 
 together with new forms of attribute value for referencing these sections.
-This enhances DWARF support 
-\bb
-by reducing executable program size and
+This enhances DWARF support by reducing executable program size and
 by improving link times.
-\eb
 \item Replace the \dotdebugmacinfo{} macro information representation with
-\bb
 with a \dotdebugmacro{} representation that can potentially be much more compact.
-\eb
+
 \item Replace the \dotdebugpubnames{} and \dotdebugpubtypes{} sections
 with a single and more functional name index section, \dotdebugnames{}.
 \item Add a new debugging information entry (\DWTAGcallsiteNAME), related 
-\bb\eb
 attributes and DWARF expression operators to describe call site information, 
 including identification of tail calls and tail recursion.
-\bb\eb
 \item Add improved support for \addtoindex{FORTRAN} assumed rank arrays 
 (\DWTAGgenericsubrangeNAME), dynamic rank arrays (\DWATrankNAME)
 and co-arrays (\DWTAGcoarraytypeNAME{}).
-\item Add
-\bb
-new operations that allow support for 
-\eb
+\item Add new operations that allow support for 
 a DWARF expression stack containing typed values.
 \item Add improved support for the \addtoindex{C++}:
-\bb\eb
 \texttt{auto} return type, deleted member functions (\DWATdeletedNAME), 
 as well as defaulted constructors and destructors (\DWATdefaultedNAME).
-\item Add a new attribute 
-\bb
-(\DWATnoreturnNAME{}), 
-\eb
-to identify 
+\item Add a new attribute (\DWATnoreturnNAME{}), to identify 
 a subprogram that does not return to its caller.
 \item Add language codes for C 2011, C++ 2003, C++ 2011, C++ 2014,
 Dylan, Fortran 2003, Fortran 2008, Go, Haskell, 
-Julia, Modula 3, Ocaml, 
-\bb
-OpenCL, Rust 
-\eb
-and Swift.
+Julia, Modula 3, Ocaml, OpenCL, Rust and Swift.
 \item Numerous other more minor additions to improve functionality
 and performance.
 \end{itemize}
@@ -456,35 +377,22 @@ DWARF Version 5 is compatible with DWARF Version 4 except as follows:
 a new \HFNunittype{} field.
 \needlines{4}
 \item New operand forms for attribute values are defined 
-(\DWFORMaddrxNAME, \DWFORMdatasixteenNAME, 
-\bb
-\DWFORMimplicitconstNAME, 
-\eb
+(\DWFORMaddrxNAME, \DWFORMdatasixteenNAME, \DWFORMimplicitconstNAME, 
 \DWFORMlinestrpNAME, 
 \DWFORMrefsupNAME, \DWFORMstrpsupNAME{} and \DWFORMstrxNAME).
 
 \textit{Because a pre-DWARF Version 5 consumer will not be able to interpret 
 these even to ignore and skip over them, new forms must be 
 considered incompatible additions.}
-\item The line number table header 
-\bb\eb 
-is substantially revised.
+\item The line number table header is substantially revised.
 \needlines{4}
 \item A location list entry 
-\bb\eb
 with the address range \mbox{(0, \textit{maximum-address})} is defined 
 as the new default location list entry.
-\item In a string type,
-\bb 
-the \DWATbytesizeNAME{} attribute is re-defined 
-\eb
+\item In a string type, the \DWATbytesizeNAME{} attribute is re-defined 
 to always describe the size of the string type. 
 (Previously it described the size of the optional string length data 
-field if the \DWATstringlengthNAME{} attribute was 
-\bb
-also 
-\eb
-present.)
+field if the \DWATstringlengthNAME{} attribute was also present.)
 \end{itemize}
 
 While not strictly an incompatibility, the macro information 
index 7f4d113..18055f3 100644 (file)
@@ -103,24 +103,48 @@ the entire load module.
 
 \subsubsection{Contents of the Name Index}
 \label{chap:contentsofthenameindex}
-The name index must contain an entry for each DIE that defines a
+The name index must contain an entry for each 
+\bb
+debugging information entry
+\eb
+that defines a
 named subprogram, label, variable, type, or namespace, subject to
 the following rules:
 \begin{itemize}
 
-\item All non-defining declarations (that is, DIEs with a
+\item All non-defining declarations (that is, 
+      \bb
+      debugging information entries
+      \eb
+      with a
       \DWATdeclaration{} attribute) are excluded.
 
-\item \DWTAGnamespace{} DIEs without a \DWATname{} attribute are
+\item \DWTAGnamespace{} 
+      \bb
+      debugging information entries
+      \eb
+      without a \DWATname{} attribute are
       included with the name \doublequote{\texttt{(anonymous namespace)}}.
 
-\item All other DIEs without a \DWATname{} attribute are excluded.
+\item All other 
+      \bb
+      debugging information entries
+      \eb
+      without a \DWATname{} attribute are excluded.
 
 \item \DWTAGsubprogram{}, \DWTAGinlinedsubroutine{}, and
-      \DWTAGlabel{} DIEs without an address attribute (\DWATlowpc{},
+      \DWTAGlabel{} 
+      \bb
+      debugging information entries
+      \eb
+      without an address attribute (\DWATlowpc{},
       \DWAThighpc{}, \DWATranges{}, or \DWATentrypc{}) are excluded.
 
-\item \DWTAGvariable{} DIEs with a \DWATlocation{} attribute that
+\item \DWTAGvariable{} 
+      \bb
+      debugging information entries
+      \eb
+      with a \DWATlocation{} attribute that
       includes a \DWOPaddr{} or \DWOPformtlsaddress{} operator are
       included; otherwise, they are excluded.
 
@@ -130,14 +154,30 @@ the following rules:
       
 \end{itemize}
 
-For the purposes of determining whether a DIE has a particular
-attribute (such as \DWATname{}), if DIE A has a \DWATspecification{}
-or \DWATabstractorigin{} attribute pointing to another DIE B, any
-attributes of DIE B are considered to be part of DIE A.
+For the purposes of determining whether a 
+\bb
+debugging information entry
+\eb
+has a particular
+attribute (such as \DWATname{}), if 
+\bb
+debugging information entry
+\eb
+$A$ has a \DWATspecification{}
+or \DWATabstractorigin{} attribute pointing to another 
+\bb
+debugging information entry
+\eb
+$B$, any
+attributes of \bbeb $B$ are considered to be part of \bbeb $A$.
 
 \textit{The intent of the above rules is to provide the consumer with
 some assurance that looking up an unqualified name in the index
-will yield all relevant DIEs that provide a defining declaration
+will yield all relevant 
+\bb
+debugging information entries
+\eb
+that provide a defining declaration
 at global scope for that name.}
 
 \textit{A producer may choose to implement additional rules for what
@@ -149,7 +189,10 @@ below.}
 \label{chap:structureofthenametindex}
 Logically, the name index can be viewed as a list of names, with a
 list of index entries for each name. Each index entry corresponds to a
-DIE that matches the criteria given in the previous section. For
+\bb
+debugging information entry
+\eb
+that matches the criteria given in the previous section. For
 example, if one compilation unit has a function named \texttt{fred} and
 another has a struct named \texttt{fred}, a lookup for \doublequote{fred} will find the
 list containing those two index entries.
@@ -362,21 +405,21 @@ Figure \referfol{fig:nameindexlayoutpart1}.
   \node (bucket3) [on chain,detail1,buckets] {bucket $b - 1$};
 \end{scope}
 
-\path [decoration={brace,amplitude=6pt}] ([xshift=36pt]bucket0.north east)
-      [draw,decorate] -- ([xshift=36pt]bucket3.south east)
+\path [decoration={brace,amplitude=6pt}] ([xshift=40pt]bucket0.north east)
+      [draw,decorate] -- ([xshift=40pt]bucket3.south east)
       node [midway,right,inner xsep=9pt] {\texttt{bucket\_count} $(= b)$};
 
 % Hashes
 
 \begin{scope}[start chain=going below, node distance=0, shift={($(bucket3.south east) + (18pt,-24pt)$)}]
   \node (hashes) [on chain,caption1]       {\\ Hashes};
-  \node (hash0)  [on chain,detail1,hashes] {hash value 0};
-  \node (hash1)  [on chain,detail1,hashes] {hash value 1};
-  \node (hash2)  [on chain,detail1,hashes] {hash value 2};
-  \node (hash3)  [on chain,detail1,hashes] {hash value 3};
-  \node (hash4)  [on chain,detail1,hashes] {hash value 4};
+  \node (hash0)  [on chain,detail1,hashes] {hash value 1};
+  \node (hash1)  [on chain,detail1,hashes] {hash value 2};
+  \node (hash2)  [on chain,detail1,hashes] {hash value 3};
+  \node (hash3)  [on chain,detail1,hashes] {hash value 4};
+  \node (hash4)  [on chain,detail1,hashes] {hash value 5};
   \node (hash5)  [on chain,ellip1,hashes]  {\dots};
-  \node (hash6)  [on chain,detail1,hashes] {hash value $n - 1$};
+  \node (hash6)  [on chain,detail1,hashes] {hash value $n$};
 \end{scope}
 
 % String Offsets
@@ -407,7 +450,10 @@ Figure \referfol{fig:nameindexlayoutpart1}.
 
 \path [decoration={brace,amplitude=6pt}] ([xshift=9pt]entry0.north east)
       [draw,decorate] -- ([xshift=9pt]entry6.south east)
-      node [midway,right,inner xsep=9pt] {\texttt{name\_count} $(= n)$};
+      node [midway,right,inner xsep=9pt] {\begin{tabular}{c} 
+                                          \texttt{name\_count} \\ 
+                                                     $(= n)$ 
+                                          \end{tabular}};
 
 % Arrows pointing to .debug_str and entry pool
 
@@ -426,12 +472,12 @@ Figure \referfol{fig:nameindexlayoutpart1}.
 % Arrows from buckets to hashes
 
 \path ([xshift=24pt]bucket0.center) coordinate (p5);
-\path ([xshift=144pt]p5) coordinate (c5);
-\path ([xshift=-108pt]hash0.west) coordinate (c6);
+\path ([xshift=130pt]p5) coordinate (c5);
+\path ([xshift=-70pt]hash0.west) coordinate (c6);
 \draw [dashed,{Circle[open]}-{Stealth[]}] (p5) .. controls (c5) and (c6) .. (hash0.west);
 
 \path ([xshift=24pt]bucket1.center) coordinate (p7);
-\path ([xshift=162pt]p7) coordinate (c7);
+\path ([xshift=120pt]p7) coordinate (c7);
 \path ([xshift=-144pt]hash3.west) coordinate (c8);
 \draw [dashed,{Circle[open]}-{Stealth[]}] (p7) .. controls (c7) and (c8) .. (hash3.west);
 
@@ -553,9 +599,17 @@ The standard attributes are:
 \item Type Unit (TU), a reference to an entry in the list of local
     or foreign TUs.
 
-\item DIE offset within the CU or TU.
-
-\item Parent DIE, a reference to the index entry for the parent.
+\item
+    \bb
+    Debugging information entry
+    \eb
+    offset within the CU or TU.
+
+\item Parent 
+    \bb
+    debugging information entry,
+    \eb
+    a reference to the index entry for the parent.
     This is represented as the offset of the entry relative to
     the start of the entry pool.
 
@@ -563,7 +617,11 @@ The standard attributes are:
 \end{itemize}
 
 \needlines{6}
-It is possible that an indexed DIE has a parent that is not
+It is possible that an indexed 
+\bb
+debugging information entry
+\eb
+has a parent that is not
 indexed (for example, if its parent does not have a name attribute). In
 such a case, a parent attribute may point to a nameless index
 entry (that is, one that cannot be reached from any entry in the
@@ -638,10 +696,7 @@ declaration of that type.}
 \subsubsection{Data Representation of the Name Index}
 \label{chap:datarepresentationofthenameindex}
 The name index is placed in a section named \dotdebugnames, and
-consists of the eight parts described
-\bb
-in the following sections.
-\eb
+consists of the eight parts described in the following sections.
 
 \subsubsubsection{Section Header}
 The section header contains the following fields:
@@ -653,12 +708,17 @@ not including the length field itself.
 
 \item \texttt{version} (\HFTuhalf) \\
 A version number\addtoindexx{version number!name index table} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+\bb
+(see Section \refersec{datarep:nameindextable}).
+\eb 
 This number is specific to the name index table and is
 independent of the DWARF version number.
 
 \item \textit{padding} (\HFTuhalf) \\
-Reserved to DWARF.
+Reserved to DWARF
+\bb
+(must be zero).
+\eb
 
 \item \texttt{comp\_unit\_count} (\HFTuword) \\
 The number of CUs in the CU list.
@@ -697,9 +757,14 @@ four bytes in length.
 \needlines{4}
 \subsubsubsection{List of CUs}
 The list of CUs immediately follows the header. Each entry in the 
-list is an offset into the \dotdebuginfo{} section of the corresponding 
-compilation unit. In the DWARF-32 format, a section offset is 4
-bytes, while in the DWARF-64 format, a section offset is 8 bytes.
+list is an offset 
+\bbeb 
+of the corresponding compilation unit
+\bb
+in the \dotdebuginfo{} section.
+\eb
+In the DWARF-32 format, a section offset is 4 bytes, 
+while in the DWARF-64 format, a section offset is 8 bytes.
 
 The total number of entries in the list is given by \texttt{comp\_unit\_count}.
 There must be at least one CU.
@@ -707,10 +772,13 @@ There must be at least one CU.
 \needlines{4}
 \subsubsubsection{List of Local TUs}
 The list of local TUs immediately follows the list of CUs. Each 
-entry in the list is an offset into the \dotdebuginfo{} section 
-of the corresponding compilation unit. In the DWARF-32 format, a section
-offset is 4 bytes, while in the DWARF-64 format, a section offset is 8
-bytes.
+entry in the list is an offset 
+\bb
+of the corresponding type unit
+in the \dotdebuginfo{} section.
+\eb
+In the DWARF-32 format, a section offset is 4 bytes, 
+while in the DWARF-64 format, a section offset is 8 bytes.
 
 The total number of entries in the list is given by
 \texttt{local\_type\_unit\_count}. This list may be empty.
@@ -735,8 +803,10 @@ contains 4-byte unsigned integers.
 
 \needlines{4}
 Symbols are entered into the hash table by first computing a hash
-value from the symbol name. The hash is computed by the "TJB" hash function
-\addtoindexx{TJB hash function}
+value from the symbol name. The hash is computed 
+\bb
+using the "DJB" hash function\addtoindexx{DJB hash function}
+\eb
 described in Section \refersec{datarep:nametablehashfunction}.
 Given a hash value for the symbol,
 the symbol is entered into a bucket whose index is the hash value
@@ -776,12 +846,13 @@ indexed starting at 1 (to match the hashes array).
 
 The number of rows in the name table is given by \texttt{name\_count}.
 
-If there is a hash lookup table, the entries in the name table must be
-grouped by bucket: all names that fall into the same hash bucket must
-be grouped together. The row number of an entry in the name table must
+If there is a hash lookup table, the 
+\bbeb
+row number of an entry in the name table must
 match the row number of its corresponding entry in the hashes array.
 
-If there is no hash lookup table, there is no ordering or grouping
+If there is no hash lookup table, there is no ordering 
+\bbeb
 requirement for the name table.
 
 \subsubsubsection{Abbreviations Table}
@@ -827,8 +898,7 @@ Table \referfol{tab:indexattributeencodings}.
 \DWIDXdieoffsetTARG   & Offset of DIE within CU or TU                \\
 \DWIDXparentTARG      & Index of name \mbox{table} entry for parent  \\
 \DWIDXtypehashTARG    & Hash of type \mbox{declaration}              \\
-\DWIDXlouserTARG      & Start of user-defined range                  \\
-\DWIDXhiuserTARG      & End of user-defined range                    \\
+\bbeb
 \end{longtable}
 \end{centering}
 
@@ -877,8 +947,10 @@ The length of this contribution to the address lookup section,
 not including the length field itself.
 
 \item \texttt{version} (\HFTuhalf) \\
-A version number\addtoindexx{version number!address lookup table} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+A version number\addtoindexx{version number!address lookup table}
+\bb 
+(see Section \refersec{datarep:addrssrangetable}). 
+\eb
 This number is specific to the address lookup table and is
 independent of the DWARF version number.
 
@@ -1159,9 +1231,7 @@ line number program are special opcodes.}
 These have a \HFTubyte{} opcode field which may be followed by zero or more
 \addtoindex{LEB128} operands (except for 
 \mbox{\DWLNSfixedadvancepc,} see 
-\bb
 Section \refersec{chap:standardopcodes}).
-\eb
 The opcode implies the number of operands and their meanings, but the
 line number program header also specifies the number of operands for
 each standard opcode.
@@ -1375,10 +1445,8 @@ goals:}
 \begin{itemize}
 \setlength{\itemsep}{0em}
 \item A content type code (see 
-\bb
 Sections \refersec{chap:standardcontentdescriptions} and
 \refersec{chap:vendordefinedcontentdescriptions}).
-\eb
 
 \item A form code using the attribute form codes
 \end{itemize}
@@ -1413,14 +1481,21 @@ of the directory entries in order, beginning with 0.
 \textit{Prior to \DWARFVersionV, the current directory was not
 represented in the directories field and a directory index
 of 0 implicitly referred to that directory as found in the
-\DWATcompdir{} attribute of the compilation unit DIE. In
-\DWARFVersionV, the current directory is explicitly present
+\DWATcompdir{} attribute of the compilation unit 
+\bb
+debugging information entry.
+\eb
+In \DWARFVersionV, the current directory is explicitly present
 in the directories field. This is needed to support the
 common practice of stripping all but the line number sections
 (\dotdebugline{} and \dotdebuglinestr) from an executable.}
 
 \textit{Note that if a \dotdebuglinestr{} section is present, 
-both the compilation unit DIE and the line number header can
+both the compilation unit 
+\bb
+debugging information entry
+\eb
+and the line number header can
 share a single copy of the current directory name string.}
 
 \item \texttt{file\_name\_entry\_format\_count} (\HFTubyte) \\
@@ -1459,7 +1534,11 @@ a declaration coordinate or a macro file inclusion.
  
 The first entry in the sequence is the primary source file 
 whose file name exactly matches that given in the 
-\DWATname{} attribute in the compilation unit DIE.
+\DWATname{} attribute in the compilation unit 
+\bb
+debugging information entry.
+\eb
+
    
 The line number program references file names in this 
 sequence beginning with 0, and uses those numbers instead 
@@ -1473,7 +1552,11 @@ the common practice of stripping all but the line number sections
 (\dotdebugline{} and \dotdebuglinestr) from an executable.}
 
 \textit{Note that if a \dotdebuglinestr{} section is present, 
-both the compilation unit DIE and the line number header can
+both the compilation unit 
+\bb
+debugging information entry
+\eb
+and the line number header can
 share a single copy of the current file name string.}
 
 \end{enumerate}
@@ -1553,7 +1636,7 @@ is found in Appendix \refersec{app:linenumberheaderexample}.}
 \subsubsection{Vendor-defined Content Descriptions}
 \label{chap:vendordefinedcontentdescriptions}
 Vendor-defined content descriptions may be defined using content
-type codes in the range \DWLNCTlouserTARG{} to \DWLNCThiuserTARG{}. Each
+type codes in the range \DWLNCTlouserNAME{} to \DWLNCThiuserNAME{}. Each
 such code may be combined with one or more forms from the set:
 \DWFORMblock, \DWFORMblockone, \DWFORMblocktwo, \DWFORMblockfour,
 \DWFORMdataone, \DWFORMdatatwo, \DWFORMdatafour, \DWFORMdataeight,
@@ -1942,6 +2025,12 @@ inclusion entries.  Each entry consists of an opcode followed by
 zero or more operands. Each macro unit ends with an entry
 containing an opcode of 0.
 
+\bb
+In all macro information entries,
+the line number of the entry is encoded as an
+unsigned LEB128 integer.
+\eb
+
 \needlines{6}
 \subsection{Macro Information Header}
 The macro information header contains the following fields:
@@ -2015,6 +2104,12 @@ order in which the directives were processed by the
 compiler (after taking into account the effect of the
 macro import directives).
 
+\bb
+\textit{The source file in which a macro information entry occurs
+can be derived by interpreting the sequence of entries from the
+beginning of the \dotdebugmacro{} section. \DWMACROstartfile{} and 
+\DWMACROendfile{} indicate changes in the containing file.}
+\eb
 
 \subsubsection{Define and Undefine Entries}
 \label{chap:defineandundefineentries}
@@ -2075,17 +2170,7 @@ The contents of the operands are described below (see Sections
 
 \end{enumerate}
 
-\subsubsection{Macro Source Line Number}
-\label{chap:macrosourcelinenumber}
-In all define and undefine macro information entries,
-as well as the \DWMACROstartfile{} entry,
-the line number of the entry occurs is encoded as an
-unsigned LEB128 integer.
-
-\textit{The source file in which a macro information entry occurs
-can be derived by interpreting the sequence of entries from the
-beginning of the \dotdebugmacro{} section. \DWMACROstartfile{} and 
-\DWMACROendfile{} indicate changes in the containing file.}
+\bbpareb
 
 \subsubsection{Macro Define String}
 \label{chap:macrodefinestring}
@@ -2162,8 +2247,8 @@ ending of an included file.
 \itembfnl{\DWMACROstartfileTARG{}}
 A \DWMACROstartfileNAME{} entry has two operands. The
 first operand encodes the line number of the source line on
-which the \texttt{\#include} macro directive occur
-(see Section \refersec{chap:macrosourcelinenumber}).
+which the \texttt{\#include} macro directive occurs.
+\bbeb
 The second operand encodes a source file name index. 
 
 The source file name index is the file number in the 
@@ -2518,10 +2603,8 @@ A
 constant that is factored out of all advance location
 instructions (see 
 Section \refersec{chap:rowcreationinstructions}).
-\bb
 The resulting value is  
 \mbox{\textit{(operand} * \HFNcodealignmentfactor)}.
-\eb
 
 \item  \HFNdataalignmentfactor{} (signed LEB128)
 \addtoindexx{LEB128!signed}\addtoindexx{signed LEB128|see{LEB128, signed}} \\
@@ -2529,11 +2612,8 @@ The resulting value is
 A 
 \addtoindexx{\textless daf\textgreater|see{data alignment factor}}
 constant that is factored out of certain offset instructions
-(see 
-\bb
-Sections \refersec{chap:cfadefinitioninstructions} and 
+(see Sections \refersec{chap:cfadefinitioninstructions} and 
 \refersec{chap:registerruleinstructions}).
-\eb
 The resulting value is  \textit{(operand} *
 \HFNdataalignmentfactor).
 
@@ -2594,9 +2674,7 @@ of bytes of program instructions described by this entry.
 
 \item \HFNinstructions{} (array of \HFTubyte) \\
 A sequence of table defining instructions that are described 
-\bb
 in Section \refersec{chap:callframeinstructions}.
-\eb
 
 \needlines{4}
 \item \HFNpadding{} (array of \HFTubyte) \\
@@ -2625,11 +2703,9 @@ operators cannot be used in such operands:
 
 \begin{itemize}
 \item
-\bb
 \DWOPaddrx, \DWOPcalltwo, \DWOPcallfour{}, \DWOPcallref, 
 \DWOPconsttype, \DWOPconstx, \DWOPconvert, \DWOPdereftype, 
 \DWOPregvaltype{} and \DWOPreinterpret{}
-\eb
 operators are 
 not allowed in an operand of these instructions because
 the call frame information must not depend on other
index bdab148..d3f3aa9 100644 (file)
@@ -5,7 +5,7 @@ relate to different levels of program scope: compilation,
 module, subprogram, and so on. Except for separate type
 entries (see Section \refersec{chap:typeunitentries}), 
 these entries may be thought of as
-\bb\eb ranges of text addresses within the program.
+ranges of text addresses within the program.
 
 \section{Unit Entries}
 \label{chap:unitentries}
@@ -73,10 +73,8 @@ be usefully shared by multiple other units.
 \textit{Split compilation units and split type units may be 
 contained in object files separate from those containing the 
 program code and data.
-\bb
 These object files are not processed by a linker; thus,
-split units do not depend on underlying object file relocations.
-\eb}
+split units do not depend on underlying object file relocations.}
 
 \textit{Either a full compilation unit or a partial compilation 
 unit may be logically incorporated into another compilation unit 
@@ -130,11 +128,8 @@ template instantiation, or other implementation-dependent
 portion of a compilation. A full compilation unit can also
 function in a manner similar to a partial compilation unit
 in some cases.
-\bb 
 See Appendix \refersec{app:dwarfcompressionandduplicateeliminationinformative}
-for discussion of related compression techniques.
-\eb
-}
+for discussion of related compression techniques.}
 
 A compilation unit entry owns debugging information
 entries that represent all or part of the declarations
@@ -182,11 +177,8 @@ location lists (see Section
 A \DWATnameDEFN{} attribute \addtoindexx{name attribute}
 whose value is a null-terminated string 
 containing the full or relative path name 
-\bb
 (relative to the value of the \DWATcompdir{} attribute, 
-see below)
-\eb
-of the primary
+see below) of the primary
 source file from which the compilation unit was derived.
 
 \item \hypertarget{chap:DWATlanguageprogramminglanguage}{}
@@ -214,12 +206,10 @@ in Table \refersec{tab:languagenames}.
 \DWLANGCeightynineTARG & ISO C:1989 \addtoindexx{C:1989 (ISO)} \\
 \DWLANGCninetynineTARG & ISO C:1999 \addtoindexx{C:1999 (ISO)} \\
 \DWLANGCelevenTARG     & ISO C:2011 \addtoindexx{C:2011 (ISO)} \\
-\bb
 \DWLANGCplusplusTARG          & ISO C++98 \addtoindexx{C++98 (ISO)} \\
 \DWLANGCpluspluszerothreeTARG & ISO C++03 \addtoindexx{C++03 (ISO)} \\
 \DWLANGCpluspluselevenTARG    & ISO C++11 \addtoindexx{C++11 (ISO)} \\
 \DWLANGCplusplusfourteenTARG  & ISO C++14 \addtoindexx{C++14 (ISO)} 
-\eb
 \\
 \DWLANGCobolseventyfourTARG & ISO COBOL:1974 \addtoindexx{COBOL:1974 (ISO)} \\
 \DWLANGCoboleightyfiveTARG  & ISO COBOL:1985 \addtoindexx{COBOL:1985 (ISO)} \\
@@ -244,9 +234,7 @@ in Table \refersec{tab:languagenames}.
 \DWLANGPLITARG{}~\dag & ANSI PL/I:1976 \addtoindexx{PL/I:1976 (ANSI)} \\
 \DWLANGPythonTARG{}~\dag & \addtoindex{Python} \\
 \DWLANGRustTARG{}~\dag & \addtoindex{Rust} \\
-\bb
 \DWLANGSwiftTARG{}
-\eb
  & \addtoindex{Swift} \\
 \DWLANGUPCTARG{} & UPC (Unified Parallel C) \addtoindexx{UPC}  
                          \index{Unified Parallel C|see{UPC}} \\ 
@@ -385,19 +373,15 @@ declared entities in the source program, or filenames in the line number table)
 are represented using the UTF-8 representation. 
 
 \needlines{4}
-\item \hypertarget{chap:DWATmainsubprogramunitcontainingmainorstartingsubprogram}{}
+\item%
+\hypertarget{chap:DWATmainsubprogramunitcontainingmainorstartingsubprogram}{}
 A \DWATmainsubprogramDEFN{} attribute,\addtoindexx{main subprogram attribute} 
 which is a \livelink{chap:classflag}{flag},
 whose presence indicates that the compilation unit contains a
 subprogram that has been identified as the starting
-\bb
-subprogram
-\eb
-of the program. If more than one compilation unit contains
+subprogram of the program. If more than one compilation unit contains
 this \nolink{flag}, any one of them may contain the starting 
-\bb
 function.
-\eb
 
 \textit{\addtoindex{Fortran} has a \addtoindex{PROGRAM statement}
 which is used
@@ -488,12 +472,8 @@ A \DWATdwonameDEFN{} attribute
 \addtoindexx{split DWARF object file name attribute}
 whose value is a
 null-terminated string containing the full or relative
-path name 
-\bb
-(relative to the value of the \DWATcompdir{} attribute, 
-see below)
-\eb
-of the object file that contains the full
+path name (relative to the value of the \DWATcompdir{} attribute, 
+see below) of the object file that contains the full
 compilation unit.
 
 \item \livetarg{chap:DWATdwoidforunit}{}
@@ -515,58 +495,31 @@ need to be similar or related to the means of determining a
 
 \end{enumerate}
 
-A skeleton compilation unit may have additional
-attributes, 
-\bb
+A skeleton compilation unit may have additional attributes, 
 which are the same as for conventional compilation unit entries 
-except as noted,
-\eb
-from among the following:
-
+except as noted, from among the following:
 \begin{enumerate}[1. ]
 \addtocounter{enumi}{2}
-\item
-Either a \DWATlowpc{} and \DWAThighpc{} pair of attributes
+\item Either a \DWATlowpc{} and \DWAThighpc{} pair of attributes
 or a \DWATranges{} attribute.
-\bb\eb
-
-\item
-A \DWATstmtlist{} attribute.
-\bb\eb
-
-\item
-A \DWATcompdir{} attribute.
-\bb\eb 
+\item A \DWATstmtlist{} attribute.
+\item A \DWATcompdir{} attribute.
 
 \needlines{6}
-\item
-A \DWATuseUTFeight{} attribute.
-\bb\eb 
+\item A \DWATuseUTFeight{} attribute.
 
 \textit{This attribute applies to strings referred to by the skeleton
 compilation unit entry itself, and strings in the associated line
 number information.
 The representation for strings in the object file referenced 
 by the \DWATdwoname{} attribute is determined by the presence 
-of a \DWATuseUTFeight{} attribute in the
-\bb
-full compilation unit 
-(see Section \refersec{chap:splitfullcompilationunitentries}).
-\eb
-}
+of a \DWATuseUTFeight{} attribute in the full compilation unit 
+(see Section \refersec{chap:splitfullcompilationunitentries}).}
 
-\item
-A \DWATstroffsetsbase{} attribute, for indirect strings references 
+\item A \DWATstroffsetsbase{} attribute, for indirect strings references 
 from the skeleton compilation unit.
-\bb\eb 
-
-\item
-A \DWATaddrbase{} attribute.
-\bb\eb 
-
-\item
-A \DWATrangesbase{} attribute.
-\bb\eb 
+\item A \DWATaddrbase{} attribute.
+\item A \DWATrangesbase{} attribute.
 
 \end{enumerate}
 
@@ -610,48 +563,25 @@ split compilation unit and the associated skeleton
 compilation unit must use the same form to encode the 
 identification value.
 
-\bbpareb
-
 \end{enumerate}
 
 \needlines{4}
-A split full compilation unit may also have additional 
-attributes,
-\bb
+A split full compilation unit may also have additional attributes, 
 which are the same as for conventional compilation unit entries 
-except as noted,
-\eb
-from among the following:
+except as noted, from among the following:
 \begin{enumerate}[1. ]
 \addtocounter{enumi}{1}
 \item A \DWATname{} attribute.
-\bb\eb 
-
 \item A \DWATlanguage{} attribute.
-\bb\eb 
-        
 \item A \DWATmacros{} attribute.
-\bb 
 The value of this attribute is of class \CLASSmacptr{}, which is 
 an offset relative to the \dotdebugmacrodwo{} section.
-\eb
-        
-\item A \DWATproducer{} attribute.
-\bb\eb 
         
+\item A \DWATproducer{} attribute.        
 \item A \DWATidentifiercase{} attribute.
-\bb\eb 
-        
 \item A \DWATmainsubprogram{} attribute.
-\bb\eb 
-
 \item A \DWATentrypc{} attribute.
-\bb\eb 
-
-\item A
-\bb
-\DWATuseUTFeight{} attribute.
-\eb  
+\item A \DWATuseUTFeight{} attribute.
 
 \end{enumerate}
 
@@ -659,7 +589,6 @@ an offset relative to the \dotdebugmacrodwo{} section.
 split full compilation unit entry but instead are inherited 
 (if present) from the corresponding skeleton compilation unit: 
 \DWATlowpc, \DWAThighpc, \DWATranges, \DWATstmtlist, \DWATcompdir, 
-\bb\eb
 \DWATstroffsetsbase, \DWATaddrbase{} and 
 \DWATrangesbase.}
 
@@ -686,10 +615,8 @@ the sections in which they are represented
 (see \refersec{datarep:splitdwarfobjectfiles} for details).
 \addtoindexx{conventional type unit}
 \addtoindexx{split type unit}
-\bb
 Moreover, the \DWATstroffsetsbase{} attribute (see below) is not 
 used in a split type unit.
-\eb
 
 A type unit is represented by a debugging information entry
 with the tag \DWTAGtypeunitTARG. 
@@ -771,13 +698,9 @@ U is a direct child of the type unit entry. The containing
 entries may be shared among the additional types and between
 T and the additional types.
 
-\textit{
-\bb
-Examples of these kinds of relationships are found in
+\textit{Examples of these kinds of relationships are found in
 Section \refersec{app:signaturecomputationexample} and
-Section \refersec{app:declarationscompletingnondefiningdeclarations}.
-\eb
-}
+Section \refersec{app:declarationscompletingnondefiningdeclarations}.}
 
 \needlines{4}
 \textit{Types are not required to be placed in type units. In general,
@@ -822,7 +745,6 @@ If the module has a name, the module entry has a
 \addtoindexx{name attribute}
 whose value is a null\dash terminated string containing
 the module name.
-\bbeb
 
 The \addtoindex{module entry} may have either a 
 \DWATlowpc{} and
@@ -890,16 +812,11 @@ other
 debugging information entries describing program entities
 whose declarations occur in the namespace.
 
-\bbpareb
-
 A namespace may have a 
 \DWATexportsymbolsDEFN{}\livetarg{chap:DWATexportsymbolsofnamespace}{}
 attribute\addtoindexx{export symbols attribute}
 \addtoindexx{inline namespace|see{\textit{also} export symbols attribute}}
-which 
-\bb
-is a \CLASSflag{} which
-\eb
+which is a \CLASSflag{} which
 indicates that all member names defined within the 
 namespace may be referenced as if they were defined within 
 the containing namespace. 
@@ -950,10 +867,7 @@ are given here. If only the final namespace is represented,
 \addtoindexx{namespace (C++)!using declaration}
 it is impossible for a debugger to interpret using declaration
 references in exactly the manner defined by the 
-\addtoindex{C++} language.
-}
-
-\bbpareb
+\addtoindex{C++} language.}
 
 \textit{For \addtoindex{C++} namespace examples, 
 see Appendix \refersec{app:namespaceexamples}.}
@@ -962,15 +876,11 @@ see Appendix \refersec{app:namespaceexamples}.}
 \needlines{5}
 \subsection{Imported (or Renamed) Declaration Entries} 
 \label{chap:importedorrenameddeclarationentries}
-\textit{Some languages support the concept of importing into or making
-accessible in a given unit 
-\bb
-certain declarations that occur
-\eb
-in a different
-module or scope. An imported declaration may sometimes be
-given another name.
-}
+
+\textit{Some languages support the concept of importing into or 
+making accessible in a given unit certain declarations that occur
+in a different module or scope. An imported declaration may 
+sometimes be given another name.}
 
 An imported declaration is represented by one or
 \addtoindexx{imported declaration entry}
@@ -988,9 +898,7 @@ is being imported.
 An imported declaration may also have a \DWATname{}
 attribute\addtoindexx{name attribute}
 whose value is a null-terminated string containing the
-name
-\bbeb
-by which the
+name by which the
 imported entity is to be known in the context of the imported
 declaration entry (which may be different than the name of
 the entity being imported). If no name is present, then the
@@ -1009,7 +917,6 @@ may be represented by an imported declaration entry
 \addtoindexx{namespace (C++)!alias}
 with a name attribute whose value is
 a null-terminated string containing the alias name
-\bbeb 
 and a \DWATimportDEFN{} attribute 
 whose value is a \livelink{chap:classreference}{reference} to the 
 applicable original namespace or namespace extension entry.}
@@ -1188,7 +1095,6 @@ instance of a subroutine or function \\
 The subroutine or entry point entry has a \DWATname{} 
 attribute whose value is a null-terminated string containing the 
 subroutine or entry point name.
-\bbeb
 It may also have a \DWATlinkagename{} attribute as
 described in Section \refersec{chap:linkagenames}.
 
@@ -1216,13 +1122,9 @@ the program.  If more than one subprogram contains this
 \nolink{flag},
 any one of them may be the starting subroutine of the program.
 
-\textit{%
-\bb 
-See also Section \refersec{chap:unitentries}) regarding the
+\textit{See also Section \refersec{chap:unitentries}) regarding the
 related use of this attribute to indicate that a compilation
-unit contains the main subroutine of a program.
-\eb
-}
+unit contains the main subroutine of a program.}
 
 \subsubsection{Calling Convention Information}
 \hypertarget{chap:DWATcallingconventionforsubprograms}{}
@@ -1284,14 +1186,10 @@ those declared using non-prototype declarations.}
 A subroutine entry declared with a function prototype style
 declaration may have a
 \addtoindexx{prototyped attribute}
-\bb
 \DWATprototypedDEFN{} attribute, which is
 a \CLASSflag. 
 The attribute indicates whether a subroutine entry point corresponds
 to a function declaration that includes parameter prototype information.
-\eb 
-\bbpareb
 
 A subprogram entry may have 
 a\hypertarget{chap:DWATelementalelementalpropertyofasubroutine}{}
@@ -1325,7 +1223,6 @@ which is a \CLASSflag. The attribute
 indicates whether the subprogram was declared with the \doublequote{noreturn} keyword or property 
 indicating that the subprogram can be called, but will never return to its caller.
 
-\bb
 \textit{The \addtoindex{Fortran} 
 language allows the keywords \texttt{elemental}, \texttt{pure}
 and \texttt{recursive} to be included as part of the declaration of
@@ -1333,32 +1230,18 @@ a subroutine; these attributes reflect that usage. These
 attributes are not relevant for languages that do not support
 similar keywords or syntax. In particular, the \DWATrecursiveNAME{}
 attribute is neither needed nor appropriate in languages such
-as \addtoindex{C} 
-where functions support recursion by default.
-}
-\eb
+as \addtoindex{C} where functions support recursion by default.}
+
 
 \subsubsection{Call Site-Related Attributes}
-\textit{While subprogram attributes in the 
-\bb
-previous 
-\eb
-section provide
-information about the subprogram and 
-\bb
-its 
-\eb
-entry point(s) as a whole,
+\textit{While subprogram attributes in the previous section provide
+information about the subprogram and its entry point(s) as a whole,
 the following attributes provide summary information about the calls
 that occur within a subprogram.}
 
-A subroutine entry may have 
-\bb
-\DWATcallalltailcalls, 
+A subroutine entry may have \DWATcallalltailcalls, 
 \DWATcallallcalls{} and/or \DWATcallallsourcecalls{} 
-\eb
-attributes, each of which is a 
-\livelink{chap:classflag}{flag}.
+attributes, each of which is a \CLASSflag.
 \addtoindexx{call site summary information}
 \addtoindexx{subroutine call site summary attributes}
 These flags indicate the completeness of the call site 
@@ -1388,20 +1271,13 @@ that is optimized out is nonetheless also described using a \DWTAGcallsite{} ent
 that has neither a \DWATcallpc{} nor \DWATcallreturnpc{} attribute.
 
 \textit{The \DWATcallallsourcecallsNAME{} attribute is intended for debugging 
-information format consumers that 
-\bb
-analyze 
-\eb
-call graphs.}
+information format consumers that analyze call graphs.}
 
-If the 
-\bb
-the \DWATcallallsourcecalls{} attribute is present then the 
+If the the \DWATcallallsourcecalls{} attribute is present then the 
 \DWATcallallcalls{} and \DWATcallalltailcalls{} attributes are 
 also implicitly present. Similarly, if the 
 \DWATcallallcalls{} attribute is present then the \DWATcallalltailcalls{} 
 attribute is implicitly present.
-\eb
 
 \needlines{5}
 \subsection{Subroutine and Entry Point Return Types}
@@ -1457,7 +1333,7 @@ An entry point has a \DWATlowpc{} attribute whose value is the
 relocated address of the first machine instruction generated
 for the entry point.
 
-\bbpareb
+%\bbpareb
 %\textit{While the \DWATentrypc{} attribute 
 %\addtoindexx{entry pc attribute!for subroutine}
 %might also seem appropriate for this purpose, historically the 
@@ -1655,11 +1531,7 @@ types and values. The exceptions are:
 Section \refersec{chap:templateparameters}.
 
 \needlines{4}
-\item If the compiler has generated a 
-\bb
-separate
-\eb
-compilation unit
+\item If the compiler has generated a separate compilation unit
 to hold the template instantiation and that compilation unit
 has a different name from the compilation unit containing
 the template definition, the name attribute for the debugging
@@ -1712,11 +1584,7 @@ Name&Meaning\\ \hline
 
 \textit{In \addtoindex{C++}, a function or a constructor declared with
 \addttindex{constexpr} is implicitly declared inline. The abstract
-\bbeb
-instance (see 
-\bb
-Section \refersec{chap:abstractinstances}) 
-\eb
+instance (see Section \refersec{chap:abstractinstances}) 
 is represented by a debugging information
 entry with the tag \DWTAGsubprogram. Such an entry has a
 \DWATinline{} attribute whose value is \DWINLinlined.}
@@ -1728,24 +1596,17 @@ Any subroutine entry that contains a
 \DWATinlineDEFN{} attribute\addtoindexx{inline attribute} 
 whose value is other than 
 \DWINLnotinlined{}
-is known as an
-\bb
-\definition{abstract instance root}.
-\eb
+is known as an \definition{abstract instance root}.
 \addtoindexx{abstract instance!root}
 \hypertarget{chap:DWATinlineabstracttinstance}{}
 Any debugging information entry that is owned (either
 directly or indirectly) by an abstract instance root
-is known as an
-\bb
+is known as an 
 \definition{abstract instance entry.}\addtoindexx{abstract instance!entry}
-\eb
 Any set of abstract instance entries that are all
 children (either directly or indirectly) of some abstract
 instance root, together with the root itself, is known as an
-\bb
 \definition{abstract instance tree.}\addtoindexx{abstract instance!tree}
-\eb
 However, in the case where an abstract instance tree is 
 nested within another abstract instance tree, the entries in the 
 \addtoindex{nested abstract instance}
@@ -1764,15 +1625,10 @@ to refer to the declaration in context.
 declaration or a class declaration.}
 
 \textit{Abstract instance trees are defined so that no entry is part
-of more than one abstract instance tree. 
-\bbeb
-}
+of more than one abstract instance tree.}
 
-Attributes 
-\bb
-and children in an abstract instance are shared
+Attributes and children in an abstract instance are shared
 by all concrete instances (see Section \refersec{chap:concreteinstances}).
-\eb
 
 A debugging information entry that is a member of an abstract
 instance tree should not contain any attributes which describe
@@ -1825,9 +1681,7 @@ member entries, and so on, all apply regardless of whether
 or not a given entry is abstract.
 
 \needlines{5}
-\bb
 \subsubsection{Concrete Instances}
-\eb
 \label{chap:concreteinstances}
 
 Each inline expansion of a subroutine is represented
@@ -1840,15 +1694,10 @@ the inlining occurs.
 \needlines{4}
 Each inlined subroutine entry may have either a 
 \DWATlowpc{}
-and \DWAThighpc{} pair 
-of 
+and \DWAThighpc{} pair of attributes
 \addtoindexx{high PC attribute}
-attributes 
 \addtoindexx{low PC attribute}
-or 
-\addtoindexx{ranges attribute}
-a 
-\DWATranges{}
+or a \DWATranges{}\addtoindexx{ranges attribute}
 attribute whose values encode the contiguous or non-contiguous
 address ranges, respectively, of the machine instructions
 generated for the inlined subroutine (see 
@@ -2126,12 +1975,8 @@ and without regard to the fact that it is within an outer
 concrete instance tree.
 \end{enumerate}
 
-\textit{%
-\bb
-See Appendix \refersec{app:inliningexamples} 
-for discussion and examples.
-\eb
-}
+\textit{See Appendix \refersec{app:inliningexamples} 
+for discussion and examples.}
 
 \subsection{Trampolines}
 \label{chap:trampolines}
@@ -2157,7 +2002,6 @@ control. (A trampoline entry may but need not also have a
 \needlines{5}
 The value of the trampoline attribute may be represented
 using any of the following forms:
-\bbeb
 
 \begin{itemize}
 \item If the value is of class \CLASSreference{}, then the value
@@ -2201,60 +2045,56 @@ a trampoline will result in stepping into or setting the
 breakpoint in the target subroutine instead. This helps to
 hide the compiler generated subprogram from the user. }
 
-\bbpareb
-
 \bb
-\section{Call Site Entries}
+\section{Call Site Entries and Parameters}
 \eb
-\label{chap:callsiteentries}
-\textit{
-A call site entry provides a way to represent the 
-\bbeb 
-call graph of a program in the debugging information. It also provides
-information about how parameters are passed so that they may be more
-easily accessed by a debugger. Together with the \DWOPentryvalue{} opcode,
-call site entries can be also useful for computing values of variables 
-and expressions where some value is no longer present in the current 
-subroutine's registers or local stack frame, but it is known that the 
-values are equal to some parameter passed to the function.  
-The consumer can then use unwind information to find the caller and 
+\label{chap:callsiteentriesandparameters}
 \bb
-its 
+\textit{
+A call site entry describes a call from one subprogram to another in the
+source program. It provides information about the actual parameters of
+the call so that they may be more easily accessed by a debugger. When
+used together with call frame information 
+(see Section \refersec{chap:callframeinformation}), 
+call site entries can be useful for computing the value of an actual parameter
+passed by a caller, even when the location description for the callee's
+corresponding formal parameter does not provide a current location for
+the formal parameter.}
+
+\textit{The DWARF expression for computing the value of an actual parameter at
+a call site may refer to registers or memory locations.  The expression
+assumes these contain the values they would have at the point where the
+call is executed. After the called subprogram has been entered, these
+registers and memory locations might have been modified.  In order to
+recover the values that existed at the point of the call (to allow
+evaluation of the DWARF expression for the actual parameter), a debugger
+may "virtually unwind" the subprogram activation 
+(see Section \refersec{chap:callframeinformation}). Any
+register or memory location that cannot be recovered is referred to as
+"clobbered by the call."}
 \eb
-call site information and then
-compute the value passed in a particular parameter.}
 
-A call site is represented by a debugging information entry with the tag
-\DWTAGcallsiteTARG{}\addtoindexx{call site entry}. 
-The entry for a call site is owned by the innermost
-debugging information entry representing the scope within which the
-call is present in the source program.
-
-\needlines{4}
-\textit{A scope entry (for example, 
-\bbeb 
-a lexical block) that would not 
-otherwise be present in the debugging information of a subroutine
-need not be introduced solely to represent the immediately containing scope
-of a call.}
+\bbpareb
 
 A source call can be compiled into different types of machine code:
 \begin{itemize}
 \item
 A \textit{normal call} uses a call-like instruction which transfers 
-control to the start of some subprogram and leaves the call site 
-location address somewhere where unwind information can find it.  
+control to the start of some subprogram and preserves the call site 
+\bb
+location for use by the callee.
+\eb  
 \item
 A \textit{tail call} uses a jump-like instruction which
-transfers control to the start of some subprogram, but the call site location
-address is not preserved (and thus not available using the unwind information).  
+transfers control to the start of some subprogram, but 
+\bb
+there is no call site location address to preserve
+(and thus none is available using the unwind information). 
+\eb 
 \item
 A \textit{tail recursion call} is a call
 to the current subroutine which is compiled as a jump 
-\bb
-to
-\eb
-the current subroutine.
+to the current subroutine.
 \needlines{4}
 \item
 An \textit{inline (or inlined) call} is a call to an inlined subprogram,
@@ -2279,26 +2119,47 @@ instructions are given a location in the caller.
 \DWTAGcallsite{} entries describe normal and tail calls but not tail recursion calls,
 while \DWTAGinlinedsubroutine{} entries describe inlined calls 
 (see Section \refersec{chap:inlinedsubroutines}).
+\bb
+Call site entries cannot describe tail recursion or optimized out calls.
+\eb
 
-The call site entry 
 \bb
-may have
+\subsection{Call Site Entries}
+\label{chap:callsiteentries}
+A call site is represented by a debugging information entry with the tag
+\DWTAGcallsiteTARG{}\addtoindexx{call site entry}. 
+The entry for a call site is owned by the innermost
+debugging information entry representing the scope within which the
+call is present in the source program.
+
+\needlines{4}
+\textit{A scope entry (for example, a lexical block) that would not 
+otherwise be present in the debugging information of a subroutine
+need not be introduced solely to represent the immediately containing scope
+of a call.}
 \eb
-a \DWATcallreturnpcDEFN{}\addtoindexx{call site return pc attribute}
+
+The call site entry may have a
+\DWATcallreturnpcDEFN{}\addtoindexx{call site return pc attribute}
 \livetargi{chap:DWATcallreturnpcofcallsite}{attribute}{call return pc attribute} 
 which is the return address after the call.  
-The value of this attribute corresponds to the return address computed by 
-call frame information in the called subprogram 
+The value of this attribute corresponds to the return address 
+computed by call frame information in the called subprogram 
 (see Section \refersec{datarep:callframeinformation}).
 
-\textit{On many architectures the return address is the address immediately following the
-call instruction, but on architectures with delay slots it might
+\textit{On many architectures the return address is the 
+address immediately following the call instruction, but 
+on architectures with delay slots it might
 be an address after the delay slot of the call.}
 
 The call site entry may have a 
 \DWATcallpcDEFN{}\addtoindexx{call pc attribute}
 \livetargi{chap:DWATcallpcofcallsite}{attribute}{call pc attribute} which is the
-address of the call instruction.
+address of the 
+\bb
+call-like instruction for a normal call or the jump-like 
+instruction for a tail call.
+\eb 
 
 If the call site entry corresponds to a tail call, it has the 
 \DWATcalltailcallDEFN{}\addtoindexx{call tail call attribute}
@@ -2332,15 +2193,10 @@ address is not computable without use of registers or memory locations that
 might be clobbered by the call the \DWATcalltargetclobberedNAME{}
 attribute is used instead of the \DWATcalltarget{} attribute.
 
-\textit{The
-\bb
-expression of a call target clobbered attribute may only be valid 
-at the time the call or call-like transfer of control is executed.
-\eb
-}
+\textit{The expression of a call target clobbered attribute may only be 
+valid at the time the call or call-like transfer of control is executed.}
 
-The call site entry may have a 
-\DWATtypeDEFN{}\addtoindexx{call type attribute}
+The call site entry may have a \DWATtypeDEFN{}\addtoindexx{call type attribute}
 \livetargi{chap:DWATtypeofcallsite}{attribute}{type attribute!of call site entry}
 referencing a debugging information entry for the type of the called function.  
 
@@ -2366,9 +2222,17 @@ coordinates of the subroutine declaration that was called, rather they describe
 the coordinates of the call.}
 
 \needlines{5}
+\bb
+\subsection{Call Site Parameters}
+\eb
+\label{chap:callsiteparameters}
 The call site entry may own 
 \DWTAGcallsiteparameterTARG{}\index{call site parameter entry} 
 debugging information entries representing the parameters passed to the call.
+\bb
+Call site parameter entries occur in the same order as the corresponding
+parameters in the source.
+\eb
 Each such entry has a \DWATlocation{} attribute which is a location expression.
 This location expression describes where the parameter is passed
 (usually either some register, or a memory location expressible as the
@@ -2379,9 +2243,7 @@ Each \DWTAGcallsiteparameter{} entry may have a
 \DWATcallvalueDEFN{}\addtoindexx{call value attribute}
 \livetargi{chap:DWATcallvalueofcallparameter}{attribute}{call value attribute}
 which is a DWARF expression 
-\bb 
 which when evaluated yields the value of the parameter at the time of the call.
-\eb
 
 \textit{The expression should not use registers or memory
 locations that might be clobbered by the call, as it might be evaluated after
@@ -2398,10 +2260,7 @@ use the values at all.}
 
 For parameters passed by reference, where the code passes a pointer to
 a location which contains the parameter, or for reference type parameters,
-the \DWTAGcallsiteparameter{} entry may also have 
-\bb
-a
-\eb
+the \DWTAGcallsiteparameter{} entry may also have a
 \DWATcalldatalocationNAME{}\addtoindexx{call data location attribute}
 \livetargi{chap:DWATcalldatalocationofcallparameter}{attribute}{call data location attribute}
 whose value is a location expression and a
@@ -2424,12 +2283,8 @@ which contains a reference to a \DWTAGformalparameter{} entry,
 \DWATtype{} attribute referencing the type of the parameter or 
 \DWATname{} attribute describing the parameter's name.
 
-\textit{Examples
-\bb
-using call site entries and related attributes are found in 
-Appendix \refersec{app:callsiteexamples}.
-\eb
-}
+\textit{Examples using call site entries and related attributes are 
+found in Appendix \refersec{app:callsiteexamples}.}
 
 \needlines{8}
 \section{Lexical Block Entries}
@@ -2481,14 +2336,9 @@ lexical \nolink{block} entry has a
 \addtoindexx{name attribute}
 value is a null-terminated string
 containing the name of the lexical \nolink{block}.
-\bbeb 
 
 \textit{This is not the same as a \addtoindex{C} or 
-\addtoindex{C++} label (see 
-\bb
-Section \refersec{chap:labelentries}).
-\eb
-}
+\addtoindex{C++} label (see Section \refersec{chap:labelentries}).}
 
 The lexical \nolink{block} entry owns debugging 
 information entries that describe the declarations 
@@ -2499,13 +2349,9 @@ of an identifier or inner lexical \nolink{block}.
 \needlines{10}
 \section{Label Entries}
 \label{chap:labelentries}
-\textit{A label is a way of identifying a source 
-\bb
-location.
-\eb
+\textit{A label is a way of identifying a source location.
 A labeled statement is usually the target of one or more 
-\doublequote{go to} statements.
-}
+\doublequote{go to} statements.}
 
 \needlines{4}
 A label is represented by a debugging information entry with
@@ -2517,19 +2363,13 @@ which the name of the label could be legally referenced within
 the source program.
 
 The label entry has a \DWATlowpc{} attribute whose value
-is the 
-\bbeb
-address of the first 
-\bb
-executable instruction for the location
-\eb
-identified by the label in
+is the address of the first executable instruction for the 
+location identified by the label in
 the source program.  The label entry also has a 
 \DWATname{} attribute 
 \addtoindexx{name attribute}
 whose value is a null-terminated string containing
-the name of the label.
-\bbeb
+the name of the label.   
 
 
 \section{With Statement Entries}
@@ -2638,7 +2478,6 @@ The siblings immediately following a try \nolink{block}
 entry are its corresponding catch \nolink{block} entries.
 
 
-\bb
 \section{Declarations with Reduced Scope}
 \label{declarationswithreducedscope}
 \hypertarget{chap:DWATstartscopeofdeclaration}{}
@@ -2711,4 +2550,3 @@ non-contiguous and require use of a \addtoindex{range list} even when
 the containing scope is contiguous. Conversely, the scope of
 an object may not require its own \addtoindex{range list} even when the
 containing scope is non-contiguous.}
-\eb
index ddbdcec..0928a12 100644 (file)
@@ -1,7 +1,7 @@
 
 \chapter[Section Version Numbers (Informative)]{DWARF Section Version Numbers (Informative)}
 \label{app:dwarfsectionversionnumbersinformative}
-\addtoindexx{version number!by section}
+\addtoindexx{version number!summary by section}
 
 % The table format looks rather different that V4 and earlier
 % as latex took up too much space and left no room for V5
index 896e724..9e96dd3 100644 (file)
@@ -733,13 +733,6 @@ by \DWATlocation{} attributes in the \dotdebuginfodwo{} section. This
 section has a similar format to the \dotdebugloc{} section in a
 non-split object, but it has some small differences as explained
 in Section \refersec{datarep:locationlistentriesinsplitobjects}. 
-In \texttt{demo2.dwo} as shown in 
-Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}, 
-the debugging information for \texttt{Line::clip} describes a local 
-variable \texttt{slope} whose location varies based on the PC.
-Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts} 
-presents some excerpts from the \dotdebuginfodwo{} section for 
-\texttt{demo2.dwo}.
 
 \begin{figure}[b]
 \figurepart{1}{2}
@@ -767,7 +760,7 @@ presents some excerpts from the \dotdebuginfodwo{} section for
 \label{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}
 \end{figure}
 
-\begin{figure}
+\begin{figure}[t]
 \figurepart{2}{2}
 \begin{dwflisting}
 \begin{alltt}
@@ -809,6 +802,17 @@ Figure~\ref{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}: Split ob
 \end{center}
 \end{figure}
 
+
+In \texttt{demo2.dwo} as shown in 
+Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}, 
+the debugging information for \texttt{Line::clip} describes a local 
+variable \texttt{slope} whose location varies based on the PC.
+Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts} 
+presents some excerpts from the \dotdebuginfodwo{} section for 
+\texttt{demo2.dwo}.
+
+\clearpage
+
 In Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts},
 The \DWTAGformalparameter{} entries at \texttt{4\$} and \texttt{5\$} refer to the
 location lists at offset \texttt{0x0} and \texttt{0x2a}, respectively, and the
@@ -818,30 +822,42 @@ Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts}
 shows a representation of the
 location lists at those offsets in the \dotdebuglocdwo{} section.
 
-\begin{figure}
+% Special commands for use in the folloing table
+\newcommand{\XXLLEsl}{\hyperlink{chap:DWLLEstartlengthentry}{start\_length\_entry}
+                      \index{DW\_LLE\_start\_length\_entry}}
+\newcommand{\XXLLEeol}{\hyperlink{chap:DWLLEendoflistentry}{end\_of\_list\_entry}
+                       \index{DW\_LLE\_end\_of\_list\_entry}}
+
+\begin{figure}[h]
 \begin{dwflisting}
-\begin{tabular}{rlrrl}
-\texttt{offset} & entry type & start & length & expression \\
-\hline \\
-0x00 & \DWLLEstartlengthentry &  [9] & 0x002f & \DWOPregfive~(rdi) \\
-0x09 & \DWLLEstartlengthentry & [11] & 0x01b9 & \DWOPregthree~(rbx) \\
-0x12 & \DWLLEstartlengthentry & [29] & 0x0003 & \DWOPbregtwelve~(r12):\\
-&&&& -8; \DWOPstackvalue \\
-0x1d & \DWLLEstartlengthentry & [31] & 0x0001 & \DWOPentryvalue: \\
-&&&& (\DWOPregfive~(rdi)); \\
-&&&& \DWOPstackvalue \\
-0x29 & \DWLLEendoflistentry &&& \\
-\\   & \hhline{-} &&& \\
-0x2a & \DWLLEstartlengthentry &  [9] & 0x002f & \DWOPregfour~(rsi)) \\
-0x33 & \DWLLEstartlengthentry & [11] & 0x01ba & \DWOPregsix~(rbp)) \\
-0x3c & \DWLLEstartlengthentry & [30] & 0x0003 & \DWOPentryvalue: \\
-&&&& (\DWOPregfour~(rsi)); \\
-&&&& \DWOPstackvalue \\
-0x48 & \DWLLEendoflistentry &&& \\
-\\   & \hhline{-} &&& \\
-0x49 & \DWLLEstartlengthentry & [10] & 0x0004 & \DWOPregeighteen~(xmm1) \\
-0x52 & \DWLLEstartlengthentry & [11] & 0x01bd & \DWOPfbreg: -36 \\
-0x5c & \DWLLEendoflistentry &&& \\
+\begin{tabular}{rl|rr|rl}
+       &  entry type          & \multicolumn{2}{c}{range} 
+                                               & \multicolumn{2}{l}{\hspace{6mm}location} \\
+offset & (DW\_LLE\_*)         & start & length & length & expression \\
+\hline
+&&&&& \\
+
+0x00 & \XXLLEsl &  [9] & 0x002f & 0x0001 & \DWOPregfive~(rdi) \\
+0x09 & \XXLLEsl & [11] & 0x01b9 & 0x0001 & \DWOPregthree~(rbx) \\
+0x12 & \XXLLEsl & [29] & 0x0003 & 0x0003 & \DWOPbregtwelve~(r12):\\
+     &          &      &        &        & -8; \DWOPstackvalue \\
+0x1d & \XXLLEsl & [31] & 0x0001 & 0x0003 & \DWOPentryvalue: \\
+     &          &      &        &        & (\DWOPregfive~(rdi)); \\
+     &          &      &        &        & \DWOPstackvalue \\
+0x29 & \XXLLEeol &&&& \\
+------ &&&&& \\
+
+0x2a & \XXLLEsl &  [9] & 0x002f & 0x0001 & \DWOPregfour~(rsi)) \\
+0x33 & \XXLLEsl & [11] & 0x01ba & 0x0003 & \DWOPregsix~(rbp)) \\
+0x3c & \XXLLEsl & [30] & 0x0003 & 0x0003 & \DWOPentryvalue: \\
+     &          &      &        &        & (\DWOPregfour~(rsi)); \\
+     &          &      &        &        & \DWOPstackvalue \\
+0x48 & \XXLLEeol &&&& \\
+------ &&&&& \\
+
+0x49 & \XXLLEsl & [10] & 0x0004 & 0x0001 & \DWOPregeighteen~(xmm1) \\
+0x52 & \XXLLEsl & [11] & 0x01bd & 0x0002 & \DWOPfbreg: -36 \\
+0x5c & \XXLLEeol &&&& \\
 &&&& \\
 \end{tabular}
 \end{dwflisting}
@@ -854,8 +870,12 @@ of a slot in the \dotdebugaddr{} section, relative to the base
 offset defined by the compilations unit's \DWATaddrbase{}
 attribute. The \dotdebugaddr{} slots referenced by these entries give
 the relocated address of a label within the function where the
-address range begins. The length field gives the length of the
-address range.
+address range begins. 
+\bb
+The following length field gives the length of the
+address range. The location, consisting of its own length and
+a DWARF expression, is last.
+\eb 
 
 \clearpage
 \section{DWARF Package File Example}
index 5c503bb..43b879d 100644 (file)
@@ -148,35 +148,24 @@ DWARF specification.}
 \subsubsection{Simple Encodings}
 \label{chap:simpleencodings}
 Types with simple encodings are widely supported in many
-programming languages and 
-\bb
-are not discussed further.
-\eb
+programming languages and are not discussed further.
 
 \needlines{6}
 \subsubsection{Character Encodings}
 \label{chap:characterencodings}
 \DWATEUTF{} 
-\bb
 specifies the \addtoindex{Unicode} string encoding
-\eb
 (see the Universal Character Set standard,
 ISO/IEC 10646\dash 1:1993).
 \addtoindexx{ISO 10646 character set standard}
 
-\textit{For
-\bb
-example, the \addtoindex{C++} type char16\_t is
+\textit{For example, the \addtoindex{C++} type char16\_t is
 represented by a base type entry with a name attribute whose
 value is \doublequote{char16\_t}, an encoding attribute whose value
-is \DWATEUTF{} and a byte size attribute whose value is 2.
-\eb
-}
+is \DWATEUTF{} and a byte size attribute whose value is 2.}
 
 \needlines{4}
-\bb
 \DWATEASCII{} and \DWATEUCS{} specify encodings for
-\eb
 the \addtoindex{Fortran 2003} string kinds 
 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (ISO/IEC 646:1991) and
 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)} (UCS-4 in ISO/IEC 10646:2000).
@@ -236,17 +225,11 @@ entry for the type.
 Types with binary floating-point encodings 
 (\DWATEfloat{}, \DWATEcomplexfloat{} and \DWATEimaginaryfloat{})
 are supported in many
-programming languages and 
-\bb
-are not discussed further.
-\eb
+programming languages and are not discussed further.
 
-
-\bb
 \DWATEdecimalfloat{} specifies 
 floating-point representations that have a power-of-ten
 exponent, such as specified in IEEE 754R.
-\eb
 
 \subsubsection{Decimal String Encodings}
 \label{chap:decimalstringencodings}
@@ -444,11 +427,7 @@ may have
 a\hypertarget{chap:DWATadressclasspointerorreferencetypes}{}
 \DWATaddressclassDEFN{}\addtoindexx{address class attribute} 
 attribute to describe how objects having the given pointer
-or reference type 
-\bb
-are
-\eb
-dereferenced.
+or reference type are dereferenced.
 
 A modified type entry describing a \addtoindex{UPC} shared qualified type
 (using \DWTAGsharedtype) may have a
@@ -1034,9 +1013,7 @@ members
 An\hypertarget{chap:DWATaccessibilitycppinheritedmembers}{} 
 \addtoindexx{inheritance entry}
 inheritance entry may have a
-\bb
 \hyperlink{chap:DWATaccessibilityattribute}{\DWATaccessibilityNAME}
-\eb
 attribute.\addtoindexx{accessibility attribute}
 If no accessibility attribute is present, private access 
 is assumed for an entry of a class and public access is 
@@ -1045,9 +1022,7 @@ assumed for an entry of a struct, union or interface.
 If the class referenced by the \addtoindex{inheritance entry}
 serves as a \addtoindex{C++} virtual base class, the 
 inheritance entry has a 
-\bb
 \hyperlink{chap:DWATvirtualityvirtualityindication}{\DWATvirtualityNAME} 
-\eb
 attribute.
 
 \textit{For a \addtoindex{C++} virtual base, the 
@@ -1078,9 +1053,7 @@ including any class or structure qualifiers.
 
 An\hypertarget{chap:DWATaccessdeclaration}{} 
 access declaration entry also has a
-\bb 
 \hyperlink{chap:DWATaccessibilityattribute}{\DWATaccessibilityNAME}
-\eb
 \addtoindexx{accessibility attribute}
 attribute describing the declared accessibility of the named entities.
 
@@ -1122,15 +1095,11 @@ the name attribute is omitted or the value of the attribute
 consists of a single zero byte.
 
 The data member entry has a 
-\bb
 \DWATtype{} attribute\addtoindexx{type attribute} to denote
-\eb
 \addtoindexx{member entry (data)} the type of that member.
 
 A data member entry may have a 
-\bb
 \hyperlink{chap:DWATaccessibilityattribute}{\DWATaccessibilityNAME}
-\eb
 attribute.\addtoindexx{accessibility attribute} 
 If no accessibility attribute is present, private
 access is assumed for an member of a class and public access
@@ -1266,16 +1235,13 @@ is assumed for an entry of a structure, union or interface.
 
 If the member function entry describes a virtual function,
 then that entry has a
-\bb
 \hyperlink{chap:DWATvirtualityvirtualityindication}{\DWATvirtualityNAME} 
-\eb
 attribute.
 
 If\hypertarget{chap:DWATexplicitexplicitpropertyofmemberfunction}{}
 the member function entry describes an explicit member
-function, then that entry has 
+function, then that entry has a
 \addtoindexx{explicit attribute}
-a 
 \DWATexplicitDEFN{} attribute.
 
 An\hypertarget{chap:DWATvtableelemlocationvirtualfunctiontablevtableslot}{}
@@ -1322,11 +1288,7 @@ the entry describes a non-static member function whose
 object formal parameter has a type that has an equivalent
 const-volatile qualification.
 
-\textit{Beginning in 
-\bb
-\addtoindex{C++11}, 
-\eb
-non-static member 
+\textit{Beginning in \addtoindex{C++11}, non-static member 
 functions can also have one of the ref-qualifiers, \& and \&\&. 
 These do not change the type of the
 \doublequote{\texttt{this}}-pointer, but they do affect the types of 
@@ -1341,9 +1303,7 @@ lvalue objects, or the \DWATrvaluereferenceDEFN{} attribute
 to indicate that it can only be called on prvalues and xvalues.
 
 \textit{The lvalue, prvalue and xvalue concepts are defined in the
-\bb
 \addtoindex{C++11} and later standards.}
-\eb
 
 If a subroutine entry represents the defining declaration
 of a member function and that definition appears outside of
@@ -1627,12 +1587,20 @@ may have
 \addtoindexx{type attribute}
 a \DWATtype{} attribute
 which refers to the underlying data type used to implement
-the enumeration. The entry also may have a 
-\DWATbytesize{} attribute whose 
-\livelink{chap:classconstant}{integer constant} value is the number of bytes 
-required to hold an instance of the enumeration. If no \DWATbytesize{} attribute 
-is present, the size for holding an instance of the enumeration is given by the size 
-of the underlying data type.
+the enumeration. The entry also may have a
+\bb
+\DWATbytesize{} attribute or 
+\DWATbitsize{}
+attribute, whose value 
+(see Section \refersec{chap:byteandbitsizes}) 
+is the amount of storage 
+\eb
+required to hold an instance of the enumeration. If no \DWATbytesize{} 
+\bb
+or \DWATbitsize{}
+\eb
+attribute is present, the size for holding an instance of the 
+enumeration is given by the size of the underlying data type.
 
 \needlines{4}
 If an enumeration type has type safe 
@@ -1782,13 +1750,10 @@ tag \DWTAGunspecifiedparameters.
 \end{enumerate}
 
 \textit{\addtoindex{C++} const-volatile qualifiers are encoded as 
-part of the type of the
-\doublequote{\texttt{this}}-pointer.
-\bb 
-\addtoindex{C++11} 
-\eb
-reference and rvalue-reference qualifiers are encoded using
-the \DWATreference{} and \DWATrvaluereference{} attributes, respectively. 
+part of the type of the \doublequote{\texttt{this}}-pointer.
+\addtoindex{C++11} reference and rvalue-reference qualifiers are 
+encoded using the \DWATreference{} and \DWATrvaluereference{} attributes, 
+respectively. 
 See also Section \refersec{chap:memberfunctionentries}.}
 
 \needlines{4}