Backup of today's work. Still awaiting a couple more editorial inputs.
[dwarf-doc.git] / dwarf5 / latexdoc / splitobjects.tex
index 6141e26..ecba136 100644 (file)
@@ -41,30 +41,26 @@ usual, and are linked into the final executable. The sections
 that do not require relocation, however, can be written to the
 relocatable object (.o) file but ignored by the linker, or they
 can be written to a separate DWARF object (.dwo{}) 
-\addtoindexx{\texttt{.dwo} file extension} file.
+\addtoindexx{\texttt{.dwo} file extension} file
+that need not be accessed by the linker.
 
 \needlines{4}
 The optional set of debugging sections includes the following:
 \begin{itemize}
-\bb
 \item
 \dotdebugabbrevdwo{} - Contains the abbreviations table(s) used by
 the \dotdebuginfodwo{} section.
-\eb
 \item
 \dotdebuginfodwo{} - Contains the \DWTAGcompileunit{} and
 \DWTAGtypeunit{} DIEs and
 their descendants. This is the bulk of the debugging
 information for the compilation unit that is normally found
 in the \dotdebuginfo{} section.
-\bbeb
 \item
-\dotdebuglocdwo{} - Contains the location lists referenced by
+\dotdebugloclistsdwo{} - Contains the location lists referenced by
 the debugging information entries in the \dotdebuginfodwo{}
 section. This contains the location lists normally found in 
-the \dotdebugloc{} section, with a 
-\bbeb 
-modified format to eliminate the need for relocations.
+the \dotdebugloclists{} section.
 \item
 \dotdebugstrdwo{} - Contains the string table for all indirect
 strings referenced by the debugging information in the
@@ -91,20 +87,19 @@ section for directories and file names because the primary
 string table will never be stripped. Accordingly, no
 \texttt{.debug\_line\_str.dwo} section is defined. Content descriptions 
 corresponding to \DWFORMlinestrp{} in an executable file (for example, 
-in the skeleton compilation unit) instead use \DWFORMstrx. This allows
-directory and file name strings to be merged with general
-strings and across compilations in package files 
+in the skeleton compilation unit) instead use 
 \bb
-(where they
+one of the forms
 \eb
-are not subject to potential stripping).
+\DWFORMstrxXNor. This allows
+directory and file name strings to be merged with general
+strings and across compilations in package files 
+(where they are not subject to potential stripping).
 
 In a \texttt{.dwo} file, referring to a string using \DWFORMstrp{}
 is valid, but such use 
-\bb
 results in a file that cannot be incorporated into a package file
 (which involves string merging).
-\eb
 
 In order for the consumer to locate and process the debug
 information, the compiler must produce a small amount of debug
@@ -113,8 +108,7 @@ binary. A skeleton \dotdebuginfo{} section for each compilation unit
 contains a reference to the corresponding \texttt{.o} or \texttt{.dwo}
 file, and the \dotdebugline{} section (which is typically small
 compared to the \dotdebuginfo{} sections) is
-linked into the output binary, as is the new \dotdebugaddr{}
-section.
+linked into the output binary, as is the \dotdebugaddr{} section.
 
 \needlines{6}
 The debug sections that continue to be linked into the
@@ -124,88 +118,81 @@ output binary include the following:
 \dotdebugabbrev{} - Contains the abbreviation codes used by the
 skeleton \dotdebuginfo{} section.
 \item
-\dotdebuginfo{} - Contains a skeleton \DWTAGcompileunit{} DIE,
-but no children.
-\item
-\dotdebugstr{} - Contains any strings referenced by the skeleton
-\dotdebuginfo{} sections (via \DWFORMstrp{} or \DWFORMstrx{}).
-\item
-\dotdebugstroffsets{} - Contains the string offsets table for
-the strings in the \dotdebugstr{} section (if \DWFORMstrx is used).
-\item
 \dotdebugaddr{} - Contains references to loadable sections,
-indexed by attributes of form \DWFORMaddrx{} or location
+indexed by attributes of 
 \bb
-expression 
+one of the forms 
 \eb
-\DWOPaddrx{} opcodes.
+\DWFORMaddrxXN{}, 
+or location expression \DWOPaddrx{} opcodes.
+\item
+\dotdebugaranges{} - Contains the accelerated range lookup table
+for the compilation unit.
+\item
+\dotdebugframe{} - Contains the frame tables.
+\item
+\dotdebuginfo{} - Contains a skeleton 
+skeleton compilation unit DIE, which has no children.
 \item
-\dotdebugline{} - Contains the line number tables, unaffected by
-this design. (These could be moved to the .dwo file, but in
+\dotdebugline{} - Contains the line number tables.
+(These could be moved to the .dwo file, but in
 order to do so, each \DWLNEsetaddress{} opcode would need to
 be replaced by a new opcode that referenced an entry in the
 \dotdebugaddr{} section. Furthermore, leaving this section in the
 .o file allows many debug info consumers to remain unaware of
 .dwo files.)
-\bb
 \item
 \dotdebuglinestr{} - Contains strings for file names used in
 combination with the \dotdebugline{} section.
-\eb
-\item
-\dotdebugframe{} - Contains the frame tables, unaffected by this
-design.
-\item
-\dotdebugranges{} - Contains the range lists, unaffected by this
-design.
 \item
 \dotdebugnames{} - Contains the names for use in
 building an index section. 
-\bbeb
 The section header refers to a
 compilation unit offset, which is the offset of the
 skeleton compilation unit in the \dotdebuginfo{} section.
+
 \item
-\dotdebugaranges{} - Contains the accelerated range lookup table
-for the compilation unit, unaffected by this design.
+\dotdebugstr{} - Contains any strings referenced by the skeleton
+\dotdebuginfo{} sections (via \DWFORMstrp{}, \DWFORMstrxXNor{}).
+\item
+\dotdebugstroffsets{} - Contains the string offsets table for
+the strings in the \dotdebugstr{} section (if 
+\bb
+one of the forms
+\eb
+\DWFORMstrxXNor{} is used).
 \end{itemize}
 
 \needlines{6}
-The skeleton \DWTAGcompileunit{} DIE 
-\bb
-may have 
-\eb
-the following attributes:
+The skeleton compilation unit DIE may have the following attributes:
+\par
+\begin{nolinenumbersenv}
 \autocols[0pt]{c}{3}{l}{
 \DWATaddrbase{},
 \DWATcompdir{},
 \DWATdwoname{},
-\DWATdwoid{},
+%\DWATdwoid{},
 \DWAThighpc{},
 \DWATlowpc{},
 \DWATranges{},
-\DWATrangesbase{},
 \DWATstmtlist{},
 \DWATstroffsetsbase{}
 }
-
-\bbpareb
+\end{nolinenumbersenv}
 
 All other attributes of the compilation unit DIE are moved to
 the full DIE in the \dotdebuginfodwo{} section.
-The \DWATdwoid{} attribute is present
-in both the skeleton DIE and the full DIE, so that a consumer
+
+The \HFNdwoid{} field is present in headers of the skeleton DIE 
+and the header of the full DIE, so that a consumer
 can verify a match.
 
 \needlines{4}
-
 Relocations are neither necessary nor useful in 
-\bb
 \texttt{.dwo} files, because the \texttt{.dwo}  
-\eb
 files contain only debugging information that does not need to be
-processed by a linker. Relocations are rendered unnecessary via
-four strategies:
+processed by a linker. Relocations are rendered unnecessary by 
+these strategies:
 
 \begin{enumerate}[1. ]
 \item Some values needing relocation are kept in the \texttt{.o} file
@@ -214,39 +201,32 @@ compilation unit).
 
 \item Some values do not need a relocation because they refer from
 one \dotdwo{} section to another \dotdwo{} section
-\bb
 in the same compilation unit. 
-\eb
 
-\item Some values that need a relocation to refer to a
-relocatable program address use the \DWFORMaddrx{} form,
-referencing a relocatable value in the \dotdebugaddr{} section (which
-remains in the \texttt{.o} file).
-
-\item Some values that need a relocation to refer to the
-\dotdebugranges{} section in the \texttt{.o} file use a relocatable base
-specified by the \DWATrangesbase{} attribute (which is placed in the
-skeleton compilation unit in the \texttt{.o} file).
+\item Some values that need a relocation to refer to a relocatable 
+program address use 
+\bb
+one of the \DWFORMaddrxXNor{} forms, 
+\eb
+referencing a relocatable 
+value in the \dotdebugaddr{} section (which remains in the .o file).
 
 \end{enumerate}
 
 
 Table \refersec{tab:unitattributesbyunitkind} summarizes which
 attributes are defined for use in the various 
-\bb
 kinds of compilation units (see Section \refersec{chap:unitentries}). 
 It compares and contrasts both conventional and split object-related
 kinds.
-\eb
-
 
-\begin{table}[h]
+\begin{table}[ht]
 \caption{Unit attributes by unit kind}
 \label{tab:unitattributesbyunitkind}
 \begin{tabular}{P{5.5cm}|cc|ccc}
 \hline
                         & \multicolumn{5}{c}{\bfseries Unit Kind} \\
-\bbeb                   & \multicolumn{2}{c}{\bfseries Conventional} 
+                        & \multicolumn{2}{c}{\bfseries Conventional} 
                                               & \multicolumn{3}{c}{\bfseries Skeleton and Split} \\
 \bfseries Attribute     & Full \&    &  Type  &  Skeleton & Split Full & Split Type \\
                         & Partial    &        &           &            &            \\
@@ -257,19 +237,22 @@ kinds.
 \hline
 \DWATcompdir            & \chkmk  &        &  \chkmk   &        &         \\
 \hline
-\DWATdwoid              &         &        &  \chkmk   & \chkmk &         \\
-\hline
+%\DWATdwoid             &         &        &  \chkmk   & \chkmk &         \\
+%\hline
 \DWATdwoname            &         &        &  \chkmk   &        &         \\
 \hline
 \DWATentrypc            & \chkmk  &        &           & \chkmk &         \\
 \hline
-\bbeb\DWAThighpc             & \chkmk  &        &  \chkmk   &        &         \\
+\DWAThighpc             & \chkmk  &        &  \chkmk   &        &         \\
 \hline
 \DWATidentifiercase     & \chkmk  &        &           & \chkmk &         \\
 \hline
 \DWATlanguage           & \chkmk  & \chkmk &           & \chkmk & \chkmk  \\
 \hline
-\bbeb\DWATlowpc              & \chkmk  &        &  \chkmk   &        &         \\
+\DWATloclistsbase       & \chkmk  &        &           &        &         
+\\
+\hline
+\DWATlowpc              & \chkmk  &        &  \chkmk   &        &         \\
 \hline
 \DWATmacros             & \chkmk  &        &           & \chkmk &         \\
 \hline
@@ -279,21 +262,19 @@ kinds.
 \hline
 \DWATproducer           & \chkmk  &        &           & \chkmk &         \\
 \hline
-\bbeb\DWATranges             & \chkmk  &        &  \chkmk   &        &         \\
+\DWATranges             & \chkmk  &        &           & \chkmk &         \\
 \hline
-\DWATrangesbase         & \chkmk  &        &  \chkmk   &        &         \\
+\DWATrnglistsbase       & \chkmk  &        &           &        &         \\
 \hline
 \DWATstmtlist           & \chkmk  & \chkmk &  \chkmk   &        & \chkmk  \\
 \hline
 \DWATstroffsetsbase     & \chkmk  & \chkmk &  \chkmk   &        &         \\
 \hline
-\bbeb\DWATuseUTFeight        & \chkmk  & \chkmk &  \chkmk   & \chkmk & \chkmk  \\
+\DWATuseUTFeight        & \chkmk  & \chkmk &  \chkmk   & \chkmk & \chkmk  \\
 \hline
 \end{tabular}
 \end{table}
 
-
-
 \needlines{8}
 The split dwarf object file design depends on having an index of 
 debugging information available to the consumer. For name lookups, 
@@ -321,10 +302,17 @@ When compiled with split DWARF, we will have two DWARF object files,
 \texttt{demo1.o} and \texttt{demo2.o}, and two \splitDWARFobjectfile{s}, 
 \texttt{demo1.dwo} and \texttt{demo2.dwo}.
 
+In this section, we will use this example to show how the
+connections between the relocatable object file and the split
+DWARF object file are maintained through the linking process. In
+the next section, we will use this same example to show how two
+or more split DWARF object files are combined into a DWARF
+package file.
+
 \vspace{2cm}
-\begin{figure}[h]
+\begin{figure}[ht]
 \textit{File demo1.cc}
-\begin{lstlisting}
+\begin{nlnlisting}
 #include "demo.h"
 
 bool Box::contains(const Point& p) const
@@ -332,14 +320,14 @@ bool Box::contains(const Point& p) const
     return (p.x() >= ll_.x() && p.x() <= ur_.x() &&
             p.y() >= ll_.y() && p.y() <= ur_.y());
 }
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Split object example: source fragment \#1}
 \label{fig:splitobjectexamplesourcefragment1}
 \end{figure}
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \textit{File demo2.cc}
-\begin{lstlisting}
+\begin{nlnlisting}
 #include "demo.h"
 
 bool Line::clip(const Box& b)
@@ -377,14 +365,14 @@ bool Line::clip(const Box& b)
                      b.t());
   }
 }
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Split object example: source fragment \#2}
 \label{fig:splitobjectexamplesourcefragment2}
 \end{figure}
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \textit{File demo.h}
-\begin{lstlisting}
+\begin{nlnlisting}
 class A {
   public:
     Point(float x, float y) : x_(x), y_(y){}
@@ -420,19 +408,18 @@ class Box {
     Point ur_;
 };
 
-\end{lstlisting}
+\end{nlnlisting}
 \caption{Split object example: source fragment \#3}
 \label{fig:splitobjectexamplesourcefragment3}
 \end{figure}
 
 \clearpage
-\subsection{Contents of the Object File}
+\subsection{Contents of the Object Files}
 The object files each contain the following sections of debug
 information:
 \begin{alltt}
   \dotdebugabbrev
   \dotdebuginfo
-  \dotdebugranges
   \dotdebugline
   \dotdebugstr
   \dotdebugaddr
@@ -448,23 +435,19 @@ contains just a single DIE, the skeleton compilation unit,
 which may look like 
 Figure \referfol{fig:splitdwafexampleskeletondwarfdescription}.
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{dwflisting}
 \begin{alltt}
 
-    \DWTAGcompileunit
-      \DWATcompdir: (reference to directory name in .debug_str)
-      \DWATdwoname: (reference to "demo1.dwo" in .debug_str)
-      \DWATdwoid: 0x44e413b8a2d1b8f
-      \DWATaddrbase: (reference to .debug_addr section)
-      \DWATrangesbase: (reference to range list in .debug_ranges section)
-      \DWATranges: (offset of range list in .debug_ranges section)
-      \DWATstmtlist: (reference to .debug_line section)
-      \DWATlowpc: 0
+    \DWTAGskeletonunit
+        \DWATcompdir: (reference to directory name in .debug_str)
+        \DWATdwoname: (reference to "demo1.dwo" in .debug_str)
+        \DWATaddrbase: (reference to .debug_addr section)
+        \DWATstmtlist: (reference to .debug_line section)
       
 \end{alltt}
 \end{dwflisting}
-\caption{Split object example: Skeleton DWARF description}
+\caption{Split object example: skeleton DWARF description}
 \label{fig:splitdwafexampleskeletondwarfdescription}
 \end{figure}
 
@@ -473,55 +456,26 @@ location of the corresponding \splitDWARFobjectfile{} that
 contains the full debug information; that file is normally
 expected to be in the same directory as the object file itself.
 
-The \DWATdwoid{} attribute provides a hash of the debug
-information contained in the \splitDWARFobjectfile. This hash serves
+The \HFNdwoid{} field in the header of the skeleton unit provides 
+an ID or key for the debug information contained in the 
+DWARF object file. This ID serves
 two purposes: it can be used to verify that the debug information
 in the \splitDWARFobjectfile{} matches the information in the object
 file, and it can be used to find the debug information in a DWARF
 package file.
 
-\needlines{4}
 The \DWATaddrbase{} attribute contains the relocatable offset of
-this object file's contribution to the \dotdebugaddr{} section, and
-the \DWATrangesbase{} attribute contains the relocatable offset
-of this object file's contribution to the \dotdebugranges{} section.
-The \DWATranges{} attribute refers to a specific range list within
-that contribution, and its value is a (non-relocatable) offset
-relative to the base. In a compilation unit with a single
-contiguous range of code, the \DWATranges{} attribute might be
-omitted, and instead replaced by the pair \DWATlowpc{} and
-\DWAThighpc.
+this object file's contribution to the \dotdebugaddr{} section.
 
 The \DWATstmtlist{} attribute contains the relocatable offset of
 this file's contribution to the \dotdebugline{} table.
 
-\bb
-There is both a \DWATranges{} attribute as well as a \DWATlowpc{} 
-attribute which
-\eb
-provides a default base address for the range list entries in the
-\dotdebugranges{} section. 
-\bbeb
-
-The \dotdebugranges{} section contains the range list referenced by
-the \DWATranges{} attribute in the skeleton compilation unit DIE,
-plus any range lists referenced by \DWATranges{} attributes in the
-split DWARF object. In 
-\bb
-this example, \texttt{demo1.o} contains range
-\eb
-list entries for the function \texttt{Box::contains}, as well as for
-out-of-line copies of the inline functions \texttt{Point::x} and 
-\texttt{Point::y}.
-
+\needlines{6}
 The \dotdebugline{} section contains the full line number table for
-the compiled code in the object file. 
-\bb
-As shown in
+the compiled code in the object file. As shown in
 Figure \refersec{fig:splitobjectexamplesourcefragment1}, the line
 number program header lists the two file names, \texttt{demo.h} and
 \texttt{demo1.cc}, and contains line number programs for
-\eb
 \texttt{Box::contains}, \texttt{Point::x}, and \texttt{Point::y}.
 
 The \dotdebugstr{} section contains the strings referenced indirectly
@@ -532,8 +486,9 @@ locations in the loadable text and data that are referenced by
 debugging information entries in the split DWARF object. In the
 example in \refersec{fig:splitobjectexamplesourcefragment3}, 
 \texttt{demo1.o} may have three entries:
+\par
+\begin{nolinenumbersenv}
 \begin{center}
-%\footnotesize
 \begin{tabular}{cl}
 Slot & Location referenced \\
 \hline
@@ -542,6 +497,7 @@ Slot & Location referenced \\
    2   &  low PC value for \texttt{Point::y}       \\
 \end{tabular}
 \end{center}
+\end{nolinenumbersenv}
 
 \needlines{4}
 The \dotdebugnames{}
@@ -561,22 +517,86 @@ compilation unit, and allow a DWARF consumer to map a PC value to
 a skeleton compilation unit, and then to a \splitDWARFobjectfile.
 
 
+\subsection{Contents of the Linked Executable File}
+When \texttt{demo1.o} and \texttt{demo2.o} are linked together (along with 
+a main program and other necessary library routines that we will ignore here
+for simplicity), the resulting executable file will contain at least
+the two skeleton compilation units in the \dotdebuginfo{} section, as shown in 
+Figure \referfol{fig:splitobjectexampleexecutablefiledwarfexcerpts}.
+
+\begin{figure}[ht]
+\begin{dwflisting}
+\begin{alltt}
+
+    \DWTAGskeletonunit
+        \DWATcompdir: (reference to directory name in \dotdebugstr)
+        \DWATdwoname: (reference to "demo1.dwo" in \dotdebugstr)
+        \DWATaddrbase: 48 (offset in \dotdebugaddr)
+        \DWATstmtlist: 120 (offset in \dotdebugline)
+    \DWTAGskeletonunit
+        \DWATcompdir: (reference to directory name in \dotdebugstr)
+        \DWATdwoname: (reference to "demo2.dwo" in \dotdebugstr)
+        \DWATaddrbase: 80 (offset in \dotdebugaddr)
+        \DWATstmtlist: 200 (offset in \dotdebugline)
+
+\end{alltt}
+\end{dwflisting}
+\caption{Split object example: executable file DWARF excerpts}
+\label{fig:splitobjectexampleexecutablefiledwarfexcerpts}
+\end{figure}
+
+Each skeleton compilation unit has a \DWATstmtlist{} attribute,
+which provides the relocated offset to that compilation unit's
+contribution in the executable's \dotdebugline{} section. In this
+example, the line number information for \texttt{demo1.dwo} begins at
+offset 120, and for \texttt{demo2.dwo}, it begins at offset 200.
+
+\needlines{4}
+Each skeleton compilation unit also has a \DWATaddrbase{}
+attribute, which provides the relocated offset to that
+compilation unit's contribution in the executable's \dotdebugaddr{}
+section. Unlike the \DWATstmtlist{} attribute, the offset refers
+to the first address table slot, not to the section header. In
+this example, we see that the first address (slot 0) from \texttt{demo1.o}
+begins at offset 48. Because the \dotdebugaddr{} section contains an
+8-byte header, the object file's contribution to the section
+actually begins at offset 40 (for a 64-bit DWARF object, the
+header would be 16 bytes long, and the value for the
+\DWATaddrbase{} attribute would then be 56). All attributes in
+\texttt{demo1.dwo} that use 
+\bb
+\DWFORMaddrxXNor{} 
+\eb
+would then refer to address
+table slots relative to that offset. Likewise, the \dotdebugaddr{}
+contribution from \texttt{demo2.dwo} begins at offset 72, and its first
+address slot is at offset 80. Because these contributions have
+been processed by the linker, they contain relocated values for
+the addresses in the program that are referred to by the debug
+information.
+
+The linked executable will also contain \dotdebugabbrev,
+\dotdebugstr{}, \dotdebugnames{} and \dotdebugaranges{} sections, each the
+result of combining and relocating the contributions from the
+relocatable object files.
+
+\needlines{10}
 \subsection{Contents of the Split DWARF Object Files}
 The \splitDWARFobjectfile{s} each contain the following sections:
 \begin{alltt}
   \dotdebugabbrevdwo
   \dotdebuginfodwo{} (for the compilation unit)
   \dotdebuginfodwo{} (one COMDAT section for each type unit)
-  \dotdebuglocdwo
+  \dotdebugloclistsdwo
   \dotdebuglinedwo
   \dotdebugmacrodwo
+  \dotdebugrnglistsdwo
   \dotdebugstroffsetsdwo
   \dotdebugstrdwo
 \end{alltt}
 The \dotdebugabbrevdwo{} section contains the abbreviation
 declarations for the debugging information entries in the
 \dotdebuginfodwo{} section. 
-\bbeb
 
 The \dotdebuginfodwo{} section containing the compilation unit
 contains the full debugging information for the compile unit, and
@@ -589,27 +609,25 @@ object file, with the following exceptions:
 compilation unit.
 
 \item References to strings in the string table use the 
-\bbeb
-form code \DWFORMstrx, referring to slots in the
+form code \DWFORMstrxXNor, referring to slots in the
 \dotdebugstroffsetsdwo{} section.
 
 \needlines{4}
-\item References to range lists in the \dotdebugranges{} section are
-all relative to the base offset given by \DWATrangesbase{}
-in the skeleton compilation unit.
-
-\item References to relocatable addresses in the object file use the 
-\bbeb 
-form code \DWFORMaddrx, referring to slots in the
+\item References to relocatable addresses in the object file use
+\bb 
+one of the form codes 
+\eb
+\DWFORMaddrxXNor, referring to slots in the
 \dotdebugaddr{} table, relative to the base offset given by
 \DWATaddrbase{} in the skeleton compilation unit.
 \end{itemize}
 
-Figure \refersec{fig:splitobjectexampledemoonedwodwarfexcerpts} presents
-\bbeb
+\vspace*{1mm}
+Figure \referfol{fig:splitobjectexampledemoonedwodwarfexcerpts} presents
 excerpts from the \dotdebuginfodwo{} section for \texttt{demo1.dwo}.
 
-\begin{figure}[h]
+\begin{figure}[ht]
+\vspace{1mm}
 \figurepart{1}{2}
 \begin{dwflisting}
 \begin{alltt}
@@ -619,35 +637,36 @@ excerpts from the \dotdebuginfodwo{} section for \texttt{demo1.dwo}.
         \DWATlanguage: \DWLANGCplusplus
         \DWATname [\DWFORMstrx]: (slot 7) "demo1.cc"
         \DWATcompdir [\DWFORMstrx]: (slot 4) (directory name)
-        \DWATdwoid [\DWFORMdataeight]: 0x44e413b8a2d1b8f
-1$:   \DWTAGclasstype
-          \DWATname [\DWFORMstrx]: (slot 12) "Point"
-          \DWATsignature [\DWFORMrefsigeight]: 0x2f33248f03ff18ab
-          \DWATdeclaration: true
-2$:     \DWTAGsubprogram
-          \DWATexternal: true
-          \DWATname [\DWFORMstrx]: (slot 12) "Point"
-          \DWATdeclfile: 1
-          \DWATdeclline: 5
-          \DWATlinkagename [\DWFORMstrx]: (slot 16): "_ZN5PointC4Eff"
-          \DWATaccessibility: \DWACCESSpublic
-          \DWATdeclaration: true
-        ...
-3$:   \DWTAGclasstype
-          \DWATname [\DWFORMstring]: "Box"
-          \DWATsignature [\DWFORMrefsigeight]: 0xe97a3917c5a6529b
-          \DWATdeclaration: true
-        ...
-4$:     \DWTAGsubprogram
-            \DWATexternal: true
-            \DWATname [\DWFORMstrx]: (slot 0) "contains"
-            \DWATdeclfile: 1
-            \DWATdeclline: 28
-            \DWATlinkagename [\DWFORMstrx]: (slot 8) "_ZNK3Box8containsERK5Point"
-            \DWATtype: (reference to 7$)
-            \DWATaccessibility: \DWACCESSpublic
+1$:     \DWTAGclasstype
+            \DWATname [\DWFORMstrx]: (slot 12) "Point"
+            \DWATsignature [\DWFORMrefsigeight]: 0x2f33248f03ff18ab
             \DWATdeclaration: true
-        ...
+2$:         \DWTAGsubprogram
+                \DWATexternal: true
+                \DWATname [\DWFORMstrx]: (slot 12) "Point"
+                \DWATdeclfile: 1
+                \DWATdeclline: 5
+                \DWATlinkagename [\DWFORMstrx]: (slot 16) "_ZN5PointC4Eff"
+                \DWATaccessibility: \DWACCESSpublic
+                \DWATdeclaration: true
+            ...
+3$:     \DWTAGclasstype
+            \DWATname [\DWFORMstring]: "Box"
+            \DWATsignature [\DWFORMrefsigeight{}]: 0xe97a3917c5a6529b
+            \DWATdeclaration: true
+          ...
+4$:         \DWTAGsubprogram
+                \DWATexternal: true
+                \DWATname [\DWFORMstrx]: (slot 0) "contains"
+                \DWATdeclfile: 1
+                \DWATdeclline: 28
+                \DWATlinkagename [\DWFORMstrx: (slot 8) 
+                                                  "_ZNK3Box8containsERK5Point"
+                \DWATtype: (reference to 7$)
+                \DWATaccessibility: \DWACCESSpublic
+                \DWATdeclaration: true
+          ...
+
 \end{alltt}
 \end{dwflisting}
 \caption{Split object example: \texttt{demo1.dwo} excerpts}
@@ -667,17 +686,17 @@ excerpts from the \dotdebuginfodwo{} section for \texttt{demo1.dwo}.
           \DWAThighpc [\DWFORMdataeight]: 0xbb
           \DWATframebase: \DWOPcallframecfa
           \DWATobjectpointer: (reference to 6$)
-6$:     \DWTAGformalparameter
-            \DWATname [\DWFORMstrx]: (slot 13): "this"
-            \DWATtype: (reference to 8$)
-            \DWATartificial: true
-            \DWATlocation: \DWOPfbreg(-24)
-        \DWTAGformalparameter
-            \DWATname [\DWFORMstring]: "p"
-            \DWATdeclfile: 2
-            \DWATdeclline: 3
-            \DWATtype: (reference to 11$)
-            \DWATlocation: \DWOPfbreg(-32)
+6$:       \DWTAGformalparameter
+              \DWATname [\DWFORMstrx]: (slot 13): "this"
+              \DWATtype: (reference to 8$)
+              \DWATartificial: true
+              \DWATlocation: \DWOPfbreg(-24)
+          \DWTAGformalparameter
+              \DWATname [\DWFORMstring]: "p"
+              \DWATdeclfile: 2
+              \DWATdeclline: 3
+              \DWATtype: (reference to 11$)
+              \DWATlocation: \DWOPfbreg(-32)
       ...
 7$:   \DWTAGbasetype
           \DWATbytesize: 1
@@ -708,12 +727,17 @@ Figure~\ref{fig:splitobjectexampledemoonedwodwarfexcerpts}: Split object example
 \end{center}
 \end{figure}
 
+\needlines{4}
 In the defining declaration for \texttt{Box::contains} at 5\$, the
-\DWATlowpc{} attribute is represented with \DWFORMaddrx,
-referring to slot 0 in the \dotdebugaddr{} table from \texttt{demo1.o}.
+\DWATlowpc{} attribute is represented 
+\bb
+using \DWFORMaddrx, which refers 
+\eb
+to slot 0 in the \dotdebugaddr{} table from \texttt{demo1.o}.
 That slot contains the relocated address of the beginning of the
 function.
 
+\needlines{6}
 Each type unit is contained in its own COMDAT \dotdebuginfodwo{}
 section, and looks like a normal type unit in a non-split object,
 except that the \DWTAGtypeunit{} DIE contains a \DWATstmtlist{}
@@ -729,7 +753,6 @@ within the type unit.
 
 The \dotdebugstroffsetsdwo{} section contains an entry for each
 unique string in the string table. 
-\bbeb
 Each entry in the table is the offset of the string, which is
 contained in the \dotdebugstrdwo{} section. 
 
@@ -741,25 +764,27 @@ is no use of \DWFORMstrp{} in a split DWARF object file.
 
 The offsets in these slots have no associated relocations, 
 because they are not part of a relocatable object file.
-
-\needlines{4}
 When combined into a DWARF package file, however, each 
 slot must be adjusted to refer to the appropriate offset 
 within the merged string table (\dotdebugstrdwo{}).
 The tool that builds the DWARF package file must understand 
 the structure of the \dotdebugstroffsetsdwo{} section in 
 order to apply the necessary adjustments. 
-\bb
-(Section \refersec{app:dwarfpackagefileexample} presents
-\eb
-an example of a DWARF package file.)
+Section \refersec{app:dwarfpackagefileexample} presents
+an example of a DWARF package file.
 
 \needlines{4}
-The \dotdebuglocdwo{} section contains the location lists referenced
+The \dotdebugrnglistsdwo{} section contains range lists referenced by any
+\DWATranges{} attributes in the split DWARF object. In our example,
+\texttt{demo1.o} would have just a single range list for the compilation unit,
+with range list entries for the function \texttt{Box::contains} and for
+out-of-line copies of the inline functions \texttt{Point::x} and \texttt{Point::y}.
+
+The \dotdebugloclistsdwo{} section contains the location lists referenced
 by \DWATlocation{} attributes in the \dotdebuginfodwo{} section. This
-section has a similar format to the \dotdebugloc{} section in a
+section has a similar format to the \dotdebugloclists{} section in a
 non-split object, but it has some small differences as explained
-in Section \refersec{datarep:locationlistentriesinsplitobjects}. 
+in Section \refersec{datarep:locationlists}. 
 
 \begin{figure}[b]
 \figurepart{1}{2}
@@ -770,17 +795,18 @@ in Section \refersec{datarep:locationlistentriesinsplitobjects}.
         \DWATname [\DWFORMstrx]: (slot 20) "Line"
         \DWATsignature [\DWFORMrefsigeight]: 0x79c7ef0eae7375d1
         \DWATdeclaration: true
-    ...
-2$:   \DWTAGsubprogram
-          \DWATexternal: true
-          \DWATname [\DWFORMstrx]: (slot 19) "clip"
-          \DWATdeclfile: 2
-          \DWATdeclline: 16
-          \DWATlinkagename [\DWFORMstrx]: (slot 2) "_ZN4Line4clipERK3Box"
-          \DWATtype: (reference to DIE for bool)
-          \DWATaccessibility: \DWACCESSpublic
-          \DWATdeclaration: true
-      ...
+        ...
+2$:     \DWTAGsubprogram
+            \DWATexternal: true
+            \DWATname [\DWFORMstrx]: (slot 19) "clip"
+            \DWATdeclfile: 2
+            \DWATdeclline: 16
+            \DWATlinkagename [\DWFORMstrx]: (slot 2) "_ZN4Line4clipERK3Box"
+            \DWATtype: (reference to DIE for bool)
+            \DWATaccessibility: \DWACCESSpublic
+            \DWATdeclaration: true
+        ...
+
 \end{alltt}
 \end{dwflisting}
 \caption{Split object example: \texttt{demo2.dwo} DWARF \dotdebuginfodwo{} excerpts}
@@ -800,26 +826,26 @@ in Section \refersec{datarep:locationlistentriesinsplitobjects}.
           \DWAThighpc [\DWFORMdataeight]: 0x1ec
           \DWATframebase: \DWOPcallframecfa
           \DWATobjectpointer: (reference to 4$)
-4$:     \DWTAGformalparameter
-            \DWATname: (indexed string: 0x11): this
-            \DWATtype: (reference to DIE for type const Point* const)
-            \DWATartificial: 1
-            \DWATlocation: 0x0 (location list)
-5$:     \DWTAGformalparameter
-            \DWATname: b
-            \DWATdeclfile: 1
-            \DWATdeclline: 3
-            \DWATtype: (reference to DIE for type const Box& const)
-            \DWATlocation [\DWFORMsecoffset]: 0x2a
-6$:     \DWTAGlexicalblock
-            \DWATlowpc [\DWFORMaddrx]: (slot 17)
-            \DWAThighpc: 0x1d5
-7$:       \DWTAGvariable
-              \DWATname [\DWFORMstrx]: (slot 28): "slope"
+4$:       \DWTAGformalparameter
+              \DWATname: (indexed string: 0x11): this
+              \DWATtype: (reference to DIE for type const Point* const)
+              \DWATartificial: 1
+              \DWATlocation: 0x0 (location list)
+5$:       \DWTAGformalparameter
+              \DWATname: b
               \DWATdeclfile: 1
-              \DWATdeclline: 5
-              \DWATtype: (reference to DIE for type float)
-              \DWATlocation [\DWFORMsecoffset]: 0x49
+              \DWATdeclline: 3
+              \DWATtype: (reference to DIE for type const Box& const)
+              \DWATlocation [\DWFORMsecoffset]: 0x2a
+6$:       \DWTAGlexicalblock
+              \DWATlowpc [\DWFORMaddrx]: (slot 17)
+              \DWAThighpc: 0x1d5
+7$:           \DWTAGvariable
+                  \DWATname [\DWFORMstrx]: (slot 28): "slope"
+                  \DWATdeclfile: 1
+                  \DWATdeclline: 5
+                  \DWATtype: (reference to DIE for type float)
+                  \DWATlocation [\DWFORMsecoffset]: 0x49
 
 \end{alltt}
 \end{dwflisting}
@@ -833,14 +859,8 @@ Figure~\ref{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}: Split ob
 In \texttt{demo2.dwo} as shown in 
 Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts}, 
 the debugging information for \texttt{Line::clip} 
-\bb
-starting at \texttt{2\$}
-\eb
-describes a local 
-variable \texttt{slope} 
-\bb
-at \texttt{7\$}
-\eb
+starting at \texttt{2\$} describes a local 
+variable \texttt{slope} at \texttt{7\$}
 whose location varies based on the PC.
 Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts} 
 presents some excerpts from the \dotdebuginfodwo{} section for 
@@ -852,77 +872,76 @@ In Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuginfodwoexcerpts},
 the \DWTAGformalparameter{} entries at \texttt{4\$} and \texttt{5\$} refer to the
 location lists at offset \texttt{0x0} and \texttt{0x2a}, respectively, and the
 \DWTAGvariable{} entry for \texttt{slope} 
-\bbeb
 refers to the location list at offset \texttt{0x49}. 
 Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts}
 shows a representation of the
-location lists at those offsets in the \dotdebuglocdwo{} section.
+location lists at those offsets in the \dotdebugloclistsdwo{} section.
 
 % Special commands for use in the folloing table
-\newcommand{\XXLLEsl}{\hyperlink{chap:DWLLEstartlengthentry}{start\_length\_entry}
-                      \index{DW\_LLE\_start\_length\_entry}}
-\newcommand{\XXLLEeol}{\hyperlink{chap:DWLLEendoflistentry}{end\_of\_list\_entry}
-                       \index{DW\_LLE\_end\_of\_list\_entry}}
+\newcommand{\XXLLEsl}{\hyperlink{chap:DWLLEstartlength}{start\_length}
+                      \index{DW\_LLE\_start\_length}}
+\newcommand{\XXLLEeol}{\hyperlink{chap:DWLLEendoflist}{end\_of\_list}
+                       \index{DW\_LLE\_end\_of\_list}}
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{dwflisting}
+\begin{center}
 \begin{tabular}{rl|rr|rl}
-       &  entry type          & \multicolumn{2}{c}{range} 
-                                               & \multicolumn{2}{l}{\hspace{6mm}location} \\
-offset & (DW\_LLE\_*)         & start & length & length & expression \\
+   \multicolumn{2}{c}{\textbf{Entry type}}
+                & \multicolumn{2}{c}{\textbf{Range}} 
+                                & \multicolumn{2}{l}{\hspace{6mm}\textbf{Counted Location Description}} \\
+offset& (DW\_LLE\_*)   
+                & start& length & length & expression \\
 \hline
 &&&&& \\
 
-0x00 & \XXLLEsl &  [9] & 0x002f & 0x0001 & \DWOPregfive~(rdi) \\
-0x09 & \XXLLEsl & [11] & 0x01b9 & 0x0001 & \DWOPregthree~(rbx) \\
-\bbeb 0x12 & \XXLLEsl & [29] & 0x0003 & 0x0003 & \DWOPbregtwelve~(r12): -8;\\
-\bbeb      &          &      &        &        & \DWOPstackvalue \\
-0x1d & \XXLLEsl & [31] & 0x0001 & 0x0003 & \DWOPentryvalue: \\
+0x00 & \XXLLEsl &  [9] & 0x002f & \bb 0x01 \eb& \DWOPregfive~(rdi) \\
+0x09 & \XXLLEsl & [11] & 0x01b9 & \bb 0x01 \eb& \DWOPregthree~(rbx) \\
+0x12 & \XXLLEsl & [29] & 0x0003 & \bb 0x03 \eb& \DWOPbregtwelve~(r12): -8;\\
+     &          &      &        &        & \DWOPstackvalue \\
+0x1d & \XXLLEsl & [31] & 0x0001 & \bb 0x03 \eb& \DWOPentryvalue: \\
      &          &      &        &        & (\DWOPregfive~(rdi)); \\
      &          &      &        &        & \DWOPstackvalue \\
 0x29 & \XXLLEeol &&&& \\
 ------ &&&&& \\
 
-0x2a & \XXLLEsl &  [9] & 0x002f & 0x0001 & \DWOPregfour~(rsi)) \\
-0x33 & \XXLLEsl & [11] & 0x01ba & 0x0003 & \DWOPregsix~(rbp)) \\
-0x3c & \XXLLEsl & [30] & 0x0003 & 0x0003 & \DWOPentryvalue: \\
+0x2a & \XXLLEsl &  [9] & 0x002f & \bb 0x01 \eb& \DWOPregfour~(rsi)) \\
+0x33 & \XXLLEsl & [11] & 0x01ba & \bb 0x03 \eb& \DWOPregsix~(rbp)) \\
+0x3c & \XXLLEsl & [30] & 0x0003 & \bb 0x03 \eb& \DWOPentryvalue: \\
      &          &      &        &        & (\DWOPregfour~(rsi)); \\
      &          &      &        &        & \DWOPstackvalue \\
 0x48 & \XXLLEeol &&&& \\
 ------ &&&&& \\
 
-0x49 & \XXLLEsl & [10] & 0x0004 & 0x0001 & \DWOPregeighteen~(xmm1) \\
-0x52 & \XXLLEsl & [11] & 0x01bd & 0x0002 & \DWOPfbreg: -36 \\
+0x49 & \XXLLEsl & [10] & 0x0004 & \bb 0x01 \eb& \DWOPregeighteen~(xmm1) \\
+0x52 & \XXLLEsl & [11] & 0x01bd & \bb 0x02 \eb& \DWOPfbreg: -36 \\
 0x5c & \XXLLEeol &&&& \\
 &&&& \\
 \end{tabular}
+\end{center}
 \end{dwflisting}
-\caption{Split object example: \texttt{demo2.dwo} DWARF \dotdebuglocdwo{} excerpts}
+\caption{Split object example: \texttt{demo2.dwo} DWARF \dotdebugloclistsdwo{} excerpts}
 \label{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts}
 \end{figure}
 
-In each \DWLLEstartlengthentry{}, the start field is the index
+In each \DWLLEstartlength{} entry, 
+the start field is the index
 of a slot in the \dotdebugaddr{} section, relative to the base
 offset defined by the compilations unit's \DWATaddrbase{}
 attribute. The \dotdebugaddr{} slots referenced by these entries give
 the relocated address of a label within the function where the
 address range begins. 
-\bb
 The following length field gives the length of the
 address range. The location, consisting of its own length and
 a DWARF expression, is last.
-\eb 
 
 \clearpage
 \section{DWARF Package File Example}
 \label{app:dwarfpackagefileexample}
 \addtoindexx{DWARF duplicate elimination!examples}
 
-A 
-\bb
-\addtoindex{DWARF package file} 
-(see Section \refersec{datarep:dwarfpackagefiles})
-\eb
+A \addtoindex{DWARF package file} 
+(see Section \refersec{datarep:dwarfpackagefiles}) 
 is a collection of split DWARF object files.
 In general, it will be much smaller than the sum of the split
 DWARF object files, because the packaging process removes duplicate
@@ -949,9 +968,7 @@ sections specially. Rather than
 combining them by simple concatenation, it instead builds a new
 string table consisting of the unique strings from each input
 string table. Because all references to these strings use
-\bb
 form \DWFORMstrx{},
-\eb
 the packaging utility only needs to adjust the
 string offsets in each \dotdebugstroffsetsdwo{} contribution after
 building the new \dotdebugstrdwo{} section.
@@ -970,16 +987,19 @@ that belongs to that unit.
 
 For example, consider a package file, \texttt{demo.dwp}, formed by
 combining \texttt{demo1.dwo} and \texttt{demo2.dwo} from the previous example
-(see Appendix \refersec{app:splitdwarfobjectfileexample}). The
-resulting package file would contain the sections shown in Figure
+(see Appendix \refersec{app:splitdwarfobjectfileexample}). 
+For an executable file named "\texttt{demo}" (or "\texttt{demo.exe}"), a debugger would
+typically expect to find \texttt{demo.dwp} in the same directory as the
+executable file.
+The resulting package file would contain the sections shown in Figure
 \refersec{fig:sectionsandcontributionsinapackagefile}, 
 with contributions from each input file as shown.
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{center}
 \begin{tabular}{P{4.7cm}|P{8cm}}
 \hline
-\bfseries \bbeb Section & \bfseries Source of section contributions \\
+\bfseries Section & \bfseries Source of section contributions \\
 \hline
   \dotdebugabbrevdwo{}
 &    \dotdebugabbrevdwo{} from \texttt{demo1.dwo} \newline
@@ -992,9 +1012,13 @@ with contributions from each input file as shown.
      type unit for class \texttt{Point} from \texttt{demo1.dwo} \newline
      type unit for class \texttt{Line} from \texttt{demo2.dwo}  \\
 \hline
-  \dotdebuglocdwo{}
-&    \dotdebuglocdwo{} from \texttt{demo1.dwo} \newline
-     \dotdebuglocdwo{} from \texttt{demo2.dwo} \\
+  \dotdebugrnglistsdwo{} 
+&    \dotdebugrnglistsdwo{} from \texttt{demo1.dwo} \newline
+     \dotdebugrnglistsdwo{} from \texttt{demo2.dwo} \\
+\hline
+  \dotdebugloclistsdwo{}
+&    \dotdebugloclistsdwo{} from \texttt{demo1.dwo} \newline
+     \dotdebugloclistsdwo{} from \texttt{demo2.dwo} \\
 \hline
   \dotdebuglinedwo{}
 &    \dotdebuglinedwo{} from \texttt{demo1.dwo} \newline
@@ -1005,13 +1029,13 @@ with contributions from each input file as shown.
      \dotdebugstroffsetsdwo{} from \texttt{demo2.dwo}, \hspace*{6mm}adjusted \\
 \hline
   \dotdebugstrdwo{}
-&    \bbeb merged string table \\
+&    merged string table generated by package utility \\
 \hline
   \dotdebugcuindex
-&    \bbeb CU index \\
+&    CU index generated by package utility \\
 \hline
   \dotdebugtuindex
-&    \bbeb TU index \\
+&    TU index generated by package utility \\
 \hline
 \end{tabular}
 \end{center}
@@ -1020,55 +1044,32 @@ with contributions from each input file as shown.
 \end{figure}
 
 \needlines{4}
-The \dotdebugabbrevdwo{}, \dotdebuglocdwo{} and \dotdebuglinedwo{}
-sections 
-\bb
-are
-\eb
-copied over from the two \texttt{.dwo} files as
+The \dotdebugabbrevdwo{}, \dotdebugrnglistsdwo{}, 
+\dotdebugloclistsdwo{} and \dotdebuglinedwo{}
+sections are copied over from the two \texttt{.dwo} files as
 individual contributions to the corresponding sections in the
 \texttt{.dwp} file. 
-\bb
-The
-\eb
-offset of each contribution within 
+The offset of each contribution within 
 the combined section and the size of each contribution is recorded
 as part of the CU and TU index sections.
 
-The \dotdebuginfodwo{} sections corresponding to each compilation unit 
-\bb
-are
-\eb
-copied as individual contributions to the combined
+The \dotdebuginfodwo{} sections corresponding to each compilation 
+unit are copied as individual contributions to the combined
 \dotdebuginfodwo{} section, and one copy of each type unit 
-\bb
-is also
-\eb
-copied. The type units for class \texttt{Box} and class 
+is also copied. The type units for class \texttt{Box} and class 
 \texttt{Point}, for example, are contained in both \texttt{demo1.dwo} 
 and \texttt{demo2.dwo}, but only one instance of each is copied into 
 the package file.
 
-The \dotdebugstrdwo{} sections from each file 
-\bb
-are
-\eb
-merged to
+\needlines{4}
+The \dotdebugstrdwo{} sections from each file are merged to
 form a new string table with no duplicates, requiring the
 adjustment of all references to those strings. The
 \dotdebugstroffsetsdwo{} sections from the \texttt{.dwo} files 
-\bb
-are
-\eb
-copied as individual contributions, but the string table offset
-in each slot of those contributions 
-\bb
-is
-\eb
-adjusted to point to
+are copied as individual contributions, but the string table offset
+in each slot of those contributions is adjusted to point to
 the correct offset in the merged string table.
 
-\needlines{4}
 The \dotdebugcuindex{} and \dotdebugtuindex{} sections provide a
 directory to these contributions. 
 Figure \referfol{fig:examplecuindexsection} shows an example CU
@@ -1087,33 +1088,33 @@ we see that the \DWTAGvariable{} DIE at \texttt{7\$} has a
 reference to a location list at offset 0x49 (decimal 73). Because
 this is part of the compilation unit for \texttt{demo2.dwo}, with 
 unit signature \texttt{0xb5f0ecf455e7e97e}, we see that its contribution 
-to \dotdebuglocdwo{} begins at offset 84, so the location list from
+to \dotdebugloclistsdwo{} begins at offset 84, so the location list from
 Figure \refersec{fig:splitobjectexampledemotwodwodwarfdebuglocdwoexcerpts} 
 can be found in \texttt{demo.dwp} at offset 157 (84 + 73) in
-the combined \dotdebuglocdwo{} section.
+the combined \dotdebugloclistsdwo{} section.
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{center}
-\begin{tabular}{lrrrrrr}
+\begin{tabular}{lrrrrrrr}
 \\
   \multicolumn{7}{c}{Section header} \\
 \hline \\
-  \multicolumn{2}{l}{Version:}&                 5 &&&&\\
-  \multicolumn{2}{l}{Number of columns:}&       &&&&\\
-  \multicolumn{2}{l}{Number of used entries:}&  2 &&&&\\
-  \multicolumn{2}{l}{Number of slots:}&         16 &&&&\\
+  \multicolumn{2}{l}{Version:}&                 5  &&&&&\\
+  \multicolumn{2}{l}{Number of columns:}&       6  &&&&&\\
+  \multicolumn{2}{l}{Number of used entries:}&  2  &&&&&\\
+  \multicolumn{2}{l}{Number of slots:}&         16 &&&&&\\
 \\
   \multicolumn{7}{c}{Offset table} \\
   \hline
-  slot&  signature&             info&   abbrev&      loc&     line& str\_off \\
-    14& \texttt{0xb5f0ecf455e7e97e}&      325&      452&       84&       52&       72 \\
-    15& \texttt{0x044e413b8a2d1b8f}&        0&        0&        0&        0&        0 \\
+  slot&  signature&                       info&   abbrev&      loc&     line& str\_off&    rng \\ \\
+    14& \texttt{0xb5f0ecf455e7e97e} &      325&      452&       84&       52&       72&    350 \\
+    15& \texttt{0x044e413b8a2d1b8f} &        0&        0&        0&        0&        0&      0 \\
 \\
   \multicolumn{7}{c}{Size table} \\
   \hline
-  slot&                    &     info&   abbrev&      loc&     line& str\_off \\
-    14&                    &      673&      593&       93&       52&      120 \\
-    15&                    &      325&      452&       84&       52&       72 \\
+  slot&                    &     info&   abbrev&      loc&     line& str\_off&    rng \\ \\
+    14&                    &      673&      593&       93&       52&      120&     34 \\
+    15&                    &      325&      452&       84&       52&       72&     15 \\
 \\ \hline 
 \end{tabular}
 \end{center}
@@ -1139,12 +1140,12 @@ The sharing of these tables between compilation units and type units
 is typical for some implementations, but is not required by the
 DWARF standard.
 
-\begin{figure}[h]
+\begin{figure}[ht]
 \begin{center}
 \begin{tabular}{lrrrrr}
 \\
   \multicolumn{6}{c}{Section header} \\
-\hline
+\hline \\
   \multicolumn{2}{l}{Version:}&                 5 \\
   \multicolumn{2}{l}{Number of columns:}&       4 \\
   \multicolumn{2}{l}{Number of used entries:}&  3 \\
@@ -1152,14 +1153,14 @@ DWARF standard.
 \\
   \multicolumn{6}{c}{Offset table} \\
   \hline
-  slot&  signature&                    info&   abbrev&     line& str\_off \\
+  slot&  signature&                    info&   abbrev&     line& str\_off \\ \\
   11& \texttt{0x2f33248f03ff18ab}&     1321&        0&        0&        0 \\
   17& \texttt{0x79c7ef0eae7375d1}&     1488&      452&       52&       72 \\
   27& \texttt{0xe97a3917c5a6529b}&      998&        0&        0&        0 \\
 \\
   \multicolumn{6}{c}{Size table} \\
   \hline
-  slot&                          &     info&   abbrev&     line& str\_off \\
+  slot&                          &     info&   abbrev&     line& str\_off \\ \\
   11&                            &      167&      452&       52&       72 \\
   17&                            &      217&      593&       52&      120 \\
   27&                            &      323&      452&       52&       72 \\