Incorporate changes as of the May 17 meeting. The corresponding
[dwarf-doc.git] / dwarf5 / latexdoc / datarepresentation.tex
index cca0e25..55958f6 100644 (file)
@@ -27,18 +27,13 @@ appropriate prefix
 \DWCClouserMARK{}\DWCChiuserMARK{}DW\_CC, 
 \DWCFAlouserMARK{}\DWCFAhiuserMARK{}DW\_CFA, 
 \DWENDlouserMARK{}\DWENDhiuserMARK{}DW\_END, 
-\bb
 \DWIDXlouserMARK{}\DWIDXhiuserMARK{}DW\_IDX, 
-\eb
 \DWLANGlouserMARK{}\DWLANGhiuserMARK{}DW\_LANG, 
-\bb
 \DWLNCTlouserMARK{}\DWLNCThiuserMARK{}DW\_LNCT, 
-\eb
 \DWLNElouserMARK{}\DWLNEhiuserMARK{}DW\_LNE, 
 \DWMACROlouserMARK{}\DWMACROhiuserMARK{}DW\_MACRO, 
 \DWOPlouserMARK{}\DWOPhiuserMARK{}DW\_OP or 
 \DWTAGlouserMARK{}\DWTAGhiuserMARK{}DW\_TAG) 
-\bbeb 
 followed by \_lo\_user or \_hi\_user. 
 Values in the  range between \textit{prefix}\_lo\_user 
 and \textit{prefix}\_hi\_user inclusive,
@@ -47,12 +42,8 @@ use values in this range without conflicting with current or
 future system\dash defined values. All other values are reserved
 for use by the system.
 
-\textit{For example, for 
-\bb
-debugging information entry
-\eb
-tags, the special
-labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
+\textit{For example, for debugging information entry
+tags, the special labels are \DWTAGlouserNAME{} and \DWTAGhiuserNAME.}
 
 \textit{There may also be codes for vendor specific extensions
 between the number of standard line number opcodes and
@@ -60,8 +51,7 @@ the first special line number opcode. However, since the
 number of standard opcodes varies with the DWARF version,
 the range for extensions is also version dependent. Thus,
 \DWLNSlouserTARG{} and 
-\DWLNShiuserTARG{} symbols are not defined.
-}
+\DWLNShiuserTARG{} symbols are not defined.}
 
 Vendor defined tags, attributes, base type encodings, location
 atoms, language names, line number actions, calling conventions
@@ -230,12 +220,9 @@ space of the program and require relocation.
 
 \needlines{4}
 \textit{Note that operands of classes 
-\bbeb
 \CLASSconstant{} and 
 \CLASSflag{} do not require relocation. Attribute operands that use 
-\bb
 forms \DWFORMstring{},
-\eb 
 \DWFORMrefone, \DWFORMreftwo, \DWFORMreffour, \DWFORMrefeight, or
 \DWFORMrefudata{} also do not need relocation.}
 
@@ -247,10 +234,8 @@ information such that the majority of the debugging
 information can remain in individual object files without
 being processed by the linker. 
 
-\bb
 \textit{This reduces link time by reducing the amount of information
 the linker must process.}
-\eb
 
 \needlines{6}
 \subsubsection{First Partition (with Skeleton Unit)}
@@ -291,12 +276,9 @@ the skeleton compilation unit uses the \DWFORMstrx{} form.
 \end{itemize}
 The attributes contained in the skeleton compilation
 unit can be used by a DWARF consumer to find the 
-\bbeb
 DWARF object file that contains the second partition.
 
-\bb
 \subsubsection{Second Partition (Unlinked or in a \texttt{.dwo} File)}
-\eb
 The second partition contains the debugging information that
 does not need to be processed by the linker. These sections
 may be left in the object files and ignored by the linker
@@ -307,28 +289,22 @@ file. This partition includes the following:
 \item
 The full compilation unit, in the \dotdebuginfodwo{} section.
 \begin{itemize}
-\item
-The full compilation unit entry includes a \DWATdwoid{} 
-attribute whose form and value is the same as that of the \DWATdwoid{} 
-attribute of the associated skeleton unit.
-\needlines{4}
+\bbeb
 \item
 Attributes contained in the full compilation unit
 may refer to machine addresses indirectly using the \DWFORMaddrx{} 
 form, which accesses the table of addresses specified by the
 \DWATaddrbase{} attribute in the associated skeleton unit.
-Location 
-\bb
-descriptions 
-\eb
-may similarly do so using the \DWOPaddrx{} and
+Location descriptions may similarly do so using the \DWOPaddrx{} and
 \DWOPconstx{} operations. 
+
 \item
 \DWATranges{} attributes contained in the full compilation unit
 may refer to range table entries with a \DWFORMsecoffset{} offset 
 relative to the base offset specified by the \DWATrangesbase{}
 attribute in the associated skeleton unit.
 \end{itemize}
+
 \item Separate type units, in the \dotdebuginfodwo{} section.
 
 \item
@@ -354,10 +330,7 @@ section.
 
 Except where noted otherwise, all references in this document
 to a debugging information section (for example, \dotdebuginfo),
-\bb
-apply 
-\eb
-also to the corresponding split DWARF section (for example,
+apply also to the corresponding split DWARF section (for example,
 \dotdebuginfodwo).
 
 \needlines{4}
@@ -371,7 +344,6 @@ references within or between sections are not possible.
 The relocated addresses in the debugging information for an
 executable object are virtual addresses.
 
-\bb
 The sections containing the debugging information are typically
 not loaded as part of the memory image of the program (in ELF
 terminology, the sections are not "allocatable" and are not part
@@ -385,8 +357,6 @@ depending on the class allowed by a particular attribute of a
 debugging information entry, as shown in 
 Table \refersec{tab:attributeencodings}.)
 
-\eb
-
 \needlines{6}
 \subsection{Shared Object Files}
 \label{datarep:sharedobjectfiles}
@@ -402,12 +372,10 @@ shared object file may be calculated by adding the offset to the
 base address at which the object file was attached. This offset
 is available in the run\dash time linker\textquoteright s data structures.}
 
-\bb
 As with executable objects, the sections containing debugging
 information are typically not loaded as part of the memory image
 of the shared object, and are typically linked as if they were
 each to be loaded at virtual address 0.
-\eb
 
 \subsection{DWARF Package Files}
 \label{datarep:dwarfpackagefiles}
@@ -423,6 +391,7 @@ produced during the compilation of an application.}
 application, and is given the same name with a \doublequote{\texttt{.dwp}}
 extension.\addtoindexx{\texttt{.dwp} file extension}}
 
+\needlines{4}
 A DWARF package file is itself an object file, using the
 \addtoindexx{package files}
 \addtoindexx{DWARF package files}
@@ -455,7 +424,9 @@ section.
 
 The DWARF package file also contains two index sections that
 provide a fast way to locate debug information by compilation
-unit ID (\DWATdwoid) for compilation units, or by type
+unit ID 
+\bbeb 
+for compilation units, or by type
 signature for type units:
 \begin{alltt}
     \dotdebugcuindex
@@ -512,7 +483,6 @@ The index section header contains the following fields:
 A version number.
 \addtoindexx{version number!CU index information} 
 \addtoindexx{version number!TU index information}
-\bbeb 
 This number is specific to the CU and TU index information
 and is independent of the DWARF version number.
 
@@ -520,11 +490,9 @@ The version number is \versiondotdebugcuindex.
 
 \item \textit{padding} (\HFTuhalf) \\
 Reserved to DWARF (must be zero).
-\bb
 \item \texttt{section\_count} (\HFTuword) \\
 The number of entries in the table of section counts that follows.
 For brevity, the contents of this field is referred to as $N$ below.
-\eb
 
 \item \texttt{unit\_count} (\HFTuword) \\
 The number of compilation units or type units in the index.
@@ -581,9 +549,7 @@ The table of offsets begins immediately following the parallel
 table (at offset \mbox{$16 + 12 * S$} from the beginning of the section).
 The table is a two-dimensional array of 4-byte words, 
 %(using the byte order of the application binary),
-\bb 
 with $N$ sections and $U + 1$
-\eb
 rows, in row-major order. Each row in the array is indexed
 starting from 0. The first row provides a key to the columns:
 each column in this row provides a section identifier for a debug
@@ -591,9 +557,7 @@ section, and the offsets in the same column of subsequent rows
 refer to that section. The section identifiers are shown in
 Table \referfol{tab:dwarfpackagefilesectionidentifierencodings}.
 
-\bb
 \textit{Not all sections listed in the table need be included.}
-\eb
 
 \needlines{12}
 \begin{centering}
@@ -638,17 +602,12 @@ The table of sizes begins immediately following the table of
 offsets, and provides the sizes of the contributions made by each
 CU or TU to the corresponding section in the package file. Like
 the table of offsets, it is a two-dimensional array of 4-byte
-words, with 
-\bb
-$N$ 
-\eb
+words, with $N$ 
 entries and $U$ rows, in row-major order. Each row in
 the array is indexed starting from 1 (row 0 of the table of
 offsets also serves as the key for the table of sizes).
 
-\bb
 For an example, see Figure \refersec{fig:examplecuindexsection}.
-\eb
 
 \subsection{DWARF Supplementary Object Files}
 \label{datarep:dwarfsupplemetaryobjectfiles}
@@ -658,17 +617,12 @@ strings and macro entries from several executables or shared
 object files into a separate 
 \addtoindexi{\textit{supplementary object file}}{supplementary object file} 
 by some post-linking utility; the moved entries and strings can 
-\bb
-then be
-\eb
-referenced
+then be referenced
 from the debugging information of each of those executable or 
 shared object files.
 
-\bb
 This facilitates distribution of separate consolidated debug files in
 a simple manner.
-\eb
 
 \needlines{4}
 A DWARF \addtoindex{supplementary object file} is itself an object file, 
@@ -686,7 +640,6 @@ The \dotdebugsup{} section contains:
 \addttindexx{version}
 A 2-byte unsigned integer representing the version of the DWARF
 information for the compilation unit. 
-\bbeb
 
 The value in this field is \versiondotdebugsup.
 
@@ -714,21 +667,15 @@ this value can be 0 if no checksum is provided.
 
 \item \texttt{sup\_checksum} (array of \HFTubyte) \\
 \addttindexx{sup\_checksum}
-\bb
 An implementation-defined integer constant value that
 provides unique identification of the supplementary file.
-\eb
 
 \end{enumerate}
 
 Debug information entries that refer to an executable's or shared
-object's addresses must \emph{not} be moved to supplementary files (the
-addesses will likely not be the same). Similarly,
-entries referenced from within location 
-\bb
-descriptions 
-\eb
-or using loclistptr
+object's addresses must \emph{not} be moved to supplementary files 
+(the addesses will likely not be the same). Similarly,
+entries referenced from within location descriptions or using loclistptr
 form attributes must not be moved to a \addtoindex{supplementary object file}.
 
 Executable or shared object file compilation units can use
@@ -759,10 +706,7 @@ the executable or shared object file.
 \hypertarget{datarep:xxbitdwffmt}{}
 \addtoindexx{32-bit DWARF format}
 \addtoindexx{64-bit DWARF format}
-There are two 
-\bb
-closely-related DWARF
-\eb
+There are two closely-related DWARF
 formats. In the 32-bit DWARF
 format, all values that represent lengths of DWARF sections
 and offsets relative to the beginning of DWARF sections are
@@ -774,12 +718,10 @@ length field of certain DWARF sections, as well as the CIE and
 FDE structures, so that the 32-bit and 64-bit DWARF formats
 can coexist and be distinguished within a single linked object.
 
-\bb
 Except where noted otherwise, all references in this document
 to a debugging information section (for example, \dotdebuginfo),
 apply also to the corresponding split DWARF section (for example,
 \dotdebuginfodwo).
-\eb
 
 The differences between the 32- and 64-bit DWARF formats are
 detailed in the following:
@@ -879,7 +821,6 @@ in the 64-bit DWARF format, it is a 8-byte unsigned integer.
 
 \needlines{4}
 \item In the body of the \dotdebugstroffsets{} 
-\bbeb
 sections, the size of entries in the body depend on the DWARF
 format as follows: in the 32-bit DWARF format, entries are 4-byte
 unsigned integer values; in the 64-bit DWARF format, they are
@@ -939,7 +880,7 @@ contribution may also be made to the
 section of the object file. Each
 such contribution consists of a 
 \addtoindex{type unit} header 
-(see Section \refersec{datarep:typeunitheader}) 
+(see Section \refersec{datarep:typeunitheaders}) 
 followed by a \DWTAGtypeunit{} entry, together with
 its children.
 
@@ -982,14 +923,27 @@ enumeration are shown in Table \refersec{tab:unitheaderunitkindencodings}.
 \endlastfoot
 \DWUTcompileTARG~\ddag    &0x01 \\ 
 \DWUTtypeTARG~\ddag       &0x02 \\ 
-\DWUTpartialTARG~\ddag    &0x03 \\ \hline
+\DWUTpartialTARG~\ddag    &0x03 \\ 
+\bb
+\DWUTskeletonTARG~\ddag       &0x04 \\
+\DWUTsplitcompileTARG~\ddag   &0x05 \\
+\DWUTsplittypeTARG~\ddag      &0x06 \\
+\DWUTlouserTARG~\ddag         &0x80 \\
+\DWUThiuserTARG~\ddag         &\xff 
+\eb
+\\
+\hline
 \end{longtable}
 \end{centering}
 
-\needlines{5}
 \bb
-\subsubsection{Compilation and Partial Unit Headers}
+\textit{All unit headers in a compilation have the same size. 
+Some header types include padding bytes to achieve this.}
 \eb
+
+
+\needlines{5}
+\subsubsection{Compilation and Partial Unit Headers}
 \label{datarep:compilationunitheader}
 \begin{enumerate}[1. ]
 
@@ -1012,14 +966,11 @@ integer that gives the actual length
 \addtoindexx{version number!compilation unit}
 A 2-byte unsigned integer representing the version of the
 DWARF information for the compilation unit.
-\bbeb
  
 The value in this field is \versiondotdebuginfo.
 
-\bb
 \textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
 for a summary of all version numbers that apply to DWARF sections.}
-\eb
 
 \needlines{4}
 \item \texttt{unit\_type} (\HFTubyte) \\
@@ -1033,7 +984,6 @@ The value of this field is
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
-\bb
 \item \texttt{address\_size} (\HFTubyte) \\
 \addttindexx{address\_size}
 A 1-byte unsigned integer representing the size in bytes of
@@ -1041,7 +991,80 @@ an address on the target architecture. If the system uses
 \addtoindexx{address space!segmented}
 segmented addressing, this value represents the size of the
 offset portion of an address.
+
+\item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
+A 
+\addtoindexx{section offset!in .debug\_info header}
+4-byte or 8-byte unsigned offset into the 
+\dotdebugabbrev{}
+section. This offset associates the compilation unit with a
+particular set of debugging information entry abbreviations. In
+the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
+in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\bb
+\item \HFNunitpaddingONE{} (8 bytes) \\
+Reserved to DWARF (must be zero).
+
+\needlines{4}
+\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
+Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
+is 8 bytes in length.
 \eb
+\end{enumerate}
+
+\needlines{8}
+\bb
+\subsubsection{Skeleton and Split Compilation Unit Headers}
+\label{datarep:skeletonandfullcompilationunitheaders}
+\begin{enumerate}[1. ]
+
+\item \texttt{unit\_length} (\livelink{datarep:initiallengthvalues}{initial length}) \\
+\addttindexx{unit\_length}
+A 4-byte or 12-byte 
+\addtoindexx{initial length}
+unsigned integer representing the length
+of the \dotdebuginfo{}
+contribution for that compilation unit,
+not including the length field itself. In the \thirtytwobitdwarfformat,
+this is a 4-byte unsigned integer (which must be less
+than \xfffffffzero); in the \sixtyfourbitdwarfformat, this consists
+of the 4-byte value \wffffffff followed by an 8-byte unsigned
+integer that gives the actual length 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  \texttt{version} (\HFTuhalf) \\
+\addttindexx{version}
+\addtoindexx{version number!compilation unit}
+A 2-byte unsigned integer representing the version of the
+DWARF information for the compilation unit.
+The value in this field is \versiondotdebuginfo.
+
+\textit{See also Appendix \refersec{app:dwarfsectionversionnumbersinformative}
+for a summary of all version numbers that apply to DWARF sections.}
+
+\needlines{4}
+\item \texttt{unit\_type} (\HFTubyte) \\
+\addttindexx{unit\_type}
+A 1-byte unsigned integer identifying this unit as a compilation unit.
+The value of this field is 
+\DWUTskeleton{} for a skeleton compilation unit or
+\DWUTsplitcompile{} for a split compilation unit
+(see Section \refersec{chap:skeletoncompilationunitentries}).
+
+\textit{This field is new in \DWARFVersionV.}
+
+\needlines{4}
+\item \texttt{address\_size} (\HFTubyte) \\
+\addttindexx{address\_size}
+A 1-byte unsigned integer representing the size in bytes of
+an address on the target architecture. If the system uses
+\addtoindexx{address space!segmented}
+segmented addressing, this value represents the size of the
+offset portion of an address.
 
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
@@ -1054,13 +1077,26 @@ the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
-\bbpareb
+\needlines{6}
+\item \HFNdwoid{} (unit ID) \\
+An 8-byte implementation-defined integer constant value, 
+known as the compilation unit ID, that provides 
+unique identification of a skeleton compilation 
+unit and its associated split compilation unit in 
+the object file named in the \DWATdwoname{} attribute
+of the skeleton compilation.
 
+\needlines{4}
+\item \HFNunitpaddingTWO{} (4 or 8 bytes) \\
+Reserved to DWARF (must be zero). In the \thirtytwobitdwarfformat,
+this is 4 bytes in length; in the \sixtyfourbitdwarfformat this
+is 8 bytes in length.
+\eb
 \end{enumerate}
 
 \needlines{8}
-\subsubsection{Type Unit Header}
-\label{datarep:typeunitheader}
+\subsubsection{Type Unit Headers}
+\label{datarep:typeunitheaders}
 The header for the series of debugging information entries
 contributing to the description of a type that has been
 placed in its own \addtoindex{type unit}, within the 
@@ -1086,20 +1122,25 @@ consists of the 4-byte value \wffffffff followed by an
 \addtoindexx{version number!type unit}
 A 2-byte unsigned integer representing the version of the
 DWARF information for the type unit.
-\bbeb
  
 The value in this field is \versiondotdebuginfo.
 
 \item \texttt{unit\_type} (\HFTubyte) \\
 \addttindexx{unit\_type}
 A 1-byte unsigned integer identifying this unit as a type unit.
-The value of this field is \DWUTtype{} for a type unit
-(see Section \refersec{chap:typeunitentries}).
+The value of this field is \DWUTtype{} for a 
+\bb
+non-split
+\eb
+type unit
+(see Section \refersec{chap:typeunitentries})
+\bb
+or \DWUTsplittype{} for a split type unit.
+\eb
 
 \textit{This field is new in \DWARFVersionV.}
 
 \needlines{4}
-\bb
 \item \texttt{address\_size} (\HFTubyte) \\
 \addttindexx{address\_size}
 A 1-byte unsigned integer representing the size 
@@ -1109,8 +1150,8 @@ an address on the target architecture. If the system uses
 \addtoindexx{address space!segmented}
 segmented addressing, this value represents the size of the
 offset portion of an address.
-\eb
 
+\needlines{6}
 \item \HFNdebugabbrevoffset{} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 A 
 \addtoindexx{section offset!in .debug\_info header}
@@ -1122,8 +1163,6 @@ the \thirtytwobitdwarfformat, this is a 4-byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8-byte unsigned length
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
 
-\bbpareb
-
 \item \texttt{type\_signature} (8-byte unsigned integer) \\
 \addttindexx{type\_signature}
 \addtoindexx{type signature}
@@ -1137,7 +1176,7 @@ unit.
 the primary type contained in this 
 \addtoindex{type unit} uses this value.}
 
-\needlines{4}
+\needlines{8}
 \item \texttt{type\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 \addttindexx{type\_offset}
 A 4-byte or 8-byte unsigned offset 
@@ -1266,6 +1305,11 @@ Table \refersec{tab:tagencodings}.
 \DWTAGunspecifiedtype&0x3b      \\
 \DWTAGpartialunit&0x3c      \\
 \DWTAGimportedunit&0x3d      \\
+\bb
+\textit{Reserved}&0x3e\footnote{Code 0x3e is reserved to allow backward compatible support of the
+DW\_TAG\_mutable\_type DIE that was defined (only) in \DWARFVersionIII.}
+\eb
+\\
 \DWTAGcondition&\xiiif      \\
 \DWTAGsharedtype&0x40      \\
 \DWTAGtypeunit & 0x41      \\
@@ -1277,6 +1321,10 @@ Table \refersec{tab:tagencodings}.
 \DWTAGatomictype~\ddag & 0x47 \\
 \DWTAGcallsite~\ddag & 0x48 \\
 \DWTAGcallsiteparameter~\ddag & 0x49 \\
+\bb
+\DWTAGskeletonunit~\ddag & 0x4a
+\eb
+\\
 \DWTAGlouser&0x4080      \\
 \DWTAGhiuser&\xffff      \\
 \end{longtable}
@@ -1506,11 +1554,9 @@ Table \referfol{tab:attributeencodings}.
             \addtoindexx{friend attribute}  \\
 \DWATidentifiercase&0x42&\livelink{chap:classconstant}{constant} 
             \addtoindexx{identifier case attribute}  \\
-\bb
 \textit{Reserved}&0x43\footnote{Code 0x43 is reserved to allow backward compatible support of the 
              DW\_AT\_macro\_info \mbox{attribute} which was 
              defined in \DWARFVersionIV{} and earlier.}
-\eb
             &\livelink{chap:classmacptr}{macptr} 
             \addtoindexx{macro information attribute (legacy)!encoding}  \\
 \DWATnamelistitem&0x44&\livelink{chap:classreference}{reference} 
@@ -1632,9 +1678,10 @@ Table \referfol{tab:attributeencodings}.
 \DWATrangesbase~\ddag&0x74&
                \livelinki{chap:classrangelistptr}{rangelistptr}{rangelistptr class}
             \addtoindexx{ranges base!encoding} \\
-\DWATdwoid~\ddag &0x75&
-               \livelink{chap:classconstant}{constant}
-            \addtoindexx{split DWARF object file id!encoding} \\
+\bb
+\textit{Reserved} &0x75& \textit{Unused}
+\eb
+\\
 \DWATdwoname~\ddag &0x76&
                \livelink{chap:classstring}{string}
             \addtoindexx{split DWARF object file name!encoding} \\
@@ -1642,7 +1689,7 @@ Table \referfol{tab:attributeencodings}.
         \livelink{chap:classflag}{flag} \\
 \DWATrvaluereference~\ddag &0x78&
         \livelink{chap:classflag}{flag} \\
-\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr} 
+\DWATmacros~\ddag &0x79&\livelink{chap:classmacptr}{macptr}
         \addtoindexx{macro information attribute}  \\
 \DWATcallallcalls~\ddag &0x7a&\CLASSflag
         \addtoindexx{all calls summary attribute} \\
@@ -2764,6 +2811,10 @@ defined language.
 \DWLANGCplusplusfourteen{}~\ddag &0x0021 &0 \addtoindexx{C++14 (ISO)} \\
 \DWLANGFortranzerothree{}~\ddag  &0x0022 &1 \addtoindexx{Fortran:2004 (ISO)} \\
 \DWLANGFortranzeroeight{}~\ddag  &0x0023 &1 \addtoindexx{Fortran:2010 (ISO)} \\
+\bb
+\DWLANGRenderScript{}~\ddag       &0x0024 &0 \addtoindexx{RenderScript Kernel Language}
+\eb
+\\
 \DWLANGlouser{} &0x8000 & \\
 \DWLANGhiuser{} &\xffff & \\
 
@@ -2934,7 +2985,6 @@ Table \refersec{tab:discriminantdescriptorencodings}.
 \label{datarep:nameindextable}
 The \addtoindexi{version number}{version number!name index table}
 in the name index table header is \versiondotdebugnames{}.
-\bbeb
 
 The name index attributes and their encodings are listed in Table \referfol{datarep:indexattributeencodings}.
 
@@ -3017,7 +3067,6 @@ the actual length
 \item version (\HFTuhalf) \\
 A 2-byte version identifier representing the version of the
 DWARF information for the address range table.
-\bbeb
 
 This value in this field \addtoindexx{version number!address range table} is 2. 
  
@@ -3069,7 +3118,6 @@ the terminating tuple.
 
 The \addtoindexi{version number}{version number!line number information}
 in the line number program header is \versiondotdebugline{}.
-\bbeb
 
 The boolean values \doublequote{true} and \doublequote{false} 
 used by the line number information program are encoded
@@ -3172,7 +3220,6 @@ Table \refersec{tab:linenumberheaderentryformatencodings}.
 \label{datarep:macroinformation}
 The \addtoindexi{version number}{version number!macro information}
 in the macro information header is \versiondotdebugmacro{}.
-\bbeb
 
 The source line numbers and source file indices encoded in the
 macro information section are represented as 
@@ -3227,7 +3274,6 @@ value is \xffffffffffffffff.
 
 The value of the CIE \addtoindexi{version number}{version number!call frame information}
 is \versiondotdebugframe.
-\bbeb
 
 Call frame instructions are encoded in one or more bytes. The
 primary opcode is encoded in the high order two bits of
@@ -3335,12 +3381,9 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \addtoindexx{version number!string offsets table}
 A 2-byte version identifier containing the value
 \versiondotdebugstroffsets{}.
-\bbeb 
 
 \item \textit{padding} (\HFTuhalf) \\
-\bb
 Reserved to DWARF (must be zero).
-\eb
 \end{enumerate}
 
 This header is followed by a series of string table offsets
@@ -3374,7 +3417,6 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \addtoindexx{version number!address table}
 A 2-byte version identifier containing the value
 \versiondotdebugaddr{}.
-\bbeb 
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3422,7 +3464,6 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \addtoindexx{version number!range list table}
 A 2-byte version identifier containing the value
 \versiondotdebugranges{}. 
-\bbeb
 
 \needlines{4}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3472,7 +3513,6 @@ Section \refersec{datarep:32bitand64bitdwarfformats}).
 \addtoindexx{version number!location list table}
 A 2-byte version identifier containing the value
 \versiondotdebugloc{}.
-\bbeb 
 
 \needlines{5}
 \item  \texttt{address\_size} (\HFTubyte) \\
@@ -3594,6 +3634,9 @@ are contained in \addtoindex{type unit}s (see Section
 
 \textit{A type signature is computed only by a DWARF producer;
 \addtoindexx{type signature!computation} a consumer need
+\bb
+only
+\eb
 compare two type signatures to check for equality.}
 
 \needlines{4}
@@ -3708,11 +3751,24 @@ the type are also included at the end of the above list,
 in their own alphabetical suborder.
 
 An attribute that refers to another type entry T is processed
-as follows: (a) If T is in the list V at some V[x], use the
+as follows: 
+\begin{enumerate}[ a)]
+\item
+\bb
+If 
+\eb
+T is in the list V at some V[x], use the
 letter 'R' as the marker and use the unsigned LEB128\addtoindexx{LEB128!unsigned}
-encoding of x as the attribute value; otherwise, (b) use the letter 'T'
+encoding of x as the attribute value.
+
+\item
+\bb
+Otherwise, append type T to the list V, then
+\eb
+use the letter 'T'
 as the marker, process the type T recursively by performing
 Steps 2 through 7, and use the result as the attribute value.
+\end{enumerate}
 
 \needlines{4}
 Other attribute values use the letter 'A' as the marker, and
@@ -3833,13 +3889,7 @@ if any of the following apply:}
 \begin{itemize}
 
 \item \textit{The entry has an attribute whose value is a location
-\bb
-description, 
-\eb
-and the location 
-\bb
-description 
-\eb
+description, and the location description 
 contains a reference to
 another debugging information entry (for example, a \DWOPcallref{}
 operator), as it is unlikely that the entry will remain
@@ -3892,10 +3942,7 @@ of the type might not be available in all compilation units.}
 it cannot be moved as is into a type unit, because the member function 
 contains attributes that are unique to that compilation unit. 
 Such a type definition can be moved to a type unit by rewriting the 
-\bb
-debugging information entry
-\eb
-tree, 
+debugging information entry tree, 
 moving the member function declaration into a separate declaration tree, 
 and replacing the function definition in the type with a non-defining 
 declaration of the function (as if the function had been defined out of 
@@ -3911,16 +3958,13 @@ access name index table (see Section \refersec{chap:acceleratedaccess})
 is defined in \addtoindex{C} as shown in 
 Figure \referfol{fig:nametablehashfunctiondefinition}.\footnoteRR{
 This hash function is sometimes known as the 
-\bb
 "\addtoindex{Bernstein hash function}" or the
-\eb
 "\addtoindex{DJB hash function}"  
 (see, for example, 
 \hrefself{http://en.wikipedia.org/wiki/List\_of\_hash\_functions} or
 \hrefself{http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function)}.} 
 
 \begin{figure}[ht]
-\bb
 \begin{lstlisting}
 
 uint32_t /* must be a 32-bit integer type */
@@ -3936,7 +3980,6 @@ uint32_t /* must be a 32-bit integer type */
     }
 
 \end{lstlisting}
-\eb
 \caption{Name Table Hash Function Definition}
 \label{fig:nametablehashfunctiondefinition}
 \end{figure}