Incorporate changes as of the May 17 meeting. The corresponding
[dwarf-doc.git] / dwarf5 / latexdoc / datarepresentation.tex
index 9341a32..55958f6 100644 (file)
@@ -18,22 +18,23 @@ special labels are reserved for tag names, attribute names,
 base type encodings, location operations, language names,
 calling conventions and call frame instructions.
 
-The labels denoting the beginning and end of the reserved
-\hypertarget{chap:DWXXXlohiuser}{}
-value range for vendor specific extensions consist of the
+The labels denoting the beginning and end of the 
+\hypertarget{chap:DWXXXlohiuser}{reserved value range}
+for vendor specific extensions consist of the
 appropriate prefix 
-(\DWATlouserMARK{}\DWAThiuserMARK{}    DW\_AT,
-\DWATElouserMARK{}\DWATEhiuserMARK{}   DW\_ATE, 
-\DWCClouserMARK{}\DWCChiuserMARK{}     DW\_CC,
-\DWCFAlouserMARK{}\DWCFAhiuserMARK{}   DW\_CFA 
-\DWENDlouserMARK{}\DWENDhiuserMARK{}   DW\_END, 
-\DWLANGlouserMARK{}\DWLANGhiuserMARK{}  DW\_LANG, 
-\DWLNElouserMARK{}\DWLNEhiuserMARK{}   DW\_LNE, 
-\DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO,
-\DWOPlouserMARK{}\DWOPhiuserMARK{}     DW\_OP or
-\DWTAGlouserMARK{}\DWTAGhiuserMARK{}   DW\_TAG, 
-respectively) followed by
-\_lo\_user or \_hi\_user. 
+(\DWATlouserMARK{}\DWAThiuserMARK{}DW\_AT, 
+\DWATElouserMARK{}\DWATEhiuserMARK{}DW\_ATE, 
+\DWCClouserMARK{}\DWCChiuserMARK{}DW\_CC, 
+\DWCFAlouserMARK{}\DWCFAhiuserMARK{}DW\_CFA, 
+\DWENDlouserMARK{}\DWENDhiuserMARK{}DW\_END, 
+\DWIDXlouserMARK{}\DWIDXhiuserMARK{}DW\_IDX, 
+\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) 
+followed by \_lo\_user or \_hi\_user. 
 Values in the  range between \textit{prefix}\_lo\_user 
 and \textit{prefix}\_hi\_user inclusive,
 are reserved for vendor specific extensions. Vendors may
@@ -41,8 +42,8 @@ use values in this range without conflicting with current or
 future system\dash defined values. All other values are reserved
 for use by the system.
 
-\textit{For example, for DIE tags, the special
-labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
+\textit{For example, for debugging information entry
+tags, the special labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
 
 \textit{There may also be codes for vendor specific extensions
 between the number of standard line number opcodes and
@@ -50,8 +51,7 @@ the first special line number opcode. However, since the
 number of standard opcodes varies with the DWARF version,
 the range for extensions is also version dependent. Thus,
 \DWLNSlouserTARG{} and 
-\DWLNShiuserTARG{} symbols are not defined.
-}
+\DWLNShiuserTARG{} symbols are not defined.}
 
 Vendor defined tags, attributes, base type encodings, location
 atoms, language names, line number actions, calling conventions
@@ -119,13 +119,12 @@ In an \addtoindex{initial length} field, the values \wfffffffzero through
 \wffffffff are reserved by DWARF to indicate some form of
 extension relative to \DWARFVersionII; such values must not
 be interpreted as a length field. The use of one such value,
-\xffffffff, is defined below 
-(see Section \refersec{datarep:32bitand64bitdwarfformats}); 
+\xffffffff, is defined in
+Section \refersec{datarep:32bitand64bitdwarfformats}); 
 the use of
 the other values is reserved for possible future extensions.
 
 
-
 \section{Relocatable, Split, Executable, Shared and Package Object Files} 
 \label{datarep:executableobjectsandsharedobjects}
 
@@ -206,7 +205,7 @@ of these offsets requires relocation. Depending on the implementation,
 these relocations may be implicit (that is, the producer may not need to
 emit any explicit relocation information for these offsets).
 
-\item The \HFNdebuginfooffset{} field in the \dotdebugaranges header and 
+\item The \HFNdebuginfooffset{} field in the \dotdebugaranges{} header and 
 the list of compilation units following the \dotdebugnames{} header contain 
 references to the \dotdebuginfo{} section.  These references require relocation 
 so that after linking they refer to the correct contribution in the combined 
@@ -219,12 +218,13 @@ space of the program and require relocation.
 
 \end{itemize}
 
-\textit{Note that operands of classes \CLASSblock, \CLASSconstant{} and 
+\needlines{4}
+\textit{Note that operands of classes 
+\CLASSconstant{} and 
 \CLASSflag{} do not require relocation. Attribute operands that use 
-form \DWFORMstring{} also do not require relocation. Further, 
-attribute operands that use form
+forms \DWFORMstring{},
 \DWFORMrefone, \DWFORMreftwo, \DWFORMreffour, \DWFORMrefeight, or
-\DWFORMrefudata{} do not need relocation.}
+\DWFORMrefudata{} also do not need relocation.}
 
 \subsection{Split DWARF Object Files}
 \label{datarep:splitdwarfobjectfiles}
@@ -234,6 +234,9 @@ information such that the majority of the debugging
 information can remain in individual object files without
 being processed by the linker. 
 
+\textit{This reduces link time by reducing the amount of information
+the linker must process.}
+
 \needlines{6}
 \subsubsection{First Partition (with Skeleton Unit)}
 The first partition contains
@@ -272,10 +275,10 @@ section. The string offsets table is necessary only if
 the skeleton compilation unit uses the \DWFORMstrx{} form.
 \end{itemize}
 The attributes contained in the skeleton compilation
-unit can be used by a DWARF consumer to find the object file
-or DWARF object file that contains the second partition.
+unit can be used by a DWARF consumer to find the 
+DWARF object file that contains the second partition.
 
-\subsubsection{Second Partition (Unlinked or In \texttt{.dwo} File)}
+\subsubsection{Second Partition (Unlinked or in a \texttt{.dwo} File)}
 The second partition contains the debugging information that
 does not need to be processed by the linker. These sections
 may be left in the object files and ignored by the linker
@@ -286,24 +289,22 @@ file. This partition includes the following:
 \item
 The full compilation unit, in the \dotdebuginfodwo{} section.
 \begin{itemize}
-\item
-The full compilation unit entry includes a \DWATdwoid{} 
-attribute whose form and value is the same as that of the \DWATdwoid{} 
-attribute of the associated skeleton unit.
-\needlines{4}
+\bbeb
 \item
 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
 \DWATaddrbase{} attribute in the associated skeleton unit.
-Location expressions may similarly do so using the \DWOPaddrx{} and
+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
@@ -329,9 +330,10 @@ section.
 
 Except where noted otherwise, all references in this document
 to a debugging information section (for example, \dotdebuginfo),
-applies also to the corresponding split DWARF section (for example,
+apply also to the corresponding split DWARF section (for example,
 \dotdebuginfodwo).
 
+\needlines{4}
 Split DWARF object files do not get linked with any other files,
 therefore references between sections must not make use of
 normal object file relocation information. As a result, symbolic
@@ -342,6 +344,19 @@ references within or between sections are not possible.
 The relocated addresses in the debugging information for an
 executable object are virtual addresses.
 
+The sections containing the debugging information are typically
+not loaded as part of the memory image of the program (in ELF
+terminology, the sections are not "allocatable" and are not part
+of a loadable segment). Therefore, the debugging information
+sections described in this document are typically linked as if
+they were each to be loaded at virtual address 0, and references
+within the debugging information always implicitly indicate which
+section a particular offset refers to. (For example, a reference
+of form \DWFORMsecoffset{} may refer to one of several sections,
+depending on the class allowed by a particular attribute of a
+debugging information entry, as shown in 
+Table \refersec{tab:attributeencodings}.)
+
 \needlines{6}
 \subsection{Shared Object Files}
 \label{datarep:sharedobjectfiles}
@@ -357,6 +372,11 @@ shared object file may be calculated by adding the offset to the
 base address at which the object file was attached. This offset
 is available in the run\dash time linker\textquoteright s data structures.}
 
+As with executable objects, the sections containing debugging
+information are typically not loaded as part of the memory image
+of the shared object, and are typically linked as if they were
+each to be loaded at virtual address 0.
+
 \subsection{DWARF Package Files}
 \label{datarep:dwarfpackagefiles}
 \textit{Using \splitDWARFobjectfile{s} allows the developer to compile, 
@@ -371,6 +391,7 @@ produced during the compilation of an application.}
 application, and is given the same name with a \doublequote{\texttt{.dwp}}
 extension.\addtoindexx{\texttt{.dwp} file extension}}
 
+\needlines{4}
 A DWARF package file is itself an object file, using the
 \addtoindexx{package files}
 \addtoindexx{DWARF package files}
@@ -379,7 +400,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.
 
-\needlines{5}
+\needlines{10}
 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:
@@ -403,7 +424,9 @@ section.
 
 The DWARF package file also contains two index sections that
 provide a fast way to locate debug information by compilation
-unit signature (\DWATdwoid) for compilation units, or by type
+unit ID 
+\bbeb 
+for compilation units, or by type
 signature for type units:
 \begin{alltt}
     \dotdebugcuindex
@@ -412,7 +435,7 @@ signature for type units:
 
 \subsubsection{The Compilation Unit (CU) Index Section}
 The \dotdebugcuindex{} section is a hashed lookup table that maps a
-compilation unit signature to a set of contributions in the
+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.
 
@@ -445,18 +468,9 @@ sections:
     \dotdebugstroffsetsdwo
 \end{alltt}
 
-\textit{Merging of type units with the same type signature
-across \texttt{.dwo} files when creating a \texttt{.dwp} file
-can be achieved using COMDAT-based techniques similar to those
-described in Appendix 
-\refersec{app:dwarfcompressionandduplicateeliminationinformative}.
-In fact, this is necessary in order to combine all \dotdebuginfodwo{}
-section contributions into a single \dotdebuginfodwo{} section in a
-\texttt{.dwp} file.}
-
 \subsubsection{Format of the CU and TU Index Sections}
-Both index sections have the same format, and serve to map a
-64-bit signature to a set of contributions to the debug sections.
+Both index sections have the same format, and serve to map an
+8-byte signature to a set of contributions to the debug sections.
 Each index section begins with a header, followed by a hash table of
 signatures, a parallel table of indexes, a table of offsets, and
 a table of sizes. The index sections are aligned at 8-byte
@@ -466,10 +480,9 @@ boundaries in the DWARF package file.
 The index section header contains the following fields:
 \begin{enumerate}[1. ]
 \item \texttt{version} (\HFTuhalf) \\
-A version number
+A version number.
 \addtoindexx{version number!CU index information} 
 \addtoindexx{version number!TU index information}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
 This number is specific to the CU and TU index information
 and is independent of the DWARF version number.
 
@@ -477,10 +490,9 @@ The version number is \versiondotdebugcuindex.
 
 \item \textit{padding} (\HFTuhalf) \\
 Reserved to DWARF (must be zero).
-
-\item \texttt{column\_count} (\HFTuword) \\
-The number of columns in the table of section counts that follows.
-For brevity, the contents of this field is referred to as $C$ below.
+\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{unit\_count} (\HFTuword) \\
 The number of compilation units or type units in the index.
@@ -514,20 +526,19 @@ Unused slots in the hash table have 0 in both the hash table
 entry and the parallel table entry. While 0 is a valid hash
 value, the row index in a used slot will always be non-zero.
 
-Given a 64-bit compilation unit signature or a type signature $X$,
+Given an 8-byte compilation unit ID or type signature $X$,
 an entry in the hash table is located as follows:
 \begin{enumerate}[1. ]
-\item Calculate a primary hash $H = X\ \&\ MASK(k)$, where $MASK(k)$ is a
-    mask with the low-order $k$ bits all set to 1.
-
-\item Calculate a secondary hash $H' = (((X>>32)\ \&\ MASK(k))\ |\ 1)$.
-
+\item Define $REP(X)$ to be the value of $X$ interpreted as an 
+      unsigned 64-bit integer in the target byte order.
+\item Calculate a primary hash $H = REP(X)\ \&\ MASK(k)$, where
+      $MASK(k)$ is a mask with the low-order $k$ bits all set to 1.
+\item Calculate a secondary hash $H' = (((REP(X)>>32)\ \&\ MASK(k))\ |\ 1)$.
 \item If the hash table entry at index $H$ matches the signature, use
-    that entry. If the hash table entry at index $H$ is unused (all
-    zeroes), terminate the search: the signature is not present
-    in the table.
-
-\item Let $H = (H + H')\ modulo\ S$. Repeat at Step 3.
+      that entry. If the hash table entry at index $H$ is unused (all
+      zeroes), terminate the search: the signature is not present
+      in the table.
+\item Let $H = (H + H')\ modulo\ S$. Repeat at Step 4.
 \end{enumerate}
 
 Because $S > U$, and $H'$ and $S$ are relatively prime, the search is
@@ -537,8 +548,8 @@ guaranteed to stop at an unused slot or find the match.
 The table of offsets begins immediately following the parallel
 table (at offset \mbox{$16 + 12 * S$} from the beginning of the section).
 The table is a two-dimensional array of 4-byte words, 
-%(using the byte order of the application binary), 
-with $C$ columns and $U + 1$
+%(using the byte order of the application binary),
+with $N$ sections and $U + 1$
 rows, in row-major order. Each row in the array is indexed
 starting from 0. The first row provides a key to the columns:
 each column in this row provides a section identifier for a debug
@@ -546,6 +557,8 @@ section, and the offsets in the same column of subsequent rows
 refer to that section. The section identifiers are shown in
 Table \referfol{tab:dwarfpackagefilesectionidentifierencodings}.
 
+\textit{Not all sections listed in the table need be included.}
+
 \needlines{12}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
@@ -589,18 +602,27 @@ The table of sizes begins immediately following the table of
 offsets, and provides the sizes of the contributions made by each
 CU or TU to the corresponding section in the package file. Like
 the table of offsets, it is a two-dimensional array of 4-byte
-words, with $C$ columns and $U$ rows, in row-major order. Each row in
+words, with $N$ 
+entries and $U$ rows, in row-major order. Each row in
 the array is indexed starting from 1 (row 0 of the table of
 offsets also serves as the key for the table of sizes).
 
+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 be then referenced
-from the debugging information of each of those executable or shared object files.
+In order to minimize the size of debugging information, 
+it is possible to move duplicate debug information entries, 
+strings and macro entries from several executables or shared 
+object files into a separate 
+\addtoindexi{\textit{supplementary object file}}{supplementary object file} 
+by some post-linking utility; the moved entries and strings can 
+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.
 
 \needlines{4}
 A DWARF \addtoindex{supplementary object file} is itself an object file, 
@@ -617,8 +639,9 @@ The \dotdebugsup{} section contains:
 \item \texttt{version} (\HFTuhalf) \\
 \addttindexx{version}
 A 2-byte unsigned integer representing the version of the DWARF
-information for the compilation unit (see Appendix G). The
-value in this field is \versiondotdebugsup.
+information for the compilation unit. 
+
+The value in this field is \versiondotdebugsup.
 
 \item \texttt{is\_supplementary} (\HFTubyte) \\
 \addttindexx{is\_supplementary}
@@ -640,23 +663,19 @@ is not needed and must be an empty string (a single null byte).
 \item \texttt{sup\_checksum\_len} (unsigned LEB128) \\
 \addttindexx{sup\_checksum\_len}
 Length of the following \addttindex{sup\_checksum} field; 
-his value can be 0 if no checksum is provided.
-
+this value can be 0 if no checksum is provided.
 
 \item \texttt{sup\_checksum} (array of \HFTubyte) \\
 \addttindexx{sup\_checksum}
-Some checksum or cryptographic hash function of the \dotdebuginfo{}, 
-\dotdebugstr{} and \dotdebugmacro{} sections of the 
-\addtoindex{supplementary object file}, or some unique identifier
-which the implementation can choose to verify that the supplementary 
-section object file matches what the debug information in the executable 
-or shared object file expects.
+An implementation-defined integer constant value that
+provides unique identification of the supplementary file.
+
 \end{enumerate}
 
 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 expressions or using loclistptr
+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
 form attributes must not be moved to a \addtoindex{supplementary object file}.
 
 Executable or shared object file compilation units can use
@@ -687,7 +706,8 @@ the executable or shared object file.
 \hypertarget{datarep:xxbitdwffmt}{}
 \addtoindexx{32-bit DWARF format}
 \addtoindexx{64-bit DWARF format}
-There are two closely related file formats. In the 32-bit DWARF
+There are two closely-related DWARF
+formats. In the 32-bit DWARF
 format, all values that represent lengths of DWARF sections
 and offsets relative to the beginning of DWARF sections are
 represented using four bytes. In the 64-bit DWARF format, all
@@ -698,6 +718,11 @@ length field of certain DWARF sections, as well as the CIE and
 FDE structures, so that the 32-bit and 64-bit DWARF formats
 can coexist and be distinguished within a single linked object.
 
+Except where noted otherwise, all references in this document
+to a debugging information section (for example, \dotdebuginfo),
+apply also to the corresponding split DWARF section (for example,
+\dotdebuginfodwo).
+
 The differences between the 32- and 64-bit DWARF formats are
 detailed in the following:
 \begin{enumerate}[1. ]
@@ -722,8 +747,8 @@ detect that a DWARF section contribution is using the 64-bit
 format and to adapt its processing accordingly.}
 
 \needlines{4}
-\item Section offset and section length
-\hypertarget{datarep:sectionoffsetlength}{} 
+\item \hypertarget{datarep:sectionoffsetlength}{}
+Section offset and section length
 \addtoindexx{section length!use in headers}
 fields that occur
 \addtoindexx{section offset!use in headers}
@@ -795,7 +820,7 @@ section, depends on the DWARF format as follows: in the
 in the 64-bit DWARF format, it is a 8-byte unsigned integer.
 
 \needlines{4}
-\item In the body of the \dotdebugstroffsets{} and \dotdebugstroffsetsdwo{}
+\item In the body of the \dotdebugstroffsets{} 
 sections, the size of entries in the body depend on the DWARF
 format as follows: in the 32-bit DWARF format, entries are 4-byte
 unsigned integer values; in the 64-bit DWARF format, they are
@@ -836,7 +861,6 @@ separate 32-bit format versions of system supplied shared
 executable libraries can still be used.}
 
 
-
 \section{Format of Debugging Information}
 \label{datarep:formatofdebugginginformation}
 
@@ -856,7 +880,7 @@ contribution may also be made to the
 section of the object file. Each
 such contribution consists of a 
 \addtoindex{type unit} header 
-(see Section \refersec{datarep:typeunitheader}) 
+(see Section \refersec{datarep:typeunitheaders}) 
 followed by a \DWTAGtypeunit{} entry, together with
 its children.
 
@@ -899,12 +923,27 @@ enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 \endlastfoot
 \DWUTcompileTARG~\ddag    &0x01 \\ 
 \DWUTtypeTARG~\ddag       &0x02 \\ 
-\DWUTpartialTARG~\ddag    &0x03 \\ \hline
+\DWUTpartialTARG~\ddag    &0x03 \\ 
+\bb
+\DWUTskeletonTARG~\ddag       &0x04 \\
+\DWUTsplitcompileTARG~\ddag   &0x05 \\
+\DWUTsplittypeTARG~\ddag      &0x06 \\
+\DWUTlouserTARG~\ddag         &0x80 \\
+\DWUThiuserTARG~\ddag         &\xff 
+\eb
+\\
+\hline
 \end{longtable}
 \end{centering}
 
+\bb
+\textit{All unit headers in a compilation have the same size. 
+Some header types include padding bytes to achieve this.}
+\eb
+
+
 \needlines{5}
-\subsubsection{Compilation Unit Header}
+\subsubsection{Compilation and Partial Unit Headers}
 \label{datarep:compilationunitheader}
 \begin{enumerate}[1. ]
 
@@ -924,23 +963,35 @@ integer that gives the actual length
 
 \item  \texttt{version} (\HFTuhalf) \\
 \addttindexx{version}
+\addtoindexx{version number!compilation unit}
 A 2-byte unsigned integer representing the version of the
-DWARF information for the compilation unit \addtoindexx{version number!compilation unit} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+DWARF information for the compilation unit.
 The value in this field is \versiondotdebuginfo.
 
+\textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
+for a summary of all version numbers that apply to DWARF sections.}
+
 \needlines{4}
 \item \texttt{unit\_type} (\HFTubyte) \\
 \addttindexx{unit\_type}
 A 1-byte unsigned integer identifying this unit as a compilation unit.
 The value of this field is 
-\DWUTcompile{} for a {normal compilation} unit or
-\DWUTpartial{} for a {partial compilation} unit
-(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+\DWUTcompile{} for a full compilation unit or
+\DWUTpartial{} for a partial compilation unit
+(see Section \refersec{chap:fullandpartialcompilationunitentries}).
 
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
+\item \texttt{address\_size} (\HFTubyte) \\
+\addttindexx{address\_size}
+A 1-byte unsigned integer representing the size in bytes of
+an address on the target architecture. If the system uses
+\addtoindexx{address space!segmented}
+segmented addressing, this value represents the size of the
+offset portion of an address.
+
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -952,6 +1003,61 @@ the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\bb
+\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.
+\eb
+\end{enumerate}
+
+\needlines{8}
+\bb
+\subsubsection{Skeleton and Split Compilation Unit Headers}
+\label{datarep:skeletonandfullcompilationunitheaders}
+\begin{enumerate}[1. ]
+
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+\addttindexx{unit\_length}
+A 4-byte or 12-byte 
+\addtoindexx{initial length}
+unsigned integer representing the length
+of the \dotdebuginfo{}
+contribution for that compilation unit,
+not including the length field itself. In the \thirtytwobitdwarfformat,
+this is a 4-byte unsigned integer (which must be less
+than \xfffffffzero); in the \sixtyfourbitdwarfformat, this consists
+of the 4-byte value \wffffffff followed by an 8-byte unsigned
+integer that gives the actual length 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  \texttt{version} (\HFTuhalf) \\
+\addttindexx{version}
+\addtoindexx{version number!compilation unit}
+A 2-byte unsigned integer representing the version of the
+DWARF information for the compilation unit.
+The value in this field is \versiondotdebuginfo.
+
+\textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
+for a summary of all version numbers that apply to DWARF sections.}
+
+\needlines{4}
+\item \texttt{unit\_type} (\HFTubyte) \\
+\addttindexx{unit\_type}
+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
+(see Section \refersec{chap:skeletoncompilationunitentries}).
+
+\textit{This field is new in \DWARFVersionV.}
+
+\needlines{4}
 \item \texttt{address\_size} (\HFTubyte) \\
 \addttindexx{address\_size}
 A 1-byte unsigned integer representing the size in bytes of
@@ -960,18 +1066,43 @@ an address on the target architecture. If the system uses
 segmented addressing, this value represents the size of the
 offset portion of an address.
 
-\end{enumerate}
+\item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
+A 
+\addtoindexx{section offset!in .debug\_info header}
+4-byte or 8-byte unsigned offset into the 
+\dotdebugabbrev{}
+section. This offset associates the compilation unit with a
+particular set of debugging information entry abbreviations. In
+the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
+in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\needlines{6}
+\item \HFNdwoid{} (unit ID) \\
+An 8-byte implementation-defined integer constant value, 
+known as the compilation unit ID, that provides 
+unique identification of a skeleton compilation 
+unit and its associated split compilation unit in 
+the object file named in the \DWATdwoname{} attribute
+of the skeleton compilation.
 
-\subsubsection{Type Unit Header}
-\label{datarep:typeunitheader}
+\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.
+\eb
+\end{enumerate}
 
+\needlines{8}
+\subsubsection{Type Unit Headers}
+\label{datarep:typeunitheaders}
 The header for the series of debugging information entries
 contributing to the description of a type that has been
 placed in its own \addtoindex{type unit}, within the 
 \dotdebuginfo{} section,
 consists of the following information:
 \begin{enumerate}[1. ]
-
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
 A 4-byte or 12-byte unsigned integer 
@@ -988,21 +1119,39 @@ consists of the 4-byte value \wffffffff followed by an
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
 \addttindexx{version}
+\addtoindexx{version number!type unit}
 A 2-byte unsigned integer representing the version of the
-DWARF information for the 
-type unit\addtoindexx{version number!type unit} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+DWARF information for the type unit.
 The value in this field is \versiondotdebuginfo.
 
 \item \texttt{unit\_type} (\HFTubyte) \\
 \addttindexx{unit\_type}
 A 1-byte unsigned integer identifying this unit as a type unit.
-The value of this field is \DWUTtype{} for a type unit
-(see Section \refersec{chap:typeunitentries}).
+The value of this field is \DWUTtype{} for a 
+\bb
+non-split
+\eb
+type unit
+(see Section \refersec{chap:typeunitentries})
+\bb
+or \DWUTsplittype{} for a split type unit.
+\eb
 
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
+\item \texttt{address\_size} (\HFTubyte) \\
+\addttindexx{address\_size}
+A 1-byte unsigned integer representing the size 
+\addtoindexx{size of an address}
+in bytes of
+an address on the target architecture. If the system uses
+\addtoindexx{address space!segmented}
+segmented addressing, this value represents the size of the
+offset portion of an address.
+
+\needlines{6}
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -1014,21 +1163,10 @@ the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
-\needlines{4}
-\item \texttt{address\_size} (\HFTubyte) \\
-\addttindexx{address\_size}
-A 1-byte unsigned integer representing the size 
-\addtoindexx{size of an address}
-in bytes of
-an address on the target architecture. If the system uses
-\addtoindexx{address space!segmented}
-segmented addressing, this value represents the size of the
-offset portion of an address.
-
 \item \texttt{type\_signature} (8-byte unsigned integer) \\
 \addttindexx{type\_signature}
 \addtoindexx{type signature}
-A unique 64-bit signature (see Section 
+A unique 8-byte signature (see Section 
 \refersec{datarep:typesignaturecomputation})
 of the type described in this type
 unit.  
@@ -1038,6 +1176,7 @@ unit.
 the primary type contained in this 
 \addtoindex{type unit} uses this value.}
 
+\needlines{8}
 \item \texttt{type\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 \addttindexx{type\_offset}
 A 4-byte or 8-byte unsigned offset 
@@ -1096,8 +1235,9 @@ code 0 is reserved for null debugging information entries. The
 abbreviation code is followed by another unsigned LEB128\addtoindexx{LEB128!unsigned}
 number that encodes the entry\textquoteright s tag. The encodings for the
 tag names are given in 
-Table \referfol{tab:tagencodings}.
+Table \refersec{tab:tagencodings}.
 
+\needlines{6}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
@@ -1165,6 +1305,11 @@ Table \referfol{tab:tagencodings}.
 \DWTAGunspecifiedtype&0x3b      \\
 \DWTAGpartialunit&0x3c      \\
 \DWTAGimportedunit&0x3d      \\
+\bb
+\textit{Reserved}&0x3e\footnote{Code 0x3e is reserved to allow backward compatible support of the
+DW\_TAG\_mutable\_type DIE that was defined (only) in \DWARFVersionIII.}
+\eb
+\\
 \DWTAGcondition&\xiiif      \\
 \DWTAGsharedtype&0x40      \\
 \DWTAGtypeunit & 0x41      \\
@@ -1176,11 +1321,16 @@ Table \referfol{tab:tagencodings}.
 \DWTAGatomictype~\ddag & 0x47 \\
 \DWTAGcallsite~\ddag & 0x48 \\
 \DWTAGcallsiteparameter~\ddag & 0x49 \\
+\bb
+\DWTAGskeletonunit~\ddag & 0x4a
+\eb
+\\
 \DWTAGlouser&0x4080      \\
 \DWTAGhiuser&\xffff      \\
 \end{longtable}
 \end{centering}
 
+\needlines{8}
 Following the tag encoding is a 1-byte value that determines
 whether a debugging information entry using this abbreviation
 has child entries or not. If the value is 
@@ -1231,6 +1381,7 @@ number representing the attribute\textquoteright s form.
 The series of attribute specifications ends with an
 entry containing 0 for the name and 0 for the form.
 
+\needlines{4}
 The attribute form 
 \DWFORMindirectTARG{} is a special case. For
 attributes with this form, the attribute value itself in the
@@ -1291,8 +1442,8 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classreference}{reference}
             \addtoindexx{byte size attribute} \\
 \textit{Reserved}&0x0c\footnote{Code 0x0c is reserved to allow backward compatible support of the 
-                                       DW\_AT\_bit\_offset \mbox{attribute} which was 
-                                       defined in \DWARFVersionIII{} and earlier.}
+             DW\_AT\_bit\_offset \mbox{attribute} which was 
+             defined in \DWARFVersionIII{} and earlier.}
        &\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference}
@@ -1403,10 +1554,10 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{friend attribute}  \\
 \DWATidentifiercase&0x42&\livelink{chap:classconstant}{constant} 
             \addtoindexx{identifier case attribute}  \\
-\DWATmacroinfo\footnote{\raggedright Not used in \DWARFVersionV. 
-                        Reserved for compatibility and coexistence
-                        with prior DWARF versions.}
-            &0x43&\livelink{chap:classmacptr}{macptr} 
+\textit{Reserved}&0x43\footnote{Code 0x43 is reserved to allow backward compatible support of the 
+             DW\_AT\_macro\_info \mbox{attribute} which was 
+             defined in \DWARFVersionIV{} and earlier.}
+            &\livelink{chap:classmacptr}{macptr} 
             \addtoindexx{macro information attribute (legacy)!encoding}  \\
 \DWATnamelistitem&0x44&\livelink{chap:classreference}{reference} 
             \addtoindexx{name list item attribute}  \\
@@ -1527,9 +1678,10 @@ Table \referfol{tab:attributeencodings}.
 \DWATrangesbase~\ddag&0x74&
                \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}
             \addtoindexx{ranges base!encoding} \\
-\DWATdwoid~\ddag &0x75&
-               \livelink{chap:classconstant}{constant}
-            \addtoindexx{split DWARF object file id!encoding} \\
+\bb
+\textit{Reserved} &0x75& \textit{Unused}
+\eb
+\\
 \DWATdwoname~\ddag &0x76&
                \livelink{chap:classstring}{string}
             \addtoindexx{split DWARF object file name!encoding} \\
@@ -1537,7 +1689,7 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classflag}{flag} \\
 \DWATrvaluereference~\ddag &0x78&
         \livelink{chap:classflag}{flag} \\
-\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr} 
+\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr}
         \addtoindexx{macro information attribute}  \\
 \DWATcallallcalls~\ddag &0x7a&\CLASSflag
         \addtoindexx{all calls summary attribute} \\
@@ -1700,10 +1852,10 @@ constant data forms for one-, two-, four-, eight- and sixteen-byte values
 \DWFORMdatafourTARG,
 \DWFORMdataeightTARG{} and
 \DWFORMdatasixteenTARG). 
-There are also variable length constant
-data forms encoded using LEB128 numbers (see below). 
-Both signed (\DWFORMsdataTARG) and unsigned 
-(\DWFORMudataTARG) variable length constants are available.
+There are variable length constant
+data forms encoded using 
+signed LEB128 numbers (\DWFORMsdataTARG) and unsigned 
+LEB128 numbers (\DWFORMudataTARG).
 There is also an implicit constant (\DWFORMimplicitconst),
 whose value is provided as part of the abbreviation
 declaration.
@@ -1751,11 +1903,12 @@ is represented explicitly as a single byte of data
 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\dash zero value,
+absence of the attribute; if the \nolink{flag} has a non-zero value,
 it indicates the presence of the attribute. In the second
 case, the attribute is implicitly indicated as present, and
 no value is encoded in the debugging information entry itself.
 
+\needlines{4}
 \item \livelinki{chap:classlineptr}{lineptr}{lineptr class} \\
 \livetarg{datarep:classlineptr}{}
 This is an offset into 
@@ -1822,7 +1975,7 @@ offset into the \dotdebugranges{} section
 It consists of an
 offset from the beginning of the 
 \dotdebugranges{} section
-to the beginning of the non\dash contiguous address ranges
+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
@@ -1845,7 +1998,7 @@ format, it is an 8-byte unsigned value (see Section
 share a common representation, it is not possible for an
 attribute to allow more than one of these classes}
 
-
+\needlines{4}
 \begin{itemize}
 \item \livelinki{chap:classreference}{reference}{reference class} \\
 \livetarg{datarep:classreference}{}
@@ -1915,7 +2068,7 @@ information type entry that has been placed in its own
 \addtoindex{type unit}. This type of 
 reference (\DWFORMrefsigeightTARG) is the
 \addtoindexx{type signature}
-64-bit type signature 
+8-byte type signature 
 (see Section \refersec{datarep:typesignaturecomputation}) 
 that was computed for the type. 
 
@@ -2085,8 +2238,8 @@ Table \referfol{tab:attributeformencodings}.
 \label{datarep:variablelengthdata}
 \addtoindexx{variable length data|see {LEB128}}
 Integers may be 
-\addtoindexx{Little Endian Base 128|see{LEB128}}
-encoded using \doublequote{Little Endian Base 128}
+\addtoindexx{Little-Endian Base 128|see{LEB128}}
+encoded using \doublequote{Little-Endian Base 128}
 \addtoindexx{little-endian encoding|see{endian attribute}}
 (LEB128) numbers. 
 \addtoindexx{LEB128}
@@ -2095,8 +2248,8 @@ densely that exploits the assumption that most integers are
 small in magnitude.
 
 \textit{This encoding is equally suitable whether the target machine
-architecture represents data in big\dash\ endian or little\dash endian
-\byteorder. It is \doublequote{little\dash endian} only in the sense that it
+architecture represents data in big-endian or little-endian
+\byteorder. It is \doublequote{little-endian} only in the sense that it
 avoids using space to represent the \doublequote{big} end of an
 unsigned integer, when the big end is all zeroes or sign
 extension bits.}
@@ -2366,7 +2519,7 @@ 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:normalandpartialcompilationunitentries}).
+(see Section \refersec{chap:fullandpartialcompilationunitentries}).
 
 \subsubsection{Location List Entries in Split Objects}
 \label{datarep:locationlistentriesinsplitobjects}
@@ -2399,9 +2552,8 @@ Table \refersec{tab:locationlistentryencodingvalues}.
 \section{Base Type Attribute Encodings}
 \label{datarep:basetypeattributeencodings}
 
-The encodings of the 
-\hypertarget{chap:DWATencodingencodingofbasetype}{}
-constants used in the 
+The\hypertarget{chap:DWATencodingencodingofbasetype}{}
+encodings of the constants used in the 
 \DWATencodingDEFN{} attribute\addtoindexx{encoding attribute} 
 are given in 
 Table \refersec{tab:basetypeencodingvalues}
@@ -2442,7 +2594,7 @@ Table \refersec{tab:basetypeencodingvalues}
 \end{longtable}
 \end{centering}
 
-\needlines{4}
+\vspace*{1cm}
 The encodings of the constants used in the 
 \DWATdecimalsign{} attribute 
 are given in 
@@ -2456,17 +2608,15 @@ Table \refersec{tab:decimalsignencodings}.
 \endfirsthead
   \bfseries Decimal sign code name&\bfseries Value\\ \hline
 \endhead
-  \hline \emph{Continued on next page}
-\endfoot
+%  \hline \emph{Continued on next page}
+%\endfoot
   \hline
 \endlastfoot
-
-\DWDSunsigned{} & 0x01  \\
-\DWDSleadingoverpunch{} & 0x02  \\
+\DWDSunsigned{}          & 0x01  \\
+\DWDSleadingoverpunch{}  & 0x02  \\
 \DWDStrailingoverpunch{} & 0x03  \\
-\DWDSleadingseparate{} & 0x04  \\
-\DWDStrailingseparate{} & 0x05  \\
-
+\DWDSleadingseparate{}   & 0x04  \\
+\DWDStrailingseparate{}  & 0x05 \\ 
 \end{longtable}
 \end{centering}
 
@@ -2629,7 +2779,7 @@ defined language.
 \DWLANGCeightynine &0x0001 &0 \addtoindexx{C:1989 (ISO)}      \\
 \DWLANGC{} &0x0002 &0  \addtoindexx{C!non-standard} \\
 \DWLANGAdaeightythree{} \dag &0x0003 &1  \addtoindexx{Ada:1983 (ISO)}     \\
-\DWLANGCplusplus{} &0x0004 &0 \addtoindexx{C++:1998 (ISO)}      \\
+\DWLANGCplusplus{} &0x0004 &0 \addtoindexx{C++98 (ISO)} \\
 \DWLANGCobolseventyfour{} \dag &0x0005 &1 \addtoindexx{COBOL:1974 (ISO)}      \\
 \DWLANGCoboleightyfive{} \dag &0x0006 &1 \addtoindexx{COBOL:1985 (ISO)}      \\
 \DWLANGFortranseventyseven &0x0007 &1 \addtoindexx{FORTRAN:1977 (ISO)}      \\
@@ -2650,17 +2800,21 @@ defined language.
 \DWLANGGo{} \dag \ddag &0x0016 &0 \addtoindexx{Go}\\
 \DWLANGModulathree{} \dag \ddag &0x0017 &1 \addtoindexx{Modula-3}\\
 \DWLANGHaskell{} \dag \ddag &0x0018 &0 \addtoindexx{Haskell}\\
-\DWLANGCpluspluszerothree{} \ddag &0x0019 &0 \addtoindexx{C++:2003 (ISO)}\\
-\DWLANGCpluspluseleven{} \ddag &0x001a &0 \addtoindexx{C++:2011 (ISO)}\\
+\DWLANGCpluspluszerothree{} \ddag &0x0019 &0 \addtoindexx{C++03 (ISO)}\\
+\DWLANGCpluspluseleven{} \ddag &0x001a &0 \addtoindexx{C++11 (ISO)} \\
 \DWLANGOCaml{} \ddag &0x001b &0        \addtoindexx{OCaml}\\
 \DWLANGRust{} \ddag &0x001c &0 \addtoindexx{Rust}\\
 \DWLANGCeleven{} \ddag &0x001d &0 \addtoindexx{C:2011 (ISO)}\\
 \DWLANGSwift{} \ddag &0x001e &0 \addtoindexx{Swift} \\
 \DWLANGJulia{} \ddag &0x001f &1 \addtoindexx{Julia} \\
 \DWLANGDylan{} \ddag &0x0020 &0 \addtoindexx{Dylan} \\
-\DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++:2014 (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)} \\
+\bb
+\DWLANGRenderScript{}~\ddag       &0x0024 &0 \addtoindexx{RenderScript Kernel Language}
+\eb
+\\
 \DWLANGlouser{} &0x8000 & \\
 \DWLANGhiuser{} &\xffff & \\
 
@@ -2829,59 +2983,8 @@ Table \refersec{tab:discriminantdescriptorencodings}.
 \needlines{6}
 \section{Name Index Table}
 \label{datarep:nameindextable}
-Each name index table in the \dotdebugnames{} section 
-begins with a header consisting of:
-\begin{enumerate}[1. ]
-\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
-\addttindexx{unit\_length}
-A 4-byte or 12-byte initial length field that 
-contains the size in bytes of this contribution to the \dotdebugnames{} 
-section, not including the length field itself
-(see Section \refersec{datarep:initiallengthvalues}).
-
-\item \texttt{version} (\HFTuhalf) \\
-A 2-byte version number\addtoindexx{version number!name index table} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
-This number is specific to the name index table and is
-independent of the DWARF version number.
-
-The value in this field is \versiondotdebugnames.
-
-\item padding (\HFTuhalf) \\
-
-\item \texttt{comp\_unit\_count} (\HFTuword) \\
-The number of CUs in the CU list.
-
-\item \texttt{local\_type\_unit\_count} (\HFTuword) \\
-The number of TUs in the first TU list.
-
-\item \texttt{foreign\_type\_unit\_count} (\HFTuword) \\
-The number of TUs in the second TU list.
-
-\item \texttt{bucket\_count} (\HFTuword) \\
-The number of hash buckets in the hash lookup table. 
-If there is no hash lookup table, this field contains 0.
-
-\item \texttt{name\_count} (\HFTuword) \\
-The number of unique names in the index.
-
-\item \texttt{abbrev\_table\_size} (\HFTuword) \\
-The size in bytes of the abbreviations table.
-
-\item \texttt{augmentation\_string\_size} (\HFTuword) \\
-The size in bytes of the augmentation string. This value is 
-rounded up to a multiple of 4.
-
-\item \texttt{augmentation\_string} (\HFTaugstring) \\
-A vendor-specific augmentation string, which provides additional 
-information about the contents of this index. If provided, the string
-begins with a 4-character vendor ID. The remainder of the
-string is meant to be read by a cooperating consumer, and its
-contents and interpretation are not specified here. The
-string is padded with null characters to a multiple of
-four bytes in length.
-
-\end{enumerate}
+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}.
 
@@ -2963,8 +3066,7 @@ the actual length
 
 \item version (\HFTuhalf) \\
 A 2-byte version identifier representing the version of the
-DWARF information for the address range table
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+DWARF information for the address range table.
 
 This value in this field \addtoindexx{version number!address range table} is 2. 
  
@@ -3015,8 +3117,7 @@ the terminating tuple.
 \label{datarep:linenumberinformation}
 
 The \addtoindexi{version number}{version number!line number information}
-in the line number program header is \versiondotdebugline{}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+in the line number program header is \versiondotdebugline{}.
 
 The boolean values \doublequote{true} and \doublequote{false} 
 used by the line number information program are encoded
@@ -3118,8 +3219,7 @@ Table \refersec{tab:linenumberheaderentryformatencodings}.
 \section{Macro Information}
 \label{datarep:macroinformation}
 The \addtoindexi{version number}{version number!macro information}
-in the macro information header is \versiondotdebugmacro{}
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+in the macro information header is \versiondotdebugmacro{}.
 
 The source line numbers and source file indices encoded in the
 macro information section are represented as 
@@ -3173,7 +3273,7 @@ CIE header is \xffffffff; in the \sixtyfourbitdwarfformat, the
 value is \xffffffffffffffff.
 
 The value of the CIE \addtoindexi{version number}{version number!call frame information}
-is 4 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+is \versiondotdebugframe.
 
 Call frame instructions are encoded in one or more bytes. The
 primary opcode is encoded in the high order two bits of
@@ -3255,7 +3355,7 @@ addresses are the same size as addresses on the target machine.
 For a \addtoindex{range list} to be specified, the base address of the
 \addtoindexx{base address selection entry!in range list}
 corresponding compilation unit must be defined 
-(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+(see Section \refersec{chap:fullandpartialcompilationunitentries}).
 
 \needlines{6}
 \section{String Offsets Table}
@@ -3278,11 +3378,12 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 %\needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!string offsets table}
 A 2-byte version identifier containing the value
-\versiondotdebugstroffsets{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugstroffsets{}.
 
-\item \texttt{padding} (\HFTuhalf) \\
+\item \textit{padding} (\HFTuhalf) \\
+Reserved to DWARF (must be zero).
 \end{enumerate}
 
 This header is followed by a series of string table offsets
@@ -3313,9 +3414,9 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!address table}
 A 2-byte version identifier containing the value
-\versiondotdebugaddr{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugaddr{}.
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3360,9 +3461,9 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
-\versiondotdebugranges{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugranges{}. 
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3409,9 +3510,9 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 
 \needlines{4}
 \item  \texttt{version} (\HFTuhalf) \\
+\addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
-\versiondotdebugloc{} 
-(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\versiondotdebugloc{}.
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3533,13 +3634,16 @@ are contained in \addtoindex{type unit}s (see Section
 
 \textit{A type signature is computed only by a DWARF producer;
 \addtoindexx{type signature!computation} a consumer need
+\bb
+only
+\eb
 compare two type signatures to check for equality.}
 
 \needlines{4}
 The type signature for a type T0 is formed from the 
 \MDfive{}\footnote{\livetarg{def:MDfive}{MD5} Message Digest Algorithm, 
 R.L. Rivest, RFC 1321, April 1992}
-hash of a flattened description of the type. The flattened
+digest of a flattened description of the type. The flattened
 description of the type is a byte sequence derived from the
 DWARF encoding of the type as follows:
 \begin{enumerate}[1. ]
@@ -3647,11 +3751,24 @@ the type are also included at the end of the above list,
 in their own alphabetical suborder.
 
 An attribute that refers to another type entry T is processed
-as follows: (a) If T is in the list V at some V[x], use the
+as follows: 
+\begin{enumerate}[ a)]
+\item
+\bb
+If 
+\eb
+T is in the list V at some V[x], use the
 letter 'R' as the marker and use the unsigned LEB128\addtoindexx{LEB128!unsigned}
-encoding of x as the attribute value; otherwise, (b) use the letter 'T'
+encoding of x as the attribute value.
+
+\item
+\bb
+Otherwise, append type T to the list V, then
+\eb
+use the letter 'T'
 as the marker, process the type T recursively by performing
 Steps 2 through 7, and use the result as the attribute value.
+\end{enumerate}
 
 \needlines{4}
 Other attribute values use the letter 'A' as the marker, and
@@ -3666,7 +3783,6 @@ to the following:
 \DWFORMexprloc,
 and \DWFORMblock.
 
-\needlines{4}
 \item If the tag in Step 3 is one of \DWTAGpointertype,
 \DWTAGreferencetype, 
 \DWTAGrvaluereferencetype,
@@ -3683,7 +3799,7 @@ entry is a \DWTAGsubprogram, the context is omitted and the
 name to be used is the ABI-specific name of the subprogram
 (for example, the mangled linker name).
 
-
+\needlines{6}
 \item If the tag in Step 3 is not one of \DWTAGpointertype,
 \DWTAGreferencetype, 
 \DWTAGrvaluereferencetype,
@@ -3758,8 +3874,8 @@ example, a constant value should be preferred to a location
 expression when possible.)
 
 Once the string S has been formed from the DWARF encoding,
-an \MDfive{} hash is computed for the string and the 
-least significant 64 bits are taken as the type signature.
+an 16-byte \MDfive{} digest is computed for the string and the 
+last eight bytes are taken as the type signature.
 
 \textit{The string S is intended to be a flattened representation of
 the type that uniquely identifies that type (that is, a different
@@ -3773,7 +3889,8 @@ if any of the following apply:}
 \begin{itemize}
 
 \item \textit{The entry has an attribute whose value is a location
-expression, and the location expression contains a reference to
+description, and the location description 
+contains a reference to
 another debugging information entry (for example, a \DWOPcallref{}
 operator), as it is unlikely that the entry will remain
 identical across compilation units.}
@@ -3807,7 +3924,7 @@ declaration of the type.}
 \DWATdeclcolumn{} attributes are not included because they
 may vary from one source file to the next, and would prevent
 two otherwise identical type declarations from producing the
-same \MDfive{} hash.}
+same \MDfive{} digest.}
 
 \item \textit{The \DWATobjectpointer{} attribute is not included 
 because the information it provides is not necessary for the 
@@ -3820,17 +3937,18 @@ information entry are encoded by name rather than by recursively
 encoding the type to allow for cases where a complete definition 
 of the type might not be available in all compilation units.}
 
-\needlines{4}
+%\needlines{4}
 \textit{If a type definition contains the definition of a member function, 
 it cannot be moved as is into a type unit, because the member function 
 contains attributes that are unique to that compilation unit. 
-Such a type definition can be moved to a type unit by rewriting the DIE tree, 
+Such a type definition can be moved to a type unit by rewriting the 
+debugging information entry tree, 
 moving the member function declaration into a separate declaration tree, 
 and replacing the function definition in the type with a non-defining 
 declaration of the function (as if the function had been defined out of 
 line).}
 
-An example that illustrates the computation of an \MDfive{} hash may be found in 
+An example that illustrates the computation of an \MDfive{} digest may be found in 
 Appendix \refersec{app:usingtypeunits}.
 
 \section{Name Table Hash Function}
@@ -3838,20 +3956,21 @@ Appendix \refersec{app:usingtypeunits}.
 The hash function used for hashing name strings in the accelerated 
 access name index table (see Section \refersec{chap:acceleratedaccess})
 is defined in \addtoindex{C} as shown in 
-Figure \referfol{fig:nametablehashfunctiondefinition}.\footnote{
-This hash function is sometimes informally known as the 
-"\addtoindex{DJB hash function}" or the "\addtoindex{Berstein hash function}"
+Figure \referfol{fig:nametablehashfunctiondefinition}.\footnoteRR{
+This hash function is sometimes known as the 
+"\addtoindex{Bernstein hash function}" or the
+"\addtoindex{DJB hash function}"  
 (see, for example, 
 \hrefself{http://en.wikipedia.org/wiki/List\_of\_hash\_functions} or
 \hrefself{http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function)}.} 
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{lstlisting}
 
-unsigned long \* must be a 32-bit integer type *\
+uint32_t /* must be a 32-bit integer type */
     hash(unsigned char *str)
     {
-        unsigned long hash = 5381;
+        uint32_t hash = 5381;
         int c;
 
         while (c = *str++)