Signed-off-by: Ron Brender <ron.brender@gmail.com>
[dwarf-doc.git] / dwarf5 / latexdoc / datarepresentation.tex
index a69de3b..10c4733 100644 (file)
@@ -126,11 +126,19 @@ the other values is reserved for possible future extensions.
 
 
 
-\section{Executable Objects and Shared Objects} 
+\section{Relocatable, Executable, Shared and Split Objects} 
 \label{datarep:executableobjectsandsharedobjects}
 
+\subsection{Relocatable Objects}
+
+\subsection{Executable Objects}
+\label{chap:executableobjects}
 The relocated addresses in the debugging information for an
-executable object are virtual addresses and the relocated
+executable object are virtual addresses.
+
+\subsection{Shared Objects}
+\label{datarep:sharedobjects}
+The relocated
 addresses in the debugging information for a shared object
 are offsets relative to the start of the lowest region of
 memory loaded from that shared object.
@@ -141,6 +149,90 @@ shared object may be calculated by adding the offset to the
 base address at which the object was attached. This offset
 is available in the run\dash time linker\textquoteright s data structures.}
 
+\subsection{Split DWARF Objects}
+\label{datarep:splitdwarfobjects}
+A DWARF producer may partition the debugging
+information such that the majority of the debugging
+information can remain in individual object files without
+being processed by the linker. The first partition contains
+debugging information that must still be processed by the linker,
+and includes the following:
+\begin{itemize}
+\item
+The line number tables, range tables, frame tables, and
+accelerated access tables, in the usual sections:
+\dotdebugline, \dotdebugranges, \dotdebugframe,
+\dotdebugpubnames, \dotdebugpubtypes{} and \dotdebugaranges,
+respectively.
+\item
+An address table, in the \dotdebugaddr{} section. This table
+contains all addresses and constants that require
+link-time relocation, and items in the table can be
+referenced indirectly from the debugging information via
+the \DWFORMaddrx{} form, and by the \DWOPaddrx{} and
+\DWOPconstx{} operators.
+\item
+A skeleton compilation unit, as described in Section
+\refersec{chap:skeletoncompilationunitentries}, 
+in the \dotdebuginfo{} section.
+\item
+An abbreviations table for the skeleton compilation unit,
+in the \dotdebugabbrev{} section.
+\item
+A string table, in the \dotdebugstr{} section. The string
+table is necessary only if the skeleton compilation unit
+uses either indirect string form, \DWFORMstrp{} or
+\DWFORMstrx.
+\item
+A string offsets table, in the \dotdebugstroffsets{}
+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.
+
+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
+(i.e., not combined and copied to the executable object), or
+they may be placed by the producer in a separate DWARF object
+file. This partition includes the following:
+\begin{itemize}
+\item
+The full compilation unit, in the \dotdebuginfodwo{} section.
+Attributes in debugging information entries may refer to
+machine addresses indirectly using the \DWFORMaddrx{} form,
+and location expressions may do so using the \DWOPaddrx{} and
+\DWOPconstx{} forms. Attributes may refer to range table
+entries with an offset relative to a base offset in the
+range table for the compilation unit.
+
+\item Separate type units, in the \dotdebugtypesdwo{} section.
+
+\item
+Abbreviations table(s) for the compilation unit and type
+units, in the \dotdebugabbrevdwo{} section.
+
+\item Location lists, in the \dotdebuglocdwo{} section.
+
+\item
+A skeleton line table (for the type units), in the
+\dotdebuglinedwo{} section (see 
+Section \refersec{chap:skeletoncompilationunitentries}).
+
+\item Macro information, in the \dotdebugmacinfodwo{} section.
+
+\item A string table, in the \dotdebugstrdwo{} section.
+
+\item A string offsets table, in the \dotdebugstroffsetsdwo{}
+section.
+\end{itemize}
+
+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,
+\dotdebuginfodwo).
 
 
 \section{32-Bit and 64-Bit DWARF Formats}
@@ -704,15 +796,24 @@ Each possible form belongs to one or more of the following classes:
 \begin{itemize}
 \item \livelinki{chap:classaddress}{address}{address class} \\
 \livetarg{datarep:classaddress}{}
-Represented as an object of appropriate size to hold an
+Represented as either:
+\begin{itemize}
+\item An object of appropriate size to hold an
 address on the target machine 
 (\DWFORMaddrTARG). 
-The size is
-encoded in the compilation unit header 
+The size is encoded in the compilation unit header 
 (see Section \refersec{datarep:compilationunitheader}).
 This address is relocatable in a relocatable object file and
 is relocated in an executable file or shared object.
 
+\item As an indirect index into a table of addresses (as 
+described in the previous bullet) in the
+\dotdebugaddr{} section (\DWFORMaddrxTARG). 
+The representation of a \DWFORMaddrxNAME{} value is an unsigned
+\addtoindex{LEB128} value, which is interpreted as a zero-based 
+index into an array of addresses in the \dotdebugaddr{} section.
+\end{itemize}
+
 \needlines{4}
 \item \livelink{chap:classblock}{block} \\
 \livetarg{datarep:classblock}{}
@@ -904,7 +1005,9 @@ offset from the first byte of the compilation
 header for the compilation unit containing the reference. There
 are five forms for this type of reference. There are fixed
 length forms for one, two, four and eight byte offsets
-(respectively, \DWFORMrefoneTARG, 
+(respectively,
+\DWFORMrefnMARK 
+\DWFORMrefoneTARG, 
 \DWFORMreftwoTARG, 
 \DWFORMreffourTARG,
 and \DWFORMrefeightTARG). 
@@ -973,23 +1076,34 @@ header.}
 A string is a sequence of contiguous non\dash null bytes followed by
 one null byte. 
 \addtoindexx{string class}
-A string may be represented immediately in the
-debugging information entry itself 
-(\DWFORMstringTARG), or may
-be represented as an 
+A string may be represented: 
+\begin{itemize}
+\item immediately in the debugging information entry itself 
+(\DWFORMstringTARG), 
+\item as an 
 \addtoindexx{section offset!in class string value}
 offset into a string table contained in
 the \dotdebugstr{} section of the object file 
-(\DWFORMstrpTARG). In
-the \thirtytwobitdwarfformat, the representation of a 
-\DWFORMstrp{}
+(\DWFORMstrpTARG).
+In the \thirtytwobitdwarfformat, the representation of a 
+\DWFORMstrpNAME{}
 value is a 4\dash byte unsigned offset; in the \sixtyfourbitdwarfformat,
 it is an 8\dash byte unsigned offset 
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\item as an indirect offset into the string table using an 
+index into a table of offsets contained in the 
+\dotdebugstroffsets{} section of the object file (\DWFORMstrxTARG).
+The representation of a \DWFORMstrxNAME{} value is an unsigned 
+\addtoindex{LEB128} value, which is interpreted as a zero-based 
+index into an array of offsets in the \dotdebugstroffsets{} section. 
+The offset entries in the \dotdebugstroffsets{} section have the 
+same representation as \DWFORMstrp{} values.
+\end{itemize}
+Any combination of these three forms may be used within a single compilation.
 
 If the \DWATuseUTFeight{}
 \addtoindexx{use UTF8 attribute}\addtoindexx{UTF-8} attribute is specified for the
-compilation unit entry, string values are encoded using the
+compilation, partial or type unit entry, string values are encoded using the
 UTF\dash 8 (\addtoindex{Unicode} Transformation Format\dash 8) from the Universal
 Character Set standard (ISO/IEC 10646\dash 1:1993). Otherwise,
 the string representation is unspecified.
@@ -1076,7 +1190,7 @@ Table \refersec{tab:attributeformencodings}.
         \addtoindexx{constant value attribute!encoding} \\
 \DWATcontainingtype&0x1d&\livelink{chap:classreference}{reference} 
         \addtoindexx{containing type attribute!encoding} \\
-\DWATdefaultvalue&0x1e&\livelink{chap:classreference}{reference} 
+\DWATdefaultvalue&0x1e&\livelink{chap:classreference}{reference}, \livelink{chap:classflag}{flag} 
         \addtoindexx{default value attribute!encoding} \\
 \DWATinline&0x20&\livelink{chap:classconstant}{constant} 
         \addtoindexx{inline attribute!encoding}  \\
@@ -1163,7 +1277,7 @@ Table \refersec{tab:attributeformencodings}.
         \addtoindexx{data location attribute!encoding}  \\
 \DWATbytestride&0x51&\livelink{chap:classconstant}{constant}, \livelink{chap:classexprloc}{exprloc}, 
         \livelink{chap:classreference}{reference} \addtoindexx{byte stride attribute!encoding}  \\
-\DWATentrypc&0x52&\livelink{chap:classaddress}{address} 
+\DWATentrypc&0x52&\livelink{chap:classaddress}{address}, \livelink{chap:classconstant}{constant} 
         \addtoindexx{entry pc attribute!encoding}  \\
 \DWATuseUTFeight&0x53&\livelink{chap:classflag}{flag} 
         \addtoindexx{use UTF8 attribute!encoding}\addtoindexx{UTF-8}  \\
@@ -1227,6 +1341,16 @@ Table \refersec{tab:attributeformencodings}.
                \livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length}  \\
 \DWATrank~\ddag&0x71&
                \livelink{chap:DWATrank}{constant, exprloc}\addtoindexx{rank attribute!encoding}  \\
+\DWATstroffsetsbase~\ddag&0x72&
+               \livelink{chap:classstring}{reference}\addtoindexx{string offsets base!encoding}        \\
+\DWATaddrbase~\ddag &0x73&
+               \livelink{chap:DWATaddrbase}{reference}\addtoindexx{address table base!encoding} \\
+\DWATrangesbase~\ddag&0x74&
+               \livelink{chap:DWATrangesbase}{reference}\addtoindexx{ranges base!encoding} \\
+\DWATdwoid~\ddag &0x75&
+               \livelink{chap:DWATdwoid}{constant}\addtoindexx{split DWARF object id!encoding} \\
+\DWATdwoname~\ddag &0x76&
+               \livelink{chap:DWATdwname}{string}\addtoindexx{split DWARF object file name!encooding} \\
 \DWATlouser&0x2000 & --- \addtoindexx{low user attribute encoding}  \\
 \DWAThiuser&\xiiifff& --- \addtoindexx{high user attribute encoding}  \\
 
@@ -1248,6 +1372,7 @@ Table \refersec{tab:attributeformencodings}.
 
 \endlastfoot
 \DWFORMaddr &0x01&\livelink{chap:classaddress}{address}  \\
+\textit{Reserved} &0x02& \\
 \DWFORMblocktwo &0x03&\livelink{chap:classblock}{block} \\
 \DWFORMblockfour &0x04&\livelink{chap:classblock}{block}  \\
 \DWFORMdatatwo &0x05&\livelink{chap:classconstant}{constant} \\
@@ -1256,7 +1381,7 @@ Table \refersec{tab:attributeformencodings}.
 \DWFORMstring&0x08&\livelink{chap:classstring}{string} \\
 \DWFORMblock&0x09&\livelink{chap:classblock}{block} \\
 \DWFORMblockone &0x0a&\livelink{chap:classblock}{block} \\
-\DWFORMdataone &\livelink{chap:classconstant}{constant} \\
+\DWFORMdataone &0x0b&\livelink{chap:classconstant}{constant} \\
 \DWFORMflag&0x0c&\livelink{chap:classflag}{flag} \\
 \DWFORMsdata&0x0d&\livelink{chap:classconstant}{constant}    \\
 \DWFORMstrp&0x0e&\livelink{chap:classstring}{string}         \\
@@ -1271,6 +1396,8 @@ Table \refersec{tab:attributeformencodings}.
 \DWFORMsecoffset{} &0x17&\livelink{chap:classlineptr}{lineptr}, \livelink{chap:classloclistptr}{loclistptr}, \livelink{chap:classmacptr}{macptr}, \livelink{chap:classrangelistptr}{rangelistptr} \\
 \DWFORMexprloc{} &0x18&\livelink{chap:classexprloc}{exprloc} \\
 \DWFORMflagpresent{} &0x19&\livelink{chap:classflag}{flag} \\
+\DWFORMstrx &0x1a&\livelink{chap:classstring}{string} \\
+\DWFORMaddrx &0x1b&\livelink{chap:classaddess}{address} \\
 \DWFORMrefsigeight &0x20&\livelink{chap:classreference}{reference} \\
  
 \end{longtable}
@@ -1408,7 +1535,7 @@ Table \refersec{tab:dwarfoperationencodings}.
 
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
-\begin{longtable}{l|l|c|l}
+\begin{longtable}{l|c|c|l}
   \caption{DWARF operation encodings} \label{tab:dwarfoperationencodings} \\
   \hline & &\bfseries No. of  &\\ 
   \bfseries Operation&\bfseries Code &\bfseries Operands &\bfseries Notes\\ \hline
@@ -1422,7 +1549,7 @@ Table \refersec{tab:dwarfoperationencodings}.
 \endlastfoot
 
 \DWOPaddr&0x03&1 & constant address  \\ 
-& & &(size target specific) \\
+& & &(size is target specific) \\
 
 \DWOPderef&0x06&0 & \\
 
@@ -1446,9 +1573,6 @@ Table \refersec{tab:dwarfoperationencodings}.
 \DWOPabs&0x19&0 &   \\
 \DWOPand&0x1a&0 &   \\
 \DWOPdiv&0x1b&0 &   \\
-
-
-
 \DWOPminus&0x1c&0 & \\
 \DWOPmod&0x1d&0 & \\
 \DWOPmul&0x1e&0 & \\
@@ -1473,41 +1597,43 @@ Table \refersec{tab:dwarfoperationencodings}.
 
 \DWOPlitzero & 0x30 & 0 & \\
 \DWOPlitone  & 0x31 & 0& literals 0 .. 31 = \\
-\ldots & & &\hspace{0.5cm}(\DWOPlitzero{} + literal) \\
+\ldots & & &\hspace{0.3cm}(\DWOPlitzero{} + literal) \\
 \DWOPlitthirtyone & 0x4f & 0 & \\ \hline
 
-\DWOPregzero & 0x50 & 0 & \\
-\DWOPregone  & 0x51 & 0&reg 0 .. 31 = \\
-\ldots & & &\hspace{0.5cm}(\DWOPregzero{} + regnum) \\
+\DWOPregzero & 0x50 & 0 & \\*
+\DWOPregone  & 0x51 & 0&reg 0 .. 31 = \\*
+\ldots & & &\hspace{0.3cm}(\DWOPregzero{} + regnum) \\*
 \DWOPregthirtyone & 0x6f & 0 & \\ \hline
 
-\DWOPbregzero & 0x70 &1 & SLEB128 offset \\
-\DWOPbregone  & 0x71 & 1 &base register 0 .. 31 = \\
-... & &              &\hspace{0.5cm}(\DWOPbregzero{} + regnum) \\
+\DWOPbregzero & 0x70 &1 & SLEB128 offset \\*
+\DWOPbregone  & 0x71 & 1 &base register 0 .. 31 = \\*
+... & &              &\hspace{0.3cm}(\DWOPbregzero{} + regnum) \\*
 \DWOPbregthirtyone & 0x8f & 1 & \\ \hline
 
 \DWOPregx{} & 0x90 &1&ULEB128 register \\
 \DWOPfbreg{} & 0x91&1&SLEB128 offset \\
-\DWOPbregx{} & 0x92&2 &ULEB128 register followed \\
-& & & by SLEB128 offset \\
-\DWOPpiece{} & 0x93 &1& ULEB128 size of piece addressed \\
+\DWOPbregx{} & 0x92&2 &ULEB128 register, \\*
+                  & & &SLEB128 offset \\
+\DWOPpiece{} & 0x93 &1& ULEB128 size of piece \\
 \DWOPderefsize{} & 0x94 &1& 1-byte size of data retrieved \\
 \DWOPxderefsize{} & 0x95&1&1-byte size of data retrieved \\
 \DWOPnop{} & 0x96 &0& \\
 
-
 \DWOPpushobjectaddress&0x97&0 &  \\
 \DWOPcalltwo&0x98&1& 2\dash byte offset of DIE \\
 \DWOPcallfour&0x99&1& 4\dash byte offset of DIE \\
-\DWOPcallref&0x9a&1& 4\dash\  or 8\dash byte\\
-     &&& offset of DIE \\
+\DWOPcallref&0x9a&1& 4\dash\  or 8\dash byte offset of DIE \\
 \DWOPformtlsaddress&0x9b &0& \\
 \DWOPcallframecfa{} &0x9c &0& \\
-\DWOPbitpiece&0x9d &2&ULEB128 size followed by \\
-&&&ULEB128 offset\\
-\DWOPimplicitvalue{} &0x9e &2&ULEB128 size followed by \\
-&&&\nolink{block} of that size\\
+\DWOPbitpiece&0x9d &2&ULEB128 size, \\*
+                   &&&ULEB128 offset\\
+\DWOPimplicitvalue{} &0x9e &2&ULEB128 size, \\*
+                   &&&\nolink{block} of that size\\
 \DWOPstackvalue{} &0x9f &0& \\
+\DWOPimplicitpointer{} &0xa0& 2 &4- or 8-byte offset of DIE, \\*
+                              &&&SLEB128 constant offset \\
+\DWOPaddrx&0xa1&1&ULEB128 indirect address \\
+\DWOPconstx&0xa2&1&ULEB128 indirect constant   \\
 \DWOPlouser{} &0xe0 && \\
 \DWOPhiuser{} &\xff && \\
 
@@ -1551,7 +1677,7 @@ the corresponding compilation unit must be defined
 \label{datarep:basetypeattributeencodings}
 
 The encodings of the 
-\hypertarget{chap:DWATencodingencodingofbasetype}
+\hypertarget{chap:DWATencodingencodingofbasetype}{}
 constants used in 
 \addtoindexx{encoding attribute!encoding}
 the 
@@ -1563,9 +1689,9 @@ Table \refersec{tab:basetypeencodingvalues}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
   \caption{Base type encoding values} \label{tab:basetypeencodingvalues} \\
-  \hline \bfseries Base type encoding code name&\bfseries Value \\ \hline
+  \hline \bfseries Base type encoding name&\bfseries Value \\ \hline
 \endfirsthead
-  \bfseries Base type encoding code name&\bfseries Value\\ \hline
+  \bfseries Base type encoding name&\bfseries Value\\ \hline
 \endhead
   \hline \emph{Continued on next page}
 \endfoot
@@ -1620,6 +1746,7 @@ Table \refersec{tab:decimalsignencodings}.
 \end{longtable}
 \end{centering}
 
+\needlines{9}
 The encodings of the constants used in the 
 \DWATendianity{} attribute are given in 
 Table \refersec{tab:endianityencodings}.
@@ -1798,6 +1925,9 @@ defined language.
 \DWLANGGo{} \dag \ddag &0x0016 &0 \\
 \DWLANGModulathree{} \dag \ddag &0x0017 &1 \\
 \DWLANGHaskell{} \dag \ddag &0x0018 &0 \\
+\DWLANGCpluspluszerothree{} \ddag &0x0019 &0 \\
+\DWLANGCpluspluseleven{} \ddag &0x001a &0 \\
+\DWLANGOCaml{} \ddag &0x001b &0        \\
 \DWLANGlouser{} &0x8000 & \\
 \DWLANGhiuser{} &\xffff & \\
 
@@ -1812,7 +1942,7 @@ The value of the common
 class encoding 
 \DWADDRnone{} is 0.
 
-
+\needlines{7}
 \section{Identifier Case}
 \label{datarep:identifiercase}
 
@@ -1849,9 +1979,9 @@ Table \refersec{tab:callingconventionencodings}.
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
   \caption{Calling convention encodings} \label{tab:callingconventionencodings}\\
-  \hline \bfseries Calling Convention name&\bfseries Value \\ \hline
+  \hline \bfseries Calling convention name&\bfseries Value \\ \hline
 \endfirsthead
-  \bfseries Calling Convention name&\bfseries Value\\ \hline
+  \bfseries Calling convention name&\bfseries Value\\ \hline
 \endhead
   \hline \emph{Continued on next page}
 \endfoot
@@ -1881,7 +2011,7 @@ Table \refersec{tab:inlineencodings}.
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
   \caption{Inline encodings} \label{tab:inlineencodings}\\
-  \hline \bfseries Inline Code name&\bfseries Value \\ \hline
+  \hline \bfseries Inline code name&\bfseries Value \\ \hline
 \endfirsthead
   \bfseries Inline Code name&\bfseries Value\\ \hline
 \endhead
@@ -1945,9 +2075,9 @@ Table \refersec{tab:discriminantdescriptorencodings}.
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
   \caption{Discriminant descriptor encodings} \label{tab:discriminantdescriptorencodings}\\
-  \hline \bfseries Descriptor Name&\bfseries Value \\ \hline
+  \hline \bfseries Descriptor name&\bfseries Value \\ \hline
 \endfirsthead
-  \bfseries Descriptor Name&\bfseries Value\\ \hline
+  \bfseries Descriptor name&\bfseries Value\\ \hline
 \endhead
   \hline \emph{Continued on next page}
 \endfoot
@@ -2107,7 +2237,7 @@ the terminating tuple.
 \label{datarep:linenumberinformation}
 
 The \addtoindexi{version number}{version number!line number information}
-in the line number program header is 4
+in the line number program header is \versiondotdebugline{}
 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
 
 The boolean values \doublequote{true} and \doublequote{false} 
@@ -2142,9 +2272,9 @@ Table \refersec{tab:linenumberstandardopcodeencodings}.
 \DWLNSsetbasicblock&0x07 \\
 \DWLNSconstaddpc&0x08 \\
 \DWLNSfixedadvancepc&0x09 \\
-\DWLNSsetprologueend&0x0a \\
-\DWLNSsetepiloguebegin&0x0b \\
-\DWLNSsetisa&0x0c \\
+\DWLNSsetprologueend&0x0a \\*
+\DWLNSsetepiloguebegin&0x0b \\*
+\DWLNSsetisa&0x0c \\*
 
 \end{longtable}
 \end{centering}
@@ -2168,12 +2298,37 @@ Table \refersec{tab:linenumberextendedopcodeencodings}.
   \hline
 \endlastfoot
 
-\DWLNEendsequence&0x01    \\
-\DWLNEsetaddress&0x02\\
-\DWLNEdefinefile&0x03\\
-\DWLNEsetdiscriminator{} &0x04   \\
-\DWLNElouser&0x80   \\
-\DWLNEhiuser&\xff   \\
+\DWLNEendsequence      &0x01 \\
+\DWLNEsetaddress       &0x02 \\
+\DWLNEdefinefile       &0x03 \\
+\DWLNEsetdiscriminator &0x04 \\
+\DWLNEdefinefileMDfive &0c05 \\
+\DWLNElouser           &0x80 \\
+\DWLNEhiuser           &\xff \\
+
+\end{longtable}
+\end{centering}
+
+\needspace{10cm}
+The encodings for the file entry format are given in 
+\addtoindexx{line number opcodes!file entry format encoding}
+Table \refersec{tab:linenumberfileentryformatencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Line number file entry format \mbox{encodings}} \label{tab:linenumberfileentryformatencodings}\\
+  \hline \bfseries File entry format name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries File entry format name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+\DWLNFtimestampsize    & 0x01  \\
+\DWLNFMDfive           & 0x02  \\
 
 \end{longtable}
 \end{centering}
@@ -2197,9 +2352,9 @@ Table \refersec{tab:macinfotypeencodings}.
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
   \caption{Macinfo type encodings} \label{tab:macinfotypeencodings}\\
-  \hline \bfseries Macinfo Type Name&\bfseries Value \\ \hline
+  \hline \bfseries Macinfo type name&\bfseries Value \\ \hline
 \endfirsthead
-  \bfseries Macinfo Type Name&\bfseries Value\\ \hline
+  \bfseries Macinfo type name&\bfseries Value\\ \hline
 \endhead
   \hline \emph{Continued on next page}
 \endfoot
@@ -2308,6 +2463,176 @@ For a \addtoindex{range list} to be specified, the base address of the
 corresponding compilation unit must be defined 
 (see Section \refersec{chap:normalandpartialcompilationunitentries}).
 
+\section{String Offsets Table}
+\label{chap:stringoffsetstable}
+Each set of entries in the string offsets table contained in the
+\dotdebugstroffsets{} section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, 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} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugstroffsets{} 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+\item \texttt{padding} (\addtoindex{uhalf}) \\
+\end{enumerate}
+
+This header is followed by a series of string table offsets.
+For the 32-bit DWARF format, each offset is 4 bytes long; for
+the 64-bit DWARF format, each offset is 8 bytes long.
+
+The \DWATstroffsetsbase{} attribute points to the first
+entry following the header. The entries are indexed
+sequentially from this base entry, starting from 0.
+
+\section{Address Table}
+\label{chap:addresstable}
+Each set of entries in the address table contained in the
+\dotdebugaddr{} section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, 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}).
+
+\needlines{4}
+\item  \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugaddr{} 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item  \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item  \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of segment/address pairs.
+The segment size is given by the \texttt{segment\_size} field of the
+header, and the address size is given by the \texttt{address\_size}
+field of the header. If the \texttt{segment\_size} field in the header
+is zero, the entries consist only of an addresses.
+
+The \DWATaddrbase{} attribute points to the first entry
+following the header. The entries are indexed sequentially
+from this base entry, starting from 0.
+
+\section{Range List Table}
+\label{app:rangelisttable}
+Each set of entries in the range list table contained in the
+\dotdebugranges{} section begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, 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}).
+
+\needlines{4}
+\item  \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugranges{} 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item  \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item  \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of range list entries as
+described in Section \refersec{chap:locationlists}.
+The segment size is given by the
+\texttt{segment\_size} field of the header, and the address size is
+given by the \texttt{address\_size} field of the header. If the
+\texttt{segment\_size} field in the header is zero, the segment
+selector is omitted from the range list entries.
+
+The \DWATrangesbase{} attribute points to the first entry
+following the header. The entries are referenced by a byte
+offset relative to this base address.
+
+
+\section{Location List Table}
+\label{datarep:locationlisttable}
+Each set of entries in the location list table contained in the
+\dotdebugloc{} or \dotdebuglocdwo{}sections begins with a header containing:
+\begin{enumerate}[1. ]
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+A 4-byte or 12-byte length containing the length of
+the set of entries for this compilation unit, not
+including the length field itself. In the 32-bit
+DWARF format, this is a 4-byte unsigned integer
+(which must be less than \xfffffffzero); in the 64-bit
+DWARF format, 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}).
+
+\needlines{4}
+\item  \texttt{version} (\addtoindex{uhalf}) \\
+A 2-byte version identifier containing the value
+\versiondotdebugloc{} 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+
+\needlines{4}
+\item  \texttt{address\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of an address (or the offset portion of an
+address for segmented addressing) on the target
+system.
+
+\needlines{4}
+\item  \texttt{segment\_size} (\addtoindex{ubyte}) \\
+A 1-byte unsigned integer containing the size in
+bytes of a segment selector on the target system.
+\end{enumerate}
+
+This header is followed by a series of location list entries as
+described in Section \refersec{chap:locationlists}.
+The segment size is given by the
+\texttt{segment\_size} field of the header, and the address size is
+given by the \texttt{address\_size} field of the header. If the
+\texttt{segment\_size} field in the header is zero, the segment
+selector is omitted from the range list entries.
+
+The entries are referenced by a byte offset relative to the first
+location list following this header.
+
 
 \section{Dependencies and Constraints}
 \label{datarep:dependenciesandconstraints}
@@ -2315,8 +2640,9 @@ corresponding compilation unit must be defined
 The debugging information in this format is intended to
 exist 
 \addtoindexx{DWARF section names!list of}
-in 
-the \dotdebugabbrev{}, 
+in the
+\dotdebugabbrev{},
+\dotdebugaddr{}, 
 \dotdebugaranges{}, 
 \dotdebugframe{},
 \dotdebuginfo{}, 
@@ -2326,7 +2652,8 @@ the \dotdebugabbrev{},
 \dotdebugpubnames{}, 
 \dotdebugpubtypes{}, 
 \dotdebugranges{}, 
-\dotdebugstr{}
+\dotdebugstr{},
+\dotdebugstroffsets{}
 and 
 \dotdebugtypes{}
 sections of an object file, or equivalent
@@ -2384,6 +2711,7 @@ by address, line number and call frame information sections
 are given in
 Table \ref{tab:integerrepresentationnames}.
 
+\needlines{8}
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{c|l}
@@ -2628,8 +2956,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 \addtoindex{MD5 hash} is computed for the string and the lower 64 bits
-are taken as the type signature.
+an \addtoindex{MD5 hash} is computed for the string and the 
+least significant 64 bits 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 (i.e., a different