Check point of work to date.
authorRon Brender <ron.brender@gmail.com>
Sun, 7 Aug 2016 16:28:28 +0000 (12:28 -0400)
committerRon Brender <ron.brender@gmail.com>
Sun, 7 Aug 2016 16:28:28 +0000 (12:28 -0400)
Signed-off-by: Ron Brender <ron.brender@gmail.com>
14 files changed:
dwarf5/latexdoc/attributesbytag.tex
dwarf5/latexdoc/changesummary.tex
dwarf5/latexdoc/datarepresentation.tex
dwarf5/latexdoc/debugsectionrelationships.tex
dwarf5/latexdoc/dwarf5.tex
dwarf5/latexdoc/dwarfnamecmds.tex
dwarf5/latexdoc/examples.tex
dwarf5/latexdoc/generaldescription.tex
dwarf5/latexdoc/introduction.tex
dwarf5/latexdoc/otherdebugginginformation.tex
dwarf5/latexdoc/programscope.tex
dwarf5/latexdoc/sectionversionnumbers.tex
dwarf5/latexdoc/splitobjects.tex
dwarf5/latexdoc/typeentries.tex

index 5c1d672..f5941d5 100644 (file)
@@ -211,7 +211,9 @@ For simplicity, this attribute is not explicitly shown.
 &\DWATname{} \\*
 &\DWATproducer{} \\*
 &\DWATranges{} \\*
-&\DWATrangesbase{} \\*
+\bb
+&\DWATrnglistsbase{} 
+\eb \\*
 &\DWATsegment{} \\*
 &\DWATstmtlist{} \\*
 &\DWATstroffsetsbase{} \\*
@@ -360,6 +362,12 @@ For simplicity, this attribute is not explicitly shown.
 &\DWATupperbound{}  \\*
 &\DWATvisibility{}  \\
 
+\hline
+\DWTAGimmutabletype
+\bbeb&\livelink{chap:DECL}{DECL} \\*
+\bbeb&\DWATname \\*
+\bbeb&\DWATtype \\
+
 \hline
 \DWTAGimporteddeclaration
 &\livelink{chap:DECL}{DECL} \\*
@@ -512,7 +520,9 @@ For simplicity, this attribute is not explicitly shown.
 &\DWATname{}  \\*
 &\DWATproducer{}  \\*
 &\DWATranges{}  \\*
-&\DWATrangesbase{} \\*
+\bb
+&\DWATrnglistsbase{} 
+\eb \\*
 &\DWATsegment{}  \\*
 &\DWATstmtlist{}  \\*
 &\DWATstroffsetsbase{} \\*
@@ -604,7 +614,9 @@ For simplicity, this attribute is not explicitly shown.
 &\DWAThighpc{} \\*
 &\DWATlowpc{} \\*
 &\DWATranges{} \\*
-&\DWATrangesbase{} \\*
+\bb
+&\DWATrnglistsbase{} 
+\eb \\*
 &\DWATstmtlist{} \\*
 &\DWATstroffsetsbase{} \\*
 &\DWATuseUTFeight{} 
index 6397900..88813bd 100644 (file)
@@ -15,6 +15,9 @@ This change summary is included only in draft versions of this document.
 \begin{longtable}{ll}
 \textbf{Date}  & \textbf{Issue Incorporated or Other Change}   \\ \hline       \\
 \endhead
+8/4-7/2016      & 160123.1 (unify location and range lists), 160714.1 (location and range list sections), \\
+                & 151004.1 (immutable type), usage of \doublequote{should} \\
+7/9/2016        & Other editorial \\
 6/24/2016       & Editoiral changes in 6.1.1.4.x, 7.3.5.3 \\
 6/23/2016       & Remove change bars,  160301.1 (unnamed namespace), 160620.1 (generic type) \\
 5/19-20/2016    & 150331.1 (Add language RenderScript), 160108.1 (Unify unit headers) \\
index fcefb55..bd94250 100644 (file)
@@ -109,8 +109,13 @@ is one of the fields that occur at the beginning
 of those DWARF sections that have a header
 (\dotdebugaranges{}, 
 \dotdebuginfo{}, 
-\dotdebugline{} and
-\dotdebugnames{}) or the length field
+\dotdebugline{},
+\bb
+\dotdebugloclists{},
+\dotdebugnames{} and
+\dotdebugrnglists) 
+\eb
+or the length field
 that occurs at the beginning of the CIE and FDE structures
 in the \dotdebugframe{} section.
 
@@ -173,10 +178,8 @@ the virtual address space of the program, and require relocation.
 These attributes refer to
 debugging information in other debugging information sections within
 the object file, and must be relocated during the linking process.
-\par
-However, if a \DWATrangesbase{} attribute is present, the offset in
-a \DWATranges{} attribute (which uses form \DWFORMsecoffset) is
-relative to the given base offset--no relocation is involved.
+
+\bbpareb
 
 \item Debugging information entries may have attributes with the form
 \DWFORMrefaddr{} (see Section \refersec{datarep:attributeencodings}). 
@@ -190,10 +193,18 @@ relocation.
 These attributes refer to strings in
 the \dotdebugstr{} section. These values require relocation.
 
-\item Entries in the \dotdebugaddr, \dotdebugloc{}, \dotdebugranges{} 
+\item Entries in the \dotdebugaddr{} 
+\bbeb
 and \dotdebugaranges{}
-sections contain references to locations within the virtual address
-space of the program, and require relocation.
+sections may contain references to locations within the virtual address
+space of the program, and thus require relocation.
+
+\bb
+\item Entries in the \dotdebugloclists{} and \dotdebugrnglists{} sections may
+contain references to locations within the virtual address space of the 
+program depending on whether certain kinds of location or range
+list entries are used, and thus require relocation.
+\eb
 
 \item In the \dotdebugline{} section, the operand of the \DWLNEsetaddress{}
 opcode is a reference to a location within the virtual address space
@@ -244,10 +255,12 @@ 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
+The line number tables, 
+\bbeb
+frame tables, and
 accelerated access tables, in the usual sections:
-\dotdebugline, \dotdebuglinestr, \dotdebugranges, \dotdebugframe,
-\dotdebugnames{} and \dotdebugaranges,
+\dotdebugline, \dotdebuglinestr, 
+\dotdebugframe, \dotdebugnames{} and \dotdebugaranges,
 respectively.
 \needlines{4}
 \item
@@ -255,8 +268,12 @@ 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.
+the \DWFORMaddrx{} form, 
+\bb
+by the \DWOPaddrx{} and \DWOPconstx{} operators, and
+by certain of the \texttt{DW\_LLE\_*} location list
+and \texttt{DW\_RLE\_*} range list entries.
+\eb
 \item
 A skeleton compilation unit, as described in Section
 \refersec{chap:skeletoncompilationunitentries}, 
@@ -296,8 +313,7 @@ file. This partition includes the following:
 \begin{itemize}
 \item
 The full compilation unit, in the \dotdebuginfodwo{} section.
-\begin{itemize}
-\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
@@ -305,12 +321,7 @@ form, which accesses the table of addresses specified by the
 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}
+\bbpareb
 
 \item Separate type units, in the \dotdebuginfodwo{} section.
 
@@ -321,11 +332,20 @@ units, in the \dotdebugabbrevdwo{} section
 used by the \dotdebuginfodwo{} section.
 \eb
 
-\item Location lists, in the \dotdebuglocdwo{} section.
+\item Location lists, in the 
+\bb
+\dotdebugloclistsdwo{} section.
+\eb
+
+\bb
+\item Range lists, in the \dotdebugrnglistsdwo{} section.
+\eb
 
 \item
 A \addtoindex{specialized line number table} (for the type units), 
-in the \dotdebuglinedwo{} section. This table
+in the \dotdebuglinedwo{} section. 
+
+This table
 contains only the directory and filename lists needed to
 interpret \DWATdeclfile{} attributes in the debugging
 information entries.
@@ -421,7 +441,8 @@ files, and combined, section by section:
     \dotdebuginfodwo
     \dotdebugabbrevdwo
     \dotdebuglinedwo
-    \dotdebuglocdwo
+    \dotdebugloclistsdwo
+    \dotdebugrnglistsdwo
     \dotdebugstroffsetsdwo
     \dotdebugstrdwo
     \dotdebugmacrodwo
@@ -456,7 +477,8 @@ following sections:
     \dotdebuginfodwo{} (required)
     \dotdebugabbrevdwo{} (required)
     \dotdebuglinedwo
-    \dotdebuglocdwo
+    \dotdebugloclistsdwo
+    \dotdebugrnglistsdwo
     \dotdebugstroffsetsdwo
     \dotdebugmacrodwo
 \end{alltt}
@@ -466,7 +488,7 @@ information from \DWARFVersionIV{} or earlier formats.}
 
 \subsubsection{The Type Unit (TU) Index Section}
 The \dotdebugtuindex{} section is a hashed lookup table that maps a
-type signature to a set of offsets into the various debug
+type signature to a set of offsets in the various debug
 information sections. Each contribution is stored as an offset
 within its corresponding section and a size.
 
@@ -593,10 +615,14 @@ starting at 1.
 \textit{Reserved}       & 2 & \\
 \DWSECTABBREVTARG       & 3 & \dotdebugabbrevdwo \\
 \DWSECTLINETARG         & 4 & \dotdebuglinedwo \\
-\DWSECTLOCTARG          & 5 & \dotdebuglocdwo \\
+\bb
+\DWSECTLOCLISTSTARG     & 5 & \dotdebugloclistsdwo
+\eb \\
 \DWSECTSTROFFSETSTARG   & 6 & \dotdebugstroffsetsdwo \\
-%DWSECTMACINFO          &   & \dotdebugmacinfodwo \\
 \DWSECTMACROTARG        & 7 & \dotdebugmacrodwo \\
+\bb
+\DWSECTRNGLISTSTARG         & 8 & \dotdebugrnglistsdwo
+\eb \\
 \end{longtable}
 \end{centering}
 
@@ -696,7 +722,7 @@ provides unique identification of the supplementary file.
 Debug information entries that refer to an executable's or shared
 object's addresses must \emph{not} be moved to supplementary files 
 (the addesses will likely not be the same). Similarly,
-entries referenced from within location descriptions or using loclistptr
+entries referenced from within location descriptions or using loclistsptr
 form attributes must not be moved to a \addtoindex{supplementary object file}.
 
 Executable or shared object file compilation units can use
@@ -812,7 +838,7 @@ Form             & Role  \\ \hline
 \DWFORMrefsup    & offset in \dotdebuginfo{} section of a \mbox{supplementary} object file \\
                    \addtoindexx{supplementary object file}
 \DWFORMsecoffset & offset in a section other than \\
-                & \dotdebuginfo{} or \dotdebugstr{} \\
+                 & \dotdebuginfo{} or \dotdebugstr{} \\
 \DWFORMstrp      & offset in \dotdebugstr{} \\
 \DWFORMstrpsup   & offset in \dotdebugstr{} section of a \mbox{supplementary} object file \\
 \DWOPcallref     & offset in \dotdebuginfo{} \\
@@ -847,10 +873,22 @@ format as follows: in the 32-bit DWARF format, entries are 4-byte
 unsigned integer values; in the 64-bit DWARF format, they are
 8-byte unsigned integers.
 
-\item In the body of the \dotdebugaddr{}, \dotdebugloc{} and \dotdebugranges{}
-sections, the contents of the address size fields depends on the
+\item In the body of the \dotdebugaddr{}
+\bb
+section, 
+\eb
+the contents of the address size fields depends on the
 DWARF format as follows: in the 32-bit DWARF format, these fields
 contain 4; in the 64-bit DWARF format these fields contain 8.
+
+\bb
+\item In the body of the \dotdebugloclists{} and \dotdebugrnglists{}
+sections, the offsets the follow the header depend on the
+DWARF format as follows: in the 32-bit DWARF format, offsets are 4-byte
+unsigned integer values; in the 64-bit DWARF format, they are
+8-byte unsigned integers.
+\eb
+
 \end{enumerate}
 
 
@@ -942,15 +980,14 @@ enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 \endfoot
   \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
-\DWUTcompileTARG~\ddag    &0x01 \\ 
-\DWUTtypeTARG~\ddag       &0x02 \\ 
-\DWUTpartialTARG~\ddag    &0x03 \\ 
-\DWUTskeletonTARG~\ddag       &0x04 \\
-\DWUTsplitcompileTARG~\ddag   &0x05 \\
-\DWUTsplittypeTARG~\ddag      &0x06 \\
-\DWUTlouserTARG~\ddag         &0x80 \\
-\DWUThiuserTARG~\ddag         &\xff 
-\\
+\DWUTcompileTARG~\ddag      &0x01 \\ 
+\DWUTtypeTARG~\ddag         &0x02 \\ 
+\DWUTpartialTARG~\ddag      &0x03 \\ 
+\DWUTskeletonTARG~\ddag     &0x04 \\
+\DWUTsplitcompileTARG~\ddag &0x05 \\
+\DWUTsplittypeTARG~\ddag    &0x06 \\
+\DWUTlouserTARG~\ddag       &0x80 \\
+\DWUThiuserTARG~\ddag       &\xff \\
 \hline
 \end{longtable}
 \end{centering}
@@ -1024,7 +1061,7 @@ 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
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat, this
 is 8 bytes in length.
 \end{enumerate}
 
@@ -1101,7 +1138,7 @@ of the skeleton compilation.
 \needlines{4}
 \item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
 Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
-this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat{}, this
 is 8 bytes in length.
 \end{enumerate}
 
@@ -1324,7 +1361,10 @@ DW\_TAG\_mutable\_type DIE that was defined (only) in \DWARFVersionIII.}
 \DWTAGatomictype~\ddag & 0x47 \\
 \DWTAGcallsite~\ddag & 0x48 \\
 \DWTAGcallsiteparameter~\ddag & 0x49 \\
-\DWTAGskeletonunit~\ddag & 0x4a
+\DWTAGskeletonunit~\ddag & 0x4a \\
+\bb
+\DWTAGimmutabletype~\ddag & 0x4b
+\eb
 \\
 \DWTAGlouser&0x4080      \\
 \DWTAGhiuser&\xffff      \\
@@ -1432,7 +1472,9 @@ Table \referfol{tab:attributeencodings}.
 \DWATsibling&0x01&\livelink{chap:classreference}{reference} 
             \addtoindexx{sibling attribute} \\
 \DWATlocation&0x02&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr}
+\bb
+        \CLASSloclist
+\eb
             \addtoindexx{location attribute}   \\
 \DWATname&0x03&\livelink{chap:classstring}{string} 
             \addtoindexx{name attribute} \\
@@ -1471,8 +1513,10 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{visibility attribute} \\
 \DWATimport&0x18&\livelink{chap:classreference}{reference} 
             \addtoindexx{import attribute}  \\
-\DWATstringlength&0x19&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr}
+\DWATstringlength&0x19&\livelink{chap:classexprloc}{exprloc},
+\bb 
+        \CLASSloclist
+\eb
             \addtoindexx{string length attribute}  \\
 \DWATcommonreference&0x1a&\livelink{chap:classreference}{reference} 
             \addtoindexx{common reference attribute}  \\
@@ -1501,10 +1545,15 @@ Table \referfol{tab:attributeencodings}.
 \DWATprototyped&0x27&\livelink{chap:classflag}{flag}
             \addtoindexx{prototyped attribute}  \\
 \DWATreturnaddr&0x2a&\livelink{chap:classexprloc}{exprloc},
-        \livelink{chap:classloclistptr}{loclistptr}
-            \addtoindexx{return address attribute}  \\
-\DWATstartscope&0x2c&\livelink{chap:classconstant}{constant}, 
-        \livelink{chap:classrangelistptr}{rangelistptr}
+\bb
+        \CLASSloclist
+\eb
+            \addtoindexx{return address attribute} \\            
+\DWATstartscope&0x2c&
+        \livelink{chap:classconstant}{constant},
+\bb 
+        \CLASSrnglist
+\eb
             \addtoindexx{start scope attribute}  \\
 \DWATbitstride&0x2e&\livelink{chap:classconstant}{constant},
         \livelink{chap:classexprloc}{exprloc}, 
@@ -1532,7 +1581,9 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{count attribute}  \\
 \DWATdatamemberlocation&0x38&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{data member attribute}  \\
 \DWATdeclcolumn&0x39&\livelink{chap:classconstant}{constant} 
             \addtoindexx{declaration column attribute}  \\
@@ -1549,7 +1600,9 @@ Table \referfol{tab:attributeencodings}.
 \DWATexternal&\xiiif&\livelink{chap:classflag}{flag} 
             \addtoindexx{external attribute}  \\
 \DWATframebase&0x40&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{frame base attribute}  \\
 \DWATfriend&0x41&\livelink{chap:classreference}{reference} 
             \addtoindexx{friend attribute}  \\
@@ -1565,24 +1618,32 @@ Table \referfol{tab:attributeencodings}.
 \DWATpriority&0x45&\livelink{chap:classreference}{reference} 
             \addtoindexx{priority attribute}  \\
 \DWATsegment&0x46&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{segment attribute}  \\
 \DWATspecification&0x47&\livelink{chap:classreference}{reference} 
         \addtoindexx{specification attribute}  \\
 \DWATstaticlink&0x48&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{static link attribute}  \\
 \DWATtype&0x49&\livelink{chap:classreference}{reference} 
             \addtoindexx{type attribute}  \\
 \DWATuselocation&0x4a&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{location list attribute}  \\
 \DWATvariableparameter&0x4b&\livelink{chap:classflag}{flag} 
             \addtoindexx{variable parameter attribute}  \\
 \DWATvirtuality&0x4c&\livelink{chap:classconstant}{constant} 
             \addtoindexx{virtuality attribute}  \\
 \DWATvtableelemlocation&0x4d&\livelink{chap:classexprloc}{exprloc}, 
-        \livelink{chap:classloclistptr}{loclistptr} 
+\bb
+        \CLASSloclist 
+\eb
             \addtoindexx{vtable element location attribute}  \\
 \DWATallocated&0x4e&\livelink{chap:classconstant}{constant}, 
         \livelink{chap:classexprloc}{exprloc}, 
@@ -1605,7 +1666,10 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{use UTF8 attribute}\addtoindexx{UTF-8}  \\
 \DWATextension&0x54&\livelink{chap:classreference}{reference} 
             \addtoindexx{extension attribute}  \\
-\DWATranges&0x55&\livelink{chap:classrangelistptr}{rangelistptr} 
+\DWATranges&0x55&
+\bb
+        \CLASSrnglist
+\eb        
             \addtoindexx{ranges attribute}  \\
 \DWATtrampoline&0x56&\livelink{chap:classaddress}{address}, 
         \livelink{chap:classflag}{flag}, 
@@ -1676,9 +1740,11 @@ Table \referfol{tab:attributeencodings}.
 \DWATaddrbase~\ddag &0x73&
                \livelinki{chap:classaddrptr}{addrptr}{addrptr class}
             \addtoindexx{address table base!encoding} \\
-\DWATrangesbase~\ddag&0x74&
-               \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}
-            \addtoindexx{ranges base!encoding} \\
+\bb
+\DWATrnglistsbase~\ddag&0x74&
+               \CLASSrnglistsptr
+            \addtoindexx{range list base!encoding} 
+\eb \\
 \textit{Reserved} &0x75& \textit{Unused} \\
 \DWATdwoname~\ddag &0x76&
                \livelink{chap:classstring}{string}
@@ -1723,35 +1789,47 @@ Table \referfol{tab:attributeencodings}.
         \addtoindexx{export symbols attribute} \\
 \DWATdeleted~\ddag &0x8a &\CLASSflag \addtoindexx{deleted attribute} \\
 \DWATdefaulted~\ddag &0x8b &\CLASSconstant \addtoindexx{defaulted attribute} \\
+\bb
+\DWATloclistsbase~\ddag &0x8c &\CLASSloclistsptr \addtoindexx{location list base attribute}
+\eb
+\\
 \DWATlouser&0x2000 & --- \addtoindexx{low user attribute encoding}  \\
 \DWAThiuser&\xiiifff& --- \addtoindexx{high user attribute encoding}  \\
 
 \end{longtable} 
 \end{centering}
 
-The attribute form governs how the value of the attribute is
-encoded. There are nine classes of form, listed below. Each
-class is a set of forms which have related representations
+\bb
+\subsection{Classes and Forms}
+\eb
+\label{datarep:classesandforms}
+\bb
+Each class is a set of forms which have related representations
 and which are given a common interpretation according to the
 attribute in which the form is used.
+The attribute form governs how the value of an attribute is
+encoded. 
+The classes and the forms they include are listed below. 
+\eb
 
 Form \DWFORMsecoffsetTARG{} 
-is a member of more 
-\addtoindexx{rangelistptr class}
-than 
-\addtoindexx{macptr class}
-one 
-\addtoindexx{loclistptr class}
-class,
-\addtoindexx{lineptr class}
-namely 
-\CLASSaddrptr, 
-\CLASSlineptr, 
-\CLASSloclistptr, 
-\CLASSmacptr,  
-\CLASSrangelistptr{} or
-\CLASSstroffsetsptr; 
-the list of classes allowed by the applicable attribute in 
+is a member of more than one class, namely 
+\CLASSaddrptr,
+\CLASSlineptr,
+\bb 
+\CLASSloclist, \CLASSloclistsptr, 
+\eb
+\CLASSmacptr,
+\bb
+\CLASSrnglist{}, \CLASSrnglistsptr, 
+\eb
+and
+\CLASSstroffsetsptr;
+\bb
+as a result, it is not possible for an
+attribute to allow more than one of these classes.
+\eb
+The list of classes allowed by the applicable attribute in 
 Table \refersec{tab:attributeencodings}
 determines the class of the form.
 
@@ -1774,13 +1852,13 @@ Each possible form belongs to one or more of the following classes
 the purpose and general usage of each class):
 
 \begin{itemize}
-\item \livelinki{chap:classaddress}{address}{address class} \\
+
+\item \CLASSaddress \\
 \livetarg{datarep:classaddress}{}
 Represented as either:
 \begin{itemize}
 \item An object of appropriate size to hold an
-address on the target machine 
-(\DWFORMaddrTARG). 
+address on the target machine (\DWFORMaddrTARG). 
 The size is encoded in the compilation unit header 
 (see Section \refersec{datarep:compilationunitheader}).
 This address is relocatable in a relocatable object file and
@@ -1798,7 +1876,7 @@ of the associated compilation unit.
 \end{itemize}
 
 \needlines{5}
-\item \livelink{chap:classaddrptr}{addrptr} \\
+\item \CLASSaddrptr \\
 \livetarg{datarep:classaddrptr}{}
 This is an offset into the \dotdebugaddr{} section (\DWFORMsecoffset). It
 consists of an offset from the beginning of the \dotdebugaddr{} section to the
@@ -1813,7 +1891,7 @@ format, it is an 8-byte unsigned value (see Section
 \textit{This class is new in \DWARFVersionV.}
 
 \needlines{4}
-\item \livelink{chap:classblock}{block} \\
+\item \CLASSblock \\
 \livetarg{datarep:classblock}{}
 Blocks come in four forms:
 \begin{itemize}
@@ -1840,7 +1918,7 @@ that follow. The information bytes may contain any mixture
 of relocated (or relocatable) addresses, references to other
 debugging information entries or data bytes.
 
-\item \livelinki{chap:classconstant}{constant}{constant class} \\
+\item \CLASSconstant \\
 \livetarg{datarep:classconstant}{}
 There are eight forms of constants. There are fixed length
 constant data forms for one-, two-, four-, eight- and sixteen-byte values
@@ -1882,24 +1960,22 @@ unsigned integers respectively, rather than
 \DWFORMdata\textless n\textgreater.}
 
 \needlines{4}
-\item \livelinki{chap:classexprloc}{exprloc}{exprloc class} \\
+\item \CLASSexprloc \\
 \livetarg{datarep:classexprloc}{}
-This is an unsigned LEB128\addtoindexx{LEB128!unsigned} length followed by the
-number of information bytes specified by the length
-(\DWFORMexprlocTARG). 
+This is an unsigned LEB128\addtoindexx{LEB128!unsigned} length 
+followed by the number of information bytes specified by the 
+length (\DWFORMexprlocTARG). 
 The information bytes contain a DWARF expression 
 (see Section \refersec{chap:dwarfexpressions}) 
 or location description 
 (see Section \refersec{chap:locationdescriptions}).
 
 \needlines{4}
-\item \livelinki{chap:classflag}{flag}{flag class} \\
+\item \CLASSflag \\
 \livetarg{datarep:classflag}{}
 A flag \addtoindexx{flag class}
 is represented explicitly as a single byte of data
-(\DWFORMflagTARG) or 
-implicitly (\DWFORMflagpresentTARG). 
-In the
+(\DWFORMflagTARG) or implicitly (\DWFORMflagpresentTARG). In the
 first case, if the \nolink{flag} has value zero, it indicates the
 absence of the attribute; if the \nolink{flag} has a non-zero value,
 it indicates the presence of the attribute. In the second
@@ -1907,7 +1983,7 @@ 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} \\
+\item \CLASSlineptr \\
 \livetarg{datarep:classlineptr}{}
 This is an offset into 
 \addtoindexx{section offset!in class lineptr value}
@@ -1925,28 +2001,51 @@ relocated in an executable or shared object file. In the
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\bb
+\item \CLASSloclist \\
+\livetarg{datarep:classloclist}{}
+This is represented as either:
+\begin{itemize}
+\item
+An index into the \dotdebugloclists{} section (\DWFORMloclistxTARG). 
+The unsigned ULEB operand identifies an offset location 
+relative to the base of that section (the location of the first offset 
+in the section, not the first byte of the section). The contents of 
+that location is then added to the base to determine the location of 
+the target list of entries.
+\item
+An offset into the \dotdebugloclists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class loclist value}
+from the beginning of the \dotdebugloclists{} section.
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object file. In the 
+\thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
+in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\end{itemize}
+
+\textit{This class is new in \DWARFVersionV.}
+\eb
 
-\item \livelinki{chap:classloclistptr}{loclistptr}{loclistptr class} \\
-\livetarg{datarep:classloclistptr}{}
-This is an offset into the 
-\dotdebugloc{}
-section
-(\DWFORMsecoffset). 
-It consists of an offset from the
-\addtoindexx{section offset!in class loclistptr value}
-beginning of the 
-\dotdebugloc{}
-section to the first byte of
-the data making up the 
-\addtoindex{location list} for the compilation unit. 
+\item \CLASSloclistsptr \\
+\livetarg{datarep:classloclistsptr}{}
+This is an offset into the \dotdebugloclists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class loclistsptr}
+from the beginning of the \dotdebugloclists{} section.
+\bbeb
 It is relocatable in a relocatable object file, and
 relocated in an executable or shared object file. In the 
 \thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\bb
+\textit{This class is new in \DWARFVersionV.}
+\eb
 
-\item \livelinki{chap:classmacptr}{macptr}{macptr class} \\
+\item \CLASSmacptr \\
 \livetarg{datarep:classmacptr}{}
 This is an 
 \addtoindexx{section offset!in class macptr value}
@@ -1963,53 +2062,65 @@ relocated in an executable or shared object file. In the
 in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
+\bb
+\item \CLASSrnglist \\
+\livetarg{datarep:classrnglist}{}
+This is represented as either:
+\begin{itemize}
+\item
+An index into the \dotdebugrnglists{} section (\DWFORMrnglistxTARG). 
+The unsigned ULEB operand identifies an offset location 
+relative to the base of that section (the location of the first offset 
+in the section, not the first byte of the section). The contents of 
+that location is then added to the base to determine the location of 
+the target range list of entries.
+\item
+An offset into the \dotdebugloclists{} section (\DWFORMsecoffset). 
+The operand consists of a byte 
+offset\addtoindexx{section offset!in class loclist value}
+from the beginning of the \dotdebugloclists{} section.
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object file. In the 
+\thirtytwobitdwarfformat, this offset is a 4-byte unsigned value;
+in the \sixtyfourbitdwarfformat, it is an 8-byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+\end{itemize}
+
+\textit{This class is new in \DWARFVersionV.}
+\eb
+
 \needlines{4}
-\item \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class} \\
-\livetarg{datarep:classrangelistptr}{}
-This is an 
-\addtoindexx{section offset!in class rangelistptr value}
-offset into the \dotdebugranges{} section
-(\DWFORMsecoffset). 
-It consists of an
-offset from the beginning of the 
-\dotdebugranges{} section
-to the beginning of the non-contiguous address ranges
-information for the referencing entity.  
-It is relocatable in
-a relocatable object file, and relocated in an executable or
-shared object file. 
-However, if a \DWATrangesbase{} attribute applies, the offset
-is relative to the base offset given by \DWATrangesbase.
+\item \CLASSrnglistsptr \\
+\livetarg{datarep:classrnglistsptr}{}
+This is an offset\addtoindexx{section offset!in class rnglistsptr}
+into the \dotdebugrnglists{} section (\DWFORMsecoffset). 
+It consists of a byte offset from the beginning of the 
+\dotdebugrnglists{} section.
+It is relocatable in a relocatable object file, and relocated 
+in an executable or shared object file.
+\bbeb 
 In the \thirtytwobitdwarfformat, this offset
 is a 4-byte unsigned value; in the 64-bit DWARF
 format, it is an 8-byte unsigned value (see Section
 \refersec{datarep:32bitand64bitdwarfformats}).
-\end{itemize}
 
-\textit{Because classes
-\CLASSaddrptr, 
-\CLASSlineptr, 
-\CLASSloclistptr, 
-\CLASSmacptr, 
-\CLASSrangelistptr{} and
-\CLASSstroffsetsptr{}
-share a common representation, it is not possible for an
-attribute to allow more than one of these classes}
+\bb
+\textit{This class is new in \DWARFVersionV.}
+\eb
+
+\bbpareb
 
 \needlines{4}
-\begin{itemize}
-\item \livelinki{chap:classreference}{reference}{reference class} \\
+\item \CLASSreference \\
 \livetarg{datarep:classreference}{}
-There are four types of reference.
-
-The 
-\addtoindexx{reference class}
-first type of reference can identify any debugging
+There are four types of reference.\addtoindexx{reference class}
+\begin{itemize}
+\item
+The first type of reference can identify any debugging
 information entry within the containing unit. 
-This type of
-reference is an 
-\addtoindexx{section offset!in class reference value}
-offset from the first byte of the compilation
+This type of reference is an 
+offset\addtoindexx{section offset!in class reference value}
+from the first byte of the compilation
 header for the compilation unit containing the reference. There
 are five forms for this type of reference. There are fixed
 length forms for one, two, four and eight byte offsets
@@ -2027,6 +2138,7 @@ Because this type of reference is within
 the containing compilation unit no relocation of the value
 is required.
 
+\item
 The second type of reference can identify any debugging
 information entry within a 
 \dotdebuginfo{} section; in particular,
@@ -2061,6 +2173,7 @@ section in the same fashion as the run
 time loader, either when the debug information is first read,
 or when the reference is used.}
 
+\item
 The third type of reference can identify any debugging
 information type entry that has been placed in its own
 \addtoindex{type unit}. This type of 
@@ -2070,6 +2183,7 @@ reference (\DWFORMrefsigeightTARG) is the
 (see Section \refersec{datarep:typesignaturecomputation}) 
 that was computed for the type. 
 
+\item
 The fourth type of reference is a reference from within the 
 \dotdebuginfo{} section of the executable or shared object file to
 a debugging information entry in the \dotdebuginfo{} section of 
@@ -2088,9 +2202,10 @@ across compilation units from different executables or shared object files.}
 \textit{A reference to any kind of compilation unit identifies the
 debugging information entry for that unit, not the preceding
 header.}
+\end{itemize}
 
 \needlines{4}
-\item \livelinki{chap:classstring}{string}{string class} \\
+\item \CLASSstring \\
 \livetarg{datarep:classstring}{}
 A string is a sequence of contiguous non\dash null bytes followed by
 one null byte. 
@@ -2149,7 +2264,7 @@ of strings; for compatibility, this version also does
 not. However, the UTF\dash 8 representation is strongly recommended.}
 
 \needlines{4}
-\item \livelinki{chap:classstroffsetsptr}{stroffsetsptr}{stroffsetsptr class} \\
+\item \CLASSstroffsetsptr \\
 \livetarg{datarep:classstroffsetsptr}{}
 This is an offset into the \dotdebugstroffsets{} section 
 (\DWFORMsecoffset). It consists of an offset from the beginning of the 
@@ -2169,13 +2284,17 @@ it is an 8-byte unsigned value (see Section
 In no case does an attribute use one of the classes 
 \CLASSaddrptr,
 \CLASSlineptr,
-\CLASSloclistptr, 
+\CLASSloclistsptr, 
 \CLASSmacptr, 
-\CLASSrangelistptr{} or 
+\CLASSrnglistsptr{} or 
 \CLASSstroffsetsptr{}
 to point into either the
 \dotdebuginfo{} or \dotdebugstr{} section.
 
+\bb
+\subsection{Form Encodings}
+\label{datarep:formencodings}
+\eb
 The form encodings are listed in 
 Table \referfol{tab:attributeformencodings}.
 
@@ -2215,8 +2334,11 @@ Table \referfol{tab:attributeformencodings}.
 \DWFORMrefeight&0x14&\livelink{chap:classreference}{reference} \\
 \DWFORMrefudata&0x15&\livelink{chap:classreference}{reference}  \\
 \DWFORMindirect&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
-\DWFORMsecoffset{} &0x17& \CLASSaddrptr, \CLASSlineptr, \CLASSloclistptr, \\
-                   &    & \CLASSmacptr, \CLASSrangelistptr, \CLASSstroffsetsptr \\
+\bb
+\DWFORMsecoffset{} &0x17& \CLASSaddrptr, \CLASSlineptr, \CLASSloclist, \CLASSloclistsptr, \\
+                   &    & \CLASSmacptr, \CLASSrnglist, \CLASSrnglistsptr, \CLASSstroffsetsptr
+                   \eb
+                   \\
 \DWFORMexprloc{} &0x18&\livelink{chap:classexprloc}{exprloc} \\
 \DWFORMflagpresent{} &0x19&\livelink{chap:classflag}{flag} \\
 \DWFORMstrx{} \ddag &0x1a&\livelink{chap:classstring}{string} \\
@@ -2227,6 +2349,10 @@ Table \referfol{tab:attributeformencodings}.
 \DWFORMlinestrp~\ddag &0x1f &\CLASSstring \\
 \DWFORMrefsigeight &0x20 &\livelink{chap:classreference}{reference} \\
 \DWFORMimplicitconst~\ddag &0x21 &\CLASSconstant \\
+\bb
+\DWFORMloclistx~\ddag \eb &0x22 &\CLASSloclist \\
+\bb
+\DWFORMrnglistx~\ddag \eb &0x23 &\CLASSrnglist \\
 \end{longtable}
 \end{centering}
 
@@ -2493,35 +2619,16 @@ location of a variable or other entity.
 
 \subsection{Location Lists}
 \label{datarep:locationlists}
-
 Each entry in a \addtoindex{location list} is either a location list entry,
-a base address selection entry, or an 
+a base address 
+\bb
+entry, a default location entry or an 
+\eb
 \addtoindexx{end-of-list entry!in location list}
 end-of-list entry.
 
-\needlines{6}
-\subsubsection{Location List Entries in Non-Split Objects}
-A \addtoindex{location list} entry consists of two address offsets followed
-by an unsigned 2-byte length, followed by a block of contiguous bytes
-that contains a DWARF location description. The length
-specifies the number of bytes in that block. The two offsets
-are the same size as an address on the target machine.
+\bbpareb
 
-\needlines{5}
-A base address selection entry and an 
-\addtoindexx{end-of-list entry!in location list}
-end-of-list entry each
-consist of two (constant or relocated) address offsets. The two
-offsets are the same size as an address on the target machine.
-
-For a \addtoindex{location list} to be specified, the base address of
-\addtoindexx{base address selection entry!in location list}
-the corresponding compilation unit must be defined 
-(see Section \refersec{chap:fullandpartialcompilationunitentries}).
-
-\subsubsection{Location List Entries in Split Objects}
-\label{datarep:locationlistentriesinsplitobjects}
-An alternate form for location list entries is used in split objects. 
 Each entry begins with an unsigned 1-byte code that indicates the kind of entry
 that follows. The encodings for these constants are given in
 Table \refersec{tab:locationlistentryencodingvalues}.
@@ -2530,7 +2637,8 @@ Table \refersec{tab:locationlistentryencodingvalues}.
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
-  \caption{Location list entry encoding values} \label{tab:locationlistentryencodingvalues} \\
+  \caption{Location list entry encoding values} 
+  \label{tab:locationlistentryencodingvalues} \\
   \hline \bfseries Location list entry encoding name&\bfseries Value \\ \hline
 \endfirsthead
   \bfseries Location list entry encoding name&\bfseries Value\\ \hline
@@ -2538,12 +2646,19 @@ Table \refersec{tab:locationlistentryencodingvalues}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
+  \ddag New in \DWARFVersionV
 \endlastfoot
-\DWLLEendoflistentry & 0x0 \\
-\DWLLEbaseaddressselectionentry & 0x01 \\
-\DWLLEstartendentry & 0x02 \\
-\DWLLEstartlengthentry & 0x03 \\
-\DWLLEoffsetpairentry & 0x04 \\
+\bb
+\DWLLEendoflist~\ddag & 0x00 \\
+\DWLLEbaseaddressx~\ddag & 0x01 \\
+\DWLLEstartxendx~\ddag & 0x02 \\
+\DWLLEstartxlength~\ddag & 0x03 \\
+\DWLLEoffsetpair~\ddag & 0x04 \\
+\DWLLEdefaultlocation~\ddag & 0x05 \\
+\DWLLEbaseaddress~\ddag & 0x06 \\
+\DWLLEstartend~\ddag & 0x07 \\
+\DWLLEstartlength~\ddag & 0x08
+\eb \\
 \end{longtable}
 \end{centering}
 
@@ -3326,8 +3441,10 @@ Table \refersec{tab:callframeinstructionencodings}.
 \end{longtable}
 \end{centering}
 
-\section{Non-contiguous Address Ranges}
+\bb
+\section{Range List Entries for Non-contiguous Address Ranges}
 \label{datarep:noncontiguousaddressranges}
+\eb
 
 Each entry in a \addtoindex{range list}
 (see Section \refersec{chap:noncontiguousaddressranges})
@@ -3337,16 +3454,39 @@ range list entry,
 \addtoindexx{range list}
 a base address selection entry, or an end-of-list entry.
 
-A \addtoindex{range list} entry consists of two relative addresses. The
-addresses are the same size as addresses on the target machine.
+\bb
+Each entry begins with an unsigned 1-byte code that indicates the kind of entry
+that follows. The encodings for these constants are given in
+Table \refersec{tab:rnglistsentryencodingvalues}.
+\eb
 
-\needlines{4}
-A base address selection entry and an 
-\addtoindexx{end-of-list entry!in range list}
-end-of-list entry each
-\addtoindexx{base address selection entry!in range list}
-consist of two (constant or relocated) addresses. The two
-addresses are the same size as addresses on the target machine.
+\needlines{10}
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Range list entry encoding values} 
+  \label{tab:rnglistsentryencodingvalues} \\
+  \hline \bfseries Range list entry encoding name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Range list entry encoding name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+  \ddag New in \DWARFVersionV
+\endlastfoot
+\bb
+\DWRLEendoflist~\ddag    & 0x00 \\
+\DWRLEbaseaddressx~\ddag & 0x01 \\
+\DWRLEstartxendx~\ddag   & 0x02 \\
+\DWRLEstartxlength~\ddag & 0x03 \\
+\DWRLEoffsetpair~\ddag   & 0x04 \\
+\DWRLEbaseaddress~\ddag  & 0x05 \\
+\DWRLEstartend~\ddag     & 0x06 \\
+\DWRLEstartlength~\ddag  & 0x07
+\eb \\
+\end{longtable}
+\end{centering}
 
 For a \addtoindex{range list} to be specified, the base address of the
 \addtoindexx{base address selection entry!in range list}
@@ -3439,9 +3579,11 @@ from this base entry, starting from 0.
 
 \needlines{10}
 \section{Range List Table}
-\label{app:rangelisttable}
-Each set of entries in the range list table contained in the
-\dotdebugranges{} section begins with a header containing:
+\label{app:ranglisttable}
+\bb
+Each \dotdebugrnglists{} and \dotdebugrnglistsdwo{} section 
+\eb
+begins with a header containing:
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
@@ -3459,7 +3601,7 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
-\versiondotdebugranges{}. 
+\versiondotdebugrnglists{}. 
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3472,25 +3614,46 @@ system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
+
+\bb
+\item   \HFNoffsetentrycount{} (\HFTuword) \\
+A 4-byte count of the number of offsets
+that follow the header.
+\eb
 \end{enumerate}
 
-This header is followed by a series of range list entries as
+\bb
+Immediately following the header is an array of offsets.
+This array is followed by a series of range lists. 
+    
+There is one offset for each range list. The contents
+of the $i$\textsuperscript{th} offset is the offset from the
+beginning of the offset array to the location of the 
+$i$\textsuperscript{th} range list. Range lists are
 described in Section \refersec{chap:noncontiguousaddressranges}.
+\eb
+    
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \addttindex{address\_size} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
 selector is omitted from the range list entries.
 
-The \DWATrangesbase{} attribute points to the first entry
-following the header. The entries are referenced by a byte
-offset relative to this base address.
-
+\bb
+The \DWATrnglistsbase{} attribute points to the first offset 
+following the header. The range lists are referenced
+by the index of the position of their corresponding offset in the
+array of offsets, which indirectly specifies the offset to the
+target list.
+\eb
 \needlines{12}
 \section{Location List Table}
 \label{datarep:locationlisttable}
-Each set of entries in the location list table contained in the
-\dotdebugloc{} or \dotdebuglocdwo{} sections begins with a header containing:
+\bb
+Each \dotdebugloclists{} or \dotdebugloclistsdwo{} section 
+\eb
+begins with a header containing:
 \begin{enumerate}[1. ]
 \item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
 \addttindexx{unit\_length}
@@ -3508,7 +3671,7 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \item  \texttt{version} (\HFTuhalf) \\
 \addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
-\versiondotdebugloc{}.
+\versiondotdebugloclists{}.
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3521,18 +3684,38 @@ system.
 \item  \HFNsegmentselectorsize{} (\HFTubyte) \\
 A 1-byte unsigned integer containing the size in
 bytes of a segment selector on the target system.
+
+\bb
+\item   \HFNoffsetentrycount{} (\HFTuword) \\
+A 4-byte count of the number of offsets
+that follow the header.
+\eb
 \end{enumerate}
 
-This header is followed by a series of location list entries as
+\bb
+Immediately following the header is an array of offsets.
+This array is followed by a series of location lists. 
+    
+There is one offset for each location list. The contents
+of the $i$\textsuperscript{th} offset is the offset from the
+beginning of the offset array to the location of the 
+$i$\textsuperscript{th} location list. Location lists are
 described in Section \refersec{chap:locationlists}.
+\eb
+
 The segment size is given by the
 \HFNsegmentselectorsize{} field of the header, and the address size is
 given by the \HFNaddresssize{} field of the header. If the
 \HFNsegmentselectorsize{} field in the header is zero, the segment
-selector is omitted from range list entries.
+selector is omitted from location list entries.
 
-The entries are referenced by a byte offset relative to the first
-location list following this header.
+\bb
+The \DWATloclistsbase{} attribute points to the first offset 
+following the header. The location lists are referenced
+by the index of the position of their corresponding offset in the
+array of offsets, which indirectly specifies the offset to the
+target list.
+\eb
 
 \needlines{6}
 \section{Dependencies and Constraints}
@@ -3855,11 +4038,13 @@ Steps 6 and 7 are themselves suitable for a separate
 \addtoindex{type unit}.}
 
 \needlines{4}
-Where the DWARF producer may reasonably choose two or more
-different forms for a given attribute, it should choose
+\bb
+\textit{Where the DWARF producer may reasonably choose two or 
+more different forms for a given attribute, it should choose
 the simplest possible form in computing the signature. (For
 example, a constant value should be preferred to a location
-expression when possible.)
+expression when possible.)}
+\eb
 
 Once the string S has been formed from the DWARF encoding,
 an 16-byte \MDfive{} digest is computed for the string and the 
index 3f53354..e9bcf91 100644 (file)
@@ -78,7 +78,7 @@ or shareable file and a related \addtoindex{supplementary object file}.
 \node(zlinkj)   at (5,  5.4)  [link] {\DWATstmtlist{}~~(h)};
 \node(zlinkh)   at (5,  3.9)  [link] {\begin{tabular}{c}
                                       \DWATranges{}~~~~(i) \\
-                                      \DWATrangesbase
+                                      \DWATrnglistsbase
                                       \end{tabular}};
 \node(zlinkg)   at (5,  2.4)  [link] {\DWATlocation{}, etc.~~(j)};
 \node(zlinkk)  at (5,  0.5)  [link] {\begin{tabular}(c)
@@ -117,8 +117,8 @@ or shareable file and a related \addtoindex{supplementary object file}.
                                       \DWMACROstartfile
                                       \end{tabular}};
 \node(zsectlin)        at (10,  5.00) [sect] {\dotdebugline};
-\node(zsectran)        at (10,  3.85) [sect] {\dotdebugranges};
-\node(zsectloc)        at (10,  2.70) [sect] {\dotdebugloc{}};
+\node(zsectran)        at (10,  3.85) [sect] {\dotdebugrnglists};
+\node(zsectloc)        at (10,  2.70) [sect] {\dotdebugloclists{}};
 \node(zlinko)   at (10,  1.20) [link] {\begin{tabular}{c}
                                        \DWOPaddrx \\
                                        \DWOPconstx
@@ -248,21 +248,22 @@ beginning of the line number information for the referencing unit.
 
 %i
 \needlines{5}
-\itembfnl{(i) \dotdebuginfo{} to \dotdebugranges}
-An attribute value of class \livelink{chap:classrangelistptr}{rangelistptr} 
-(specifically form
-\DWFORMsecoffset) 
-is an offset within the \dotdebugranges{} section of
-a range list.
+\bb
+\itembfnl{(i) \dotdebuginfo{} to \dotdebugrnglists}
+An attribute value of class \CLASSrnglist{} 
+(specifically form \DWFORMrnglistx{} or \DWFORMsecoffset) 
+is an index or offset within the \dotdebugrnglists{} 
+\eb
+section of a \addtoindex{range list}.
 
 %j
-\itembfnl{(j) \dotdebuginfo{} to \dotdebugloc}
-An attribute value of class \livelink{chap:classloclistptr}{loclistptr} 
-(specifically form
-\DWFORMsecoffset) 
-is an offset within the \dotdebugloc{} 
-section of a
-\addtoindex{location list}.
+\bb
+\itembfnl{(j) \dotdebuginfo{} to \dotdebugloclists}
+An attribute value of class \CLASSloclist{} 
+(specifically form \DWFORMloclistx or \DWFORMsecoffset) 
+is an index or offset within the \dotdebugloclists{}
+\eb
+section of a \addtoindex{location list}.
 
 %k
 \itembfnl{(k) \dotdebuginfo{} to \dotdebugaddr}
@@ -295,9 +296,9 @@ The second operand of
 of that section given in the macro information header.
 
 %o
-\itembfnl{(o) \dotdebugloc{} to \dotdebugaddr}
+\itembfnl{(o) \dotdebugloclists{} to \dotdebugaddr}
 \DWOPaddrx{} and \DWOPconstx{} operators that occur in the 
-\dotdebugloc{} section refer indirectly to the 
+\dotdebugloclists{} section refer indirectly to the 
 \dotdebugaddr{} section by way of the 
 \DWATaddrbase{} attribute in the associated \dotdebuginfo{} 
 section.
@@ -350,25 +351,26 @@ The circled (s) connects to the circled
 
 \fill[yellow!25] (7.5,-1) -- (7.5,14.5) -- (19,14.5) -- (19,-1) -- cycle;
 
+% First column
+%
 \node(ysectabb)    at ( 5, 13.5) [sect] {\dotdebugabbrev};
 \node(ysectadd)    at ( 2, 12.0) [sect] {\dotdebugaddr};
 \node(ysectara)    at ( 0, 10.5) [sect] {\dotdebugaranges};
 \node(ysectfra)    at ( 0,  9.0) [sect] {\dotdebugframe};
 \node(ysectlin)    at ( 0,  7.5) [sect] {\dotdebugline};
-\node(ysectlis)    at ( 0,  6.0) [sect] {\dotdebuglinestr};
-\node(ysectnam)    at ( 0,  4.5) [sect] {\dotdebugnames};
-\node(ysectran)    at ( 0,  3.0) [sect] {\dotdebugranges};
-\node(ysectstr)    at ( 2,  1.5) [sect] {\dotdebugstr};
+\node(ysectlis)    at ( 0,  5.7) [sect] {\dotdebuglinestr};
+\node(ysectnam)    at ( 0,  4.0) [sect] {\dotdebugnames};
+\node(ysectstr)    at ( 2,  2.0) [sect] {\dotdebugstr};
 \node(ysectsto)    at ( 5,  0.0) [sect] {\dotdebugstroffsets};
 
-\node(ysectinf)    at ( 5,  7) [sect] {\begin{tabular}{c}
+\node(ysectinf)    at ( 5,  7)   [sect] {\begin{tabular}{c}
                                          ~\\
                                          \dotdebuginfo \\
                                          (skeleton CU)\\
                                          ~
                                          \end{tabular}};
 
-\node(ysectinfdwo) at (10.5,7) [sect] {\begin{tabular}{c}
+\node(ysectinfdwo) at (10.5,7)   [sect] {\begin{tabular}{c}
                                          \dotdebuginfodwo \\
                                          (one CU, possibly \\
                                          multiple COMDAT \\
@@ -376,10 +378,11 @@ The circled (s) connects to the circled
                                          \end{tabular}};
 
 \node(ysectabbdwo) at (10.5, 13.5) [sect] {\dotdebugabbrevdwo};
-\node(ysectlindwo) at (16.0,  7.5) [sect] {\dotdebuglinedwo};
-\node(ysectlocdwo) at (16.0, 11.0) [sect] {\dotdebuglocdwo};
+\node(ysectlocdwo) at (14.0, 11.5) [sect] {\dotdebugloclistsdwo};
+\node(ysectrandwo) at (15.8,  9.5) [sect] {\dotdebugrnglistsdwo};
+\node(ysectlindwo) at (16.0,  7.0) [sect] {\dotdebuglinedwo};
 \node(ysectmacdwo) at (16.0,  4.5) [sect] {\dotdebugmacrodwo};
-\node(ysectstrdwo) at (13.0,  2.0) [sect] {\dotdebugstrdwo};
+\node(ysectstrdwo) at (13.5,  2.0) [sect] {\dotdebugstrdwo};
 \node(ysectstodwo) at (10.5,  0.0) [sect] {\dotdebugstroffsetsdwo};
 
 \draw[thin,-triangle 45]       (ysectinf) -- (ysectabb) node[midway, right] {(c)};
@@ -388,7 +391,6 @@ The circled (s) connects to the circled
 \draw[thin,-triangle 45]       (ysectinf) -- (ysectlin.east) node[midway, above] {(h)};
 \draw[thin,-triangle 45]       (ysectlin) -- (ysectlis) node[midway, right] {(l)};
 \draw[thin,-triangle 45]       (ysectnam.east) -- (ysectinf) node[midway, left] {(b)};
-\draw[thin,-triangle 45]       (ysectinf) -- (ysectran.east) node[left, near end] {(i)};
 \draw[thin,-triangle 45]       (ysectinf) -- (ysectstr) node[midway, right] {(d)};
 \draw[thin,-triangle 45]       (ysectinf) -- (ysectsto) node[midway, right] {(e)};
 \draw[thin,-triangle 45]       (ysectsto) -- (ysectstr) node[midway, right] {(l)};
@@ -396,17 +398,18 @@ The circled (s) connects to the circled
 \draw[dashed, thick,-triangle 45]  (ysectinf) .. controls (7.5, 11) ..(ysectinfdwo) 
                                                        node[midway, above] {(did)};
 
-\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectabbdwo) node[midway, right] {(co)};
+\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectabbdwo) node[midway, left] {(co)};
 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectlindwo.west) node[midway, above] {(ho)};
-\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectlocdwo.west) node[midway, below] {(jo)};
-\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectmacdwo.west) node[near end, above] {(go)};
+\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectrandwo.west) node[midway, above] {(io)};
+\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectlocdwo.west) node[midway, right] {(jo)};
+\draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectmacdwo.west) node[midway, above] {(go)};
 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectstrdwo) node[midway, right] {(do)};
 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectstodwo) node[midway, left] {(eo)};
 
 \draw[thin,-triangle 45]  (ysectstodwo) -- (ysectstrdwo) node[near end, below] {(lo)};
 \draw[thin,-triangle 45]  (ysectmacdwo) -- (ysectstrdwo) node[midway, left] {(po)};
-\draw[thin,-triangle 45]  (ysectmacdwo) .. controls (16.5, 1) .. (ysectstodwo.east)
-                                                       node[near start, left] {(mo)};
+\draw[thin,-triangle 45]  (ysectmacdwo) .. controls (16.2, 1) .. (ysectstodwo.east)
+                                                       node[very near start, right] {(mo)};
 \draw[thin,-triangle 45]  (ysectlindwo.east) .. controls (19,4) and (18, 0) .. (ysectstodwo.east)
                                                        node[very near start, left] {(lmo)};
 
@@ -507,28 +510,28 @@ for the referencing unit (the line table details are not in
 \dotdebuglinedwo{} but the line header with its list 
 of file names is present).
 
-\itembfnl{(i) \dotdebuginfo{} to \dotdebugranges}
-An attribute value of class \CLASSrangelistptr{} 
-(specifically \DWATranges{} with form 
-\DWFORMsecoffset) is an offset within the \dotdebugranges{} 
-section of a range list.
-
-\itembfnl{(jo) \dotdebuginfodwo{} to \dotdebuglocdwo}
-An attribute value of class \CLASSloclistptr{} (specifically 
-\DWATdatamemberlocation,
-\DWATframebase,
-\DWATlocation, 
-\DWATreturnaddr, 
-\DWATsegment, 
-\DWATstaticlink,
-\DWATstringlength, 
-\DWATuselocation{} or 
-\DWATvtableelemlocation{}
-with form \DWFORMsecoffset) is an offset within the 
-\dotdebuglocdwo{} section of a location list.  The format of
-\dotdebuglocdwo{} location list entries is slightly different 
-than that in \dotdebugloc. 
-See Section \refersec{chap:locationlistsinsplitobjectfiles} for details.
+\bb
+\itembfnl{(io) \dotdebuginfodwo{} to \dotdebugrnglistsdwo}
+An attribute value of class \CLASSrnglist{} (specifically 
+\DWATranges{} with form \DWFORMrnglistx{} or \DWFORMsecoffset) 
+is an index or offset within the \dotdebugrnglistsdwo{}
+section of a \addtoindex{range list}.
+The format of \dotdebugrnglistsdwo{} location list entries 
+is restricted to a subset of those in \dotdebugrnglists.
+See Section \refersec{chap:noncontiguousaddressranges} for details.
+\eb 
+
+\itembfnl{(jo) \dotdebuginfodwo{} to \dotdebugloclistsdwo}
+An attribute value of class 
+\bb
+\CLASSloclist{} (specifically with form \DWFORMloclistx
+or \DWFORMsecoffset) 
+is an index or offset within the \dotdebugloclistsdwo{} 
+section of a \addtoindex{location list.}
+The format of \dotdebugloclistsdwo{} location list entries 
+is restricted to a subset of those in \dotdebugloclists.
+\eb
+See Section \refersec{chap:locationlists} for details.
 
 \needlines{4}
 \itembfnl{(k) \dotdebuginfo{} to \dotdebugaddr}
index 85e9139..f537331 100644 (file)
@@ -3,7 +3,7 @@
 % If draft is in the document class list, pix are just suggested
 % by an outline, the pic does not appear as a picture.
 %
-\newcommand{\docdate}{June 24, 2016}
+\newcommand{\docdate}{August 7, 2016}
 %
 \usepackage{ifthen}
     \newcommand{\ifthen}[2]{\ifthenelse{#1}{#2}{}}
index dab87be..6489854 100644 (file)
 %
 \newdwfnamecommands{DWATlanguage}{DW\_AT\_language}
 \newdwfnamecommands{DWATlinkagename}{DW\_AT\_linkage\_name}
+\newdwfnamecommands{DWATloclistsbase}{DW\_AT\_loclists\_base}
 \newdwfnamecommands{DWATlouser}{DW\_AT\_lo\_user}
 \newdwfnamecommands{DWATlocation}{DW\_AT\_location}
 \newdwfnamecommands{DWATlowpc}{DW\_AT\_low\_pc}
 \newdwfnamecommands{DWATpure}{DW\_AT\_pure}
 %
 \newdwfnamecommands{DWATranges}{DW\_AT\_ranges}
-\newdwfnamecommands{DWATrangesbase}{DW\_AT\_ranges\_base}
+\newdwfnamecommands{DWATrnglistsbase}{DW\_AT\_rnglists\_base}
 \newdwfnamecommands{DWATrank}{DW\_AT\_rank}
 \newdwfnamecommands{DWATrecursive}{DW\_AT\_recursive}
 \newdwfnamecommands{DWATreference}{DW\_AT\_reference}
 \newdwfnamecommands{DWFORMimplicitconst}{DW\_FORM\_implicit\_const}
 \newdwfnamecommands{DWFORMindirect}{DW\_FORM\_indirect}
 \newdwfnamecommands{DWFORMlinestrp}{DW\_FORM\_line\_strp}
+\newdwfnamecommands{DWFORMloclistx}{DW\_FORM\_loclistx}
+\newdwfnamecommands{DWFORMrnglistx}{DW\_FORM\_rnglistx}
 \newdwfnamecommands{DWFORMrefn}{DW\_FORM\_ref<n>}                      % Generic DW_FORM_ref[1248] name
 \newdwfnamecommands{DWFORMrefone}{DW\_FORM\_ref1}
 \newdwfnamecommands{DWFORMreftwo}{DW\_FORM\_ref2}
 \newdwfnamecommands{DWLANGCpluspluseleven}{DW\_LANG\_C\_plus\_plus\_11}
 \newdwfnamecommands{DWLANGCplusplusfourteen}{DW\_LANG\_C\_plus\_plus\_14}
 %
+% DW_LLE *** To Be Removed! ***
+%
+%\newdwfnamecommands{DWLLEbaseaddressselectionentry}{DW\_LLE\_base\_address\_selection\_entry}
+%\newdwfnamecommands{DWLLEendoflistentry}{DW\_LLE\_end\_of\_list\_entry}
+%\newdwfnamecommands{DWLLEstartendentry}{DW\_LLE\_start\_end\_entry}
+%\newdwfnamecommands{DWLLEstartlengthentry}{DW\_LLE\_start\_length\_entry}
+%\newdwfnamecommands{DWLLEoffsetpairentry}{DW\_LLE\_offset\_pair\_entry}
+%
 % DW_LLE
 %
-\newdwfnamecommands{DWLLEbaseaddressselectionentry}{DW\_LLE\_base\_address\_selection\_entry}
-\newdwfnamecommands{DWLLEendoflistentry}{DW\_LLE\_end\_of\_list\_entry}
-\newdwfnamecommands{DWLLEstartendentry}{DW\_LLE\_start\_end\_entry}
-\newdwfnamecommands{DWLLEstartlengthentry}{DW\_LLE\_start\_length\_entry}
-\newdwfnamecommands{DWLLEoffsetpairentry}{DW\_LLE\_offset\_pair\_entry}
+\newdwfnamecommands{DWLLEendoflist}{DW\_LLE\_end\_of\_list}
+\newdwfnamecommands{DWLLEbaseaddressx}{DW\_LLE\_base\_addressx}
+\newdwfnamecommands{DWLLEstartxendx}{DW\_LLE\_startx\_endx}
+\newdwfnamecommands{DWLLEstartxlength}{DW\_LLE\_startx\_length}
+\newdwfnamecommands{DWLLEoffsetpair}{DW\_LLE\_offset\_pair}
+\newdwfnamecommands{DWLLEdefaultlocation}{DW\_LLE\_default\_location}
+\newdwfnamecommands{DWLLEbaseaddress}{DW\_LLE\_base\_address}
+\newdwfnamecommands{DWLLEstartend}{DW\_LLE\_start\_end}
+\newdwfnamecommands{DWLLEstartlength}{DW\_LLE\_start\_length}
 %
 % DW_LNCT
 %
 \newdwfnamecommands{DWORDcolmajor}{DW\_ORD\_col\_major}
 \newdwfnamecommands{DWORDrowmajor}{DW\_ORD\_row\_major}
 %
+% DW_RLE
+%
+\newdwfnamecommands{DWRLEendoflist}{DW\_RLE\_end\_of\_list}
+\newdwfnamecommands{DWRLEbaseaddressx}{DW\_RLE\_base\_addressx}
+\newdwfnamecommands{DWRLEstartxendx}{DW\_RLE\_startx\_endx}
+\newdwfnamecommands{DWRLEstartxlength}{DW\_RLE\_startx\_length}
+\newdwfnamecommands{DWRLEoffsetpair}{DW\_RLE\_offset\_pair}
+\newdwfnamecommands{DWRLEbaseaddress}{DW\_RLE\_base\_address}
+\newdwfnamecommands{DWRLEstartend}{DW\_RLE\_start\_end}
+\newdwfnamecommands{DWRLEstartlength}{DW\_RLE\_start\_length}
+%
 % DW_SECT
 %
 \newdwfnamecommands{DWSECTABBREV}{DW\_SECT\_ABBREV}
 \newdwfnamecommands{DWSECTINFO}{DW\_SECT\_INFO}
 \newdwfnamecommands{DWSECTLINE}{DW\_SECT\_LINE}
-\newdwfnamecommands{DWSECTLOC}{DW\_SECT\_LOC}
+\newdwfnamecommands{DWSECTLOCLISTS}{DW\_SECT\_LOCLISTS}
 \newdwfnamecommands{DWSECTMACRO}{DW\_SECT\_MACRO}
+\newdwfnamecommands{DWSECTRNGLISTS}{DW\_SECT\_RNGLISTS}
 \newdwfnamecommands{DWSECTSTROFFSETS}{DW\_SECT\_STR\_OFFSETS}
 %
 % DW_TAG
 \newdwfnamecommands{DWTAGfriend}{DW\_TAG\_friend}
 \newdwfnamecommands{DWTAGgenericsubrange}{DW\_TAG\_generic\_subrange}
 \newdwfnamecommands{DWTAGhiuser}{DW\_TAG\_hi\_user}
+\newdwfnamecommands{DWTAGimmutabletype}{DW\_TAG\_immutable\_type}
 \newdwfnamecommands{DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration}
 \newdwfnamecommands{DWTAGimportedmodule}{DW\_TAG\_imported\_module}
 \newdwfnamecommands{DWTAGimportedunit}{DW\_TAG\_imported\_unit}
 \newcommand{\dotdebuginfo}{\addtoindex{\texttt{.debug\_info}}}
 \newcommand{\dotdebugline}{\addtoindex{\texttt{.debug\_line}}}
 \newcommand{\dotdebuglinestr}{\addtoindex{\texttt{.debug\_line\_str}}}
-\newcommand{\dotdebugloc}{\addtoindex{\texttt{.debug\_loc}}}
+%\newcommand{\dotdebugloc}{\addtoindex{\texttt{.debug\_loc}}} % ***To be deleted ***
+\newcommand{\dotdebugloclists}{\addtoindex{\texttt{.debug\_loclists}}}
 \newcommand{\dotdebugmacinfo}{\addtoindex{\texttt{.debug\_macinfo}}}
 \newcommand{\dotdebugmacro}{\addtoindex{\texttt{.debug\_macro}}}
 \newcommand{\dotdebugnames}{\addtoindex{\texttt{.debug\_names}}}
 \newcommand{\dotdebugpubnames}{\addtoindex{\texttt{.debug\_pubnames}}}
 \newcommand{\dotdebugpubtypes}{\addtoindex{\texttt{.debug\_pubtypes}}}
-\newcommand{\dotdebugranges}{\addtoindex{\texttt{.debug\_ranges}}}
+%\newcommand{\dotdebugranges}{\addtoindex{\texttt{.debug\_ranges}}} % *** To Be Deleted ***
+\newcommand{\dotdebugrnglists}{\addtoindex{\texttt{.debug\_rnglists}}} 
 \newcommand{\dotdebugstr}{\addtoindex{\texttt{.debug\_str}}}
 \newcommand{\dotdebugstroffsets}{\addtoindex{\texttt{.debug\_str\_offsets}}}
 \newcommand{\dotdebugsup}{\addtoindex{\texttt{.debug\_sup}}}
 \newcommand{\dotdebugframedwo}{\addtoindex{\texttt{.debug\_frame.dwo}}}
 \newcommand{\dotdebuginfodwo}{\addtoindex{\texttt{.debug\_info.dwo}}}
 \newcommand{\dotdebuglinedwo}{\addtoindex{\texttt{.debug\_line.dwo}}}
-\newcommand{\dotdebuglocdwo}{\addtoindex{\texttt{.debug\_loc.dwo}}}
-%newcommand{\dotdebugmacinfodwo}{\addtoindex{\texttt{.debug\_macinfo.dwo}}}
+%\newcommand{\dotdebuglocdwo}{\addtoindex{\texttt{.debug\_loc.dwo}}} % *** To Be Deleted ***
+\newcommand{\dotdebugloclistsdwo}{\addtoindex{\texttt{.debug\_loclists.dwo}}}
+%\newcommand{\dotdebugmacinfodwo}{\addtoindex{\texttt{.debug\_macinfo.dwo}}}
 \newcommand{\dotdebugmacrodwo}{\addtoindex{\texttt{.debug\_macro.dwo}}}
 \newcommand{\dotdebugpubnamesdwo}{\addtoindex{\texttt{.debug\_pubnames.dwo}}}
 \newcommand{\dotdebugpubtypesdwo}{\addtoindex{\texttt{.debug\_pubtypes.dwo}}}
-\newcommand{\dotdebugrangesdwo}{\addtoindex{\texttt{.debug\_ranges.dwo}}}
+%\newcommand{\dotdebugrangesdwo}{\addtoindex{\texttt{.debug\_ranges.dwo}}} % *** To Be Deleted ***
+\newcommand{\dotdebugrnglistsdwo}{\addtoindex{\texttt{.debug\_rnglists.dwo}}}
 \newcommand{\dotdebugstrdwo}{\addtoindex{\texttt{.debug\_str.dwo}}}
 \newcommand{\dotdebugstroffsetsdwo}{\addtoindex{\texttt{.debug\_str\_offsets.dwo}}}
 \newcommand{\dotdebugtypes}{\addtoindexi{\texttt{.debug\_types}}{\texttt{.debug\_types} (Version 4)}}
 \newcommand{\versiondotdebugframe}   {4}
 \newcommand{\versiondotdebuginfo}    {5}
 \newcommand{\versiondotdebugline}    {5}
-\newcommand{\versiondotdebugloc}     {5}
+\newcommand{\versiondotdebugloclists}{5}
 \newcommand{\versiondotdebugmacro}   {5}
 \newcommand{\versiondotdebugnames}   {5}
 \newcommand{\versiondotdebugpubnames}{2}
 \newcommand{\versiondotdebugpubtypes}{2}
-\newcommand{\versiondotdebugranges}  {5}
+\newcommand{\versiondotdebugrnglists}{5}
 \newcommand{\versiondotdebugstr}     {5}
 \newcommand{\versiondotdebugsup}     {5}
 \newcommand{\versiondotdebugstroffsets}{5}
 \newcommand{\CLASSexprloc}      {\livelinki{chap:classexprloc}{exprloc}{exprloc class}}
 \newcommand{\CLASSflag}         {\livelinki{chap:classflag}{flag}{flag class}}
 \newcommand{\CLASSlineptr}      {\livelinki{chap:classlineptr}{lineptr}{lineptr class}}
-\newcommand{\CLASSloclistptr}   {\livelinki{chap:classloclistptr}{loclistptr}{loclistptr class}}
+\newcommand{\CLASSloclistsptr}  {\livelinki{chap:classloclistsptr}{loclistsptr}{loclistsptr class}}
+\newcommand{\CLASSloclist}      {\livelinki{chap:classloclist}{loclist}{loclist class}}
 \newcommand{\CLASSmacptr}       {\livelinki{chap:classmacptr}{macptr}{macptr class}}
-\newcommand{\CLASSrangelistptr} {\livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}}
+\newcommand{\CLASSrnglistsptr}  {\livelinki{chap:classrnglistsptr}{rnglistsptr}{rnglistsptr class}}
+\newcommand{\CLASSrnglist}      {\livelinki{chap:classrnglist}{rnglist}{rnglistclass}}
 \newcommand{\CLASSreference}    {\livelinki{chap:classreference}{reference}{reference class}}
 \newcommand{\CLASSstring}       {\livelinki{chap:classstring}{string}{string class}}
 \newcommand{\CLASSstroffsetsptr}{\livelinki{chap:classstroffsetsptr}{stroffsetsptr}{stroffsetsptr class}}
 \newcommand{\HFNlinerange}                {\addttindex{line\_range}}
 \newcommand{\HFNminimuminstructionlength} {\addttindex{minimum\_instruction\_length}}
 \newcommand{\HFNmaximumoperationsperinstruction}{\addttindex{maximum\_operations\_per\_instruction}}
+\newcommand{\HFNoffsetentrycount}         {\addttindex{offset\_entry\_count}}
 \newcommand{\HFNoffsetsizeflag}           {\addttindex{offset\_size\_flag}}
 \newcommand{\HFNopcodebase}               {\addttindex{opcode\_base}}
 \newcommand{\HFNopcodeoperandstable}      {\addttindex{opcode\_operands\_table}}
 % nor does the microtext package DisableLigatures command...???
 %
 \newcommand{\xiiif}            {0x3\hspace{1pt}f}
-\newcommand{\xiiifff}          {0x3\hspace{1pt}f\hspace{2pt}f\hspace{2pt}f}
+\newcommand{\xiiifff}  {0x3\hspace{1pt}f\hspace{2pt}f\hspace{2pt}f}
 \newcommand{\xff}              {0x\hspace{1pt}f\hspace{2pt}f}
 \newcommand{\xffff}            {0x\hspace{1pt}f\hspace{2pt}f\hspace{2pt}f\hspace{2pt}f}
 %
 % These are intended for use in running text...
 %
-\newcommand{\xffffffff}        {\texttt{0xffffffff}}           % use with following punctutation
-\newcommand{\wffffffff}        {\texttt{0xffffffff}\ }         % use as separate "word"
-\newcommand{\xfffffffzero}     {\texttt{0xfffffff0}}           % use with following punctutation
-\newcommand{\wfffffffzero}     {\texttt{0xfffffff0}\ }
+\newcommand{\xffffffff}            {\texttt{0xffffffff}}               % use with following punctutation
+\newcommand{\wffffffff}            {\texttt{0xffffffff}\ }             % use as separate "word"
+\newcommand{\xfffffffzero}         {\texttt{0xfffffff0}}               % use with following punctutation
+\newcommand{\wfffffffzero}         {\texttt{0xfffffff0}\ }
 \newcommand{\xffffffffffffffff}        {\texttt{0xffffffffffffffff}}   % use with following punctutation
 \newcommand{\wffffffffffffffff}        {\texttt{0xffffffffffffffff}\ }
 
index ff43eeb..7185563 100644 (file)
@@ -1188,7 +1188,8 @@ a data member generally.
 
 \item The lack of a subtype concept in DWARF means that DWARF types
 serve the role of subtypes and must replicate information from
-what should be the parent type. For this reason, DWARF for
+\bbeb 
+the parent type. For this reason, DWARF for
 the unconstrained array type \texttt{ARR} is not needed for the purposes
 of this example and therefore is not shown.
 \end{enumerate}
@@ -3416,22 +3417,22 @@ label3:
                   \DWATabstractorigin(reference to 30$)
                   \DWATlocation(location list 99$)
 
-! .debug_loc section
-98\$:  \textit{Range}[<label0 in main> .. <label1 in main>)
+! .debug_loclists section
+98\$:  \DWLLEstartend[<label0 in main> .. <label1 in main>)
           \DWOPlitone \DWOPstackvalue \DWOPpiece(4)
           \DWOPlittwo \DWOPstackvalue \DWOPpiece(4)
-      \textit{Range}[<label1 in main> .. <label2 in main>)
+      \DWLLEstartend[<label1 in main> .. <label2 in main>)
           \DWOPlittwo \DWOPstackvalue \DWOPpiece(4)
           \DWOPlittwo \DWOPstackvalue \DWOPpiece(4)
-      \textit{Range}[<label2 in main> .. <label3 in main>)
+      \DWLLEstartend[<label2 in main> .. <label3 in main>)
           \DWOPlittwo \DWOPstackvalue \DWOPpiece(4)
           \DWOPlitthree \DWOPstackvalue \DWOPpiece(4)
-      \textit{End-of-list}
-99\$:  \textit{Range}[<label1 in main> .. <label2 in main>)
+      \DWLLEendoflist
+99\$:  \DWLLEstartend[<label1 in main> .. <label2 in main>)
           \DWOPimplicitpointer(reference to 40\$, 0)
-      \textit{Range}[<label2 in main> .. <label3 in main>)
+      \DWLLEstartend[<label2 in main> .. <label3 in main>)
           \DWOPimplicitpointer(reference to 40\$, 4)
-      \textit{End-of-list}
+      \DWLLEendoflist
 \end{alltt}
 \end{dwflisting}
 \caption{C implicit pointer example \#2: DWARF description}
index 7082eb7..ee58105 100644 (file)
@@ -553,6 +553,13 @@ The attributes are listed in Table \referfol{tab:attributenames}.
 &\livelinki{chap:DWATlocationdataobjectlocation}
         {Data object location}
         {data object location}\\
+\bb
+\DWATloclistsbaseTARG
+&\livelinki{chap:DWATloclistsbaseinlocationlist}
+        {Location lists base}
+        {location lists base}
+\eb
+\\
 \DWATlowpcTARG
 &\livelinki{chap:DWATlowpccodeaddressorrangeofaddresses}
         {Code address or range of addresses}
@@ -633,8 +640,10 @@ The attributes are listed in Table \referfol{tab:attributenames}.
 &\livelinki{chap:DWATrangesnoncontiguousrangeofcodeaddresses}
         {Non-contiguous range of code addresses}
         {non-contiguous range of code addresses} \\
-\DWATrangesbaseTARG
-&\livelinki{chap:DWATrangesbaseforrangelists}
+\bb
+\DWATrnglistsbaseTARG
+\eb
+&\livelinki{chap:DWATrnglistsbase}
         {Base offset for range lists}
         {ranges lists} \\
 \DWATrankTARG
@@ -706,7 +715,8 @@ The attributes are listed in Table \referfol{tab:attributenames}.
         {string offsets table} \\
 \DWATthreadsscaledTARG
 &\livelink{chap:DWATthreadsscaledupcarrayboundthreadsscalfactor}
-        {UPC array bound THREADS scale factor}\\
+        {Array bound THREADS scale factor} 
+\bbeb  (\addtoindex{UPC}) \\
 \DWATtrampolineTARG
 &\livelinki{chap:DWATtrampolinetargetsubroutine}
         {Target subroutine}
@@ -761,9 +771,11 @@ The attributes are listed in Table \referfol{tab:attributenames}.
 \addtoindexx{exprloc|see {\textit{also} exprloc class}}
 \addtoindexx{flag|see {\textit{also} flag class}}
 \addtoindexx{lineptr|see {\textit{also} lineptr class}}
-\addtoindexx{loclistptr|see {\textit{also} loclistptr class}}
+\addtoindexx{loclistsptr|see {\textit{also} loclistsptr class}}
+\addtoindexx{loclist|see {\textit{also} loclist class}}
 \addtoindexx{macptr|see {\textit{also} macptr class}}
-\addtoindexx{rangelistptr|see {\textit{also} rangelistptr class}}
+\addtoindexx{rnglistsptr|see {\textit{also} rnglistsptr class}}
+\addtoindexx{rnglist|see {\textit{also} rnglist class}}
 \addtoindexx{reference|see {\textit{also} reference class}}
 \addtoindexx{string|see {\textit{also} string class}}
 \addtoindexx{stroffsetsptr|see {\textit{also} stroffsetsptr class}}
@@ -775,9 +787,11 @@ The attributes are listed in Table \referfol{tab:attributenames}.
 \addtoindexx{class of attribute value!exprloc|see {exprloc class}}
 \addtoindexx{class of attribute value!flag|see {flag class}}
 \addtoindexx{class of attribute value!lineptr|see {lineptr class}}
-\addtoindexx{class of attribute value!loclistptr|see {loclistptr class}}
+\addtoindexx{class of attribute value!loclistsptr|see {loclistsptr class}}
+\addtoindexx{class of attribute value!loclist|see {loclist class}}
 \addtoindexx{class of attribute value!macptr|see {macptr class}}
-\addtoindexx{class of attribute value!rangelistptr|see {rangelistptr class}}
+\addtoindexx{class of attribute value!rnglistsptr|see {rnglistsptr class}}
+\addtoindexx{class of attribute value!rnglist|see {rnglist class}}
 \addtoindexx{class of attribute value!reference|see {reference class}}
 \addtoindexx{class of attribute value!string|see {string class}}
 \addtoindexx{class of attribute value!stroffsetsptr|see {stroffsetsptr class}}
@@ -868,8 +882,12 @@ of an attribute.
 number information.
 \\
 
-\hypertarget{chap:classloclistptr}{}
-\livelinki{datarep:classloclistptr}{loclistptr}{loclistptr class}
+\bb
+\hypertarget{chap:classloclist}{}
+\livelinki{datarep:classloclist}{loclist}{loclist class}, 
+\hypertarget{chap:classloclistsptr}{}
+\livelinki{datarep:classloclistsptr}{loclistsptr}{loclistsptr class}
+\eb
 &Specifies a location in the DWARF section that holds location 
 lists, which describe objects whose location can change during 
 their lifetime.
@@ -882,8 +900,12 @@ a location in the DWARF section that holds macro definition
 information.
 \\
 
-\hypertarget{chap:classrangelistptr}{}
-\livelinki{datarep:classrangelistptr}{rangelistptr}{rangelistptr class}
+\bb
+\hypertarget{chap:classrnglist}{}
+\livelinki{datarep:classrnglist}{rnglist}{rnglist class}, 
+\hypertarget{chap:classrnglistsptr}{}
+\livelinki{datarep:classrnglistsptr}{rnglistsptr}{rnglistsptr class}
+\eb
 &Specifies a location in the DWARF section that holds 
 non-contiguous address ranges.
 \\
@@ -1651,7 +1673,11 @@ represents the offset of a debugging information entry in the current
 compilation unit, or value 0 which represents the \generictype.
 If the operand is non-zero, the referenced entry must be a
 \DWTAGbasetype{} entry that provides the type to which the value is converted.
-The type of the operand and result type should have the same size in bits.
+The type of the operand and result type 
+\bb
+must 
+\eb
+have the same size in bits.
 
 \end{enumerate}
 
@@ -1662,12 +1688,12 @@ There
 \addtoindexx{DWARF expression!special operations}
 are these special operations currently defined:
 \begin{enumerate}[1. ]
-\itembfnl{\DWOPnopNAME}
-The \DWOPnopTARG{} operation is a place holder. It has no effect
+\itembfnl{\DWOPnopTARG}
+The \DWOPnopNAME{} operation is a place holder. It has no effect
 on the location stack or any of its values.
 
-\itembfnl{\DWOPentryvalueNAME}
-The \DWOPentryvalueTARG{} operation pushes 
+\itembfnl{\DWOPentryvalueTARG}
+The \DWOPentryvalueNAME{} operation pushes 
 the value that the described location held
 upon entering the current subprogram.  It has two operands: an 
 unsigned LEB128\addtoindexx{LEB128!unsigned} length, followed by 
@@ -1747,20 +1773,16 @@ Section \refersec{chap:locationlists} below.
 
 Location descriptions are distinguished in a context sensitive
 manner. As the value of an attribute, a location description
-is encoded using 
-\addtoindexx{exprloc class}
-class \livelink{chap:classexprloc}{exprloc}  
-and a location list is encoded
-using class \livelink{chap:classloclistptr}{loclistptr}
-(which 
-\addtoindex{loclistptr}
-serves as an offset into a
-separate 
-\addtoindexx{location list}
-location list table).
+is encoded using class \CLASSexprloc{}
+and a \addtoindex{location list} is encoded
+\bb 
+using class \CLASSloclist{} (which serves as an 
+index into a separate section containing location lists).
+\eb
 
 \needlines{4}
 \subsection{Single Location Descriptions}
+\label{chap:singlelocationdescriptions}
 A single location description is either:
 \begin{enumerate}[1. ]
 \item A simple location description, representing an object
@@ -1975,9 +1997,8 @@ refers to.}
 
 \needlines{4}
 \itembfnl{\DWOPbitpieceTARG}
-The \DWOPbitpieceNAME{} 
-operation takes two operands. The first
-is an unsigned LEB128\addtoindexx{LEB128!unsigned} 
+The \DWOPbitpieceNAME{} operation takes two operands. 
+The first is an unsigned LEB128\addtoindexx{LEB128!unsigned} 
 number that gives the size in bits
 of the piece. The second is an 
 unsigned LEB128\addtoindexx{LEB128!unsigned} number that
@@ -2010,268 +2031,178 @@ unit of memory.}
 \needlines{6}
 \subsection{Location Lists}
 \label{chap:locationlists}
-There are two forms of location lists. The first form 
-is intended for use in other than a \splitDWARFobjectfile,
-while the second is intended for use in a \splitDWARFobjectfile{} 
-(see Section \refersec{datarep:splitdwarfobjectfiles}). The two
-forms are otherwise equivalent.
-
-
-\needlines{4}
-\subsubsection{Location Lists in Non-split Objects}
-\label{chap:locationlistsinnonsplitobjects}
-Location lists 
-\addtoindexx{location list}
-are used in place of location descriptions
-whenever the object whose location is being described
-can change location during its lifetime. 
-Location lists
-\addtoindexx{location list}
-are contained in a separate object file section called
-\dotdebugloc{}. A location list is indicated by a location
-attribute whose value is an offset from the beginning of
-the \dotdebugloc{} section to the first byte of the list for the
-object in question.
-
-The \definitionx{applicable base address} of a normal
-location list entry (see following) is
-\addtoindexx{location list!base address selection entry}
-determined by the closest preceding base address selection
-entry in the same location list. If there is
-no such selection entry, then the applicable base address
-defaults to the base address of the compilation unit (see
-Section \refersec{chap:fullandpartialcompilationunitentries}).  
-
-\textit{In the case of a compilation unit where all of
-the machine code is contained in a single contiguous section,
-no base address selection entry is needed.}
-
-Each entry in a location list is either a location 
-\addtoindexi{list}{address selection|see{base address selection}} 
-entry,
-a 
-\addtoindexi{base}{base address selection entry!in location list} 
-address selection entry, 
-\addtoindexx{location list!base address selection entry}
-or an 
-\addtoindexx{end-of-list entry!in location list}
-end-of-list entry.
-
-\subsubsubsection{Location List Entry}
-A location list entry has two forms:
-a normal location list entry and a default location list entry.
-
-\needlines{4}
-\subsubsubsubsection{Normal Location List Entry}
-A\addtoindexx{location list!normal entry}
-\addtoindex{normal location list entry} consists of:
-\begin{enumerate}[1. ]
-\item A beginning address offset. 
-This address offset has the \addtoindex{size of an address} and is
-relative to the applicable base address of the compilation
-unit referencing this location list. It marks the beginning
-of the address 
-\addtoindexi{range}{address range!in location list} 
-over which the location is valid.
-
-\item An ending address offset.  This address offset again
-has the \addtoindex{size of an address} and is relative to the applicable
-base address of the compilation unit referencing this location
-list. It marks the first address past the end of the address
-range over which the location is valid. The ending address
-must be greater than or equal to the beginning address.
-
-\textit{A location list entry (but not a base address selection or 
-end-of-list entry) whose beginning
-and ending addresses are equal has no effect 
-because the size of the range covered by such
-an entry is zero.}
-
-\item An unsigned 2-byte length describing the length of the location 
-description that follows.
-
-\item A \addtoindex{single location description} 
-describing the location of the object over the range specified by
-the beginning and end addresses.
-\end{enumerate}
+\bb
+Location lists are used in place of location descriptions whenever
+the object whose location is being described can change location
+during its lifetime. Location lists are contained in a separate
+object file section called \dotdebugloclists{} or \dotdebugloclistsdwo{}
+(for split DWARF object files).
+
+A location list is indicated by a location or other attribute
+whose value is of class \bbeb\CLASSloclist{} 
+(see Section \refersec{datarep:classesandforms}).
+   
+\textit{This location list representation, the \bbeb\CLASSloclist{} class, and the
+related \DWATloclistsbase{} attribute are new in \DWARFVersionV.
+Together they eliminate most or all of the object language relocations
+previously needed for location lists.}
 
-Address ranges defined by normal location list entries
-may overlap. When they do, they describe a
+A location list consists of a series of location list entries.
+Each location list entry is one of the following kinds:
+\begin{itemize}
+\item \definition{Bounded location description}.\addtoindexx{bounded location description} 
+This kind of entry provides a
+location description that specifies the location of
+an object that is valid over a lifetime bounded
+by a starting and ending address. The starting address is the
+lowest address of the address range over which the location
+is valid. The ending address is the address of the first
+location past the highest address of the address range.
+When the current PC is within the given range, the location
+description may be used to locate the specified object.
+        
+There are several kinds of bounded location description
+entries which differ in the way that they specify the
+starting and ending addresses.
+        
+The address ranges defined by the bounded location descriptions
+of a location list may overlap. When they do, they describe a
 situation in which an object exists simultaneously in more than
 one place. If all of the address ranges in a given location
 list do not collectively cover the entire range over which the
-object in question is defined, it is assumed that the object is
-not available for the portion of the range that is not covered.
+object in question is defined, and there is no following default
+location description, it is assumed that the object is not
+available for the portion of the range that is not covered.
+
+\item \definition{Default location description}.\addtoindexx{default location description}
+This kind of entry provides a
+location description that specifies the location of
+an object that is valid when no bounded location description
+applies.
+
+\item \definition{Base address}.\addtoindexx{base address!of location list}
+This kind of entry provides an address to be
+used as the base address for beginning and ending address
+offsets given in certain kinds of bounded location description.
+The applicable base address of a bounded location description
+entry is the address specified by the closest preceding base
+address entry in the same location list. If there is no
+preceding base address entry, then the applicable base address
+defaults to the base address of the compilation unit (see
+Section \refersec{chap:fullandpartialcompilationunitentries}).
 
-\needlines{4}
-\subsubsubsubsection{Default Location List Entry}
-A \addtoindex{default location list entry} consists of:
-\addtoindexx{location list!default entry}
-\begin{enumerate}[1. ]
-\item The value 0.
-\item The value of the largest representable address offset (for
-      example, \wffffffff when the size of an address is 32 bits).
-\item An unsigned 2-byte length describing the length of the location 
-      description that follows.
-\item A single location description describing the location of the
-      object when there is no prior normal location list entry
-      that applies in the same location list.
-\end{enumerate}
+In the case of a compilation unit where all of the machine
+code is contained in a single contiguous section, no base
+address entry is needed.
 
-A default location list entry is independent of any applicable
-base address (except to the extent to which base addresses
-affect prior normal location list entries).
+\item  \definition{End-of-list}.\addtoindexx{end-of-list!of location list}
+This kind of entry marks the end of the location list.
 
-A default location list entry must be the last location list
-entry of a location list except for the terminating end-of-list
+\end{itemize}
+
+A location list consists of a sequence of zero or more bounded
+location description or base address entries, optionally followed
+by a default location entry, and terminated by an end-of-list
 entry.
 
-A \addtoindex{default location list entry} describes a single 
-location which applies to all addresses which are not included 
-in any range defined earlier in the same location list.
+Each location list entry begins with a single byte identifying
+the kind of that entry, followed by zero or more operands depending
+on the kind.   
+   
+In the descriptions that follow, these terms are used for operands:
+   
+\begin{itemize}
+\item A \definitionx{counted location description} operand consists 
+of a two-byte unsigned integer giving the length of the location
+description (see Section \refersec{chap:singlelocationdescriptions}) 
+that immediately follows.
+
+\item An \definitionx{address index} operand is the index of an address
+in the \dotdebugaddr{} section. This index is relative to the
+value of the \DWATaddrbase{} attribute of the associated
+compilation unit. The address given by this kind
+of operand is *not* relative to the compilation unit base address.
+   
+\item A \definition{target address} operand is an address on the target
+machine. (Its size is the same as used for attribute values of
+class \CLASSaddress, specifically, \DWFORMaddr.)
 
-\needlines{5}
-\subsubsubsection{Base Address Selection Entry}
-A base 
-\addtoindexi{address}{address selection|see{base address selection}}
-\addtoindexx{location list!base address selection entry}
-selection 
-\addtoindexi{entry}{base address selection entry!in location list}
-consists of:
+\end{itemize}
+The following entry kinds are defined for use in both
+split or non-split units:
+   
 \begin{enumerate}[1. ]
-\item The value of the largest representable 
-address offset (for example, \wffffffff when the size of
-an address is 32 bits).
-\item An address, which defines the 
-appropriate base address for use in interpreting the beginning
-and ending address offsets of subsequent entries of the location list.
-\end{enumerate}
-
-\textit{A base address selection entry 
-affects only the remainder of the list in which it is contained.}
-
-\needlines{5}
-\subsubsubsection{End-of-List Entry}
-The end of any given location list is marked by an 
-\addtoindexx{location list!end-of-list entry}
-end-of-list entry, which consists of a 0 for the beginning address
-offset and a 0 for the ending address offset. A location list
-containing only an 
-\addtoindexx{end-of-list entry!in location list}
-end-of-list entry describes an object that
-exists in the source code but not in the executable program.
-
-Neither a base address selection entry nor an end-of-list
-entry includes a location description.
-
-\needlines{4}
-\textit{When a DWARF consumer is parsing and decoding a location
-list, it must recognize the beginning and ending address
-offsets of (0, 0) for an end-of-list entry and 
-\mbox{(0, \texttt{maximum-address})} for
-a default location list entry prior to applying any base
-address. Any other pair of offsets beginning with 0 is a
-valid normal location list entry. Next, it must recognize the
-beginning address offset of \texttt{maximum-address} for a base address selection
-entry prior to applying any base address. The current base
-address is not applied to the subsequent value (although there
-may be an underlying object language relocation that affects
-that value).}
-
-\textit{A base address selection entry and an end-of-list
-entry for a location list are identical to a base address
-selection entry and end-of-list entry, respectively, for a
-\addtoindex{range list}
-(see Section \refersec{chap:noncontiguousaddressranges}) 
-in interpretation and representation.}
-
-\needlines{5}
-\subsubsection{Location Lists in Split Object Files}
-\label{chap:locationlistsinsplitobjectfiles}
-\bb
-\textit{Location lists in split units use a format that 
-eliminates the need for relocations in the containing file.}
-\eb
+\itembfnl{\DWLLEendoflistTARG}
+An end-of-list entry contains no further data.
+       
+\textit{A series of this kind of entry may be used for padding or
+alignment purposes.}
+
+\itembfnl{\DWLLEbaseaddressxTARG}
+This is a form of base address entry that has one unsigned
+LEB128 operand. The operand value is an address index that
+indicates the applicable base address used by \DWLLEoffsetpair{}
+entries.
+
+\itembfnl{\DWLLEstartxendxTARG}
+This is a form of bounded location description entry that
+has two unsigned LEB128 operands. The operand values are
+address indices. These indicate the
+starting and ending addresses, respectively, that define
+the address range for which this location is valid.
+These operands are followed by a counted location description.
+
+\itembfnl{\DWLLEstartxlengthTARG}
+This is a form of bounded location description that has two
+unsigned ULEB operands. The first value is an address index
+that indicates the beginning of the address range over
+which the location is valid.
+The second value is the length of the range.
+These operands are followed by a counted location description.
+
+\itembfnl{\DWLLEoffsetpairTARG}
+This is a form of bounded location description entry that
+has two unsigned LEB128 operands. The values of these
+operands are the starting and ending offsets, respectively,
+relative to the applicable base address, that define the
+address range for which this location is valid.
+These operands are followed by a counted location description.
+       
+\itembfnl{\DWLLEdefaultlocationTARG}
+This entry has no range operands that express a range of
+addresses. The only operand is a counted location description.
 
-In a \splitDWARFobjectfile{} (see 
-Section \refersec{datarep:splitdwarfobjectfiles}), 
-location lists are contained in the \dotdebuglocdwo{} section.
-
-The \addtoindex{applicable base address} of a split
-location list entry (see following) is
-\addtoindexx{location list!base address selection entry}
-determined by the closest preceding base address selection
-entry (\DWLLEbaseaddressselectionentry) in the same location list. If there is
-no such selection entry, then the applicable base address
-defaults to the base address of the compilation unit (see
-Section \refersec{chap:fullandpartialcompilationunitentries}).
-
-Each entry in the split location list
-begins with a type code, which is a single unsigned byte that
-identifies the type of entry. There are five types of entries:
-\begin{enumerate}
-\itembfnl{\DWLLEendoflistentryTARG}
-This entry indicates the end of a location list, and
-contains no further data.
-
-\needlines{6}
-\itembfnl{\DWLLEbaseaddressselectionentryTARG}
-This entry contains an 
-unsigned LEB128\addtoindexx{LEB128!unsigned} value immediately
-following the type code. This value is the index of an
-address in the \dotdebugaddr{} section, which is then used as
-the base address when interpreting offsets in subsequent
-location list entries of type \DWLLEoffsetpairentry.
-This index is relative to the value of the 
-\DWATaddrbase{} attribute of the associated compilation unit.
-
-\itembfnl{\DWLLEstartendentryTARG}
-This entry contains two unsigned LEB128\addtoindexx{LEB128!unsigned}
-values immediately following the type code. These values are the
-indices of two addresses in the \dotdebugaddr{} section.
-These indices are relative to the value of the 
-\DWATaddrbase{} attribute of the associated compilation unit
-(see Section \refersec{chap:unitentries}).
-These indicate the starting and ending addresses,
-respectively, that define the address range for which
-this location is valid. The starting and ending addresses
-given by this type of entry are not relative to the
-compilation unit base address. A single location
-description follows the fields that define the address range.
-
-\needlines{5}
-\itembfnl{\DWLLEstartlengthentryTARG}
-This entry contains one unsigned LEB128\addtoindexx{LEB128!unsigned}
-value and a 4-byte
-unsigned value immediately following the type code. The
-first value is the index of an address in the \dotdebugaddr{}
-section, which marks the beginning of the address range
-over which the location is valid.
-This index is relative to the value of the 
-\DWATaddrbase{} attribute of the associated compilation unit.
-The starting address given by this
-type of entry is not relative to the compilation unit
-base address. The second value is the
-length of the range in bytes. A single location
-description follows the fields that define the address range.
-
-\itembfnl{\DWLLEoffsetpairentryTARG}
-This entry contains two 4-byte unsigned values
-immediately following the type code. These values are the
-starting and ending offsets, respectively, relative to
-the applicable base address, that define the address
-range for which this location is valid. A single location
-description follows the fields that define the address range.
 \end{enumerate}
+      
+The following kinds of location list entries are defined for
+use only in non-split DWARF units:
+   
+\begin{enumerate}[1. ]
+\addtocounter{enumi}{6}
+\itembfnl{\DWLLEbaseaddressTARG}
+A base address entry has one target address operand.
+This address is used as the base address when interpreting
+offsets in subsequent location list entries of kind
+\DWLLEoffsetpair.
+
+\itembfnl{\DWLLEstartendTARG}
+This is a form of bounded location description entry that
+has two target address operands. These indicate the
+starting and ending addresses, respectively, that define
+the address range for which the location is valid.
+These operands are followed by a counted location description.
+       
+\itembfnl{\DWLLEstartlengthTARG}
+This is a form of bounded location description entry that
+has one target address operand value and an unsigned LEB128
+integer operand value. The address is the beginning address
+of the range over which the location description is valid, and
+the length is the number of bytes in that range.
+These operands are followed by a counted location description.
 
-\needlines{4}
-\textit{The \DWLLEbaseaddressselectionentry, \DWLLEstartendentry{}
-and \DWLLEstartlengthentry{} entries obtain addresses within the 
-target program indirectly using an index (not an offset) into an 
-array of addresses. The base of that array is obtained using the 
-\DWATaddrbase{} attribute of the containing compilation unit. 
-The value of that attribute is the offset of the base of the array 
-in the \dotdebugaddr{} section of the unit.}
+\end{enumerate}
+\eb
 
 \needlines{10}
 \section{Types of Program Entities}
@@ -2726,116 +2657,144 @@ may be beyond the last valid instruction in the executable.}
 
 \subsection{Non-Contiguous Address Ranges}
 \label{chap:noncontiguousaddressranges}
-When the set of addresses of a debugging information entry
-\addtoindexx{non-contiguous address ranges}
-cannot be described as a single contiguous range, the entry 
-may have a \DWATranges{} attribute\addtoindexx{ranges attribute}
-whose value is of class \livelink{chap:classrangelistptr}{rangelistptr}
-and indicates the beginning of a \addtoindex{range list}.
-Similarly,
-a \DWATstartscope{} attribute\addtoindexx{start scope attribute}
-(see Section \refersec{chap:dataobjectentries}).
-may have a value of class
-\livelink{chap:classrangelistptr}{rangelistptr} for the same reason.  
-
-Range lists are contained in the \dotdebugranges{} section. 
-A \addtoindex{range list} is indicated by a 
-\DWATranges{} attribute\addtoindexx{ranges attribute}
-whose value is an offset from the beginning of the
-\dotdebugranges{} section to the beginning of the 
-\addtoindex{range list}.
+\bb
+Range lists are used when the set of addresses for a debugging
+information entry cannot be described as a single contiguous 
+range.\addtoindexx{non-contiguous address ranges}
+Range lists are contained in a separate object file section
+called \dotdebugrnglists or \dotdebugrnglistsdwo (in split units).
+A range list is identified by a \DWATranges{}\addtoindexx{ranges attribute} 
+or other attribute whose value is of class \bbeb\CLASSrnglist{} 
+(see Section \refersec{datarep:classesandforms}).
+\textit{This range list representation, the \bbeb\CLASSrnglist{} class, and the
+related \DWATrnglistsbase{} attribute are new in \DWARFVersionV.
+Together they eliminate most or all of the object language relocations
+previously needed for range lists.}
 
-\needlines{4}
-If the current compilation unit contains a \DWATrangesbase{}
-attribute, the value of that attribute establishes a base
-offset within the \dotdebugranges{} section for the compilation
-unit. The offset given by the \DWATranges{} attribute is
-relative to that base.
+Each range list entry is one of the following kinds:
+\begin{itemize}
+\item \definition{Bounded range}.\addtoindexx{bounded range} 
+This kind of entry defines an address range
+that is included in the range list. The starting address is
+the lowest address of the address range. The ending address
+is the address of the first location past the highest address
+of the address range.
+       
+There are several kinds of bounded range entries which specify
+the starting and ending addresses in different ways.
+
+\item \definition{Base address}.\addtoindexx{base address!of range list}
+This kind of entry provides an address to be
+used as the base address for the beginning and ending
+address offsets given in certain bounded range entries. The
+applicable base address of a range list entry is
+determined by the closest preceding base address
+entry in the same range list. If there is no preceding
+base address entry, then the applicable base address
+defaults to the base address of the compilation unit (see 
+Section \refersec{chap:fullandpartialcompilationunitentries}).
 
-\needlines{4}
-The \definitionx{applicable base address} of a \addtoindex{range list} 
-entry is determined by the closest preceding base address 
-selection entry in the same range list (see
-Section \ref{chap:baseaddressselectionentry}). 
-If there is no such selection
-entry, then the applicable base address defaults to the base
-address of the compilation unit 
-(see Section \refersec{chap:fullandpartialcompilationunitentries}).
-
-\textit{In the case of a compilation unit where all of the machine
+In the case of a compilation unit where all of the machine
 code is contained in a single contiguous section, no base
-address selection entry is needed.}
+address entry is needed.
 
-Address range entries in a \addtoindex{range list} may not overlap.
-There is no requirement that the entries be ordered in any particular way.
+\item \definition{End-of-list}.\addtoindexx{end-of-list!of range list} 
+This kind of entry marks the end of the range list.
 
-Each entry in a \addtoindex{range list} is either a 
-\addtoindex{range list entry},
-\addtoindexx{base address selection entry!in range list}
-a base address selection entry, or an 
-\addtoindexx{end-of-list entry!in range list}
-end-of-list entry.
+\end{itemize}
 
-\needlines{5}
-\subsubsection{Range List Entry}
-A \addtoindex{range list entry} consists of:
-\begin{enumerate}[1. ]
-\item A beginning address offset. This address offset has the 
-\addtoindex{size of an address} and is relative to
-the \addtoindex{applicable base address} of the compilation unit referencing this 
-\addtoindex{range list}. 
-It marks the beginning of an 
-\addtoindexi{address range}{address range!in range list}. 
-
-\item An ending address offset. This address offset again has the 
-\addtoindex{size of an address} and is relative
-to the \addtoindex{applicable base address} of the compilation unit referencing 
-this \addtoindex{range list}.
-It marks the first address past the end of the address range.
-The ending address must be greater than or
-equal to the beginning address.
+Each range list consists of a sequence of zero or more bounded
+range or base address entries, terminated by an end-of-list entry.
 
-\needlines{4}
-\textit{A \addtoindex{range list} entry (but not a base address 
-selection or end-of-list entry) whose beginning and
-ending addresses are equal has no effect because the size of the 
-range covered by such an entry is zero.}
-\end{enumerate}
+A range list containing only an end-of-list entry describes an
+empty scope (which contains no instructions).
+   
+Bounded range entries in a range list may not overlap. There is
+no requirement that the entries be ordered in any particular way.
 
-\needlines{5}
-\subsubsection{Base Address Selection Entry}
-\label{chap:baseaddressselectionentry}
-A \addtoindex{base address selection entry} consists of:
+A bounded range entry whose beginning and ending address offsets
+are equal (including zero) indicates an empty range and may be
+ignored.
+   
+Each range list entry begins with a single byte identifying the kind
+of that entry, followed by zero or more operands depending on the
+kind.
+
+In the descriptions that follow, the term \definitionx{address index}
+means the index of an address in the \dotdebugaddr{} section. This
+index is relative to the value of the \DWATaddrbase{} attribute
+of the associated compilation unit. The address given by this kind
+of operand is \emph{not} relative to the compilation unit base 
+address.
+    
+The following entry kinds are defined for use in both
+split or non-split units:
+\begin{enumerate}[1. ]
+\itembfnl{\DWRLEendoflistTARG}
+An end-of-list entry contains no further data.
+
+\textit{A series of this kind of entry may be used for padding or
+alignment purposes.}
+      
+\itembfnl{\DWRLEbaseaddressxTARG}
+A base address entry has one unsigned LEB128 operand.
+The operand value is an address index that indicates
+the applicable base address used by following \DWRLEoffsetpair{}
+entries.
+    
+\itembfnl{\DWRLEstartxendxTARG}
+This is a form of bounded range entry that
+has two unsigned LEB128 operands. The operand values are
+address indices that indicate the
+starting and ending addresses, respectively, that define
+the address range.
+
+\itembfnl{\DWRLEstartxlengthTARG}
+This is a form of bounded location description that
+has two unsigned ULEB operands. The first value is an address index
+that indicates the beginning of the address range.
+The second value is the length of the range.
+       
+\itembfnl{\DWRLEoffsetpairTARG}
+This is a form of bounded range entry that
+has two unsigned LEB128 operands. The values of these
+operands are the starting and ending offsets, respectively,
+relative to the applicable base address, that define the
+address range.
+
+\end{enumerate} 
+
+The following kinds of range entry may be used only in non-split 
+units:
 \begin{enumerate}[1. ]
-\item The value of the largest representable address offset 
-(for example, \wffffffff when the size of an address is 32 bits).
+\addtocounter{enumi}{5}
+\itembfnl{\DWRLEbaseaddressTARG}
+A base address entry has one target address operand.
+This operand is the same size as used in \DWFORMaddr.
+This address is used as the base address when interpreting
+offsets in subsequent location list entries of kind
+\DWRLEoffsetpair.
+
+\itembfnl{\DWRLEstartendTARG}
+This is a form of bounded range entry that
+has two target address operands. Each
+operand is the same size as used in \DWFORMaddr.
+These indicate the starting and ending addresses,
+respectively, that define the address range for which
+the following location is valid.
+       
+\itembfnl{\DWRLEstartlengthTARG}
+This is a form of bounded range entry that
+has one target address operand value and an unsigned LEB128
+integer length operand value. The address is the beginning address
+of the range over which the location description is valid, and
+the length is the number of bytes in that range.
 
-\item An address, which defines the appropriate base address 
-for use in interpreting the beginning and ending address offsets 
-of subsequent entries of the location list.
 \end{enumerate}
-
-\textit{A base address selection entry affects only the 
-remainder of the list in which it is contained.}
-
-\subsubsection{End-of-List Entry}
-The end of any given \addtoindex{range list} is marked by an 
-\addtoindexx{end-of-list entry!in range list}
-end-of-list entry, 
-which consists of a 0 for the beginning address
-offset and a 0 for the ending address offset. 
-A \addtoindex{range list}
-containing only an end-of-list entry describes an empty scope
-(which contains no instructions).
-
-\textit{A base address selection entry and an 
-\addtoindexx{end-of-list entry!in range list}
-end-of-list entry for
-a \addtoindex{range list} 
-are identical to a base address selection entry
-and end-of-list entry, respectively, for a location list
-(see Section \refersec{chap:locationlists}) 
-in interpretation and representation.}
+\eb
 
 
 \section{Entry Address}
@@ -2853,7 +2812,10 @@ module initialization, subroutines,
 and the like, may have a \DWATentrypcDEFN{} attribute 
 \addtoindexx{entry PC address} to indicate the 
 \definitionx{entry address} which is the address of the 
-instruction where execution should begin
+instruction where execution 
+\bb
+begins 
+\eb
 within that range\hypertarget{chap:entryaddressofscope}{}
 of addresses. 
 If the value of the \DWATentrypcNAME{} attribute is of
index c808872..09d46fd 100644 (file)
@@ -262,7 +262,11 @@ fashion, informative text will suggest but not require this design.
 
 \subsection{Permissive Rather Than Prescriptive}
 The DWARF Standard specifies the meaning of DWARF descriptions. It does not
-specify in detail what a particular producer should generate for any source to
+specify in detail what a particular producer 
+\bb
+must
+\eb
+generate for any source to
 object conversion.  One producer may generate a more complete description
 than another, it may describe features in a different order (unless the 
 standard explicitly requires a particular order), or it may use
@@ -292,6 +296,13 @@ valid DWARF descriptions, while a consumer using the former would be able
 to provide more accurate values for the variable while executing in that
 range than a consumer using the latter.
 
+\bb
+In this document, where the word \doublequote{may} is used, the producer has 
+the option to follow the description or not.  Where the text says 
+\doublequote{may not}, this is prohibited.  Where the text says \doublequote{should}, 
+this is advice about best practice, but is not a requirement.
+\eb
+
 \subsection{Vendor Extensibility}
 This document does not attempt to cover all interesting
 languages or even to cover all of the possible debugging
@@ -356,7 +367,7 @@ except for line number information.
 DWARF information to be kept separate from an executable 
 or shared image. This includes new sections 
 \dotdebugaddr, \dotdebugstroffsets, \dotdebugabbrevdwo, \dotdebuginfodwo, 
-\dotdebuglinedwo, \dotdebuglocdwo, \dotdebugmacrodwo, \dotdebugstrdwo,
+\dotdebuglinedwo, \dotdebugloclistsdwo, \dotdebugmacrodwo, \dotdebugstrdwo,
 \dotdebugstroffsetsdwo, \dotdebugcuindex{} and \dotdebugtuindex{} 
 together with new forms of attribute value for referencing these sections.
 This enhances DWARF support by reducing executable program size and
@@ -366,6 +377,13 @@ with a \dotdebugmacro{} representation that can potentially be much more compact
 
 \item Replace the \dotdebugpubnames{} and \dotdebugpubtypes{} sections
 with a single and more functional name index section, \dotdebugnames{}.
+\bb
+\item Replace the location list and range list sections (\texttt{.debug\_loc} 
+and \texttt{.debug\_ranges}, respectively) with new sections (\dotdebugloclists{} 
+and \dotdebugrnglists) and new representations that
+save space and processing time by eliminating most related
+object file relocations.
+\eb
 \item Add a new debugging information entry (\DWTAGcallsiteNAME), related 
 attributes and DWARF expression operators to describe call site information, 
 including identification of tail calls and tail recursion.
@@ -393,8 +411,12 @@ a new \HFNunittype{} field.
 \needlines{4}
 \item New operand forms for attribute values are defined 
 (\DWFORMaddrxNAME, \DWFORMdatasixteenNAME, \DWFORMimplicitconstNAME, 
-\DWFORMlinestrpNAME, 
+\DWFORMlinestrpNAME,
+\bb
+\DWFORMloclistxNAME, \DWFORMrnglistxNAME,
+\eb 
 \DWFORMrefsupNAME, \DWFORMstrpsupNAME{} and \DWFORMstrxNAME).
+\eb
 
 \textit{Because a pre-DWARF Version 5 consumer will not be able to interpret 
 these even to ignore and skip over them, new forms must be 
index e771e1b..9481e00 100644 (file)
@@ -1598,9 +1598,11 @@ such code may be combined with one or more forms from the set:
 \DWFORMflag, \DWFORMlinestrp, \DWFORMsdata, \DWFORMsecoffset,
 \DWFORMstring, \DWFORMstrp, \DWFORMstrx{}  and \DWFORMudata.
 
-If a consumer encounters a vendor-defined content type that
+\bb
+\textit{If a consumer encounters a vendor-defined content type that
 it does not understand, it should skip the content data as though
-it were not present.
+it were not present.}
+\eb
 
 \needlines{6}
 \subsection{The Line Number Program}
index af5f1d0..10f064a 100644 (file)
@@ -294,12 +294,15 @@ unit in whatever form makes sense for the host system.
 \item  \hypertarget{chap:DWATproducercompileridentification}{}
 A \DWATproducerDEFN{} attribute\addtoindexx{producer attribute}
 whose value is a null-terminated string containing 
-information about the compiler
-that produced the compilation unit. The actual contents of
+information about the compiler that produced the compilation unit. 
+
+\bb
+\textit{The actual contents of
 the string will be specific to each producer, but should
 begin with the name of the compiler vendor or some other
-identifying character sequence that should avoid confusion
-with other producer values.
+identifying character sequence that will avoid confusion
+with other producer values.}
+\eb
 
 \needlines{4}
 \item  \hypertarget{chap:DWATidentifiercaseidentifiercaserule}{}
@@ -323,32 +326,45 @@ as the values of \DWATname{} attributes
 \addtoindexx{name attribute}
 in debugging information
 entries for the compilation unit reflect the names as they
-appear in the source program. The debugger should be sensitive
+appear in the source program. 
+
+\bb
+\textit{A debugger should be sensitive
 to the case of \addtoindex{identifier names} when doing identifier 
-lookups.
+lookups.}
+\eb
 
 \needlines{4}
 \DWIDupcaseTARG{} means that the 
 producer of the debugging
 information for this compilation unit converted all source
 names to upper case. The values of the name attributes may not
-reflect the names as they appear in the source program. The
-debugger should convert all names to upper case when doing
-lookups.
+reflect the names as they appear in the source program. 
 
-\DWIDdowncaseTARG{} means that 
-the producer of the debugging
+\bb
+\textit{A debugger should convert all names to upper case 
+when doing lookups.}
+\eb
+
+\DWIDdowncaseTARG{} means that the producer of the debugging
 information for this compilation unit converted all source
 names to lower case. The values of the name attributes may not
-reflect the names as they appear in the source program. The
-debugger should convert all names to lower case when doing
-lookups.
+reflect the names as they appear in the source program. 
+
+\bb
+\textit{A debugger should convert all names to lower case 
+when doing lookups.}
+\eb
 
 \needlines{4}
 \DWIDcaseinsensitiveTARG{} means that the values of the name
 attributes reflect the names as they appear in the source
-program but that a case insensitive lookup should be used to
-access those names.
+program but that case is not significant.
+
+\bb
+\textit{A debugger should ignore case when doing lookups.}
+\eb
+
 
 \needlines{5}
 \item \hypertarget{chap:DWATbasetypesprimitivedatatypesofcompilationunit}{}
@@ -422,21 +438,34 @@ attribute, whose value is of class \CLASSaddrptr.
 This attribute points to the beginning of the compilation
 unit's contribution to the \dotdebugaddr{} section.
 Indirect references (using \DWFORMaddrx, \DWOPaddrx, 
-\DWOPconstx, \DWLLEbaseaddressselectionentry{}, 
-\DWLLEstartendentry{} or \DWLLEstartlengthentry) 
+\bb
+\DWOPconstx, \DWLLEbaseaddressx{}, 
+\DWLLEstartxendx{} or \DWLLEstartxlength) 
+\eb
 within the compilation unit are interpreted as indices 
 relative to this base.
 
 \needlines{5}
-\item \hypertarget{chap:DWATrangesbaseforrangelists}{}
-A \DWATrangesbaseDEFN\addtoindexx{ranges table base attribute}
-attribute, whose value is of class \CLASSrangelistptr.
-This attribute points to the beginning of the compilation
-unit's contribution to the \dotdebugranges{} section.
-References to range lists (using \DWFORMsecoffset)
+\item \hypertarget{chap:DWATrnglistsbaseforrnglists}{}
+\bb 
+A \DWATrnglistsbaseDEFN\addtoindexx{ranges table base attribute}
+attribute, whose value is of class \CLASSrnglistsptr.
+This attribute points to the base of the compilation
+unit's contribution to the \dotdebugrnglists{} section.
+References to range lists (using \DWFORMrnglistx)
 within the compilation unit are
-interpreted as offsets relative to this base.
+interpreted relative to this base.
+\eb
 
+\item \hypertarget{chap:DWATloclistsbaseinlocationlist}{}
+\bb
+A \DWATloclistsbase{}\addtoindexx{location table base attribute} 
+attribute, whose value is of class \CLASSloclistsptr. 
+This attribute points to the base of the compilation 
+unit’s contribution to the \dotdebugloclists{} section. References 
+to location lists (using \DWFORMloclistx) within the compilation 
+unit are interpreted relative to this base.
+\eb
 \end{enumerate}
 
 The  base address of a compilation unit is defined as the
@@ -517,20 +546,25 @@ of a \DWATuseUTFeight{} attribute in the full compilation unit
 \item A \DWATstroffsetsbase{} attribute, for indirect strings references 
 from the skeleton compilation unit.
 \item A \DWATaddrbase{} attribute.
-\item A \DWATrangesbase{} attribute.
+
+\bbpareb
 
 \end{enumerate}
 
 All other attributes of a compilation unit entry (described
-in Section \refersec{chap:fullandpartialcompilationunitentries}) 
-should be placed in the split full compilation unit
+in Section \refersec{chap:fullandpartialcompilationunitentries})
+\bb
+are
+\eb 
+placed in the split full compilation unit
 (see \refersec{chap:splitfullcompilationunitentries}).
 The attributes provided by the skeleton compilation
 unit entry do not need to be repeated in the full compilation
 unit entry.
 
-\textit{The \DWATaddrbase{}, \DWATrangesbase{} and 
-\DWATstroffsetsbase{} attributes provide context that may be 
+\textit{The \DWATaddrbase{} 
+\bbeb
+and \DWATstroffsetsbase{} attributes provide context that may be 
 necessary to interpret the contents
 of the corresponding \splitDWARFobjectfile.}
 
@@ -570,7 +604,8 @@ split full compilation unit entry but instead are inherited
 (if present) from the corresponding skeleton compilation unit: 
 \DWATlowpc, \DWAThighpc, \DWATranges, \DWATstmtlist, \DWATcompdir, 
 \DWATstroffsetsbase, \DWATaddrbase{} and 
-\DWATrangesbase.}
+\bb
+\DWATrnglistsbase.\eb}
 
 \textit{The \DWATbasetypes{} attribute is not defined for a
 split full compilation unit.}
@@ -1450,17 +1485,33 @@ instance of the subroutine that immediately encloses the
 subroutine or entry point.
 
 In the context of supporting nested subroutines, the
-\DWATframebase{} attribute value should obey the following
-constraints:
+\DWATframebase{} attribute value 
+\bb
+obeys
+\eb
+the following constraints:
 
 \begin{enumerate}[1. ]
-\item It should compute a value that does not change during the
+\item 
+\bb
+It computes
+\eb
+a value that does not change during the
 life of the subprogram, and
 
-\item The computed value should be unique among instances of
-the same subroutine. (For typical \DWATframebase{} use, this
+\item The computed value 
+\bb
+is
+\eb
+unique among instances of
+the same subroutine. 
+
+\bb
+\textit{For typical \DWATframebase{} use, this
 means that a recursive subroutine\textquoteright s stack frame must have
-non-zero size.)
+non-zero size.}
+\eb
+
 \end{enumerate}
 
 \textit{If a debugger is attempting to resolve an up\dash level reference
@@ -1621,36 +1672,29 @@ Attributes and children in an abstract instance are shared
 by all concrete instances (see Section \refersec{chap:concreteinstances}).
 
 A debugging information entry that is a member of an abstract
-instance tree should not contain any attributes which describe
+instance tree 
+\bb
+may
+\eb
+not contain any attributes which describe
 aspects of the subroutine which vary between distinct inlined
-expansions or distinct out-of-line expansions. For example,
+expansions or distinct out-of-line expansions. 
+
+\bb
+\textit{For example,
 \addtoindexx{entry pc attribute!and abstract instance}
-the \DWATlowpc,
-\DWAThighpc, 
-\DWATranges, 
-\DWATentrypc, 
-\DWATlocation,
-\DWATreturnaddr, 
-\DWATstartscope, 
+the \DWATlowpc,\addtoindexx{low PC attribute!and abstract instance}
+\DWAThighpc,\addtoindexx{high PC attribute!and abstract instance} 
+\DWATranges,\addtoindexx{ranges attribute!and abstract instance} 
+\DWATentrypc,\addtoindexx{entry PC attribute!and abstract instance} 
+\DWATlocation,\addtoindexx{location attribute!and abstract instance}
+\DWATreturnaddr,\addtoindexx{return address attribute!and abstract instance} 
+\DWATstartscope,\addtoindexx{start scope attribute!and abstract instance} 
 and 
-\DWATsegment{}
-attributes 
-\addtoindexx{location attribute!and abstract instance}
-typically 
-\addtoindexx{ranges attribute!and abstract instance}
-should 
-\addtoindexx{high PC attribute!and abstract instance}
-be 
-\addtoindexx{low PC attribute!and abstract instance}
-omitted; 
-\addtoindexx{segment attribute!and abstract instance}
-however, 
-\addtoindexx{return address attribute!and abstract instance}
-this 
-\addtoindexx{segment attribute!and abstract instance}
-list
-\addtoindexx{start scope attribute!and abstract instance}
-is not exhaustive.
+\DWATsegment{}\addtoindexx{segment attribute!and abstract instance}
+attributes typically should be omitted; however, this list is not 
+exhaustive.}
+\eb
 
 \needlines{5}
 \textit{It would not make sense normally to put these attributes into
@@ -1677,7 +1721,11 @@ or not a given entry is abstract.
 Each inline expansion of a subroutine is represented
 by a debugging information entry with the 
 tag \DWTAGinlinedsubroutineTARG. 
-Each such entry should be a direct
+Each such entry 
+\bb
+is
+\eb
+be a direct
 child of the entry that represents the scope within which
 the inlining occurs.
 
@@ -1796,7 +1844,9 @@ If an entry within a concrete inlined instance tree contains
 attributes describing the 
 \addtoindexx{declaration coordinates!in concrete instance}
 \livelink{chap:declarationcoordinates}{declaration coordinates} 
-of that entry, then those attributes should refer to the file, line
+of that entry, then those attributes 
+\bbeb
+refer to the file, line
 and column of the original declaration of the subroutine,
 not to the point at which it was inlined. As a consequence,
 they may usually be omitted from any entry that has an abstract
@@ -1832,7 +1882,11 @@ union, class, and interface types; and members of types. If any
 entry within a concrete inlined instance tree needs to refer
 to an entity declared within the scope of the relevant inlined
 subroutine and for which no concrete instance entry exists,
-the reference should refer to the abstract instance entry.
+the reference 
+\bb
+refers 
+\eb
+to the abstract instance entry.
 
 \needlines{4}
 \item Entries in the concrete instance tree which are associated
@@ -1855,7 +1909,11 @@ for that separate debugging information entry.
 not correspond to entries in the abstract instance tree
 to describe new entities that are specific to a particular
 inlined expansion. In that case, they will not have associated
-entries in the abstract instance tree, should not contain
+entries in the abstract instance tree, 
+\bb
+do 
+\eb
+not contain
 \addtoindexx{abstract origin attribute}
 \DWATabstractorigin{} attributes, and must contain all their
 own attributes directly. This allows an abstract instance tree
@@ -2159,8 +2217,12 @@ The call site may have a
 \livetargi{chap:DWATcalltargetofcallsite}{attribute}{call target attribute} which is
 a DWARF expression.  For indirect calls or jumps where it is unknown at
 compile time which subprogram will be called the expression computes the
-address of the subprogram that will be called.  The DWARF expression should
-not use register or memory locations that might be clobbered by the call.
+address of the subprogram that will be called.  
+
+\bb
+\textit{The DWARF expression should
+not use register or memory locations that might be clobbered by the call.}
+\eb
 
 \needlines{4}
 The call site entry may have a 
@@ -2221,14 +2283,10 @@ Each \DWTAGcallsiteparameter{} entry may have a
 which is a DWARF expression 
 which when evaluated yields the value of the parameter at the time of the call.
 
-\textit{The expression should not use registers or memory
-locations that might be clobbered by the call, as it might be evaluated after 
-virtually unwinding from the called function back to the caller.  If it is not
+\textit{\bbeb If it is not
 possible to avoid registers or memory locations that might be clobbered by
 the call in the expression, then the \DWATcallvalueNAME{} attribute should
-not be provided.}
-
-\textit{The reason for the restriction is that the value of the parameter may be
+not be provided. The reason for the restriction is that the value of the parameter may be
 needed in the midst of the callee, where the call clobbered registers or
 memory might be already clobbered, and if the consumer is not assured by
 the producer it can safely use those values, the consumer can not safely
@@ -2331,9 +2389,12 @@ A labeled statement is usually the target of one or more
 
 \needlines{4}
 A label is represented by a debugging information entry with
-\addtoindexx{label entry}
-the tag \DWTAGlabelTARG. 
-The entry for a label should be owned by
+\addtoindexx{label entry} the tag \DWTAGlabelTARG. 
+The entry for a label 
+\bb
+is
+\eb
+owned by
 the debugging information entry representing the scope within
 which the name of the label could be legally referenced within
 the source program.
@@ -2486,13 +2547,16 @@ scope is non-contiguous
 the value of this attribute is the offset in bytes of the 
 beginning of the address range for the scope of the entity 
 from the beginning of the first \addtoindex{range list} entry
-for the containing scope that is not a base selection entry, 
-a default selection entry or an end-of-list entry.
+for the containing scope that is not a base 
+\bb
+address entry, a default location
+\eb
+entry or an end-of-list entry.
 \end{enumerate}
 
 \needlines{4}
 \item Otherwise, the set of addresses for the scope of the 
-entity is specified using a value of class \CLASSrangelistptr{}. 
+entity is specified using a value of class \CLASSrnglistsptr{}. 
 This value indicates the beginning of a \addtoindex{range list}
 (see Section \refersec{chap:noncontiguousaddressranges}).
 \end{enumerate}
index 9dd1217..a35810e 100644 (file)
@@ -58,28 +58,44 @@ format would be represented by a change in the
 \dotdebuginfo{}     & 2 & 3 & 4 & 5 \\
 \dotdebugline{}     & 2 & 3 & 4 & 5 \\
 \dotdebuglinestr{}  & - & - & - & 5 \\
-\dotdebugloc{}      & * & * & * & 5 \\
+\bb
+\addtoindexi{\texttt{.debug\_loc}}{\texttt{.debug\_loc} (Version 4)}
+                    & * & * & * & - \\
+\dotdebugloclists{} & - & - & - & 5 
+\eb \\
 \dotdebugmacinfo{}  & * & * & * & - \\*
 \dotdebugmacro{}    & - & - & - & 5 \\
 \dotdebugnames{}    & - & - & - & 5 \\
 \dotdebugpubnames{} & 2 & 2 & 2 & - \\
 \dotdebugpubtypes{} & - & 2 & 2 & - \\
-\dotdebugranges{}   & - & * & * & 5 \\
+\bb
+\addtoindexi{\texttt{.debug\_ranges}}{\texttt{.debug\_ranges} (Version 4)}
+                    & - & * & * & - \\
+\dotdebugrnglists{} & - & - & - & 5
+\eb \\
 \dotdebugstr{}      & * & * & * & * \\
 \dotdebugstroffsets & - & - & - & 5 \\
 \dotdebugsup        & - & - & - & 5 \\
 \addtoindexi{\texttt{.debug\_types}}{\texttt{.debug\_types} (Version 4)}
                     & - & - & 4 & - \\
+\\
 \hspace{3.5cm}\textit{(split object sections)}
 \\
 \dotdebugabbrevdwo  & - & - & - & * \\
 \dotdebuginfodwo    & - & - & - & 5 \\
 \dotdebuglinedwo    & - & - & - & 5 \\
-\dotdebuglocdwo     & - & - & - & 5 \\
+\bb
+\dotdebugloclistsdwo& - & - & - & 5 
+\eb \\
 \dotdebugmacrodwo   & - & - & - & 5 \\
+\bb
+\dotdebugrnglistsdwo& - & - & - & 5
+\eb \\
+
 \dotdebugstrdwo     & - & - & - & * \\
 \dotdebugstroffsetsdwo 
-                    & - & - & - & 5 \\             
+                    & - & - & - & 5 \\
+
 \hspace{3.5cm}\textit{(package file sections)}
 \\
 \dotdebugcuindex{}  & - & - & - & 5 \\
index d3272b4..e1d057b 100644 (file)
@@ -56,10 +56,10 @@ their descendants. This is the bulk of the debugging
 information for the compilation unit that is normally found
 in the \dotdebuginfo{} section.
 \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 
+the \dotdebugloclists{} section, with a 
 modified format to eliminate the need for relocations.
 \item
 \dotdebugstrdwo{} - Contains the string table for all indirect
@@ -144,8 +144,7 @@ building an index section.
 The section header refers to a
 compilation unit offset, which is the offset of the
 skeleton compilation unit in the \dotdebuginfo{} section.
-\item
-\dotdebugranges{} - Contains the range lists.
+\bbeb
 \item
 \dotdebugstr{} - Contains any strings referenced by the skeleton
 \dotdebuginfo{} sections (via \DWFORMstrp{} or \DWFORMstrx{}).
@@ -165,7 +164,7 @@ may have the following attributes:
 \DWAThighpc{},
 \DWATlowpc{},
 \DWATranges{},
-\DWATrangesbase{},
+\bbeb
 \DWATstmtlist{},
 \DWATstroffsetsbase{}
 }
@@ -193,16 +192,11 @@ compilation unit).
 one \dotdwo{} section to another \dotdwo{} section
 in the same compilation unit. 
 
-\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 the \DWFORMaddrx{} form, referencing a relocatable 
+value in the \dotdebugaddr{} section (which remains in the .o file).
 
+\bbpareb
 \end{enumerate}
 
 
@@ -241,6 +235,11 @@ kinds.
 \hline
 \DWATlanguage           & \chkmk  & \chkmk &           & \chkmk & \chkmk  \\
 \hline
+\bb
+\DWATloclistsbase       & \chkmk  &        &           &        &         
+\eb
+\\
+\hline
 \DWATlowpc              & \chkmk  &        &  \chkmk   &        &         \\
 \hline
 \DWATmacros             & \chkmk  &        &           & \chkmk &         \\
@@ -251,9 +250,11 @@ kinds.
 \hline
 \DWATproducer           & \chkmk  &        &           & \chkmk &         \\
 \hline
-\DWATranges             & \chkmk  &        &  \chkmk   &        &         \\
+\bb
+\DWATranges \eb         & \chkmk  &        &           & \chkmk &         \\
 \hline
-\DWATrangesbase         & \chkmk  &        &  \chkmk   &        &         \\
+\bb
+\DWATrnglistsbase \eb   & \chkmk  &        &           &        &         \\
 \hline
 \DWATstmtlist           & \chkmk  & \chkmk &  \chkmk   &        & \chkmk  \\
 \hline
@@ -402,7 +403,6 @@ information:
 \begin{alltt}
   \dotdebugabbrev
   \dotdebuginfo
-  \dotdebugranges
   \dotdebugline
   \dotdebugstr
   \dotdebugaddr
@@ -426,8 +426,6 @@ Figure \referfol{fig:splitdwafexampleskeletondwarfdescription}.
         \DWATcompdir: (reference to directory name in .debug_str)
         \DWATdwoname: (reference to "demo1.dwo" in .debug_str)
         \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
       
@@ -450,34 +448,16 @@ 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.
+\bbeb
 
 The \DWATstmtlist{} attribute contains the relocatable offset of
 this file's contribution to the \dotdebugline{} table.
 
-There is both a \DWATranges{} attribute as well as a \DWATlowpc{} 
-attribute which 
-provides a default base address for the range list entries in the
-\dotdebugranges{} section. 
-
-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 this example, \texttt{demo1.o} contains range
-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}.
+\bbpareb
 
+\needlines{6}
 The \dotdebugline{} section contains the full line number table for
 the compiled code in the object file. As shown in
 Figure \refersec{fig:splitobjectexamplesourcefragment1}, the line
@@ -528,9 +508,10 @@ The \splitDWARFobjectfile{s} each contain the following sections:
   \dotdebugabbrevdwo
   \dotdebuginfodwo{} (for the compilation unit)
   \dotdebuginfodwo{} (one COMDAT section for each type unit)
-  \dotdebuglocdwo
+  \dotdebugloclistsdwo
   \dotdebuglinedwo
   \dotdebugmacrodwo
+  \dotdebugrnglistsdwo
   \dotdebugstroffsetsdwo
   \dotdebugstrdwo
 \end{alltt}
@@ -552,9 +533,7 @@ compilation unit.
 form code \DWFORMstrx, referring to slots in the
 \dotdebugstroffsetsdwo{} section.
 
-\item References to range lists in the \dotdebugranges{} section are
-all relative to the base offset given by \DWATrangesbase{}
-in the skeleton compilation unit.
+\bbpareb
 
 \needlines{4}
 \item References to relocatable addresses in the object file 
@@ -713,11 +692,11 @@ Section \refersec{app:dwarfpackagefileexample} presents
 an example of a DWARF package file.
 
 \needlines{4}
-The \dotdebuglocdwo{} section contains the location lists referenced
+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 \bbeb\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}
@@ -808,20 +787,23 @@ location lists at offset \texttt{0x0} and \texttt{0x2a}, respectively, and the
 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}[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
 &&&&& \\
 
@@ -848,12 +830,16 @@ offset & (DW\_LLE\_*)         & start & length & length & expression \\
 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
+\bb
+In each \DWLLEstartlength{} entry, 
+\eb
+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
@@ -937,9 +923,9 @@ 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} \\
+  \dotdebugloclistsdwo{}
+&    \dotdebugloclistsdwo{} from \texttt{demo1.dwo} \newline
+     \dotdebugloclistsdwo{} from \texttt{demo2.dwo} \\
 \hline
   \dotdebuglinedwo{}
 &    \dotdebuglinedwo{} from \texttt{demo1.dwo} \newline
@@ -965,7 +951,7 @@ with contributions from each input file as shown.
 \end{figure}
 
 \needlines{4}
-The \dotdebugabbrevdwo{}, \dotdebuglocdwo{} and \dotdebuglinedwo{}
+The \dotdebugabbrevdwo{}, \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. 
@@ -1008,10 +994,10 @@ 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}[ht]
 \begin{center}
index 5c98b13..595a60c 100644 (file)
@@ -463,33 +463,63 @@ presentation.
 \begin{tabular}{l|P{9cm}}
 \hline
 Name&Meaning\\ \hline
-\DWTAGatomictypeTARG{} & C \addtoindex{\_Atomic} qualified type \\
-\DWTAGconsttypeTARG{} &  C or C++ const qualified type
-\addtoindexx{const qualified type entry} \addtoindexx{C} \addtoindexx{C++} \\
-\DWTAGpackedtypeTARG& \addtoindex{Pascal} or Ada packed type\addtoindexx{packed type entry}
-\addtoindexx{packed qualified type entry} \addtoindexx{Ada} \addtoindexx{Pascal} \\
-\DWTAGpointertypeTARG{} & Pointer to an object of
-the type being modified \addtoindexx{pointer qualified type entry} \\
-\DWTAGreferencetypeTARG& \addtoindex{C++} (lvalue) reference 
-to an object of the type 
-\addtoindexx{reference type entry}
-\mbox{being} modified
-\addtoindexx{reference qualified type entry} \\
-\DWTAGrestricttypeTARG& \addtoindex{C} 
-restrict 
-\addtoindexx{restricted type entry}
-qualified type
-\addtoindexx{restrict qualified type} \\
-\DWTAGrvaluereferencetypeTARG{} & \addtoindex{C++}
-\addtoindexx{rvalue reference type entry}
-rvalue 
-\addtoindexx{restricted type entry}
-reference to an object of the type \mbox{being} modified 
-\addtoindexx{rvalue reference qualified type entry} \\
-\DWTAGsharedtypeTARG&\addtoindex{UPC} shared qualified type 
-\addtoindexx{shared qualified type entry} \\
-\DWTAGvolatiletypeTARG&\addtoindex{C} or \addtoindex{C++} volatile qualified type 
-\addtoindexx{volatile qualified type entry} \\
+\DWTAGatomictypeTARG{} & 
+    atomic qualified type 
+\bb
+    (for example, in C) 
+\eb
+    \addtoindexx{atomic qualified type entry} \addtoindexx{C} \\
+\DWTAGconsttypeTARG{} &  
+    const qualified type 
+\bb
+    (for example in C, C++)
+\eb
+    \addtoindexx{const qualified type entry} \addtoindexx{C} \addtoindexx{C++} \\
+    \bb
+\DWTAGimmutabletypeTARG &
+    immutable type 
+    (for example, in \addtoindex{D})
+\eb
+    \addtoindexx{immutable type} \\
+\DWTAGpackedtypeTARG & 
+    packed type\addtoindexx{packed type entry} 
+\bb 
+    (for example in Ada, Pascal)
+\eb
+    \addtoindexx{packed qualified type entry} \addtoindexx{Ada} \addtoindexx{Pascal} \\
+\DWTAGpointertypeTARG{} & 
+    pointer to an object of the type being modified 
+    \addtoindexx{pointer qualified type entry} \\
+\DWTAGreferencetypeTARG & 
+\bb
+    reference to (lvalue of) an object of the type \mbox{being} modified 
+\eb
+    \addtoindexx{reference type entry}
+    \addtoindexx{reference qualified type entry} \\
+\DWTAGrestricttypeTARG &  
+    restrict qualified type
+    \addtoindexx{restricted type entry}
+    \addtoindexx{restrict qualified type} \addtoindexx{C} \\
+\DWTAGrvaluereferencetypeTARG{} &
+    rvalue reference to an object of the type \mbox{being} modified 
+\bb 
+    (for example, in \addtoindex{C++}) 
+\eb
+    \addtoindexx{rvalue reference type entry}
+    \addtoindexx{restricted type entry}
+    \addtoindexx{rvalue reference qualified type entry} \\
+\DWTAGsharedtypeTARG &
+    shared qualified type 
+\bb 
+    (for example, in \addtoindex{UPC}) 
+\eb
+    \addtoindexx{shared qualified type entry} \\
+\DWTAGvolatiletypeTARG & 
+    volatile qualified type 
+\bb
+    (for example, in \addtoindex{C}, \addtoindex{C++}) 
+\eb
+    \addtoindexx{volatile qualified type entry} \\
 \hline
 \end{tabular}
 \end{table}
@@ -884,7 +914,11 @@ facilitate DWARF space compression
 A structure type, union type or class type entry may have a
 \DWATcallingconventionDEFN{} attribute,
 \addtoindexx{calling convention attribute!for types} 
-whose value indicates whether a value of the type should be passed by reference 
+whose value indicates whether a value of the type 
+\bb
+is
+\eb
+passed by reference 
 or passed by value. The set of calling convention codes for use with types 
 \addtoindexx{calling convention codes!for types}
 is\hypertarget{chap:DWATcallingconventionfortypes}{}
@@ -1396,12 +1430,17 @@ template instantiation and that special compilation
 unit has a different name from the compilation unit containing
 the template definition, the name attribute for the debugging
 information entry representing the special compilation unit
-should be empty or omitted.
+\bb
+is
+\eb
+empty or omitted.
 
 %\needlines{4}
 \item If the class type entry representing the template
 instantiation or any of its child entries contains declaration
-coordinate attributes, those attributes should refer to
+coordinate attributes, those attributes 
+\bbeb 
+refer to
 the source for the template definition, not to any source
 generated artificially by the compiler.
 \end{enumerate}
@@ -1530,12 +1569,13 @@ The condition entry owns \DWTAGconstant{} and/or
 \DWTAGsubrangetype{} entries that describe the constant
 values associated with the condition. If any child entry 
 \addtoindexx{type attribute}
-has
-a \DWATtype{} attribute,
-that attribute should describe a type
-compatible with the comparison type (according to the source
-language); otherwise the child\textquoteright s type is the same as the
-comparison type.
+has a \DWATtype{} attribute, that attribute 
+\bb
+describes
+\eb
+a type compatible with the comparison type (according to the 
+source language); otherwise the child\textquoteright{}s type 
+is the same as the comparison type.
 
 \textit{For conditional variables with alphanumeric types, COBOL
 permits a source program to provide ranges of alphanumeric