Backup of today's work. Still awaiting a couple more editorial inputs.
[dwarf-doc.git] / dwarf5 / latexdoc / datarepresentation.tex
index fcefb55..a37a63a 100644 (file)
@@ -31,9 +31,12 @@ appropriate prefix
 \DWLANGlouserMARK{}\DWLANGhiuserMARK{}DW\_LANG, 
 \DWLNCTlouserMARK{}\DWLNCThiuserMARK{}DW\_LNCT, 
 \DWLNElouserMARK{}\DWLNEhiuserMARK{}DW\_LNE, 
 \DWLANGlouserMARK{}\DWLANGhiuserMARK{}DW\_LANG, 
 \DWLNCTlouserMARK{}\DWLNCThiuserMARK{}DW\_LNCT, 
 \DWLNElouserMARK{}\DWLNEhiuserMARK{}DW\_LNE, 
-\DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO, 
-\DWOPlouserMARK{}\DWOPhiuserMARK{}DW\_OP or 
-\DWTAGlouserMARK{}\DWTAGhiuserMARK{}DW\_TAG) 
+\DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO,
+\bb 
+\DWOPlouserMARK{}\DWOPhiuserMARK{}DW\_OP,
+\DWTAGlouserMARK{}\DWTAGhiuserMARK{}DW\_TAG,
+\DWUTlouserMARK{}\DWUThiuserMARK{}DW\_UT)
+\eb 
 followed by \_lo\_user or \_hi\_user. 
 Values in the  range between \textit{prefix}\_lo\_user 
 and \textit{prefix}\_hi\_user inclusive,
 followed by \_lo\_user or \_hi\_user. 
 Values in the  range between \textit{prefix}\_lo\_user 
 and \textit{prefix}\_hi\_user inclusive,
@@ -109,8 +112,11 @@ is one of the fields that occur at the beginning
 of those DWARF sections that have a header
 (\dotdebugaranges{}, 
 \dotdebuginfo{}, 
 of those DWARF sections that have a header
 (\dotdebugaranges{}, 
 \dotdebuginfo{}, 
-\dotdebugline{} and
-\dotdebugnames{}) or the length field
+\dotdebugline{},
+\dotdebugloclists{},
+\dotdebugnames{} and
+\dotdebugrnglists) 
+or the length field
 that occurs at the beginning of the CIE and FDE structures
 in the \dotdebugframe{} section.
 
 that occurs at the beginning of the CIE and FDE structures
 in the \dotdebugframe{} section.
 
@@ -125,7 +131,7 @@ the use of
 the other values is reserved for possible future extensions.
 
 
 the other values is reserved for possible future extensions.
 
 
-\section{Relocatable, Split, Executable, Shared and Package Object Files} 
+\section{Relocatable, Split, Executable, Shared, Package and Supplementary Object Files} 
 \label{datarep:executableobjectsandsharedobjects}
 
 \subsection{Relocatable Object Files}
 \label{datarep:executableobjectsandsharedobjects}
 
 \subsection{Relocatable Object Files}
@@ -173,10 +179,6 @@ the virtual address space of the program, and require relocation.
 These attributes refer to
 debugging information in other debugging information sections within
 the object file, and must be relocated during the linking process.
 These attributes refer to
 debugging information in other debugging information sections within
 the object file, and must be relocated during the linking process.
-\par
-However, if a \DWATrangesbase{} attribute is present, the offset in
-a \DWATranges{} attribute (which uses form \DWFORMsecoffset) is
-relative to the given base offset--no relocation is involved.
 
 \item Debugging information entries may have attributes with the form
 \DWFORMrefaddr{} (see Section \refersec{datarep:attributeencodings}). 
 
 \item Debugging information entries may have attributes with the form
 \DWFORMrefaddr{} (see Section \refersec{datarep:attributeencodings}). 
@@ -190,10 +192,14 @@ relocation.
 These attributes refer to strings in
 the \dotdebugstr{} section. These values require relocation.
 
 These attributes refer to strings in
 the \dotdebugstr{} section. These values require relocation.
 
-\item Entries in the \dotdebugaddr, \dotdebugloc{}, \dotdebugranges{} 
-and \dotdebugaranges{}
-sections contain references to locations within the virtual address
-space of the program, and require relocation.
+\item Entries in the \dotdebugaddr{} and \dotdebugaranges{}
+sections may contain references to locations within the virtual address
+space of the program, and thus require relocation.
+
+\item Entries in the \dotdebugloclists{} and \dotdebugrnglists{} sections may
+contain references to locations within the virtual address space of the 
+program depending on whether certain kinds of location or range
+list entries are used, and thus require relocation.
 
 \item In the \dotdebugline{} section, the operand of the \DWLNEsetaddress{}
 opcode is a reference to a location within the virtual address space
 
 \item In the \dotdebugline{} section, the operand of the \DWLNEsetaddress{}
 opcode is a reference to a location within the virtual address space
@@ -244,10 +250,10 @@ debugging information that must still be processed by the linker,
 and includes the following:
 \begin{itemize}
 \item
 and includes the following:
 \begin{itemize}
 \item
-The line number tables, range tables, frame tables, and
+The line number tables, frame tables, and
 accelerated access tables, in the usual sections:
 accelerated access tables, in the usual sections:
-\dotdebugline, \dotdebuglinestr, \dotdebugranges, \dotdebugframe,
-\dotdebugnames{} and \dotdebugaranges,
+\dotdebugline, \dotdebuglinestr, 
+\dotdebugframe, \dotdebugnames{} and \dotdebugaranges,
 respectively.
 \needlines{4}
 \item
 respectively.
 \needlines{4}
 \item
@@ -255,8 +261,10 @@ An address table, in the \dotdebugaddr{} section. This table
 contains all addresses and constants that require
 link-time relocation, and items in the table can be
 referenced indirectly from the debugging information via
 contains all addresses and constants that require
 link-time relocation, and items in the table can be
 referenced indirectly from the debugging information via
-the \DWFORMaddrx{} form, and by the \DWOPaddrx{} and
-\DWOPconstx{} operators.
+the \DWFORMaddrxXNand{} forms, 
+by the \DWOPaddrx{} and \DWOPconstx{} operators, and
+by certain of the \texttt{DW\_LLE\_*} location list
+and \texttt{DW\_RLE\_*} range list entries.
 \item
 A skeleton compilation unit, as described in Section
 \refersec{chap:skeletoncompilationunitentries}, 
 \item
 A skeleton compilation unit, as described in Section
 \refersec{chap:skeletoncompilationunitentries}, 
@@ -264,23 +272,25 @@ in the \dotdebuginfo{} section.
 \item
 An abbreviations table for the skeleton compilation unit,
 in the \dotdebugabbrev{} section
 \item
 An abbreviations table for the skeleton compilation unit,
 in the \dotdebugabbrev{} section
-\bb
 used by the \dotdebuginfo{} section.
 used by the \dotdebuginfo{} section.
-\eb
 
 \item
 A string table, in the \dotdebugstr{} section. The string
 table is necessary only if the skeleton compilation unit
 
 \item
 A string table, in the \dotdebugstr{} section. The string
 table is necessary only if the skeleton compilation unit
-uses either indirect string form, \DWFORMstrp{} or
-\DWFORMstrx.
+\bb
+uses one of the indirect string forms (\DWFORMstrp{}, 
+\DWFORMstrxXNor).
+\eb
+\needlines{4}
 \item
 A string offsets table, in the \dotdebugstroffsets{}
 \item
 A string offsets table, in the \dotdebugstroffsets{}
-section
+section for strings in the \dotdebugstr{} section. 
+The string offsets table is necessary only if
+the skeleton compilation unit uses 
 \bb
 \bb
-for strings in the \dotdebugstr{} section. 
+one of the indexed string forms 
 \eb
 \eb
-The string offsets table is necessary only if
-the skeleton compilation unit uses the \DWFORMstrx{} form.
+(\DWFORMstrxXN).
 \end{itemize}
 The attributes contained in the skeleton compilation
 unit can be used by a DWARF consumer to find the 
 \end{itemize}
 The attributes contained in the skeleton compilation
 unit can be used by a DWARF consumer to find the 
@@ -296,36 +306,35 @@ file. This partition includes the following:
 \begin{itemize}
 \item
 The full compilation unit, in the \dotdebuginfodwo{} section.
 \begin{itemize}
 \item
 The full compilation unit, in the \dotdebuginfodwo{} section.
-\begin{itemize}
-\item
+
 Attributes contained in the full compilation unit
 Attributes contained in the full compilation unit
-may refer to machine addresses indirectly using the \DWFORMaddrx{} 
-form, which accesses the table of addresses specified by the
+may refer to machine addresses indirectly using 
+\bb
+one of the 
+\eb
+\DWFORMaddrxXNor{} 
+forms, which access the table of addresses specified by the
 \DWATaddrbase{} attribute in the associated skeleton unit.
 Location descriptions may similarly do so using the \DWOPaddrx{} and
 \DWOPconstx{} operations. 
 
 \DWATaddrbase{} attribute in the associated skeleton unit.
 Location descriptions may similarly do so using the \DWOPaddrx{} and
 \DWOPconstx{} operations. 
 
-\item
-\DWATranges{} attributes contained in the full compilation unit
-may refer to range table entries with a \DWFORMsecoffset{} offset 
-relative to the base offset specified by the \DWATrangesbase{}
-attribute in the associated skeleton unit.
-\end{itemize}
-
 \item Separate type units, in the \dotdebuginfodwo{} section.
 
 \item
 Abbreviations table(s) for the compilation unit and type
 units, in the \dotdebugabbrevdwo{} section
 \item Separate type units, in the \dotdebuginfodwo{} section.
 
 \item
 Abbreviations table(s) for the compilation unit and type
 units, in the \dotdebugabbrevdwo{} section
-\bb
 used by the \dotdebuginfodwo{} section.
 used by the \dotdebuginfodwo{} section.
-\eb
 
 
-\item Location lists, in the \dotdebuglocdwo{} section.
+\item Location lists, in the 
+\dotdebugloclistsdwo{} section.
+
+\item Range lists, in the \dotdebugrnglistsdwo{} section.
 
 \item
 A \addtoindex{specialized line number table} (for the type units), 
 
 \item
 A \addtoindex{specialized line number table} (for the type units), 
-in the \dotdebuglinedwo{} section. This table
+in the \dotdebuglinedwo{} section. 
+
+This table
 contains only the directory and filename lists needed to
 interpret \DWATdeclfile{} attributes in the debugging
 information entries.
 contains only the directory and filename lists needed to
 interpret \DWATdeclfile{} attributes in the debugging
 information entries.
@@ -336,9 +345,7 @@ information entries.
 
 \item A string offsets table, in the \dotdebugstroffsetsdwo{}
 section
 
 \item A string offsets table, in the \dotdebugstroffsetsdwo{}
 section
-\bb
 for the strings in the \dotdebugstrdwo{} section.
 for the strings in the \dotdebugstrdwo{} section.
-\eb
 \end{itemize}
 
 Except where noted otherwise, all references in this document
 \end{itemize}
 
 Except where noted otherwise, all references in this document
@@ -413,7 +420,7 @@ corresponding application binary. It consists only of a file
 header, a section table, a number of DWARF debug information
 sections, and two index sections.
 
 header, a section table, a number of DWARF debug information
 sections, and two index sections.
 
-\needlines{10}
+%\needlines{8}
 Each DWARF package file contains no more than one of each of the
 following sections, copied from a set of object or DWARF object
 files, and combined, section by section:
 Each DWARF package file contains no more than one of each of the
 following sections, copied from a set of object or DWARF object
 files, and combined, section by section:
@@ -421,15 +428,19 @@ files, and combined, section by section:
     \dotdebuginfodwo
     \dotdebugabbrevdwo
     \dotdebuglinedwo
     \dotdebuginfodwo
     \dotdebugabbrevdwo
     \dotdebuglinedwo
-    \dotdebuglocdwo
+    \dotdebugloclistsdwo
+    \dotdebugrnglistsdwo
     \dotdebugstroffsetsdwo
     \dotdebugstrdwo
     \dotdebugmacrodwo
 \end{alltt}
 
 The string table section in \dotdebugstrdwo{} contains all the
     \dotdebugstroffsetsdwo
     \dotdebugstrdwo
     \dotdebugmacrodwo
 \end{alltt}
 
 The string table section in \dotdebugstrdwo{} contains all the
-strings referenced from DWARF attributes using the form
-\DWFORMstrx. Any attribute in a compilation unit or a type
+strings referenced from DWARF attributes using 
+\bb
+any of the forms
+\eb
+\DWFORMstrxXNor. Any attribute in a compilation unit or a type
 unit using this form refers to an entry in that unit's
 contribution to the \dotdebugstroffsetsdwo{} section, which in turn
 provides the offset of a string in the \dotdebugstrdwo{}
 unit using this form refers to an entry in that unit's
 contribution to the \dotdebugstroffsetsdwo{} section, which in turn
 provides the offset of a string in the \dotdebugstrdwo{}
@@ -450,13 +461,15 @@ compilation unit ID to a set of contributions in the
 various debug information sections. Each contribution is stored
 as an offset within its corresponding section and a size.
 
 various debug information sections. Each contribution is stored
 as an offset within its corresponding section and a size.
 
+\needlines{10}
 Each \compunitset{} may contain contributions from the
 following sections:
 \begin{alltt}
     \dotdebuginfodwo{} (required)
     \dotdebugabbrevdwo{} (required)
     \dotdebuglinedwo
 Each \compunitset{} may contain contributions from the
 following sections:
 \begin{alltt}
     \dotdebuginfodwo{} (required)
     \dotdebugabbrevdwo{} (required)
     \dotdebuglinedwo
-    \dotdebuglocdwo
+    \dotdebugloclistsdwo
+    \dotdebugrnglistsdwo
     \dotdebugstroffsetsdwo
     \dotdebugmacrodwo
 \end{alltt}
     \dotdebugstroffsetsdwo
     \dotdebugmacrodwo
 \end{alltt}
@@ -466,7 +479,7 @@ information from \DWARFVersionIV{} or earlier formats.}
 
 \subsubsection{The Type Unit (TU) Index Section}
 The \dotdebugtuindex{} section is a hashed lookup table that maps a
 
 \subsubsection{The Type Unit (TU) Index Section}
 The \dotdebugtuindex{} section is a hashed lookup table that maps a
-type signature to a set of offsets into the various debug
+type signature to a set of offsets in the various debug
 information sections. Each contribution is stored as an offset
 within its corresponding section and a size.
 
 information sections. Each contribution is stored as an offset
 within its corresponding section and a size.
 
@@ -501,6 +514,8 @@ The version number is \versiondotdebugcuindex.
 
 \item \textit{padding} (\HFTuhalf) \\
 Reserved to DWARF (must be zero).
 
 \item \textit{padding} (\HFTuhalf) \\
 Reserved to DWARF (must be zero).
+
+\needlines{4}
 \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.
 \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.
@@ -558,7 +573,6 @@ guaranteed to stop at an unused slot or find the match.
 \needlines{4}
 The table of offsets begins immediately following the parallel
 table (at offset \mbox{$16 + 12 * S$} from the beginning of the section).
 \needlines{4}
 The table of offsets begins immediately following the parallel
 table (at offset \mbox{$16 + 12 * S$} from the beginning of the section).
-\bb
 This table consists of a single header row containing $N$ fields,
 each a 4-byte unsigned integer, followed by $U$ data rows, each
 also containing $N$ fields of 4-byte unsigned integers. The fields
 This table consists of a single header row containing $N$ fields,
 each a 4-byte unsigned integer, followed by $U$ data rows, each
 also containing $N$ fields of 4-byte unsigned integers. The fields
@@ -570,7 +584,6 @@ or TU in the package file. In the data rows, each field provides
 an offset to the debug section whose identifier appears in the
 corresponding field of the header row. The data rows are indexed
 starting at 1.
 an offset to the debug section whose identifier appears in the
 corresponding field of the header row. The data rows are indexed
 starting at 1.
-\eb
 
 \textit{Not all sections listed in the table need be included.}
 
 
 \textit{Not all sections listed in the table need be included.}
 
@@ -593,10 +606,10 @@ starting at 1.
 \textit{Reserved}       & 2 & \\
 \DWSECTABBREVTARG       & 3 & \dotdebugabbrevdwo \\
 \DWSECTLINETARG         & 4 & \dotdebuglinedwo \\
 \textit{Reserved}       & 2 & \\
 \DWSECTABBREVTARG       & 3 & \dotdebugabbrevdwo \\
 \DWSECTLINETARG         & 4 & \dotdebuglinedwo \\
-\DWSECTLOCTARG          & 5 & \dotdebuglocdwo \\
+\DWSECTLOCLISTSTARG     & 5 & \dotdebugloclistsdwo \\
 \DWSECTSTROFFSETSTARG   & 6 & \dotdebugstroffsetsdwo \\
 \DWSECTSTROFFSETSTARG   & 6 & \dotdebugstroffsetsdwo \\
-%DWSECTMACINFO          &   & \dotdebugmacinfodwo \\
 \DWSECTMACROTARG        & 7 & \dotdebugmacrodwo \\
 \DWSECTMACROTARG        & 7 & \dotdebugmacrodwo \\
+\DWSECTRNGLISTSTARG         & 8 & \dotdebugrnglistsdwo \\
 \end{longtable}
 \end{centering}
 
 \end{longtable}
 \end{centering}
 
@@ -616,9 +629,7 @@ interpreted as relative to the corresponding base offset.
 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. 
 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. 
-\bb
-This
-table consists of U data rows, each with N fields of 4-byte
+This table consists of U data rows, each with N fields of 4-byte
 unsigned integers. Each data row corresponds to the same CU or TU
 as the corresponding data row in the table of offsets described
 above. Within each data row, the N fields also correspond
 unsigned integers. Each data row corresponds to the same CU or TU
 as the corresponding data row in the table of offsets described
 above. Within each data row, the N fields also correspond
@@ -626,24 +637,16 @@ one-to-one with the fields in the corresponding data row of the
 table of offsets. Each field provides the size of the
 contribution made by a CU or TU to the corresponding section in
 the package file.
 table of offsets. Each field provides the size of the
 contribution made by a CU or TU to the corresponding section in
 the package file.
-\eb
 
 For an example, see Figure \refersec{fig:examplecuindexsection}.
 
 \subsection{DWARF Supplementary Object Files}
 \label{datarep:dwarfsupplemetaryobjectfiles}
 
 For an example, see Figure \refersec{fig:examplecuindexsection}.
 
 \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 
-then be referenced
-from the debugging information of each of those executable or 
-shared object files.
-
-This facilitates distribution of separate consolidated debug files in
-a simple manner.
+\textit{A supplementary object file permits a post-link utility to analyze executable and
+shared object files and collect duplicate debugging information into a single file that
+can be referenced by each of the original files.  This is in contrast to split DWARF
+object files, which allow the compiler to split the debugging information between
+multiple files in order to reduce link time and executable size.}
 
 \needlines{4}
 A DWARF \addtoindex{supplementary object file} is itself an object file, 
 
 \needlines{4}
 A DWARF \addtoindex{supplementary object file} is itself an object file, 
@@ -696,16 +699,26 @@ provides unique identification of the supplementary file.
 Debug information entries that refer to an executable's or shared
 object's addresses must \emph{not} be moved to supplementary files 
 (the addesses will likely not be the same). Similarly,
 Debug information entries that refer to an executable's or shared
 object's addresses must \emph{not} be moved to supplementary files 
 (the addesses will likely not be the same). Similarly,
-entries referenced from within location descriptions or using loclistptr
+entries referenced from within location descriptions or using loclistsptr
 form attributes must not be moved to a \addtoindex{supplementary object file}.
 
 Executable or shared object file compilation units can use
 form attributes must not be moved to a \addtoindex{supplementary object file}.
 
 Executable or shared object file compilation units can use
-\DWTAGimportedunit{} with \DWFORMrefsup{} form \DWATimport{} attribute
-to import entries from the \addtoindex{supplementary object file}, other \DWFORMrefsup{}
+\DWTAGimportedunit{} with 
+\bb
+an \DWATimport{} attribute that uses \DWFORMrefsupfour{} or \DWFORMrefsupeight{} 
+\eb
+to import entries from the \addtoindex{supplementary object file}, other 
+\bb
+\DWFORMrefsupfour{} or \DWFORMrefsupeight{}
+\eb
 attributes to refer to them and \DWFORMstrpsup{} form attributes to
 refer to strings that are used by debug information of multiple
 executables or shared object files.  Within the \addtoindex{supplementary object file}'s
 attributes to refer to them and \DWFORMstrpsup{} form attributes to
 refer to strings that are used by debug information of multiple
 executables or shared object files.  Within the \addtoindex{supplementary object file}'s
-debugging sections, form \DWFORMrefsup{} or \DWFORMstrpsup{} are
+debugging sections, form 
+\bb
+\DWFORMrefsupfour{}, \DWFORMrefsupeight{} 
+\eb
+or \DWFORMstrpsup{} are
 not used, and all reference forms referring to some other sections
 refer to the local sections in the \addtoindex{supplementary object file}.
 
 not used, and all reference forms referring to some other sections
 refer to the local sections in the \addtoindex{supplementary object file}.
 
@@ -779,6 +792,7 @@ fields) are listed following. In the 32-bit DWARF format these
 are 4-byte unsigned integer values; in the 64-bit DWARF format,
 they are 8-byte unsigned integer values.
 
 are 4-byte unsigned integer values; in the 64-bit DWARF format,
 they are 8-byte unsigned integer values.
 
+\begin{nolinenumbersenv}
 \begin{center}
 \begin{tabular}{lll}
 Section &Name & Role  \\ \hline
 \begin{center}
 \begin{tabular}{lll}
 Section &Name & Role  \\ \hline
@@ -791,6 +805,7 @@ Section &Name & Role  \\ \hline
                      & or local TUs                       & \\
 \end{tabular}
 \end{center}
                      & or local TUs                       & \\
 \end{tabular}
 \end{center}
+\end{nolinenumbersenv}
 
 \needlines{4}
 The \texttt{CIE\_id} field in a CIE structure must be 64 bits because
 
 \needlines{4}
 The \texttt{CIE\_id} field in a CIE structure must be 64 bits because
@@ -804,19 +819,21 @@ section, certain forms of attribute value depend on the choice
 of DWARF format as follows. For the 32-bit DWARF format,
 the value is a 4-byte unsigned integer; for the 64-bit DWARF
 format, the value is an 8-byte unsigned integer.
 of DWARF format as follows. For the 32-bit DWARF format,
 the value is a 4-byte unsigned integer; for the 64-bit DWARF
 format, the value is an 8-byte unsigned integer.
+
 \begin{center}
 \begin{center}
+\begin{nolinenumbersenv}
 \begin{tabular}{lp{6cm}}
 Form             & Role  \\ \hline
 \DWFORMlinestrp  & offset in \dotdebuglinestr \\
 \DWFORMrefaddr   & offset in \dotdebuginfo{} \\
 \begin{tabular}{lp{6cm}}
 Form             & Role  \\ \hline
 \DWFORMlinestrp  & offset in \dotdebuglinestr \\
 \DWFORMrefaddr   & offset in \dotdebuginfo{} \\
-\DWFORMrefsup    & offset in \dotdebuginfo{} section of a \mbox{supplementary} object file \\
-                   \addtoindexx{supplementary object file}
+\bbeb
 \DWFORMsecoffset & offset in a section other than \\
 \DWFORMsecoffset & offset in a section other than \\
-                & \dotdebuginfo{} or \dotdebugstr{} \\
+                 & \dotdebuginfo{} or \dotdebugstr{} \\
 \DWFORMstrp      & offset in \dotdebugstr{} \\
 \DWFORMstrpsup   & offset in \dotdebugstr{} section of a \mbox{supplementary} object file \\
 \DWOPcallref     & offset in \dotdebuginfo{} \\
 \end{tabular}
 \DWFORMstrp      & offset in \dotdebugstr{} \\
 \DWFORMstrpsup   & offset in \dotdebugstr{} section of a \mbox{supplementary} object file \\
 \DWOPcallref     & offset in \dotdebuginfo{} \\
 \end{tabular}
+\end{nolinenumbersenv}
 \end{center}
 
 \needlines{5}
 \end{center}
 
 \needlines{5}
@@ -824,11 +841,14 @@ Form             & Role  \\ \hline
 description depend on the choice of DWARF format as follows: for the
 32-bit DWARF format, the value is a 4-byte unsigned integer; for the
 64-bit DWARF format, the value is a 8-byte unsigned integer.
 description depend on the choice of DWARF format as follows: for the
 32-bit DWARF format, the value is a 4-byte unsigned integer; for the
 64-bit DWARF format, the value is a 8-byte unsigned integer.
+
 \begin{center}
 \begin{center}
+\begin{nolinenumbersenv}
 \begin{tabular}{lp{6cm}}
 Form             & Role  \\ \hline
 \DWFORMlinestrp  & offset in \dotdebuglinestr
 \end{tabular}
 \begin{tabular}{lp{6cm}}
 Form             & Role  \\ \hline
 \DWFORMlinestrp  & offset in \dotdebuglinestr
 \end{tabular}
+\end{nolinenumbersenv}
 \end{center}
 
 \item Within the body of the \dotdebugnames{} 
 \end{center}
 
 \item Within the body of the \dotdebugnames{} 
@@ -847,10 +867,14 @@ format as follows: in the 32-bit DWARF format, entries are 4-byte
 unsigned integer values; in the 64-bit DWARF format, they are
 8-byte unsigned integers.
 
 unsigned integer values; in the 64-bit DWARF format, they are
 8-byte unsigned integers.
 
-\item In the body of the \dotdebugaddr{}, \dotdebugloc{} and \dotdebugranges{}
-sections, the contents of the address size fields depends on the
-DWARF format as follows: in the 32-bit DWARF format, these fields
-contain 4; in the 64-bit DWARF format these fields contain 8.
+%\bbpareb-delete bullet 7
+
+\item In the body of the \dotdebugloclists{} and \dotdebugrnglists{}
+sections, the offsets the follow the header depend on the
+DWARF format as follows: in the 32-bit DWARF format, offsets are 4-byte
+unsigned integer values; in the 64-bit DWARF format, they are
+8-byte unsigned integers.
+
 \end{enumerate}
 
 
 \end{enumerate}
 
 
@@ -861,6 +885,7 @@ intermixed within a single compilation unit.
 addresses in the target program are not affected by these
 rules.}
 
 addresses in the target program are not affected by these
 rules.}
 
+\needlines{6}
 A DWARF consumer that supports the 64-bit DWARF format must
 support executables in which some compilation units use the
 32-bit format and others use the 64-bit format provided that
 A DWARF consumer that supports the 64-bit DWARF format must
 support executables in which some compilation units use the
 32-bit format and others use the 64-bit format provided that
@@ -915,16 +940,20 @@ The appropriate entry in the
 interpretation of the information contained directly in the
 \dotdebuginfo{} section.
 
 interpretation of the information contained directly in the
 \dotdebuginfo{} section.
 
-\needlines{4}
 Multiple debugging information entries may share the same
 abbreviation table entry. Each compilation unit is associated
 with a particular abbreviation table, but multiple compilation
 units may share the same table.
 
 Multiple debugging information entries may share the same
 abbreviation table entry. Each compilation unit is associated
 with a particular abbreviation table, but multiple compilation
 units may share the same table.
 
+\needlines{6}
 \subsection{Unit Headers}
 \label{datarep:unitheaders}
 Unit headers contain a field, \addttindex{unit\_type}, whose value indicates the kind of
 \subsection{Unit Headers}
 \label{datarep:unitheaders}
 Unit headers contain a field, \addttindex{unit\_type}, whose value indicates the kind of
-compilation unit that follows. The encodings for the unit type 
+compilation unit 
+\bb
+(see Section \ref{chap:unitentries})
+\eb
+that follows. The encodings for the unit type 
 enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 
 \needlines{6}
 enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 
 \needlines{6}
@@ -942,24 +971,26 @@ enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 \endfoot
   \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
 \endfoot
   \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
-\DWUTcompileTARG~\ddag    &0x01 \\ 
-\DWUTtypeTARG~\ddag       &0x02 \\ 
-\DWUTpartialTARG~\ddag    &0x03 \\ 
-\DWUTskeletonTARG~\ddag       &0x04 \\
-\DWUTsplitcompileTARG~\ddag   &0x05 \\
-\DWUTsplittypeTARG~\ddag      &0x06 \\
-\DWUTlouserTARG~\ddag         &0x80 \\
-\DWUThiuserTARG~\ddag         &\xff 
-\\
+\DWUTcompileTARG~\ddag      &0x01 \\ 
+\DWUTtypeTARG~\ddag         &0x02 \\ 
+\DWUTpartialTARG~\ddag      &0x03 \\ 
+\DWUTskeletonTARG~\ddag     &0x04 \\
+\DWUTsplitcompileTARG~\ddag &0x05 \\
+\DWUTsplittypeTARG~\ddag    &0x06 \\
+\DWUTlouserTARG~\ddag       &0x80 \\
+\DWUThiuserTARG~\ddag       &\xff \\
 \hline
 \end{longtable}
 \end{centering}
 
 \hline
 \end{longtable}
 \end{centering}
 
-\textit{All unit headers in a compilation have the same size. 
-Some header types include padding bytes to achieve this.}
+\bb
+All unit headers have the same initial three fields: \HFNinitiallength, \HFNversion{} and \HFNunittype.
+\eb
 
 \needlines{5}
 
 \needlines{5}
-\subsubsection{Compilation and Partial Unit Headers}
+\bb
+\subsubsection{Full and Partial Compilation Unit Headers}
+\eb
 \label{datarep:compilationunitheader}
 \begin{enumerate}[1. ]
 
 \label{datarep:compilationunitheader}
 \begin{enumerate}[1. ]
 
@@ -992,10 +1023,19 @@ for a summary of all version numbers that apply to DWARF sections.}
 \addttindexx{unit\_type}
 A 1-byte unsigned integer identifying this unit as a compilation unit.
 The value of this field is 
 \addttindexx{unit\_type}
 A 1-byte unsigned integer identifying this unit as a compilation unit.
 The value of this field is 
-\DWUTcompile{} for a full compilation unit or
-\DWUTpartial{} for a partial compilation unit
+\DWUTcompile{} for a 
+\bb
+(non-split) full compilation unit or
+\DWUTpartial{} for a (non-split) partial compilation unit
+\eb
 (see Section \refersec{chap:fullandpartialcompilationunitentries}).
 
 (see Section \refersec{chap:fullandpartialcompilationunitentries}).
 
+\textit{See 
+\bb
+Section \ref{datarep:skeletonandfullcompilationunitheaders} 
+regarding a split full compilation unit.
+\eb}
+
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
@@ -1018,14 +1058,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}).
 
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
-\item \HFNunitpaddingONE{} (8 bytes) \\
-Reserved to DWARF (must be zero).
-
-\needlines{4}
-\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
-Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
-this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
-is 8 bytes in length.
+\bbpareb
 \end{enumerate}
 
 \needlines{8}
 \end{enumerate}
 
 \needlines{8}
@@ -1064,9 +1097,18 @@ for a summary of all version numbers that apply to DWARF sections.}
 A 1-byte unsigned integer identifying this unit as a compilation unit.
 The value of this field is 
 \DWUTskeleton{} for a skeleton compilation unit or
 A 1-byte unsigned integer identifying this unit as a compilation unit.
 The value of this field is 
 \DWUTskeleton{} for a skeleton compilation unit or
-\DWUTsplitcompile{} for a split compilation unit
+\DWUTsplitcompile{} for a split 
+\bb
+(full)
+\eb
+compilation unit
 (see Section \refersec{chap:skeletoncompilationunitentries}).
 
 (see Section \refersec{chap:skeletoncompilationunitentries}).
 
+\textit{There
+\bb
+is no split analog to the partial compilation unit.
+\eb}
+
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
@@ -1098,11 +1140,7 @@ unit and its associated split compilation unit in
 the object file named in the \DWATdwoname{} attribute
 of the skeleton compilation.
 
 the object file named in the \DWATdwoname{} attribute
 of the skeleton compilation.
 
-\needlines{4}
-\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
-Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
-this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
-is 8 bytes in length.
+\bbpareb
 \end{enumerate}
 
 \needlines{8}
 \end{enumerate}
 
 \needlines{8}
@@ -1156,7 +1194,7 @@ an address on the target architecture. If the system uses
 segmented addressing, this value represents the size of the
 offset portion of an address.
 
 segmented addressing, this value represents the size of the
 offset portion of an address.
 
-\needlines{6}
+%\needlines{6}
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -1219,7 +1257,6 @@ null entries.
 
 \subsection{Abbreviations Tables}
 \label{datarep:abbreviationstables}
 
 \subsection{Abbreviations Tables}
 \label{datarep:abbreviationstables}
-
 The abbreviations tables for all compilation units
 are contained in a separate object file section called
 \dotdebugabbrev{}.
 The abbreviations tables for all compilation units
 are contained in a separate object file section called
 \dotdebugabbrev{}.
@@ -1242,7 +1279,7 @@ number that encodes the entry\textquoteright s tag. The encodings for the
 tag names are given in 
 Table \refersec{tab:tagencodings}.
 
 tag names are given in 
 Table \refersec{tab:tagencodings}.
 
-\needlines{6}
+\needlines{10}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
@@ -1260,15 +1297,21 @@ Table \refersec{tab:tagencodings}.
 \DWTAGentrypoint&0x03 \\
 \DWTAGenumerationtype&0x04 \\
 \DWTAGformalparameter&0x05 \\
 \DWTAGentrypoint&0x03 \\
 \DWTAGenumerationtype&0x04 \\
 \DWTAGformalparameter&0x05 \\
+\bbeb\textit{Reserved}&0x06 \\
+\bbeb\textit{Reserved}&0x07 \\
 \DWTAGimporteddeclaration&0x08 \\
 \DWTAGimporteddeclaration&0x08 \\
+\bbeb\textit{Reserved}&0x09 \\
 \DWTAGlabel&0x0a \\
 \DWTAGlexicalblock&0x0b \\
 \DWTAGlabel&0x0a \\
 \DWTAGlexicalblock&0x0b \\
+\bbeb\textit{Reserved}&0x0c \\
 \DWTAGmember&0x0d \\
 \DWTAGmember&0x0d \\
+\bbeb\textit{Reserved}&0x0e \\
 \DWTAGpointertype&0x0f \\
 \DWTAGreferencetype&0x10 \\
 \DWTAGcompileunit&0x11 \\
 \DWTAGstringtype&0x12 \\
 \DWTAGstructuretype&0x13 \\
 \DWTAGpointertype&0x0f \\
 \DWTAGreferencetype&0x10 \\
 \DWTAGcompileunit&0x11 \\
 \DWTAGstringtype&0x12 \\
 \DWTAGstructuretype&0x13 \\
+\bbeb\textit{Reserved}&0x14 \\
 \DWTAGsubroutinetype&0x15 \\
 \DWTAGtypedef&0x16 \\
 \DWTAGuniontype&0x17 \\
 \DWTAGsubroutinetype&0x15 \\
 \DWTAGtypedef&0x16 \\
 \DWTAGuniontype&0x17 \\
@@ -1324,8 +1367,8 @@ DW\_TAG\_mutable\_type DIE that was defined (only) in \DWARFVersionIII.}
 \DWTAGatomictype~\ddag & 0x47 \\
 \DWTAGcallsite~\ddag & 0x48 \\
 \DWTAGcallsiteparameter~\ddag & 0x49 \\
 \DWTAGatomictype~\ddag & 0x47 \\
 \DWTAGcallsite~\ddag & 0x48 \\
 \DWTAGcallsiteparameter~\ddag & 0x49 \\
-\DWTAGskeletonunit~\ddag & 0x4a
-\\
+\DWTAGskeletonunit~\ddag & 0x4a \\
+\DWTAGimmutabletype~\ddag & 0x4b \\
 \DWTAGlouser&0x4080      \\
 \DWTAGhiuser&\xffff      \\
 \end{longtable}
 \DWTAGlouser&0x4080      \\
 \DWTAGhiuser&\xffff      \\
 \end{longtable}
@@ -1432,12 +1475,18 @@ Table \referfol{tab:attributeencodings}.
 \DWATsibling&0x01&\livelink{chap:classreference}{reference} 
             \addtoindexx{sibling attribute} \\
 \DWATlocation&0x02&\livelink{chap:classexprloc}{exprloc}, 
 \DWATsibling&0x01&\livelink{chap:classreference}{reference} 
             \addtoindexx{sibling attribute} \\
 \DWATlocation&0x02&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr}
+        \CLASSloclist
             \addtoindexx{location attribute}   \\
 \DWATname&0x03&\livelink{chap:classstring}{string} 
             \addtoindexx{name attribute} \\
             \addtoindexx{location attribute}   \\
 \DWATname&0x03&\livelink{chap:classstring}{string} 
             \addtoindexx{name attribute} \\
+\bbeb\textit{Reserved}&0x04&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x05&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x06&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x07&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x08&\textit{not applicable} \\
 \DWATordering&0x09&\livelink{chap:classconstant}{constant} 
             \addtoindexx{ordering attribute}  \\
 \DWATordering&0x09&\livelink{chap:classconstant}{constant} 
             \addtoindexx{ordering attribute}  \\
+\bbeb\textit{Reserved}&0x0a&\textit{not applicable} \\
 \DWATbytesize&0x0b&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
 \DWATbytesize&0x0b&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
@@ -1454,6 +1503,8 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}   
             \addtoindexx{bit size attribute} \\
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}   
             \addtoindexx{bit size attribute} \\
+\bbeb\textit{Reserved}&0x0e&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x0f&\textit{not applicable} \\
 \DWATstmtlist&0x10&\livelink{chap:classlineptr}{lineptr} 
             \addtoindexx{statement list attribute} \\
 \DWATlowpc&0x11&\livelink{chap:classaddress}{address} 
 \DWATstmtlist&0x10&\livelink{chap:classlineptr}{lineptr} 
             \addtoindexx{statement list attribute} \\
 \DWATlowpc&0x11&\livelink{chap:classaddress}{address} 
@@ -1463,6 +1514,7 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{high PC attribute}  \\
 \DWATlanguage&0x13&\livelink{chap:classconstant}{constant} 
             \addtoindexx{language attribute}  \\
             \addtoindexx{high PC attribute}  \\
 \DWATlanguage&0x13&\livelink{chap:classconstant}{constant} 
             \addtoindexx{language attribute}  \\
+\bbeb\textit{Reserved}&0x14&\textit{not applicable} \\
 \DWATdiscr&0x15&\livelink{chap:classreference}{reference} 
             \addtoindexx{discriminant attribute}  \\
 \DWATdiscrvalue&0x16&\livelink{chap:classconstant}{constant} 
 \DWATdiscr&0x15&\livelink{chap:classreference}{reference} 
             \addtoindexx{discriminant attribute}  \\
 \DWATdiscrvalue&0x16&\livelink{chap:classconstant}{constant} 
@@ -1471,9 +1523,10 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{visibility attribute} \\
 \DWATimport&0x18&\livelink{chap:classreference}{reference} 
             \addtoindexx{import attribute}  \\
             \addtoindexx{visibility attribute} \\
 \DWATimport&0x18&\livelink{chap:classreference}{reference} 
             \addtoindexx{import attribute}  \\
-\DWATstringlength&0x19&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr}
-            \addtoindexx{string length attribute}  \\
+\DWATstringlength&0x19&\livelink{chap:classexprloc}{exprloc},
+        \CLASSloclist,
+\bbeb   \CLASSreference
+        \addtoindexx{string length attribute}  \\
 \DWATcommonreference&0x1a&\livelink{chap:classreference}{reference} 
             \addtoindexx{common reference attribute}  \\
 \DWATcompdir&0x1b&\livelink{chap:classstring}{string} 
 \DWATcommonreference&0x1a&\livelink{chap:classreference}{reference} 
             \addtoindexx{common reference attribute}  \\
 \DWATcompdir&0x1b&\livelink{chap:classstring}{string} 
@@ -1488,6 +1541,7 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classreference}{reference}, 
         \livelink{chap:classflag}{flag}
             \addtoindexx{default value attribute} \\
         \livelink{chap:classreference}{reference}, 
         \livelink{chap:classflag}{flag}
             \addtoindexx{default value attribute} \\
+\bbeb\textit{Reserved}&0x1f&\textit{not applicable} \\
 \DWATinline&0x20&\livelink{chap:classconstant}{constant} 
             \addtoindexx{inline attribute}  \\
 \DWATisoptional&0x21&\livelink{chap:classflag}{flag} 
 \DWATinline&0x20&\livelink{chap:classconstant}{constant} 
             \addtoindexx{inline attribute}  \\
 \DWATisoptional&0x21&\livelink{chap:classflag}{flag} 
@@ -1496,16 +1550,24 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
             \addtoindexx{lower bound attribute}  \\
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
             \addtoindexx{lower bound attribute}  \\
+\bbeb\textit{Reserved}&0x23&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x24&\textit{not applicable} \\
 \DWATproducer&0x25&\livelink{chap:classstring}{string}
             \addtoindexx{producer attribute}  \\
 \DWATproducer&0x25&\livelink{chap:classstring}{string}
             \addtoindexx{producer attribute}  \\
+\bbeb\textit{Reserved}&0x26&\textit{not applicable} \\
 \DWATprototyped&0x27&\livelink{chap:classflag}{flag}
             \addtoindexx{prototyped attribute}  \\
 \DWATprototyped&0x27&\livelink{chap:classflag}{flag}
             \addtoindexx{prototyped attribute}  \\
+\bbeb\textit{Reserved}&0x28&\textit{not applicable} \\
+\bbeb\textit{Reserved}&0x29&\textit{not applicable} \\
 \DWATreturnaddr&0x2a&\livelink{chap:classexprloc}{exprloc},
 \DWATreturnaddr&0x2a&\livelink{chap:classexprloc}{exprloc},
-        \livelink{chap:classloclistptr}{loclistptr}
-            \addtoindexx{return address attribute}  \\
-\DWATstartscope&0x2c&\livelink{chap:classconstant}{constant}, 
-        \livelink{chap:classrangelistptr}{rangelistptr}
+        \CLASSloclist
+            \addtoindexx{return address attribute} \\            
+\bbeb\textit{Reserved}&0x2b&\textit{not applicable} \\
+\DWATstartscope&0x2c&
+        \livelink{chap:classconstant}{constant},
+        \CLASSrnglist
             \addtoindexx{start scope attribute}  \\
             \addtoindexx{start scope attribute}  \\
+\bbeb\textit{Reserved}&0x2d&\textit{not applicable} \\
 \DWATbitstride&0x2e&\livelink{chap:classconstant}{constant},
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
 \DWATbitstride&0x2e&\livelink{chap:classconstant}{constant},
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
@@ -1514,6 +1576,7 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
             \addtoindexx{upper bound attribute}  \\
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
             \addtoindexx{upper bound attribute}  \\
+\bbeb\textit{Reserved}&0x30&\textit{not applicable} \\
 \DWATabstractorigin&0x31&\livelink{chap:classreference}{reference} 
             \addtoindexx{abstract origin attribute}  \\
 \DWATaccessibility&0x32&\livelink{chap:classconstant}{constant} 
 \DWATabstractorigin&0x31&\livelink{chap:classreference}{reference} 
             \addtoindexx{abstract origin attribute}  \\
 \DWATaccessibility&0x32&\livelink{chap:classconstant}{constant} 
@@ -1532,7 +1595,7 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{count attribute}  \\
 \DWATdatamemberlocation&0x38&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
             \addtoindexx{count attribute}  \\
 \DWATdatamemberlocation&0x38&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{data member attribute}  \\
 \DWATdeclcolumn&0x39&\livelink{chap:classconstant}{constant} 
             \addtoindexx{declaration column attribute}  \\
             \addtoindexx{data member attribute}  \\
 \DWATdeclcolumn&0x39&\livelink{chap:classconstant}{constant} 
             \addtoindexx{declaration column attribute}  \\
@@ -1549,7 +1612,7 @@ Table \referfol{tab:attributeencodings}.
 \DWATexternal&\xiiif&\livelink{chap:classflag}{flag} 
             \addtoindexx{external attribute}  \\
 \DWATframebase&0x40&\livelink{chap:classexprloc}{exprloc}, 
 \DWATexternal&\xiiif&\livelink{chap:classflag}{flag} 
             \addtoindexx{external attribute}  \\
 \DWATframebase&0x40&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{frame base attribute}  \\
 \DWATfriend&0x41&\livelink{chap:classreference}{reference} 
             \addtoindexx{friend attribute}  \\
             \addtoindexx{frame base attribute}  \\
 \DWATfriend&0x41&\livelink{chap:classreference}{reference} 
             \addtoindexx{friend attribute}  \\
@@ -1565,24 +1628,24 @@ Table \referfol{tab:attributeencodings}.
 \DWATpriority&0x45&\livelink{chap:classreference}{reference} 
             \addtoindexx{priority attribute}  \\
 \DWATsegment&0x46&\livelink{chap:classexprloc}{exprloc}, 
 \DWATpriority&0x45&\livelink{chap:classreference}{reference} 
             \addtoindexx{priority attribute}  \\
 \DWATsegment&0x46&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{segment attribute}  \\
 \DWATspecification&0x47&\livelink{chap:classreference}{reference} 
         \addtoindexx{specification attribute}  \\
 \DWATstaticlink&0x48&\livelink{chap:classexprloc}{exprloc}, 
             \addtoindexx{segment attribute}  \\
 \DWATspecification&0x47&\livelink{chap:classreference}{reference} 
         \addtoindexx{specification attribute}  \\
 \DWATstaticlink&0x48&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{static link attribute}  \\
 \DWATtype&0x49&\livelink{chap:classreference}{reference} 
             \addtoindexx{type attribute}  \\
 \DWATuselocation&0x4a&\livelink{chap:classexprloc}{exprloc}, 
             \addtoindexx{static link attribute}  \\
 \DWATtype&0x49&\livelink{chap:classreference}{reference} 
             \addtoindexx{type attribute}  \\
 \DWATuselocation&0x4a&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{location list attribute}  \\
 \DWATvariableparameter&0x4b&\livelink{chap:classflag}{flag} 
             \addtoindexx{variable parameter attribute}  \\
 \DWATvirtuality&0x4c&\livelink{chap:classconstant}{constant} 
             \addtoindexx{virtuality attribute}  \\
 \DWATvtableelemlocation&0x4d&\livelink{chap:classexprloc}{exprloc}, 
             \addtoindexx{location list attribute}  \\
 \DWATvariableparameter&0x4b&\livelink{chap:classflag}{flag} 
             \addtoindexx{variable parameter attribute}  \\
 \DWATvirtuality&0x4c&\livelink{chap:classconstant}{constant} 
             \addtoindexx{virtuality attribute}  \\
 \DWATvtableelemlocation&0x4d&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+        \CLASSloclist 
             \addtoindexx{vtable element location attribute}  \\
 \DWATallocated&0x4e&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
             \addtoindexx{vtable element location attribute}  \\
 \DWATallocated&0x4e&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
@@ -1605,7 +1668,8 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{use UTF8 attribute}\addtoindexx{UTF-8}  \\
 \DWATextension&0x54&\livelink{chap:classreference}{reference} 
             \addtoindexx{extension attribute}  \\
             \addtoindexx{use UTF8 attribute}\addtoindexx{UTF-8}  \\
 \DWATextension&0x54&\livelink{chap:classreference}{reference} 
             \addtoindexx{extension attribute}  \\
-\DWATranges&0x55&\livelink{chap:classrangelistptr}{rangelistptr} 
+\DWATranges&0x55&
+        \CLASSrnglist      
             \addtoindexx{ranges attribute}  \\
 \DWATtrampoline&0x56&\livelink{chap:classaddress}{address}, 
         \livelink{chap:classflag}{flag}, 
             \addtoindexx{ranges attribute}  \\
 \DWATtrampoline&0x56&\livelink{chap:classaddress}{address}, 
         \livelink{chap:classflag}{flag}, 
@@ -1676,9 +1740,9 @@ Table \referfol{tab:attributeencodings}.
 \DWATaddrbase~\ddag &0x73&
                \livelinki{chap:classaddrptr}{addrptr}{addrptr class}
             \addtoindexx{address table base!encoding} \\
 \DWATaddrbase~\ddag &0x73&
                \livelinki{chap:classaddrptr}{addrptr}{addrptr class}
             \addtoindexx{address table base!encoding} \\
-\DWATrangesbase~\ddag&0x74&
-               \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}
-            \addtoindexx{ranges base!encoding} \\
+\DWATrnglistsbase~\ddag&0x74&
+               \CLASSrnglistsptr
+            \addtoindexx{range list base!encoding} \\
 \textit{Reserved} &0x75& \textit{Unused} \\
 \DWATdwoname~\ddag &0x76&
                \livelink{chap:classstring}{string}
 \textit{Reserved} &0x75& \textit{Unused} \\
 \DWATdwoname~\ddag &0x76&
                \livelink{chap:classstring}{string}
@@ -1723,35 +1787,34 @@ Table \referfol{tab:attributeencodings}.
         \addtoindexx{export symbols attribute} \\
 \DWATdeleted~\ddag &0x8a &\CLASSflag \addtoindexx{deleted attribute} \\
 \DWATdefaulted~\ddag &0x8b &\CLASSconstant \addtoindexx{defaulted attribute} \\
         \addtoindexx{export symbols attribute} \\
 \DWATdeleted~\ddag &0x8a &\CLASSflag \addtoindexx{deleted attribute} \\
 \DWATdefaulted~\ddag &0x8b &\CLASSconstant \addtoindexx{defaulted attribute} \\
+\DWATloclistsbase~\ddag &0x8c &\CLASSloclistsptr \addtoindexx{location list base attribute} \\
 \DWATlouser&0x2000 & --- \addtoindexx{low user attribute encoding}  \\
 \DWAThiuser&\xiiifff& --- \addtoindexx{high user attribute encoding}  \\
 
 \end{longtable} 
 \end{centering}
 
 \DWATlouser&0x2000 & --- \addtoindexx{low user attribute encoding}  \\
 \DWAThiuser&\xiiifff& --- \addtoindexx{high user attribute encoding}  \\
 
 \end{longtable} 
 \end{centering}
 
-The attribute form governs how the value of the attribute is
-encoded. There are nine classes of form, listed below. Each
-class is a set of forms which have related representations
+\subsection{Classes and Forms}
+\label{datarep:classesandforms}
+Each class is a set of forms which have related representations
 and which are given a common interpretation according to the
 attribute in which the form is used.
 and which are given a common interpretation according to the
 attribute in which the form is used.
+The attribute form governs how the value of an attribute is
+encoded. 
+The classes and the forms they include are listed below. 
 
 Form \DWFORMsecoffsetTARG{} 
 
 Form \DWFORMsecoffsetTARG{} 
-is a member of more 
-\addtoindexx{rangelistptr class}
-than 
-\addtoindexx{macptr class}
-one 
-\addtoindexx{loclistptr class}
-class,
-\addtoindexx{lineptr class}
-namely 
-\CLASSaddrptr, 
-\CLASSlineptr, 
-\CLASSloclistptr, 
-\CLASSmacptr,  
-\CLASSrangelistptr{} or
-\CLASSstroffsetsptr; 
-the list of classes allowed by the applicable attribute in 
+is a member of more than one class, namely 
+\CLASSaddrptr,
+\CLASSlineptr,
+\CLASSloclist, \CLASSloclistsptr, 
+\CLASSmacptr,
+\CLASSrnglist{}, \CLASSrnglistsptr, 
+and
+\CLASSstroffsetsptr;
+as a result, it is not possible for an
+attribute to allow more than one of these classes.
+The list of classes allowed by the applicable attribute in 
 Table \refersec{tab:attributeencodings}
 determines the class of the form.
 
 Table \refersec{tab:attributeencodings}
 determines the class of the form.
 
@@ -1774,31 +1837,40 @@ Each possible form belongs to one or more of the following classes
 the purpose and general usage of each class):
 
 \begin{itemize}
 the purpose and general usage of each class):
 
 \begin{itemize}
-\item \livelinki{chap:classaddress}{address}{address class} \\
+
+\item \CLASSaddress \\
 \livetarg{datarep:classaddress}{}
 Represented as either:
 \begin{itemize}
 \item An object of appropriate size to hold an
 \livetarg{datarep:classaddress}{}
 Represented as either:
 \begin{itemize}
 \item An object of appropriate size to hold an
-address on the target machine 
-(\DWFORMaddrTARG). 
+address on the target machine (\DWFORMaddrTARG). 
 The size is encoded in the compilation unit header 
 (see Section \refersec{datarep:compilationunitheader}).
 This address is relocatable in a relocatable object file and
 is relocated in an executable file or shared object file.
 
 \item An indirect index into a table of addresses (as 
 The size is encoded in the compilation unit header 
 (see Section \refersec{datarep:compilationunitheader}).
 This address is relocatable in a relocatable object file and
 is relocated in an executable file or shared object file.
 
 \item An indirect index into a table of addresses (as 
-described in the previous bullet) in the
-\dotdebugaddr{} section (\DWFORMaddrxTARG). 
+described in the previous bullet) in the \dotdebugaddr{} section 
+\bb
+(\DWFORMaddrxTARG, \DWFORMaddrxoneTARG, \DWFORMaddrxtwoTARG, 
+\DWFORMaddrxthreeTARG{} and \DWFORMaddrxfourTARG). 
+\eb 
 The representation of a \DWFORMaddrxNAME{} value is an unsigned
 \addtoindex{LEB128} value, which is interpreted as a zero-based 
 index into an array of addresses in the \dotdebugaddr{} section.
 The representation of a \DWFORMaddrxNAME{} value is an unsigned
 \addtoindex{LEB128} value, which is interpreted as a zero-based 
 index into an array of addresses in the \dotdebugaddr{} section.
+\bb
+The representation of a \DWFORMaddrxoneNAME, \DWFORMaddrxtwoNAME, 
+\DWFORMaddrxthreeNAME{} or \DWFORMaddrxfourNAME{} value is a 
+1-, 2-, 3- or 4-byte unsigned integer value, respectively,
+which is similarly interpretated.
+\eb
 The index is relative to the value of the \DWATaddrbase{} attribute 
 of the associated compilation unit.
 
 \end{itemize}
 
 \needlines{5}
 The index is relative to the value of the \DWATaddrbase{} attribute 
 of the associated compilation unit.
 
 \end{itemize}
 
 \needlines{5}
-\item \livelink{chap:classaddrptr}{addrptr} \\
+\item \CLASSaddrptr \\
 \livetarg{datarep:classaddrptr}{}
 This is an offset into the \dotdebugaddr{} section (\DWFORMsecoffset). It
 consists of an offset from the beginning of the \dotdebugaddr{} section to the
 \livetarg{datarep:classaddrptr}{}
 This is an offset into the \dotdebugaddr{} section (\DWFORMsecoffset). It
 consists of an offset from the beginning of the \dotdebugaddr{} section to the
@@ -1813,7 +1885,7 @@ format, it is an 8-byte unsigned value (see Section
 \textit{This class is new in \DWARFVersionV.}
 
 \needlines{4}
 \textit{This class is new in \DWARFVersionV.}
 
 \needlines{4}
-\item \livelink{chap:classblock}{block} \\
+\item \CLASSblock \\
 \livetarg{datarep:classblock}{}
 Blocks come in four forms:
 \begin{itemize}
 \livetarg{datarep:classblock}{}
 Blocks come in four forms:
 \begin{itemize}
@@ -1840,7 +1912,7 @@ that follow. The information bytes may contain any mixture
 of relocated (or relocatable) addresses, references to other
 debugging information entries or data bytes.
 
 of relocated (or relocatable) addresses, references to other
 debugging information entries or data bytes.
 
-\item \livelinki{chap:classconstant}{constant}{constant class} \\
+\item \CLASSconstant \\
 \livetarg{datarep:classconstant}{}
 There are eight forms of constants. There are fixed length
 constant data forms for one-, two-, four-, eight- and sixteen-byte values
 \livetarg{datarep:classconstant}{}
 There are eight forms of constants. There are fixed length
 constant data forms for one-, two-, four-, eight- and sixteen-byte values
@@ -1882,24 +1954,22 @@ unsigned integers respectively, rather than
 \DWFORMdata\textless n\textgreater.}
 
 \needlines{4}
 \DWFORMdata\textless n\textgreater.}
 
 \needlines{4}
-\item \livelinki{chap:classexprloc}{exprloc}{exprloc class} \\
+\item \CLASSexprloc \\
 \livetarg{datarep:classexprloc}{}
 \livetarg{datarep:classexprloc}{}
-This is an unsigned LEB128\addtoindexx{LEB128!unsigned} length followed by the
-number of information bytes specified by the length
-(\DWFORMexprlocTARG). 
+This is an unsigned LEB128\addtoindexx{LEB128!unsigned} length 
+followed by the number of information bytes specified by the 
+length (\DWFORMexprlocTARG). 
 The information bytes contain a DWARF expression 
 (see Section \refersec{chap:dwarfexpressions}) 
 or location description 
 (see Section \refersec{chap:locationdescriptions}).
 
 The information bytes contain a DWARF expression 
 (see Section \refersec{chap:dwarfexpressions}) 
 or location description 
 (see Section \refersec{chap:locationdescriptions}).
 
-\needlines{4}
-\item \livelinki{chap:classflag}{flag}{flag class} \\
+\needlines{8}
+\item \CLASSflag \\
 \livetarg{datarep:classflag}{}
 A flag \addtoindexx{flag class}
 is represented explicitly as a single byte of data
 \livetarg{datarep:classflag}{}
 A flag \addtoindexx{flag class}
 is represented explicitly as a single byte of data
-(\DWFORMflagTARG) or 
-implicitly (\DWFORMflagpresentTARG). 
-In the
+(\DWFORMflagTARG) or implicitly (\DWFORMflagpresentTARG). In the
 first case, if the \nolink{flag} has value zero, it indicates the
 absence of the attribute; if the \nolink{flag} has a non-zero value,
 it indicates the presence of the attribute. In the second
 first case, if the \nolink{flag} has value zero, it indicates the
 absence of the attribute; if the \nolink{flag} has a non-zero value,
 it indicates the presence of the attribute. In the second
@@ -1907,7 +1977,7 @@ case, the attribute is implicitly indicated as present, and
 no value is encoded in the debugging information entry itself.
 
 \needlines{4}
 no value is encoded in the debugging information entry itself.
 
 \needlines{4}
-\item \livelinki{chap:classlineptr}{lineptr}{lineptr class} \\
+\item \CLASSlineptr \\
 \livetarg{datarep:classlineptr}{}
 This is an offset into 
 \addtoindexx{section offset!in class lineptr value}
 \livetarg{datarep:classlineptr}{}
 This is an offset into 
 \addtoindexx{section offset!in class lineptr value}
@@ -1925,28 +1995,47 @@ relocated in an executable or shared object file. In the
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\needlines{10}
+\item \CLASSloclist \\
+\livetarg{datarep:classloclist}{}
+This is represented as either:
+\begin{itemize}
+\item
+An index into the \dotdebugloclists{} section (\DWFORMloclistxTARG). 
+The unsigned ULEB operand identifies an offset location 
+relative to the base of that section (the location of the first offset 
+in the section, not the first byte of the section). The contents of 
+that location is then added to the base to determine the location of 
+the target list of entries.
+\item
+An offset into the \dotdebugloclists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class loclist value}
+from the beginning of the \dotdebugloclists{} section.
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object file. In the 
+\thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
+in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\end{itemize}
 
 
-\item \livelinki{chap:classloclistptr}{loclistptr}{loclistptr class} \\
-\livetarg{datarep:classloclistptr}{}
-This is an offset into the 
-\dotdebugloc{}
-section
-(\DWFORMsecoffset). 
-It consists of an offset from the
-\addtoindexx{section offset!in class loclistptr value}
-beginning of the 
-\dotdebugloc{}
-section to the first byte of
-the data making up the 
-\addtoindex{location list} for the compilation unit. 
+\textit{This class is new in \DWARFVersionV.}
+
+\item \CLASSloclistsptr \\
+\livetarg{datarep:classloclistsptr}{}
+This is an offset into the \dotdebugloclists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class loclistsptr}
+from the beginning of the \dotdebugloclists{} section.
 It is relocatable in a relocatable object file, and
 relocated in an executable or shared object file. In the 
 \thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 It is relocatable in a relocatable object file, and
 relocated in an executable or shared object file. In the 
 \thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\textit{This class is new in \DWARFVersionV.}
 
 
-\item \livelinki{chap:classmacptr}{macptr}{macptr class} \\
+\item \CLASSmacptr \\
 \livetarg{datarep:classmacptr}{}
 This is an 
 \addtoindexx{section offset!in class macptr value}
 \livetarg{datarep:classmacptr}{}
 This is an 
 \addtoindexx{section offset!in class macptr value}
@@ -1963,53 +2052,61 @@ relocated in an executable or shared object file. In the
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\needlines{8}
+\item \CLASSrnglist \\
+\livetarg{datarep:classrnglist}{}
+This is represented as either:
+\begin{itemize}
+\item
+An index into the \dotdebugrnglists{} section (\DWFORMrnglistxTARG). 
+The unsigned ULEB operand identifies an offset location 
+relative to the base of that section (the location of the first offset 
+in the section, not the first byte of the section). The contents of 
+that location is then added to the base to determine the location of 
+the target range list of entries.
+\item
+\bb
+An offset into the \dotdebugrnglists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class rnglist value}
+\eb
+from the beginning of the \dotdebugrnglists{} section.
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object file. In the 
+\thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
+in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\end{itemize}
+
+\textit{This class is new in \DWARFVersionV.}
+
 \needlines{4}
 \needlines{4}
-\item \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class} \\
-\livetarg{datarep:classrangelistptr}{}
-This is an 
-\addtoindexx{section offset!in class rangelistptr value}
-offset into the \dotdebugranges{} section
-(\DWFORMsecoffset). 
-It consists of an
-offset from the beginning of the 
-\dotdebugranges{} section
-to the beginning of the non-contiguous address ranges
-information for the referencing entity.  
-It is relocatable in
-a relocatable object file, and relocated in an executable or
-shared object file. 
-However, if a \DWATrangesbase{} attribute applies, the offset
-is relative to the base offset given by \DWATrangesbase.
+\item \CLASSrnglistsptr \\
+\livetarg{datarep:classrnglistsptr}{}
+This is an offset\addtoindexx{section offset!in class rnglistsptr}
+into the \dotdebugrnglists{} section (\DWFORMsecoffset). 
+It consists of a byte offset from the beginning of the 
+\dotdebugrnglists{} section.
+It is relocatable in a relocatable object file, and relocated 
+in an executable or shared object file.
 In the \thirtytwobitdwarfformat, this offset
 is a 4-byte unsigned value; in the 64-bit DWARF
 format, it is an 8-byte unsigned value (see Section
 \refersec{datarep:32bitand64bitdwarfformats}).
 In the \thirtytwobitdwarfformat, this offset
 is a 4-byte unsigned value; in the 64-bit DWARF
 format, it is an 8-byte unsigned value (see Section
 \refersec{datarep:32bitand64bitdwarfformats}).
-\end{itemize}
 
 
-\textit{Because classes
-\CLASSaddrptr, 
-\CLASSlineptr, 
-\CLASSloclistptr, 
-\CLASSmacptr, 
-\CLASSrangelistptr{} and
-\CLASSstroffsetsptr{}
-share a common representation, it is not possible for an
-attribute to allow more than one of these classes}
+\textit{This class is new in \DWARFVersionV.}
 
 
-\needlines{4}
-\begin{itemize}
-\item \livelinki{chap:classreference}{reference}{reference class} \\
+\needlines{8}
+\item \CLASSreference \\
 \livetarg{datarep:classreference}{}
 \livetarg{datarep:classreference}{}
-There are four types of reference.
-
-The 
-\addtoindexx{reference class}
-first type of reference can identify any debugging
+There are four types of reference.\addtoindexx{reference class}
+\begin{itemize}
+\item
+The first type of reference can identify any debugging
 information entry within the containing unit. 
 information entry within the containing unit. 
-This type of
-reference is an 
-\addtoindexx{section offset!in class reference value}
-offset from the first byte of the compilation
+This type of reference is an 
+offset\addtoindexx{section offset!in class reference value}
+from the first byte of the compilation
 header for the compilation unit containing the reference. There
 are five forms for this type of reference. There are fixed
 length forms for one, two, four and eight byte offsets
 header for the compilation unit containing the reference. There
 are five forms for this type of reference. There are fixed
 length forms for one, two, four and eight byte offsets
@@ -2027,6 +2124,7 @@ Because this type of reference is within
 the containing compilation unit no relocation of the value
 is required.
 
 the containing compilation unit no relocation of the value
 is required.
 
+\item
 The second type of reference can identify any debugging
 information entry within a 
 \dotdebuginfo{} section; in particular,
 The second type of reference can identify any debugging
 information entry within a 
 \dotdebuginfo{} section; in particular,
@@ -2061,6 +2159,7 @@ section in the same fashion as the run
 time loader, either when the debug information is first read,
 or when the reference is used.}
 
 time loader, either when the debug information is first read,
 or when the reference is used.}
 
+\item
 The third type of reference can identify any debugging
 information type entry that has been placed in its own
 \addtoindex{type unit}. This type of 
 The third type of reference can identify any debugging
 information type entry that has been placed in its own
 \addtoindex{type unit}. This type of 
@@ -2070,12 +2169,16 @@ reference (\DWFORMrefsigeightTARG) is the
 (see Section \refersec{datarep:typesignaturecomputation}) 
 that was computed for the type. 
 
 (see Section \refersec{datarep:typesignaturecomputation}) 
 that was computed for the type. 
 
+\item
 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 
 a \addtoindex{supplementary object file}.
 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 
 a \addtoindex{supplementary object file}.
-This type of reference (\DWFORMrefsupTARG) is an offset from the 
-beginning of the \dotdebuginfo{} section in the 
+This type of reference (\DWFORMrefsupfourTARG{}
+\bb
+or \DWFORMrefsupeightTARG{}) is a 4- or 8-byte offset (respectively) 
+\eb
+from the beginning of the \dotdebuginfo{} section in the 
 \addtoindex{supplementary object file}.
 
 \textit{The use of compilation unit relative references will reduce the
 \addtoindex{supplementary object file}.
 
 \textit{The use of compilation unit relative references will reduce the
@@ -2088,9 +2191,10 @@ across compilation units from different executables or shared object files.}
 \textit{A reference to any kind of compilation unit identifies the
 debugging information entry for that unit, not the preceding
 header.}
 \textit{A reference to any kind of compilation unit identifies the
 debugging information entry for that unit, not the preceding
 header.}
+\end{itemize}
 
 \needlines{4}
 
 \needlines{4}
-\item \livelinki{chap:classstring}{string}{string class} \\
+\item \CLASSstring \\
 \livetarg{datarep:classstring}{}
 A string is a sequence of contiguous non\dash null bytes followed by
 one null byte. 
 \livetarg{datarep:classstring}{}
 A string is a sequence of contiguous non\dash null bytes followed by
 one null byte. 
@@ -2098,10 +2202,10 @@ one null byte.
 A string may be represented: 
 \begin{itemize}
 \setlength{\itemsep}{0em}
 A string may be represented: 
 \begin{itemize}
 \setlength{\itemsep}{0em}
-\item immediately in the debugging information entry itself 
+\item Immediately in the debugging information entry itself 
 (\DWFORMstringTARG), 
 
 (\DWFORMstringTARG), 
 
-\item as an 
+\item As an 
 \addtoindexx{section offset!in class string value}
 offset into a string table contained in
 the \dotdebugstr{} section of the object file (\DWFORMstrpTARG), 
 \addtoindexx{section offset!in class string value}
 offset into a string table contained in
 the \dotdebugstr{} section of the object file (\DWFORMstrpTARG), 
@@ -2112,18 +2216,31 @@ or as an offset into a string table contained in the
 section of a \addtoindex{supplementary object file}
 refer to the local \dotdebugstr{} section of that same file.
 In the \thirtytwobitdwarfformat, the representation of a 
 section of a \addtoindex{supplementary object file}
 refer to the local \dotdebugstr{} section of that same file.
 In the \thirtytwobitdwarfformat, the representation of a 
-\DWFORMstrpNAME{}, \DWFORMstrpNAME{} or \DWFORMstrpsupNAME{}
+\DWFORMstrpNAME{}, 
+\bb
+\DWFORMlinestrpNAME{} 
+\eb
+or \DWFORMstrpsupNAME{}
 value is a 4-byte unsigned offset; in the \sixtyfourbitdwarfformat,
 it is an 8-byte unsigned offset 
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{6}
 value is a 4-byte unsigned offset; in the \sixtyfourbitdwarfformat,
 it is an 8-byte unsigned offset 
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{6}
-\item as an indirect offset into the string table using an 
+\item As an indirect offset into the string table using an 
 index into a table of offsets contained in the 
 index into a table of offsets contained in the 
-\dotdebugstroffsets{} section of the object file (\DWFORMstrxTARG).
+\dotdebugstroffsets{} section of the object file 
+\bb
+(\DWFORMstrxTARG, \DWFORMstrxoneTARG, \DWFORMstrxtwoTARG, \DWFORMstrxthreeTARG{} and \DWFORMstrxfourTARG).
+\eb
 The representation of a \DWFORMstrxNAME{} value is an unsigned 
 \addtoindex{LEB128} value, which is interpreted as a zero-based 
 The representation of a \DWFORMstrxNAME{} value is an unsigned 
 \addtoindex{LEB128} value, which is interpreted as a zero-based 
-index into an array of offsets in the \dotdebugstroffsets{} section. 
+index into an array of offsets in the \dotdebugstroffsets{} section.
+\bb
+The representation of a \DWFORMstrxoneNAME, \DWFORMstrxtwoNAME, 
+\DWFORMstrxthreeNAME{} or \DWFORMstrxfourNAME{} value is a 
+1-, 2-, 3- or 4-byte unsigned integer value, respectively,
+which is similarly interpretated.
+\eb 
 The offset entries in the \dotdebugstroffsets{} section have the 
 same representation as \DWFORMstrp{} values.
 \end{itemize}
 The offset entries in the \dotdebugstroffsets{} section have the 
 same representation as \DWFORMstrp{} values.
 \end{itemize}
@@ -2144,12 +2261,13 @@ It contains all the same characters
 and encoding points as ISO/IEC 10646, as well as additional
 information about the characters and their use.}
 
 and encoding points as ISO/IEC 10646, as well as additional
 information about the characters and their use.}
 
+\needlines{4}
 \textit{Earlier versions of DWARF did not specify the representation
 of strings; for compatibility, this version also does
 not. However, the UTF\dash 8 representation is strongly recommended.}
 
 \needlines{4}
 \textit{Earlier versions of DWARF did not specify the representation
 of strings; for compatibility, this version also does
 not. However, the UTF\dash 8 representation is strongly recommended.}
 
 \needlines{4}
-\item \livelinki{chap:classstroffsetsptr}{stroffsetsptr}{stroffsetsptr class} \\
+\item \CLASSstroffsetsptr \\
 \livetarg{datarep:classstroffsetsptr}{}
 This is an offset into the \dotdebugstroffsets{} section 
 (\DWFORMsecoffset). It consists of an offset from the beginning of the 
 \livetarg{datarep:classstroffsetsptr}{}
 This is an offset into the \dotdebugstroffsets{} section 
 (\DWFORMsecoffset). It consists of an offset from the beginning of the 
@@ -2169,13 +2287,15 @@ it is an 8-byte unsigned value (see Section
 In no case does an attribute use one of the classes 
 \CLASSaddrptr,
 \CLASSlineptr,
 In no case does an attribute use one of the classes 
 \CLASSaddrptr,
 \CLASSlineptr,
-\CLASSloclistptr, 
+\CLASSloclistsptr, 
 \CLASSmacptr, 
 \CLASSmacptr, 
-\CLASSrangelistptr{} or 
+\CLASSrnglistsptr{} or 
 \CLASSstroffsetsptr{}
 to point into either the
 \dotdebuginfo{} or \dotdebugstr{} section.
 
 \CLASSstroffsetsptr{}
 to point into either the
 \dotdebuginfo{} or \dotdebugstr{} section.
 
+\subsection{Form Encodings}
+\label{datarep:formencodings}
 The form encodings are listed in 
 Table \referfol{tab:attributeformencodings}.
 
 The form encodings are listed in 
 Table \referfol{tab:attributeformencodings}.
 
@@ -2215,18 +2335,31 @@ Table \referfol{tab:attributeformencodings}.
 \DWFORMrefeight&0x14&\livelink{chap:classreference}{reference} \\
 \DWFORMrefudata&0x15&\livelink{chap:classreference}{reference}  \\
 \DWFORMindirect&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
 \DWFORMrefeight&0x14&\livelink{chap:classreference}{reference} \\
 \DWFORMrefudata&0x15&\livelink{chap:classreference}{reference}  \\
 \DWFORMindirect&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
-\DWFORMsecoffset{} &0x17& \CLASSaddrptr, \CLASSlineptr, \CLASSloclistptr, \\
-                   &    & \CLASSmacptr, \CLASSrangelistptr, \CLASSstroffsetsptr \\
+\DWFORMsecoffset{} &0x17& \CLASSaddrptr, \CLASSlineptr, \CLASSloclist, \CLASSloclistsptr, \\
+                   &    & \CLASSmacptr, \CLASSrnglist, \CLASSrnglistsptr, \CLASSstroffsetsptr \\
 \DWFORMexprloc{} &0x18&\livelink{chap:classexprloc}{exprloc} \\
 \DWFORMflagpresent{} &0x19&\livelink{chap:classflag}{flag} \\
 \DWFORMexprloc{} &0x18&\livelink{chap:classexprloc}{exprloc} \\
 \DWFORMflagpresent{} &0x19&\livelink{chap:classflag}{flag} \\
-\DWFORMstrx{} \ddag &0x1a&\livelink{chap:classstring}{string} \\
-\DWFORMaddrx{} \ddag &0x1b&\livelink{chap:classaddress}{address} \\
-\DWFORMrefsup{}~\ddag &0x1c &\livelink{chap:classreference}{reference} \\
-\DWFORMstrpsup{}~\ddag &0x1d &\livelink{chap:classstring}{string} \\
-\DWFORMdatasixteen~\ddag &0x1e &\CLASSconstant \\
-\DWFORMlinestrp~\ddag &0x1f &\CLASSstring \\
-\DWFORMrefsigeight &0x20 &\livelink{chap:classreference}{reference} \\
+\DWFORMstrx{} \ddag        &0x1a &\CLASSstring \\
+\DWFORMaddrx{} \ddag       &0x1b &\CLASSaddress \\
+\DWFORMrefsupfour{}~\ddag  &0x1c &\CLASSreference \\
+\DWFORMstrpsup{}~\ddag     &0x1d &\CLASSstring \\
+\DWFORMdatasixteen~\ddag   &0x1e &\CLASSconstant \\
+\DWFORMlinestrp~\ddag      &0x1f &\CLASSstring \\
+\DWFORMrefsigeight         &0x20 &\CLASSreference \\
 \DWFORMimplicitconst~\ddag &0x21 &\CLASSconstant \\
 \DWFORMimplicitconst~\ddag &0x21 &\CLASSconstant \\
+\DWFORMloclistx~\ddag      &0x22 &\CLASSloclist \\
+\DWFORMrnglistx~\ddag      &0x23 &\CLASSrnglist \\
+\DWFORMrefsupeight{}~\ddag &0x24 &\CLASSreference \\
+\bb
+\DWFORMstrxone{}~\ddag     &0x25 &\CLASSstring \\
+\DWFORMstrxtwo{}~\ddag     &0x26 &\CLASSstring \\
+\DWFORMstrxthree{}~\ddag   &0x27 &\CLASSstring \\
+\DWFORMstrxfour{}~\ddag    &0x28 &\CLASSstring \\
+\DWFORMaddrxone{}~\ddag    &0x29 &\CLASSaddress \\
+\DWFORMaddrxtwo{}~\ddag    &0x2a &\CLASSaddress \\
+\DWFORMaddrxthree{}~\ddag  &0x2b &\CLASSaddress \\
+\eb
+\DWFORMaddrxfour{}~\ddag   &0x2c &\CLASSaddress \\
 \end{longtable}
 \end{centering}
 
 \end{longtable}
 \end{centering}
 
@@ -2379,11 +2512,14 @@ Table \refersec{tab:dwarfoperationencodings}.
   \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
 
   \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
 
+\bbeb\textit{Reserved}&0x01&-& \\
+\bbeb\textit{Reserved}&0x02&-& \\
 \DWOPaddr&0x03&1 & constant address  \\ 
 & & &(size is target specific) \\
 \DWOPaddr&0x03&1 & constant address  \\ 
 & & &(size is target specific) \\
-
+\bbeb\textit{Reserved}&0x04&-& \\
+\bbeb\textit{Reserved}&0x05&-& \\
 \DWOPderef&0x06&0 & \\
 \DWOPderef&0x06&0 & \\
-
+\bbeb\textit{Reserved}&0x07&-& \\
 \DWOPconstoneu&0x08&1&1-byte constant  \\
 \DWOPconstones&0x09&1&1-byte constant   \\
 \DWOPconsttwou&0x0a&1&2-byte constant   \\
 \DWOPconstoneu&0x08&1&1-byte constant  \\
 \DWOPconstones&0x09&1&1-byte constant   \\
 \DWOPconsttwou&0x0a&1&2-byte constant   \\
@@ -2493,44 +2629,21 @@ location of a variable or other entity.
 
 \subsection{Location Lists}
 \label{datarep:locationlists}
 
 \subsection{Location Lists}
 \label{datarep:locationlists}
-
 Each entry in a \addtoindex{location list} is either a location list entry,
 Each entry in a \addtoindex{location list} is either a location list entry,
-a base address selection entry, or an 
+a base address entry, a default location entry or an 
 \addtoindexx{end-of-list entry!in location list}
 end-of-list entry.
 
 \addtoindexx{end-of-list entry!in location list}
 end-of-list entry.
 
-\needlines{6}
-\subsubsection{Location List Entries in Non-Split Objects}
-A \addtoindex{location list} entry consists of two address offsets followed
-by an unsigned 2-byte length, followed by a block of contiguous bytes
-that contains a DWARF location description. The length
-specifies the number of bytes in that block. The two offsets
-are the same size as an address on the target machine.
-
-\needlines{5}
-A base address selection entry and an 
-\addtoindexx{end-of-list entry!in location list}
-end-of-list entry each
-consist of two (constant or relocated) address offsets. The two
-offsets are the same size as an address on the target machine.
-
-For a \addtoindex{location list} to be specified, the base address of
-\addtoindexx{base address selection entry!in location list}
-the corresponding compilation unit must be defined 
-(see Section \refersec{chap:fullandpartialcompilationunitentries}).
-
-\subsubsection{Location List Entries in Split Objects}
-\label{datarep:locationlistentriesinsplitobjects}
-An alternate form for location list entries is used in split objects. 
 Each entry begins with an unsigned 1-byte code that indicates the kind of entry
 that follows. The encodings for these constants are given in
 Each entry begins with an unsigned 1-byte code that indicates the kind of entry
 that follows. The encodings for these constants are given in
-Table \refersec{tab:locationlistentryencodingvalues}.
+Table \ref{tab:locationlistentryencodingvalues}.
 
 \needlines{10}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
 
 \needlines{10}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
-  \caption{Location list entry encoding values} \label{tab:locationlistentryencodingvalues} \\
+  \caption{Location list entry encoding values} 
+  \label{tab:locationlistentryencodingvalues} \\
   \hline \bfseries Location list entry encoding name&\bfseries Value \\ \hline
 \endfirsthead
   \bfseries Location list entry encoding name&\bfseries Value\\ \hline
   \hline \bfseries Location list entry encoding name&\bfseries Value \\ \hline
 \endfirsthead
   \bfseries Location list entry encoding name&\bfseries Value\\ \hline
@@ -2538,12 +2651,17 @@ Table \refersec{tab:locationlistentryencodingvalues}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
   \hline \emph{Continued on next page}
 \endfoot
   \hline
+  \ddag New in \DWARFVersionV
 \endlastfoot
 \endlastfoot
-\DWLLEendoflistentry & 0x0 \\
-\DWLLEbaseaddressselectionentry & 0x01 \\
-\DWLLEstartendentry & 0x02 \\
-\DWLLEstartlengthentry & 0x03 \\
-\DWLLEoffsetpairentry & 0x04 \\
+\DWLLEendoflist~\ddag & 0x00 \\
+\DWLLEbaseaddressx~\ddag & 0x01 \\
+\DWLLEstartxendx~\ddag & 0x02 \\
+\DWLLEstartxlength~\ddag & 0x03 \\
+\DWLLEoffsetpair~\ddag & 0x04 \\
+\DWLLEdefaultlocation~\ddag & 0x05 \\
+\DWLLEbaseaddress~\ddag & 0x06 \\
+\DWLLEstartend~\ddag & 0x07 \\
+\DWLLEstartlength~\ddag & 0x08 \\
 \end{longtable}
 \end{centering}
 
 \end{longtable}
 \end{centering}
 
@@ -2809,7 +2927,10 @@ defined language.
 \DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} \\
 \DWLANGFortranzerothree{}~\ddag  &0x0022 &1 \addtoindexx{Fortran:2004 (ISO)} \\
 \DWLANGFortranzeroeight{}~\ddag  &0x0023 &1 \addtoindexx{Fortran:2010 (ISO)} \\
 \DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} \\
 \DWLANGFortranzerothree{}~\ddag  &0x0022 &1 \addtoindexx{Fortran:2004 (ISO)} \\
 \DWLANGFortranzeroeight{}~\ddag  &0x0023 &1 \addtoindexx{Fortran:2010 (ISO)} \\
-\DWLANGRenderScript{}~\ddag       &0x0024 &0 \addtoindexx{RenderScript Kernel Language}
+\DWLANGRenderScript{}~\ddag       &0x0024 &0 \addtoindexx{RenderScript Kernel Language} \\
+\bb
+\DWLANGBLISS{} \ddag &0x0025 &0 \addtoindexx{BLISS} 
+\eb
 \\
 \DWLANGlouser{} &0x8000 & \\
 \DWLANGhiuser{} &\xffff & \\
 \\
 \DWLANGlouser{} &0x8000 & \\
 \DWLANGhiuser{} &\xffff & \\
@@ -2852,6 +2973,7 @@ Table \refersec{tab:identifiercaseencodings}.
 \end{longtable}
 \end{centering}
 
 \end{longtable}
 \end{centering}
 
+\needlines{8}
 \section{Calling Convention Encodings}
 \label{datarep:callingconventionencodings}
 The encodings of the constants used in the 
 \section{Calling Convention Encodings}
 \label{datarep:callingconventionencodings}
 The encodings of the constants used in the 
@@ -2917,6 +3039,7 @@ Table \refersec{tab:inlineencodings}.
 % this clearpage is ugly, but the following table came
 % out oddly without it.
 
 % this clearpage is ugly, but the following table came
 % out oddly without it.
 
+\needlines{10}
 \section{Array Ordering}
 \label{datarep:arrayordering}
 
 \section{Array Ordering}
 \label{datarep:arrayordering}
 
@@ -2982,8 +3105,9 @@ Table \refersec{tab:discriminantdescriptorencodings}.
 The \addtoindexi{version number}{version number!name index table}
 in the name index table header is \versiondotdebugnames{}.
 
 The \addtoindexi{version number}{version number!name index table}
 in the name index table header is \versiondotdebugnames{}.
 
-The name index attributes and their encodings are listed in Table \referfol{datarep:indexattributeencodings}.
+The name index attributes and their encodings are listed in Table \refersec{datarep:indexattributeencodings}.
 
 
+\needlines{14}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c|l}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c|l}
@@ -3326,9 +3450,8 @@ Table \refersec{tab:callframeinstructionencodings}.
 \end{longtable}
 \end{centering}
 
 \end{longtable}
 \end{centering}
 
-\section{Non-contiguous Address Ranges}
+\section{Range List Entries for Non-contiguous Address Ranges}
 \label{datarep:noncontiguousaddressranges}
 \label{datarep:noncontiguousaddressranges}
-
 Each entry in a \addtoindex{range list}
 (see Section \refersec{chap:noncontiguousaddressranges})
 is either a
 Each entry in a \addtoindex{range list}
 (see Section \refersec{chap:noncontiguousaddressranges})
 is either a
@@ -3337,16 +3460,35 @@ range list entry,
 \addtoindexx{range list}
 a base address selection entry, or an end-of-list entry.
 
 \addtoindexx{range list}
 a base address selection entry, or an end-of-list entry.
 
-A \addtoindex{range list} entry consists of two relative addresses. The
-addresses are the same size as addresses on the target machine.
+Each entry begins with an unsigned 1-byte code that indicates the kind of entry
+that follows. The encodings for these constants are given in
+Table \refersec{tab:rnglistsentryencodingvalues}.
 
 
-\needlines{4}
-A base address selection entry and an 
-\addtoindexx{end-of-list entry!in range list}
-end-of-list entry each
-\addtoindexx{base address selection entry!in range list}
-consist of two (constant or relocated) addresses. The two
-addresses are the same size as addresses on the target machine.
+\needlines{10}
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Range list entry encoding values} 
+  \label{tab:rnglistsentryencodingvalues} \\
+  \hline \bfseries Range list entry encoding name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Range list entry encoding name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+  \ddag New in \DWARFVersionV
+\endlastfoot
+\DWRLEendoflist~\ddag    & 0x00 \\
+\DWRLEbaseaddressx~\ddag & 0x01 \\
+\DWRLEstartxendx~\ddag   & 0x02 \\
+\DWRLEstartxlength~\ddag & 0x03 \\
+\DWRLEoffsetpair~\ddag   & 0x04 \\
+\DWRLEbaseaddress~\ddag  & 0x05 \\
+\DWRLEstartend~\ddag     & 0x06 \\
+\DWRLEstartlength~\ddag  & 0x07 \\
+\end{longtable}
+\end{centering}
 
 For a \addtoindex{range list} to be specified, the base address of the
 \addtoindexx{base address selection entry!in range list}
 
 For a \addtoindex{range list} to be specified, the base address of the
 \addtoindexx{base address selection entry!in range list}
@@ -3439,9 +3581,9 @@ from this base entry, starting from 0.
 
 \needlines{10}
 \section{Range List Table}
 
 \needlines{10}
 \section{Range List Table}
-\label{app:rangelisttable}
-Each set of entries in the range list table contained in the
-\dotdebugranges{} section begins with a header containing:
+\label{app:ranglisttable}
+Each \dotdebugrnglists{} and \dotdebugrnglistsdwo{} section 
+begins with a header containing:
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
@@ -3459,7 +3601,7 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
-\versiondotdebugranges{}. 
+\versiondotdebugrnglists{}. 
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3472,25 +3614,66 @@ system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
+
+\item   \HFNoffsetentrycount{} (\HFTuword) \\
+A 4-byte count of the number of offsets
+that follow the header.
+\bb
+This count may be zero.
+\eb
 \end{enumerate}
 
 \end{enumerate}
 
-This header is followed by a series of range list entries as
+Immediately following the header is an array of offsets.
+This array is followed by a series of range lists. 
+
+\bb
+If the \HFNoffsetentrycount{} is non-zero, there 
+\eb
+is one offset for each range list. 
+The contents
+of the $i$\textsuperscript{th} offset is the offset 
+\bb
+(an unsigned integer)
+\eb
+from the
+beginning of the offset array to the location of the 
+$i$\textsuperscript{th} range list.
+\bb
+In the 32-bit DWARF format, each offset is 4-bytes in size; 
+in the 64-bit DWARF format, each offset is 8-bytes in size 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\eb
+
+\textit{\bb
+If the \HFNoffsetentrycount{} is zero, then \DWFORMrnglistx{} cannot 
+be used to access a range list; \DWFORMsecoffset{} must be used 
+instead. If the \HFNoffsetentrycount{} is non-zero, then \DWFORMrnglistx{} 
+may be used to access a range list; this is necessary in split units and
+otherwise may be more compact than using \DWFORMsecoffset.
+\eb
+}
+
+Range lists are
 described in Section \refersec{chap:noncontiguousaddressranges}.
 described in Section \refersec{chap:noncontiguousaddressranges}.
+
+\needlines{4}
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \addttindex{address\_size} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
 selector is omitted from the range list entries.
 
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \addttindex{address\_size} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
 selector is omitted from the range list entries.
 
-The \DWATrangesbase{} attribute points to the first entry
-following the header. The entries are referenced by a byte
-offset relative to this base address.
-
+The \DWATrnglistsbase{} attribute points to the first offset 
+following the header. The range lists are referenced
+by the index of the position of their corresponding offset in the
+array of offsets, which indirectly specifies the offset to the
+target list.
 \needlines{12}
 \section{Location List Table}
 \label{datarep:locationlisttable}
 \needlines{12}
 \section{Location List Table}
 \label{datarep:locationlisttable}
-Each set of entries in the location list table contained in the
-\dotdebugloc{} or \dotdebuglocdwo{} sections begins with a header containing:
+Each \dotdebugloclists{} or \dotdebugloclistsdwo{} section 
+begins with a header containing:
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
@@ -3508,7 +3691,7 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
-\versiondotdebugloc{}.
+\versiondotdebugloclists{}.
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3521,18 +3704,58 @@ system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
+
+\item   \HFNoffsetentrycount{} (\HFTuword) \\
+A 4-byte count of the number of offsets
+that follow the header.
+\bb
+This count may be zero.
+\eb
 \end{enumerate}
 
 \end{enumerate}
 
-This header is followed by a series of location list entries as
+Immediately following the header is an array of offsets.
+This array is followed by a series of location lists. 
+    
+\bb
+If the \HFNoffsetentrycount{} is non-zero, there 
+\eb
+is one offset for each location list. The contents
+of the $i$\textsuperscript{th} offset is the offset 
+\bb
+(an unsigned integer)
+\eb
+from the
+beginning of the offset array to the location of the 
+$i$\textsuperscript{th} location list. 
+\bb
+In the 32-bit DWARF format, each offset is 4-bytes in size; 
+in the 64-bit DWARF format, each offset is 8-bytes in size 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\eb
+
+\textit{\bb
+If the \HFNoffsetentrycount{} is zero, then \DWFORMloclistx{} cannot 
+be used to access a location list; \DWFORMsecoffset{} must be used 
+instead. If the \HFNoffsetentrycount{} is non-zero, then \DWFORMloclistx{} 
+may be used to access a location list; this is necessary in split units and
+otherwise may be more compact than using \DWFORMsecoffset.
+\eb
+}
+
+Location lists are
 described in Section \refersec{chap:locationlists}.
 described in Section \refersec{chap:locationlists}.
+
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \HFNaddresssize{} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \HFNaddresssize{} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
-selector is omitted from range list entries.
+selector is omitted from location list entries.
 
 
-The entries are referenced by a byte offset relative to the first
-location list following this header.
+The \DWATloclistsbase{} attribute points to the first offset 
+following the header. The location lists are referenced
+by the index of the position of their corresponding offset in the
+array of offsets, which indirectly specifies the offset to the
+target list.
 
 \needlines{6}
 \section{Dependencies and Constraints}
 
 \needlines{6}
 \section{Dependencies and Constraints}
@@ -3738,6 +3961,7 @@ Note that except for the initial
 attributes are appended in order according to the alphabetical
 spelling of their identifier.
 
 attributes are appended in order according to the alphabetical
 spelling of their identifier.
 
+\needlines{4}
 If an implementation defines any vendor-specific attributes,
 any such attributes that are essential to the definition of
 the type are also included at the end of the above list,
 If an implementation defines any vendor-specific attributes,
 any such attributes that are essential to the definition of
 the type are also included at the end of the above list,
@@ -3855,11 +4079,11 @@ Steps 6 and 7 are themselves suitable for a separate
 \addtoindex{type unit}.}
 
 \needlines{4}
 \addtoindex{type unit}.}
 
 \needlines{4}
-Where the DWARF producer may reasonably choose two or more
-different forms for a given attribute, it should choose
+\textit{Where the DWARF producer may reasonably choose two or 
+more different forms for a given attribute, it should choose
 the simplest possible form in computing the signature. (For
 example, a constant value should be preferred to a location
 the simplest possible form in computing the signature. (For
 example, a constant value should be preferred to a location
-expression when possible.)
+expression when possible.)}
 
 Once the string S has been formed from the DWARF encoding,
 an 16-byte \MDfive{} digest is computed for the string and the 
 
 Once the string S has been formed from the DWARF encoding,
 an 16-byte \MDfive{} digest is computed for the string and the 
@@ -3953,7 +4177,7 @@ This hash function is sometimes known as the
 \hrefself{http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function)}.} 
 
 \begin{figure}[ht]
 \hrefself{http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function)}.} 
 
 \begin{figure}[ht]
-\begin{lstlisting}
+\begin{nlnlisting}
 
 uint32_t /* must be a 32-bit integer type */
     hash(unsigned char *str)
 
 uint32_t /* must be a 32-bit integer type */
     hash(unsigned char *str)
@@ -3967,7 +4191,7 @@ uint32_t /* must be a 32-bit integer type */
         return hash;
     }
 
         return hash;
     }
 
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Name Table Hash Function Definition}
 \label{fig:nametablehashfunctiondefinition}
 \end{figure}
 \caption{Name Table Hash Function Definition}
 \label{fig:nametablehashfunctiondefinition}
 \end{figure}