This indexes letters f, g, and h.
[dwarf-doc.git] / dwarf5 / latexdoc / examples.tex
index 90cd176..a9f105a 100644 (file)
@@ -10,10 +10,15 @@ various aspects of the DWARF debugging information format.
 \label{app:compilationunitsandabbreviationstableexample}
 
 
-Figure 48  FIXME REF
+Figure \refersec{fig:compilationunitsandabbreviationstable}
 depicts the relationship of the abbreviations tables contained
-in the .debug\_abbrev section to the information contained in
-the .debug\_info section. Values are given in symbolic form,
+\addtoindexx{abbreviations table!example}
+\addtoindexx{.debug\_abbrev example}
+\addtoindexx{.debug\_info example}
+in the \addtoindex{.debug\_abbrev}
+section to the information contained in
+the \addtoindex{.debug\_info}
+section. Values are given in symbolic form,
 where possible.
 
 The figure corresponds to the following two trivial source files:
@@ -27,8 +32,129 @@ File myfile2.c
 typedef char* strp;
 \end{lstlisting}
 
+% Ensures we get the following float out before we go on.
+\clearpage
+\begin{figure}[here]
+%\centering
+\begin{minipage}{0.4\textwidth}
+\centering
+Compilation Unit 1: \addtoindex{.debug\_info}
+\begin{framed}
+\scriptsize
+\begin{alltt}
+\textit{length}
+4
+\textit{a1 (abbreviations table offset)}
+4
+\vspace{0.01cm}
+\hrule
+1
+"myfile.c"
+"Best Compiler Corp: Version 1.3"
+"/home/mydir/src"
+\livelink{chap:DWLANGC89}{DW\-\_LANG\-\_C89}
+0x0
+0x55
+\livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}
+0x0
+\vspace{0.01cm}
+\hrule
+2
+“char”
+\livelink{chap:DWATEunsignedchar}{DW\-\_ATE\-\_unsigned\-\_char}
+1
+\vspace{0.01cm}
+\hrule
+3
+e1
+\vspace{0.01cm}
+\hrule
+4
+“POINTER”
+e2
+\vspace{0.01cm}
+\hrule
+0
+\end{alltt}
+%
+%
+\end{framed}
+Compilation Unit 2: \addtoindex{.debug\_info}
+\begin{framed}
+\scriptsize
+\begin{alltt}
+\textit{length}
+4
+\textit{a1 (abbreviations table offset)}
+4
+\vspace{0.01cm}
+\hrule
+...
+\vspace{0.01cm}
+\hrule
+4
+“strp”
+e2
+\vspace{0.01cm}
+\hrule
+...
+\end{alltt}
+%
+%
+\end{framed}
+\end{minipage}
+\hfill
+\begin{minipage}{0.4\textwidth}
+\centering
+Abbreviation Table: \addtoindex{.debug\_abbrev}
+\begin{framed}
+\scriptsize
+\begin{alltt}
+\livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit}
+\livelink{chap:DWCHILDRENyes}{DW\-\_CHILDREN\-\_yes}
+\livelink{chap:DWATname}{DW\-\_AT\-\_name}       \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
+\livelink{chap:DWATproducer}{DW\-\_AT\-\_producer}   \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
+\livelink{chap:DWATcompdir}{DW\-\_AT\-\_comp\-\_dir}   \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
+\livelink{chap:DWATlanguage}{DW\-\_AT\-\_language}   \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}
+\livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}     \livelink{chap:DWFORMaddr}{DW\-\_FORM\-\_addr}
+\livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}    \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}
+\livelink{chap:DWATstmtlist}{DW\-\_AT\-\_stmt\-\_list}  \livelink{chap:DWFORMindirect}{DW\-\_FORM\-\_indirect}
+0                  0
+\vspace{0.01cm}
+\hrule
+2
+\livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+\livelink{chap:DWCHILDRENno}{DW\-\_CHILDREN\-\_no}
+\livelink{chap:DWATname}{DW\-\_AT\-\_name}       \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
+\livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}   \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}
+\livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}  \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}
+0
+\vspace{0.01cm}
+\hrule
+3
+\livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type}
+\livelink{chap:DWCHILDRENno}{DW\-\_CHILDREN\-\_no}
+\livelink{chap:DWATtype}{DW\-\_AT\-\_type}       \livelink{chap:DWFORMref4}{DW\-\_FORM\-\_ref4}
+0
+\vspace{0.01cm}
+\hrule
+4
+\livelink{chap:DWTAGtypedef}{DW\-\_TAG\-\_typedef}
+\livelink{chap:DWCHILDRENno}{DW\-\_CHILDREN\-\_no}
+\livelink{chap:DWATname}{DW\-\_AT\-\_name}      \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}
+\livelink{chap:DWATtype}{DW\-\_AT\-\_type}      \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}
+0
+\vspace{0.01cm}
+\hrule
+0
+\end{alltt}
+\end{framed}
+\end{minipage}
+\caption{Compilation units and abbreviations table} \label{fig:compilationunitsandabbreviationstable}
+\end{figure}
 
-Needs content FIXME
+% Ensures we get the above float out before we go on.
+\clearpage
 
 \section{Aggregate Examples}
 \label{app:aggregateexamples}
@@ -39,7 +165,8 @@ using DWARF.
 
 \subsection{Fortran 90 Example}
 \label{app:fortran90example}
-Consider the Fortran 90 source fragment in 
+Consider the \addtoindex{Fortran 90} source fragment in 
+\addtoindexx{array type entry!examples}
 Figure \refersec{fig:fortran90examplesourcefragment}.
 
 \begin{figure}[here]
@@ -58,7 +185,10 @@ end do
 \end{figure}
 
 For allocatable and pointer arrays, it is essentially required
-by the Fortran 90 semantics that each array consist of two
+by the \addtoindex{Fortran 90} semantics that each array consist of 
+\addtoindexx{descriptor!array}
+two
+\addtoindexx{array!descriptor for}
 parts, which we here call 1) the descriptor and 2) the raw
 data. (A descriptor has often been called a dope vector in
 other contexts, although it is often a structure of some kind
@@ -76,7 +206,9 @@ Note, however, that it is
 a property of the design that 1) a debugger needs no builtin
 knowledge of this structure and 2) there does not need to
 be an explicit representation of this structure in the DWARF
-input to the debugger.
+input to the 
+\addtoindexx{Fortran 90}
+debugger.
 
 \begin{figure}[here]
 \begin{lstlisting}
@@ -120,14 +252,17 @@ to the “raw data” (the real data, the only thing around
 that can be the object).
 
 If an object has a descriptor, then the DWARF type for that
-object will have a DW\_AT\_data\_location attribute. If an object
+object will have a 
+\livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location} attribute. If an object
 does not have a descriptor, then usually the DWARF type for the
-object will not have a DW\_AT\_data\_location. (See the following
-Ada example for a case where the type for an object without
-a descriptor does have a DW\_AT\_data\_location attribute. In
+object will not have a 
+\livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}. 
+(See the following
+\addtoindex{Ada} example for a case where the type for an object without
+a descriptor does have a \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location} attribute. In
 that case the object doubles as its own descriptor.)
 
-The Fortran 90 derived type array\_ptr can now be redescribed
+The \addtoindex{Fortran 90} derived type array\_ptr can now be redescribed
 in C\dash like terms that expose some of the representation as in
 
 \begin{lstlisting}
@@ -155,7 +290,9 @@ within an entity of the given type
 \end{enumerate}
 
 
-The DWARF description is shown in 
+The DWARF description is shown 
+\addtoindexx{Fortran 90}
+in 
 Section \refersec{app:fortran90exampledwarfdescription}.
 
 \subsection{Fortran 90 example: DWARF description}
@@ -164,101 +301,103 @@ Section \refersec{app:fortran90exampledwarfdescription}.
 \begin{alltt}
 ! Description for type of 'ap'
 
-1\$: \addtoindex{DW\_TAG\_array\_type}
+1\$: \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}
         ! No name, default (Fortran) ordering, default stride
-        DW\_AT\_type(reference to REAL)
-        DW\_AT\_associated(expression= ! Test 'ptr\_assoc' flag
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n == offset(ptr\_assoc)
-            DW\_OP\_plus
-            DW\_OP\_deref
-            DW\_OP\_lit1 ! mask for 'ptr\_assoc' flag
-            DW\_OP\_and)
-        DW\_AT\_data\_location(expression= ! Get raw data address
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n == offset(base)
-            DW\_OP\_plus
-            DW\_OP\_deref) ! Type of index of array 'ap'
-2\$:     \addtoindex{DW\_TAG\_subrange\_type}
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to REAL)
+        \livelink{chap:DWATassociated}{DW\-\_AT\-\_associated}(expression= ! Test 'ptr\_assoc' \nolink{flag}
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == offset(ptr\_assoc)
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref}
+            \livelink{chap:DWOPlit1}{DW\-\_OP\-\_lit1} ! mask for 'ptr\_assoc' \nolink{flag}
+            \livelink{chap:DWOPand}{DW\-\_OP\-\_and})
+        \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}(expression= ! Get raw data address
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == offset(base)
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref}) ! Type of index of array 'ap'
+2\$:     \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
         ! No name, default stride
-        DW\_AT\_type(reference to INTEGER)
-        DW\_AT\_lower\_bound(expression=
-        DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n ==
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+        \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(expression=
+        \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n ==
                          !  offset(desc, dims) +
                          !  offset(dims\_str, lower\_bound)
-            DW\_OP\_plus
-            DW\_OP\_deref)
-        DW\_AT\_upper\_bound(expression=
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n ==
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref})
+        \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(expression=
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n ==
                          !  offset(desc, dims) +
                          !  offset(dims\_str, upper\_bound)
-            DW\_OP\_plus
-            \addtoindex{DW\_OP\_deref})
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref})
         !  Note: for the m'th dimension, the second operator becomes
-        !  DW\_OP\_lit<x> where
+        !  \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<x> where
         !  x == offset(desc, dims) +
         !  (m-1)*sizeof(dims\_str) +
         !  offset(dims\_str, [lower|upper]\_bound)
         !  That is, the expression does not get longer for each
         !  successive dimension (other than to express the larger
         !  offsets involved).
-3\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("array\_ptr")
-        DW\_AT\_byte\_size(constant sizeof(REAL) + sizeof(desc<1>))
-4\$:     DW\_TAG\_member
-            DW\_AT\_name("myvar")
-            DW\_AT\_type(reference to REAL)
-            DW\_AT\_data\_member\_location(constant 0)
-5\$:     DW\_TAG\_member
-            DW\_AT\_name("ap");
-            DW\_AT\_type(reference to 1\$)
-            DW\_AT\_data\_member\_location(constant sizeof(REAL))
-
-6\$: DW\_TAG\_array\_type
+3\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("array\_ptr")
+        \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}(constant sizeof(REAL) + sizeof(desc<1>))
+4\$:     \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("myvar")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to REAL)
+            \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}(constant 0)
+5\$:     \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("ap");
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+            \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}(constant sizeof(REAL))
+
+6\$: \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}
         ! No name, default (Fortran) ordering, default stride
-        DW\_AT\_type(reference to 3\$)
-        DW\_AT\_allocated(expression=
-             ! Test 'ptr\_alloc' flag
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n == offset(ptr\_alloc)
-            DW\_OP\_plus
-            DW\_OP\_deref
-            DW\_OP\_lit2
-             ! mask for 'ptr\_alloc' flag
-            DW\_OP\_and)
-        DW\_AT\_data\_location(expression= ! Get raw data address
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n = offset(base)
-            DW\_OP\_plus
-            DW\_OP\_deref)
-
-7\$: DW\_TAG\_subrange\_type
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 3\$)
+        \livelink{chap:DWATallocated}{DW\-\_AT\-\_allocated}(expression=
+             ! Test 'ptr\_alloc' \nolink{flag}
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == offset(ptr\_alloc)
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref}
+            \livetarg{chap:DWOPlit2}{DW\-\_OP\-\_lit2}
+             ! mask for 'ptr\_alloc' \nolink{flag}
+            \livelink{chap:DWOPand}{DW\-\_OP\-\_and})
+        \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}(expression= ! Get raw data address
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n = offset(base)
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref})
+
+7\$: \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
         ! No name, default stride
-        DW\_AT\_type(reference to INTEGER)
-        DW\_AT\_lower\_bound(expression=
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n == ...
-            DW\_OP\_plus
-            DW\_OP\_deref)
-        DW\_AT\_upper\_bound(expression=
-            DW\_OP\_push\_object\_address
-            DW\_OP\_lit<n> ! where n == ...
-            DW\_OP\_plus
-            DW\_OP\_deref)
-
-8\$: DW\_TAG\_variable
-        DW\_AT\_name("arrays")
-        DW\_AT\_type(reference to 6\$)
-        DW\_AT\_location(expression=
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+        \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(expression=
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == ...
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref})
+        \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(expression=
+            \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}
+            \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == ...
+            \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}
+            \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref})
+
+8\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("arrays")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 6\$)
+        \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(expression=
             ...as appropriate...) ! Assume static allocation
 \end{alltt}
 
 \subsection{Fortran 90 example continued: DWARF description}
 \label{app:fortran90examplecontinueddwarfdescription}
 
-Suppose the program is stopped immediately following completion
+Suppose 
+\addtoindexx{Fortran 90 example}
+the program is stopped immediately following completion
 of the do loop. Suppose further that the user enters the
 following debug command:
 
@@ -291,24 +430,24 @@ bound too, but we will skip that for this example. \rbrack
 
 \end{enumerate}
 
-For a), check for a DW\_AT\_data\_location attribute. Since
+For a), check for a \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location} attribute. Since
 there is one, go execute the expression, whose result is
 the address needed. The object address used in this case
 is the object we are working on, namely the variable named
 arrays , whose address was found in step 1. (Had there been
-no DW\_AT\_data\_location attribute, the desired address would
+no \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location} attribute, the desired address would
 be the same as the address from step 1.)
 
 For b), for each dimension of the array (only one
 in this case), go interpret the usual lower bound
 attribute. Again this is an expression, which again begins
-with DW\_OP\_push\_object\_address. This object is 
+with \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}. This object is 
 \textbf{still} arrays,
 from step 1, because we have not begun to actually perform
 any indexing yet.
 
 For c), the default stride applies. Since there is no
-DW\_AT\_byte\_stride attribute, use the size of the array element
+\livelink{chap:DWATbytestride}{DW\-\_AT\-\_byte\-\_stride} attribute, use the size of the array element
 type, which is the size of type array\_ptr (at 3\$).
 
 Having acquired all the necessary data, perform the indexing
@@ -345,10 +484,10 @@ several pieces of information:
 \end{enumerate}
 
 This is just like step 2), so the details are omitted. Recall
-that because the DWARF type 1\$ has a DW\_AT\_data\_location,
+that because the DWARF type 1\$ has a \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location},
 the address that results from step 4) is that of a
 descriptor, and that address is the address pushed by the
-DW\_OP\_push\_object\_address operations in 1\$ and 2\$.
+\livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address} operations in 1\$ and 2\$.
 
 Note: we happen to be accessing a pointer array here instead
 of an allocatable array; but because there is a common
@@ -363,7 +502,8 @@ would be different.
 \label{app:adaexample}
 
 Figure \refersec{fig:adaexamplesourcefragment}
-illustrates two kinds of Ada parameterized array, one embedded in a record.
+illustrates two kinds of \addtoindex{Ada} 
+parameterized array, one embedded in a record.
 
 
 \begin{figure}[here]
@@ -382,7 +522,8 @@ OBJ2B : REC2;
 \end{figure}
 
 VEC1 illustrates an (unnamed) array type where the upper bound
-of the first and only dimension is determined at runtime. Ada
+of the first and only dimension is determined at runtime. 
+\addtoindex{Ada}
 semantics require that the value of an array bound is fixed at
 the time the array type is elaborated (where elaboration refers
 to the runtime executable aspects of type processing). For
@@ -409,7 +550,7 @@ Interesting aspects about this example are:
 \begin{enumerate}[1)]
 \item The array VEC2 is ``immediately'' contained within structure
 REC2 (there is no intermediate descriptor or indirection),
-which is reflected in the absence of a DW\_AT\_data\_location
+which is reflected in the absence of a \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}
 attribute on the array type at 28\$.
 
 \item One of the bounds of VEC2 is nonetheless dynamic and part of
@@ -433,52 +574,52 @@ of this example and therefore not shown.
 \label{app:adaexampledwarfdescription}
 
 \begin{alltt}
-11\$: DW\_TAG\_variable
-        DW\_AT\_name("M")
-        DW\_AT\_type(reference to INTEGER)
-12\$: DW\_TAG\_array\_type
-        ! No name, default (Ada) order, default stride
-        DW\_AT\_type(reference to INTEGER)
-13\$:    DW\_TAG\_subrange\_type
-            DW\_AT\_type(reference to INTEGER)
-            DW\_AT\_lower\_bound(constant 1)
-            DW\_AT\_upper\_bound(reference to variable M at 11\$)
-14\$: DW\_TAG\_variable
-        DW\_AT\_name("VEC1")
-        DW\_AT\_type(reference to array type at 12\$)
+11\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("M")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+12\$: \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}
+        ! No name, default (\addtoindex{Ada}) order, default stride
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+13\$:    \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+            \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(constant 1)
+            \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(reference to variable M at 11\$)
+14\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("VEC1")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to array type at 12\$)
     . . .
-21\$: DW\_TAG\_subrange\_type
-        DW\_AT\_name("TEENY")
-        DW\_AT\_type(reference to INTEGER)
-        DW\_AT\_lower\_bound(constant 1)
-        DW\_AT\_upper\_bound(constant 100)
+21\$: \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("TEENY")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+        \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(constant 1)
+        \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(constant 100)
 
       . . .
-26\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("REC2")
-27\$:   DW\_TAG\_member
-            DW\_AT\_name("N")
-            DW\_AT\_type(reference to subtype TEENY at 21\$)
-            DW\_AT\_data\_member\_location(constant 0)
-28\$:   DW\_TAG\_array\_type
-            ! No name, default (Ada) order, default stride
+26\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("REC2")
+27\$:   \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("N")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to subtype TEENY at 21\$)
+            \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}(constant 0)
+28\$:   \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}
+            ! No name, default (\addtoindex{Ada}) order, default stride
             ! Default data location
-            DW\_AT\_TYPE(reference to INTEGER)
-29\$:       DW\_TAG\_subrange\_type
-                DW\_AT\_type(reference to subrange TEENY at 21\$)
-                DW\_AT\_lower\_bound(constant 1)
-                DW\_AT\_upper\_bound(reference to member N at 27\$)
-30\$:   DW\_TAG\_member
-            DW\_AT\_name("VEC2")
-            DW\_AT\_type(reference to array “subtype” at 28\$)
-            DW\_AT\_data\_member\_location(machine=
-                DW\_OP\_lit<n> ! where n == offset(REC2, VEC2)
-                DW\_OP\_plus)
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to INTEGER)
+29\$:       \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to subrange TEENY at 21\$)
+                \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(constant 1)
+                \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(reference to member N at 27\$)
+30\$:   \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("VEC2")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to array “subtype” at 28\$)
+            \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}(machine=
+                \livelink{chap:DWOPlit}{DW\-\_OP\-\_lit}<n> ! where n == offset(REC2, VEC2)
+                \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus})
       . . .
-41\$: DW\_TAG\_variable
-        DW\_AT\_name("OBJ2B")
-        DW\_AT\_type(reference to REC2 at 26\$)
-        DW\_AT\_location(...as appropriate...)
+41\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OBJ2B")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to REC2 at 26\$)
+        \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...as appropriate...)
 
 \end{alltt}
 
@@ -487,8 +628,8 @@ of this example and therefore not shown.
 
 The Pascal source in 
 Figure \refersec{fig:packedrecordexamplesourcefragment}
-is used to illustrate the representation of packed unaligned bit
-fields.
+is used to illustrate the representation of packed unaligned
+\addtoindex{bit fields}.
 \begin{figure}[here]
 \begin{lstlisting}
 TYPE T : PACKED RECORD ! bit size is 2
@@ -511,7 +652,7 @@ The DWARF representation in
 Section \refersec{app:packedrecordexampledwarfdescription} 
 is
 appropriate. 
-DW\_TAG\_packed\_type entries could be added to
+\livelink{chap:DWTAGpackedtype}{DW\-\_TAG\-\_packed\-\_type} entries could be added to
 better represent the source, but these do not otherwise affect
 the example and are omitted for clarity. Note that this same
 representation applies to both typical big\dash \ and 
@@ -522,46 +663,48 @@ Section \refersec{chap:datamemberentries}.
 
 \subsection{Packed record example: DWARF description}
 \label{app:packedrecordexampledwarfdescription}
+% DWARF4 had some entries here as \livelink{chap:DWATmember}{DW_AT_member} .
+% Those are fixed here to \livelink{chap:DWTAGmember}{DW_TAG_member}
 \begin{alltt}
 
-21\$: DW\_TAG\_structure\_type ! anonymous type for F2
-        DW\_TAG\_member
-            DW\_AT\_name("F3")
-            DW\_AT\_type(reference to 11\$)
-22\$: DW\_TAG\_array\_type ! anonymous type for F4
-        DW\_AT\_type(reference to 20\$)
-        DW\_TAG\_subrange\_type
-            DW\_AT\_type(reference to 11\$)
-            DW\_AT\_lower\_bound(0)
-            DW\_AT\_upper\_bound(1)
-        DW\_AT\_bit\_stride(2)
-        DW\_AT\_bit\_size(4)
-23\$: DW\_TAG\_structure\_type ! anonymous type for V
-        DW\_AT\_bit\_size(39)
-        DW\_TAG\_member
-            DW\_AT\_name("F1")
-            DW\_AT\_type(reference to 10\$)
-            DW\_AT\_data\_bit\_offset(0)! may be omitted
-            DW\_AT\_bit\_size(1) ! may be omitted
-        DW\_AT\_member
-            DW\_AT\_name("F2")
-            DW\_AT\_type(reference to 21\$)
-            DW\_AT\_data\_bit\_offset(1)
-            DW\_AT\_bit\_size(32) ! may be omitted
-        DW\_AT\_member
-            DW\_AT\_name("F4")
-            DW\_AT\_type(reference to 22\$)
-            DW\_AT\_data\_bit\_offset(33)
-            DW\_AT\_bit\_size(4) ! may be omitted
-        DW\_AT\_member
-            DW\_AT\_name("F7")
-            DW\_AT\_type(reference to 20\$) ! type T
-            DW\_AT\_data\_bit\_offset(37)
-            DW\_AT\_bit\_size(2) ! may be omitted
-     DW\_TAG\_variable
-        DW\_AT\_name("V")
-        DW\_AT\_type(reference to 23\$)
-        DW\_AT\_location(...)
+21\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type} ! anonymous type for F2
+        \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("F3")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
+22\$: \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type} ! anonymous type for F4
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 20\$)
+        \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
+            \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}(0)
+            \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(1)
+        \livelink{chap:DWATbitstride}{DW\-\_AT\-\_bit\-\_stride}(2)
+        \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(4) \addtoindexx{bit size attribute}
+23\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type} ! anonymous type for V
+        \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(39) \addtoindexx{bit size attribute}
+        \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("F1")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 10\$)
+            \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}(0)! may be omitted
+            \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(1) ! may be omitted
+        \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("F2")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 21\$)
+            \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}(1)
+            \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(32) ! may be omitted
+        \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("F4")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 22\$)
+            \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}(33)
+            \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(4) ! may be omitted
+        \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("F7")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 20\$) ! type T
+            \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}(37)
+            \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}(2) \addtoindexx{bit size attribute}! may be omitted
+     \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("V")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 23\$)
+        \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
         ...
 \end{alltt}
 
@@ -621,79 +764,79 @@ is appropriate.
 \label{app:namespaceexampledwarfdescription}
 \begin{alltt}
 
-1\$:  DW\_TAG\_base\_type
-        DW\_AT\_name("int")
+1\$:  \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("int")
         ...
-2\$:  DW\_TAG\_base\_type
-        DW\_AT\_name("float")
+2\$:  \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("float")
         ...
-6\$:  DW\_TAG\_namespace
-        ! no DW\_AT\_name attribute
+6\$:  \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+        ! no \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute
 7\$:
-        DW\_TAG\_variable
-            DW\_AT\_name("i")
-            DW\_AT\_type(reference to 1\$)
-            DW\_AT\_location ...
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("i")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
             ...
-10\$: DW\_TAG\_namespace
-        DW\_AT\_name("A")
-20\$:    DW\_TAG\_namespace
-            DW\_AT\_name("B")
-30\$:        DW\_TAG\_variable
-                DW\_AT\_name("j")
-                DW\_AT\_type(reference to 1\$)
-                DW\_AT\_location ...
+10\$: \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("A")
+20\$:    \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("B")
+30\$:        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("j")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
                 ...
-34\$:        DW\_TAG\_subprogram
-                DW\_AT\_name("myfunc")
-                DW\_AT\_type(reference to 1\$)
+34\$:        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("myfunc")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
                 ...
-36\$:        DW\_TAG\_subprogram
-                DW\_AT\_name("myfunc")
-                DW\_AT\_type(reference to 2\$)
+36\$:        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("myfunc")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 2\$)
                 ...
-38\$:        DW\_TAG\_subprogram
-                DW\_AT\_name("myfunc2")
-                DW\_AT\_low\_pc ...
-                DW\_AT\_high\_pc ...
-                \addtoindex{DW\_AT\_type}(reference to 1\$)
+38\$:        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("myfunc2")
+                \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc} ...
+                \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc} ...
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
                 ...
 
-40\$: DW\_TAG\_namespace
-        DW\_AT\_name("Y")
-        DW\_TAG\_imported\_declaration    ! (1) using-declaration
-            DW\_AT\_import(reference to 30\$)
-        DW\_TAG\_variable
-            DW\_AT\_name("foo")
-            DW\_AT\_type(reference to 1\$)
-            DW\_AT\_location ...
+40\$: \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Y")
+        \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}    ! (1) using-declaration
+            \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 30\$)
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("foo")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
             ...
-     DW\_TAG\_imported\_declaration       ! (2) using declaration
-        DW\_AT\_import(reference to 30\$)
-        DW\_TAG\_imported\_declaration    ! (3) namespace alias
-            DW\_AT\_name("Foo")
-            DW\_AT\_import(reference to 20\$)
-        DW\_TAG\_imported\_declaration    ! (4) using declaration
-            DW\_AT\_import(reference to 34\$) ! - part 1
-        DW\_TAG\_imported\_declaration    ! (4) using declaration
-            DW\_AT\_import(reference to 36\$) !  - part 2
-        DW\_TAG\_imported\_module         ! (5) using directive
-            DW\_AT\_import(reference to 20\$)
-        DW\_TAG\_namespace
-            DW\_AT\_extension(reference to 10\$)
-            DW\_TAG\_namespace
-                DW\_AT\_extension(reference to 20\$)
-                DW\_TAG\_imported\_module ! (6) using directive
-                    DW\_AT\_import(reference to 40\$)
-                DW\_TAG\_variable
-                    DW\_AT\_name("k")
-                    DW\_AT\_type(reference to 1\$)
-                    DW\_AT\_location ...
+     \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}       ! (2) using declaration
+        \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 30\$)
+        \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}    ! (3) namespace alias
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Foo")
+            \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 20\$)
+        \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}    ! (4) using declaration
+            \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 34\$) ! - part 1
+        \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}    ! (4) using declaration
+            \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 36\$) !  - part 2
+        \livelink{chap:DWTAGimportedmodule}{DW\-\_TAG\-\_imported\-\_module}         ! (5) using directive
+            \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 20\$)
+        \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+            \livelink{chap:DWATextension}{DW\-\_AT\-\_extension}(reference to 10\$)
+            \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
+                \livelink{chap:DWATextension}{DW\-\_AT\-\_extension}(reference to 20\$)
+                \livelink{chap:DWTAGimportedmodule}{DW\-\_TAG\-\_imported\-\_module} ! (6) using directive
+                    \livelink{chap:DWATimport}{DW\-\_AT\-\_import}(reference to 40\$)
+                \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+                    \livelink{chap:DWATname}{DW\-\_AT\-\_name}("k")
+                    \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+                    \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
                     ...
-60\$: DW\_TAG\_subprogram
-        DW\_AT\_specification(reference to 34\$)
-        DW\_AT\_low\_pc ...
-        DW\_AT\_high\_pc ...
+60\$: \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATspecification}{DW\-\_AT\-\_specification}(reference to 34\$)
+        \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc} ...
+        \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc} ...
         ...
 \end{alltt}
 
@@ -727,72 +870,72 @@ is appropriate.
 
 
 \begin{alltt}
-1\$: DW\_TAG\_unspecified\_type
-        DW\_AT\_name("void")
+1\$: \livelink{chap:DWTAGunspecifiedtype}{DW\-\_TAG\-\_unspecified\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("void")
                 ...
-2\$ DW\_TAG\_base\_type
-        DW\_AT\_name("int")
+2\$ \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("int")
         ...
-3\$: DW\_TAG\_class\_type
-        DW\_AT\_name("A")
+3\$: \livelink{chap:DWTAGclasstype}{DW\-\_TAG\-\_class\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("A")
         ...
-4\$:    DW\_TAG\_pointer\_type
-            DW\_AT\_type(reference to 3\$)
+4\$:    \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 3\$)
             ...
-5\$:    DW\_TAG\_const\_type
-            DW\_AT\_type(reference to 3\$)
+5\$:    \livelink{chap:DWTAGconsttype}{DW\-\_TAG\-\_const\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 3\$)
             ...
-6\$:    DW\_TAG\_pointer\_type
-            DW\_AT\_type(reference to 5\$)
+6\$:    \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 5\$)
             ...
 
-7\$:    DW\_TAG\_subprogram
-            DW\_AT\_declaration
-            DW\_AT\_name("func1")
-            DW\_AT\_type(reference to 1\$)
-            DW\_AT\_object\_pointer(reference to 8\$)
+7\$:    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+            \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("func1")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+            \livelink{chap:DWATobjectpointer}{DW\-\_AT\-\_object\-\_pointer}(reference to 8\$)
                 ! References a formal parameter in this 
                 ! member function
             ...
-8\$:        DW\_TAG\_formal\_parameter
-                DW\_AT\_artificial(true)
-                DW\_AT\_name("this")
-                DW\_AT\_type(reference to 4\$)
+8\$:        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                \livelink{chap:DWATartificial}{DW\-\_AT\-\_artificial}(true)
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("this")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 4\$)
                     ! Makes type of 'this' as 'A*' =>
                     ! func1 has not been marked const 
                     ! or volatile
-                DW\_AT\_location ...
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
                 ...
-9\$:        DW\_TAG\_formal\_parameter
-                DW\_AT\_name(x1)
-                DW\_AT\_type(reference to 2\$)
+9\$:        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}(x1)
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 2\$)
                 ...
-10\$:    DW\_TAG\_subprogram
-             DW\_AT\_declaration
-             DW\_AT\_name("func2")
-             DW\_AT\_type(reference to 1\$)
-             DW\_AT\_object\_pointer(reference to 11\$)
+10\$:    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+             \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration}
+             \livelink{chap:DWATname}{DW\-\_AT\-\_name}("func2")
+             \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+             \livelink{chap:DWATobjectpointer}{DW\-\_AT\-\_object\-\_pointer}(reference to 11\$)
              ! References a formal parameter in this 
              ! member function
              ...
-11\$:        DW\_TAG\_formal\_parameter
-                 DW\_AT\_artificial(true)
-                 DW\_AT\_name("this")
-                 DW\_AT\_type(reference to 6\$)
+11\$:        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                 \livelink{chap:DWATartificial}{DW\-\_AT\-\_artificial}(true)
+                 \livelink{chap:DWATname}{DW\-\_AT\-\_name}("this")
+                 \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 6\$)
                      ! Makes type of 'this' as 'A const*' =>
                  !     func2 marked as const
-                 DW\_AT\_location ...
+                 \livelink{chap:DWATlocation}{DW\-\_AT\-\_location} ...
                  ...
-12\$:    DW\_TAG\_subprogram
-             DW\_AT\_declaration
-             DW\_AT\_name("func3")
-             DW\_AT\_type(reference to 1\$)
+12\$:    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+             \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration}
+             \livelink{chap:DWATname}{DW\-\_AT\-\_name}("func3")
+             \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
              ...
                  ! No object pointer reference formal parameter
                  ! implies func3 is static
-13\$:        DW\_TAG\_formal\_parameter
-                 DW\_AT\_name(x3)
-                 DW\_AT\_type(reference to 2\$)
+13\$:        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                 \livelink{chap:DWATname}{DW\-\_AT\-\_name}(x3)
+                 \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 2\$)
                  ...
 \end{alltt}
 
@@ -861,18 +1004,18 @@ of n).
 \endfoot
   \hline
 \endlastfoot
-DW\_LNS\_advance\_pc&LEB128(0x239)&0x2, 0xb9, 0x04 \\
+\livelink{chap:DWLNSadvancepc}{DW\-\_LNS\-\_advance\-\_pc}&LEB128(0x239)&0x2, 0xb9, 0x04 \\
 SPECIAL(2, 0)&0xb  & \\
 SPECIAL(2, 3)&0x38 & \\
 SPECIAL(1, 8)&0x82 & \\
 SPECIAL(1, 7)&0x73 & \\
-DW\_LNS\_advance\_pc&LEB128(2)&0x2, 0x2 \\
-DW\_LNE\_end\_sequence &&0x0, 0x1, 0x1 \\
+\livelink{chap:DWLNSadvancepc}{DW\-\_LNS\-\_advance\-\_pc}&LEB128(2)&0x2, 0x2 \\
+\livelink{chap:DWLNEendsequence}{DW\-\_LNE\-\_end\-\_sequence} &&0x0, 0x1, 0x1 \\
 \end{longtable}
 \end{centering}
 
 
-Figure 62  FIXME REF
+Table \refersec{tab:linenumberprogramexamplealternateencoding}
 shows an alternate 
 encoding of the same program using 
 standard opcodes to advance
@@ -891,16 +1034,16 @@ this encoding occupies 22 bytes.
 \endfoot
   \hline
 \endlastfoot
-DW\_LNS\_fixed\_advance\_pc&0x239&0x9, 0x39, 0x2        \\
+\livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x239&0x9, 0x39, 0x2        \\
 SPECIAL(2, 0)&& 0xb        \\
-DW\_LNS\_fixed\_advance\_pc&0x3&0x9, 0x3, 0x0        \\
+\livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x3&0x9, 0x3, 0x0        \\
 SPECIAL(2, 0)&&0xb        \\
-DW\_LNS\_fixed\_advance\_pc&0x8&0x9, 0x8, 0x0        \\
+\livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x8&0x9, 0x8, 0x0        \\
 SPECIAL(1, 0)&& 0xa        \\
-DW\_LNS\_fixed\_advance\_pc&0x7&0x9, 0x7, 0x0        \\
+\livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x7&0x9, 0x7, 0x0        \\
 SPECIAL(1, 0) && 0xa        \\
-DW\_LNS\_fixed\_advance\_pc&0x2&0x9, 0x2, 0x0        \\
-DW\_LNE\_end\_sequence&&0x0, 0x1, 0x1        \\
+\livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x2&0x9, 0x2, 0x0        \\
+\livelink{chap:DWLNEendsequence}{DW\-\_LNE\-\_end\-\_sequence}&&0x0, 0x1, 0x1        \\
 \end{longtable}
 \end{centering}
 
@@ -979,9 +1122,8 @@ An abstract table
 for the foo subroutine
 is shown in 
 Table \refersec{tab:callframeinformationexampleconceptualmatrix}.
-Figure 64. FIXME REF 
 Corresponding fragments from the
-.debug\_frame section are shown in 
+\addtoindex{.debug\_frame} section are shown in 
 Table \refersec{tab:callframeinformationexamplecommoninformationentryencoding}.
 
 The following notations apply in 
@@ -1045,19 +1187,19 @@ cie+11&0&segment size    \\
 cie+12&4&code\_alignment\_factor, \textless caf \textgreater    \\
 cie+13&-4&data\_alignment\_factor, \textless daf \textgreater    \\
 cie+14&8&R8 is the return addr.    \\
-cie+15&DW\_CFA\_def\_cfa (7, 0)&CFA = [R7]+0    \\
-cie+18&DW\_CFA\_same\_value (0)&R0 not modified (=0)    \\
-cie+20&DW\_CFA\_undefined (1)&R1 scratch    \\
-cie+22&DW\_CFA\_undefined (2)&R2 scratch    \\
-cie+24&DW\_CFA\_undefined (3)&R3 scratch    \\
-cie+26&DW\_CFA\_same\_value (4)&R4 preserve    \\
-cie+28&DW\_CFA\_same\_value (5)&R5 preserve    \\
-cie+30&DW\_CFA\_same\_value (6)&R6 preserve    \\
-cie+32&DW\_CFA\_same\_value (7)&R7 preserve    \\
-cie+34&DW\_CFA\_register (8, 1)&R8 is in R1    \\
-cie+37&DW\_CFA\_nop&padding    \\
-cie+38&DW\_CFA\_nop& padding \\
-cie+39& DW\_CFA\_nop&padding  \\
+cie+15&\livelink{chap:DWCFAdefcfa}{DW\-\_CFA\-\_def\-\_cfa} (7, 0)&CFA = [R7]+0    \\
+cie+18&\livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value} (0)&R0 not modified (=0)    \\
+cie+20&\livelink{chap:DWCFAundefined}{DW\-\_CFA\-\_undefined} (1)&R1 scratch    \\
+cie+22&\livelink{chap:DWCFAundefined}{DW\-\_CFA\-\_undefined} (2)&R2 scratch    \\
+cie+24&\livelink{chap:DWCFAundefined}{DW\-\_CFA\-\_undefined} (3)&R3 scratch    \\
+cie+26&\livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value} (4)&R4 preserve    \\
+cie+28&\livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value} (5)&R5 preserve    \\
+cie+30&\livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value} (6)&R6 preserve    \\
+cie+32&\livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value} (7)&R7 preserve    \\
+cie+34&\livelink{chap:DWCFAregister}{DW\-\_CFA\-\_register} (8, 1)&R8 is in R1    \\
+cie+37&\livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&padding    \\
+cie+38&\livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}& padding \\
+cie+39& \livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&padding  \\
 cie+40 &&  \\
 \end{longtable}
 \end{centering}
@@ -1089,27 +1231,27 @@ fde&40&length \\
 fde+4&cie&CIE\_ptr \\
 fde+8&foo&initial\_location \\
 fde+12&84&address\_range \\
-fde+16&DW\_CFA\_advance\_loc(1)&instructions \\
-fde+17&DW\_CFA\_def\_cfa\_offset(12)& \textless fs \textgreater \\
-fde+19&DW\_CFA\_advance\_loc(1)&4/ \textless caf \textgreater \\
-fde+20&DW\_CFA\_offset(8,1)&-4/ \textless daf \textgreater (second parameter) \\
-fde+22&DW\_CFA\_advance\_loc(1)& \\
-fde+23&DW\_CFA\_offset(6,2)&-8/ \textless daf> \textgreater (2nd parameter)  \\
-fde+25&DW\_CFA\_advance\_loc(1) & \\
-fde+26&DW\_CFA\_def\_cfa\_register(6) & \\
-fde+28&DW\_CFA\_advance\_loc(1) & \\
-fde+29&DW\_CFA\_offset(4,3)&-12/ \textless daf \textgreater (2nd parameter) \\
-fde+31&DW\_CFA\_advance\_loc(12)&44/ \textless caf \textgreater \\
-fde+32&DW\_CFA\_restore(4)& \\
-fde+33&DW\_CFA\_advance\_loc(1) & \\
-fde+34&DW\_CFA\_restore(6) & \\
-fde+35&DW\_CFA\_def\_cfa\_register(7)  & \\
-fde+37&DW\_CFA\_advance\_loc(1) & \\
-fde+38&DW\_CFA\_restore(8) &\\
-fde+39&DW\_CFA\_advance\_loc(1) &\\
-fde+40&DW\_CFA\_def\_cfa\_offset(0)  &\\
-fde+42&DW\_CFA\_nop&padding \\
-fde+43&DW\_CFA\_nop&padding \\
+fde+16&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1)&instructions \\
+fde+17&\livelink{chap:DWCFAdefcfaoffset}{DW\-\_CFA\-\_def\-\_cfa\-\_offset}(12)& \textless fs \textgreater \\
+fde+19&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1)&4/ \textless caf \textgreater \\
+fde+20&\livelink{chap:DWCFAoffset}{DW\-\_CFA\-\_offset}(8,1)&-4/ \textless daf \textgreater (second parameter) \\
+fde+22&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1)& \\
+fde+23&\livelink{chap:DWCFAoffset}{DW\-\_CFA\-\_offset}(6,2)&-8/ \textless daf> \textgreater (2nd parameter)  \\
+fde+25&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1) & \\
+fde+26&\livelink{chap:DWCFAdefcfaregister}{DW\-\_CFA\-\_def\-\_cfa\-\_register}(6) & \\
+fde+28&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1) & \\
+fde+29&\livelink{chap:DWCFAoffset}{DW\-\_CFA\-\_offset}(4,3)&-12/ \textless daf \textgreater (2nd parameter) \\
+fde+31&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(12)&44/ \textless caf \textgreater \\
+fde+32&\livelink{chap:DWCFArestore}{DW\-\_CFA\-\_restore}(4)& \\
+fde+33&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1) & \\
+fde+34&\livelink{chap:DWCFArestore}{DW\-\_CFA\-\_restore}(6) & \\
+fde+35&\livelink{chap:DWCFAdefcfaregister}{DW\-\_CFA\-\_def\-\_cfa\-\_register}(7)  & \\
+fde+37&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1) & \\
+fde+38&\livelink{chap:DWCFArestore}{DW\-\_CFA\-\_restore}(8) &\\
+fde+39&\livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}(1) &\\
+fde+40&\livelink{chap:DWCFAdefcfaoffset}{DW\-\_CFA\-\_def\-\_cfa\-\_offset}(0)  &\\
+fde+42&\livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&padding \\
+fde+43&\livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&padding \\
 fde+44 && \\
 \end{longtable}
 \end{centering}
@@ -1223,43 +1365,43 @@ Section \refersec{app:inliningexample1concreteinstance}.
 \label{app:inliningexample1abstractinstance}
 \begin{alltt}
     ! Abstract instance for OUTER
-    !
+    ! \addtoindexx{abstract instance!example}
 OUTER.AI.1.1:
-    DW\_TAG\_subprogram
-        DW\_AT\_name("OUTER")
-        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER")
+        \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}(\livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined})
         ! No low/high PCs
 OUTER.AI.1.2:
-        DW\_TAG\_formal\_parameter
-            DW\_AT\_name("OUTER\_FORMAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_FORMAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
 OUTER.AI.1.3:
-        DW\_TAG\_variable
-            DW\_AT\_name("OUTER\_LOCAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_LOCAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
         !
         ! Abstract instance for INNER
         !
 INNER.AI.1.1:
-        DW\_TAG\_subprogram
-            DW\_AT\_name("INNER")
-            DW\_AT\_inline(DW\_INL\_declared\_inlined)
+        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER")
+            \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}(\livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined})
             ! No low/high PCs
 INNER.AI.1.2:
-            DW\_TAG\_formal\_parameter
-                DW\_AT\_name("INNER\_FORMAL")
-                DW\_AT\_type(reference to integer)
+            \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_FORMAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
                 ! No location
 INNER.AI.1.3:
-            DW\_TAG\_variable
-                DW\_AT\_name("INNER\_LOCAL")
-                DW\_AT\_type(reference to integer)
+            \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_LOCAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
                 ! No location
             ...
             0
-        ! No DW\_TAG\_inlined\_subroutine (concrete instance)
+        ! No \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine} (concrete instance)
         ! for INNER corresponding to calls of INNER
         ...
         0
@@ -1270,45 +1412,45 @@ INNER.AI.1.3:
 \label{app:inliningexample1concreteinstance}
 \begin{alltt}
 ! Concrete instance for call "OUTER(7)"
-!
+! \addtoindexx{concrete instance!example}
 OUTER.CI.1.1:
-    DW\_TAG\_inlined\_subroutine
+    \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
         ! No name
-        DW\_AT\_abstract\_origin(reference to OUTER.AI.1.1)
-        DW\_AT\_low\_pc(...)
-        DW\_AT\_high\_pc(...)
+        \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.1.1)
+        \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+        \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
 OUTER.CI.1.2:
-        DW\_TAG\_formal\_parameter
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.1.2)
-            DW\_AT\_const\_value(7)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.1.2)
+            \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(7)
 OUTER.CI.1.3:
-        DW\_TAG\_variable
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.1.3)
-            DW\_AT\_location(...)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.1.3)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
         !
-        ! No DW\_TAG\_subprogram (abstract instance) for INNER
+        ! No \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram} (abstract instance) for INNER
         !
         ! Concrete instance for call INNER(OUTER\_LOCAL)
         !
 INNER.CI.1.1:
-        DW\_TAG\_inlined\_subroutine
+        \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
             ! No name
-            DW\_AT\_abstract\_origin(reference to INNER.AI.1.1)
-            DW\_AT\_low\_pc(...)
-            DW\_AT\_high\_pc(...)
-            DW\_AT\_static\_link(...)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to INNER.AI.1.1)
+            \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+            \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
+            \livelink{chap:DWATstaticlink}{DW\-\_AT\-\_static\-\_link}(...)
 INNER.CI.1.2:
-            DW\_TAG\_formal\_parameter
+            \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
                 ! No name
-                DW\_AT\_abstract\_origin(reference to INNER.AI.1.2)
-                DW\_AT\_location(...)
+                \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to INNER.AI.1.2)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
 INNER.CI.1.3:
-             DW\_TAG\_variable
+             \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
                 ! No name
-                DW\_AT\_abstract\_origin(reference to INNER.AI.1.3)
-                DW\_AT\_location(...)
+                \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to INNER.AI.1.3)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
             ...
             0
         ! Another concrete instance of INNER within OUTER
@@ -1323,36 +1465,48 @@ INNER.CI.1.3:
 
 In the second alternative we assume that subprogram INNER
 is not inlinable for some reason, but subprogram OUTER is
-inlinable. Each concrete inlined instance of OUTER has its
-own normal instance of INNER. The abstract instance for OUTER,
+inlinable. 
+\addtoindexx{concrete instance!example}
+Each concrete inlined instance of OUTER has its
+own normal instance of INNER. 
+The abstract instance for OUTER,
+\addtoindexx{abstract instance!example}
 which includes INNER, is shown in 
 Section \refersec{app:inliningexample2abstractinstance}.
 
 Note that the debugging information in this Figure differs from
 that in 
 Section \refersec{app:inliningexample1abstractinstance}
-in that INNER lacks a DW\_AT\_inline attribute
+in that INNER lacks a 
+\livelink{chap:DWATinline}{DW\-\_AT\-\_inline} attribute
 and therefore is not a distinct abstract instance. INNER
 is merely an out\dash of\dash line routine that is part of OUTER’s
 abstract instance. This is reflected in the Figure 70 by
+\addtoindexx{abstract instance!example}
 the fact that the labels for INNER use the substring OUTER
 instead of INNER.
 
-A resulting concrete inlined instance of OUTER is shown in
+A resulting 
+\addtoindexx{concrete instance!example}
+concrete inlined instance of OUTER is shown in
 Section \refersec{app:inliningexample2concreteinstance}.
 
 Notice in 
 Section \refersec{app:inliningexample2concreteinstance}.
 that OUTER is expanded as a concrete
+\addtoindexx{concrete instance!example}
 inlined instance, and that INNER is nested within it as a
 concrete out\dash of\dash line subprogram. Because INNER is cloned
 for each inline expansion of OUTER, only the invariant
 attributes of INNER 
-(for example, DW\_AT\_name) are specified
+(for example, \livelink{chap:DWATname}{DW\-\_AT\-\_name}) are specified
 in the abstract instance of OUTER, and the low\dash level,
+\addtoindexx{abstract instance!example}
 instance\dash specific attributes of INNER (for example,
-DW\_AT\_low\_pc) are specified in each concrete instance of OUTER.
 
+\livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}) are specified in 
+each concrete instance of OUTER.
+\addtoindexx{concrete instance!example}
 The several calls of INNER within OUTER are compiled as normal
 calls to the instance of INNER that is specific to the same
 instance of OUTER that contains the calls.
@@ -1362,39 +1516,39 @@ instance of OUTER that contains the calls.
 \label{app:inliningexample2abstractinstance}
 \begin{alltt}
     ! Abstract instance for OUTER
-    !
+    ! \addtoindex{abstract instance}
 OUTER.AI.2.1:
-    DW\_TAG\_subprogram
-        DW\_AT\_name("OUTER")
-        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER")
+        \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}(\livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined})
         ! No low/high PCs
 OUTER.AI.2.2:
-        DW\_TAG\_formal\_parameter
-            DW\_AT\_name("OUTER\_FORMAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_FORMAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
 OUTER.AI.2.3:
-        DW\_TAG\_variable
-            DW\_AT\_name("OUTER\_LOCAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_LOCAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
         !
         ! Nested out-of-line INNER subprogram
         !
 OUTER.AI.2.4:
-        DW\_TAG\_subprogram
-            DW\_AT\_name("INNER")
-            ! No DW\_AT\_inline
+        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER")
+            ! No \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}
             ! No low/high PCs, frame\_base, etc.
 OUTER.AI.2.5:
-            DW\_TAG\_formal\_parameter
-                DW\_AT\_name("INNER\_FORMAL")
-                DW\_AT\_type(reference to integer)
+            \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_FORMAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
                 ! No location
 OUTER.AI.2.6:
-            DW\_TAG\_variable
-                DW\_AT\_name("INNER\_LOCAL")
-                DW\_AT\_type(reference to integer)
+            \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_LOCAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
                 ! No location
             ...
             0
@@ -1409,42 +1563,42 @@ OUTER.AI.2.6:
     ! Concrete instance for call "OUTER(7)"
     !
 OUTER.CI.2.1:
-    DW\_TAG\_inlined\_subroutine
+    \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
         ! No name
-        DW\_AT\_abstract\_origin(reference to OUTER.AI.2.1)
-        DW\_AT\_low\_pc(...)
-        DW\_AT\_high\_pc(...)
+        \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.2.1)
+        \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+        \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
 OUTER.CI.2.2:
-        DW\_TAG\_formal\_parameter
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.2)
-            DW\_AT\_location(...)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.2.2)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
 OUTER.CI.2.3:
-        DW\_TAG\_variable
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.3)
-            DW\_AT\_location(...)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.2.3)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
         !
         ! Nested out-of-line INNER subprogram
         !
 OUTER.CI.2.4:
-        DW\_TAG\_subprogram
+        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.4)
-            DW\_AT\_low\_pc(...)
-            DW\_AT\_high\_pc(...)
-            DW\_AT\_frame\_base(...)
-            DW\_AT\_static\_link(...)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.2.4)
+            \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+            \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
+            \livelink{chap:DWATframebase}{DW\-\_AT\-\_frame\-\_base}(...)
+            \livelink{chap:DWATstaticlink}{DW\-\_AT\-\_static\-\_link}(...)
 OUTER.CI.2.5:
-            DW\_TAG\_formal\_parameter
+            \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
                 ! No name
-                DW\_AT\_abstract\_origin(reference to OUTER.AI.2.5)
-                DW\_AT\_location(...)
+                \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.2.5)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
 OUTER.CI.2.6:
-            DW\_TAG\_variable
+            \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
                 ! No name
-                DW\_AT\_abstract\_origin(reference to OUTER.AT.2.6)
-                DW\_AT\_location(...)
+                \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AT.2.6)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
             ...
             0
         ...
@@ -1456,17 +1610,30 @@ OUTER.CI.2.6:
 
 In the third approach, one normal subprogram for INNER is
 compiled which is called from all concrete inlined instances of
+\addtoindexx{concrete instance!example}
+\addtoindexx{abstract instance!example}
 OUTER. The abstract instance for OUTER is shown in 
 Section \refersec{app:inliningexample3abstractinstance}.
 
 The most distinctive aspect of that Figure is that subprogram
 INNER exists only within the abstract instance of OUTER,
 and not in OUTER’s concrete instance. In the abstract
+\addtoindexx{concrete instance!example}
+\addtoindexx{abstract instance!example}
 instance of OUTER, the description of INNER has the full
 complement of attributes that would be expected for a
-normal subprogram. While attributes such as DW\_AT\_low\_pc,
-DW\_AT\_high\_pc, DW\_AT\_location, and so on, typically are omitted
-from an abstract instance because they are not invariant across
+normal subprogram. 
+While attributes such as 
+\livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc},
+\livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}, 
+\livelink{chap:DWATlocation}{DW\-\_AT\-\_location},
+and so on, typically are omitted
+\addtoindexx{high PC attribute}
+from 
+\addtoindexx{low PC attribute}
+an 
+\addtoindexx{location attribute}
+abstract instance because they are not invariant across
 instances of the containing abstract instance, in this case
 those same attributes are included precisely because they are
 invariant -- there is only one subprogram INNER to be described
@@ -1476,20 +1643,23 @@ A concrete inlined instance of OUTER is illustrated in
 \refersec{app:inliningexample3concreteinstance}.
 
 Notice in 
-Figure 73 FIXME REF
-\refersec{app:inliningexample3concreteinstance}
+\refersec{app:inliningexample3abstractinstance}
 that there is no DWARF representation for
 INNER at all; the representation of INNER does not vary across
 instances of OUTER and the abstract instance of OUTER includes
 the complete description of INNER, so that the description of
 INNER may be (and for reasons of space efficiency, should be)
-omitted from each concrete instance of OUTER.
+omitted from each 
+\addtoindexx{concrete instance!example}
+concrete instance of OUTER.
 
 There is one aspect of this approach that is problematical from
 the DWARF perspective. The single compiled instance of INNER
 is assumed to access up\dash level variables of OUTER; however,
 those variables may well occur at varying positions within
-the frames that contain the concrete inlined instances. A
+the frames that contain the 
+\addtoindexx{concrete instance!example}
+concrete inlined instances. A
 compiler might implement this in several ways, including the
 use of additional compiler generated parameters that provide
 reference parameters for the up\dash level variables, or a compiler
@@ -1513,42 +1683,42 @@ for accessing purposes.)
 \label{app:inliningexample3abstractinstance}
 \begin{alltt}
     ! Abstract instance for OUTER
-    !
+    ! \addtoindexx{abstract instance!example}
 OUTER.AI.3.1:
-    DW\_TAG\_subprogram
-        DW\_AT\_name("OUTER")
-        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+    \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER")
+        \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}(\livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined})
         ! No low/high PCs
 OUTER.AI.3.2:
-        DW\_TAG\_formal\_parameter
-            DW\_AT\_name("OUTER\_FORMAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_FORMAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
 OUTER.AI.3.3:
-        DW\_TAG\_variable
-            DW\_AT\_name("OUTER\_LOCAL")
-            DW\_AT\_type(reference to integer)
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("OUTER\_LOCAL")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
             ! No location
         !
         ! Normal INNER
         !
 OUTER.AI.3.4:
-        DW\_TAG\_subprogram
-            DW\_AT\_name("INNER")
-            DW\_AT\_low\_pc(...)
-            DW\_AT\_high\_pc(...)
-            DW\_AT\_frame\_base(...)
-            DW\_AT\_static\_link(...)
+        \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER")
+            \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+            \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
+            \livelink{chap:DWATframebase}{DW\-\_AT\-\_frame\-\_base}(...)
+            \livelink{chap:DWATstaticlink}{DW\-\_AT\-\_static\-\_link}(...)
 OUTER.AI.3.5:
-            DW\_TAG\_formal\_parameter
-                DW\_AT\_name("INNER\_FORMAL")
-                DW\_AT\_type(reference to integer)
-                DW\_AT\_location(...)
+            \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_FORMAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
 OUTER.AI.3.6:
-            DW\_TAG\_variable
-                DW\_AT\_name("INNER\_LOCAL")
-                DW\_AT\_type(reference to integer)
-                DW\_AT\_location(...)
+            \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+                \livelink{chap:DWATname}{DW\-\_AT\-\_name}("INNER\_LOCAL")
+                \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to integer)
+                \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
             ...
             0
         ...
@@ -1560,27 +1730,27 @@ OUTER.AI.3.6:
 \label{app:inliningexample3concreteinstance}
 \begin{alltt}
     ! Concrete instance for call "OUTER(7)"
-    !
+    ! \addtoindexx{concrete instance!example}
 OUTER.CI.3.1:
-    DW\_TAG\_inlined\_subroutine
+    \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
         ! No name
-        DW\_AT\_abstract\_origin(reference to OUTER.AI.3.1)
-        DW\_AT\_low\_pc(...)
-        DW\_AT\_high\_pc(...)
-        DW\_AT\_frame\_base(...)
+        \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.3.1)
+        \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}(...)
+        \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}(...)
+        \livelink{chap:DWATframebase}{DW\-\_AT\-\_frame\-\_base}(...)
 OUTER.CI.3.2:
-        DW\_TAG\_formal\_parameter
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.3.2)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.3.2)
             ! No type
-            DW\_AT\_location(...)
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
 OUTER.CI.3.3:
-        DW\_TAG\_variable
+        \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
             ! No name
-            DW\_AT\_abstract\_origin(reference to OUTER.AI.3.3)
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to OUTER.AI.3.3)
             ! No type
-            DW\_AT\_location(...)
-        ! No DW\_TAG\_subprogram for "INNER"
+            \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}(...)
+        ! No \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram} for "INNER"
         ...
         0
 \end{alltt}
@@ -1608,44 +1778,44 @@ Section \refersec{app:constantexpressionsdwarfdescription}.
 
       ! For variable mass
       !
-1\$:  DW\_TAG\_const\_type
-        DW\_AT\_type(reference to "double")
-2\$:  DW\_TAG\_variable
-        DW\_AT\_name("mass")
-        DW\_AT\_type(reference to 1\$)
-        DW\_AT\_const\_expr(true)
-        DW\_AT\_const\_value(9.8)
+1\$:  \livelink{chap:DWTAGconsttype}{DW\-\_TAG\-\_const\-\_type}
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "double")
+2\$:  \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("mass")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+        \livelink{chap:DWATconstexpr}{DW\-\_AT\-\_const\-\_expr}(true)
+        \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(9.8)
       ! Abstract instance for square
       !
-10\$: DW\_TAG\_subprogram
-        DW\_AT\_name("square")
-        DW\_AT\_type(reference to "int")
-        DW\_AT\_inline(DW\_INL\_inlined)
-11\$:   DW\_TAG\_formal\_parameter
-            DW\_AT\_name("x")
-            DW\_AT\_type(reference to "int")
+10\$: \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("square")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+        \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}(\livelink{chap:DWINLinlined}{DW\-\_INL\-\_inlined})
+11\$:   \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("x")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
       ! Concrete instance for square(9)
-      !
-20\$: DW\_TAG\_inlined\_subroutine
-        DW\_AT\_abstract\_origin(reference to 10\$)
-        DW\_AT\_const\_expr(present)
-        DW\_AT\_const\_value(81)
-        DW\_TAG\_formal\_parameter
-            DW\_AT\_abstract\_origin(reference to 11\$)
-            DW\_AT\_const\_value(9)
+      ! \addtoindexx{concrete instance!example}
+20\$: \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
+        \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to 10\$)
+        \livelink{chap:DWATconstexpr}{DW\-\_AT\-\_const\-\_expr}(present)
+        \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(81)
+        \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}(reference to 11\$)
+            \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(9)
       ! Anonymous array type for arr
       !
-30\$: DW\_TAG\_array\_type
-        DW\_AT\_type(reference to "float")
-        DW\_AT\_byte\_size(324) ! 81*4
-        DW\_TAG\_subrange\_type
-            DW\_AT\_type(reference to "int")
-            DW\_AT\_upper\_bound(reference to 20\$)
+30\$: \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type}
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "float")
+        \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}(324) ! 81*4
+        \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+            \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}(reference to 20\$)
       ! Variable arr
       !
-40\$: DW\_TAG\_variable
-        DW\_AT\_name("arr")
-        DW\_AT\_type(reference to 30\$)
+40\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("arr")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 30\$)
 \end{alltt}
 
 
@@ -1669,20 +1839,20 @@ char32_t chr_b = U'h';
 
 ! DWARF description
 !
-1\$: DW\_TAG\_base\_type
-        DW\_AT\_name("char16\_t")
-        DW\_AT\_encoding(DW\_ATE\_UTF)
-        DW\_AT\_byte\_size(2)
-2\$: DW\_TAG\_base\_type
-        DW\_AT\_name("char32\_t")
-        DW\_AT\_encoding(DW\_ATE\_UTF)
-        DW\_AT\_byte\_size(4)
-3\$: DW\_TAG\_variable
-        DW\_AT\_name("chr\_a")
-        DW\_AT\_type(reference to 1\$)
-4\$: DW\_TAG\_variable
-        DW\_AT\_name("chr\_b")
-        DW\_AT\_type(reference to 2\$)
+1\$: \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("char16\_t")
+        \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}(\livelink{chap:DWATEUTF}{DW\-\_ATE\-\_UTF})
+        \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}(2)
+2\$: \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("char32\_t")
+        \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}(\livelink{chap:DWATEUTF}{DW\-\_ATE\-\_UTF})
+        \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}(4)
+3\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("chr\_a")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 1\$)
+4\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("chr\_b")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 2\$)
 \end{alltt}
 
 
@@ -1706,20 +1876,20 @@ E e1;
 \begin{alltt}
 ! DWARF description
 !
-11\$: DW\_TAG\_enumeration\_type
-        DW\_AT\_name("E")
-        DW\_AT\_type(reference to "int")
-        DW\_AT\_enum\_class(present)
-12\$:   DW\_TAG\_enumerator
-            DW\_AT\_name("E1")
-            DW\_AT\_const\_value(0)
+11\$: \livelink{chap:DWTAGenumerationtype}{DW\-\_TAG\-\_enumeration\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("E")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+        \livelink{chap:DWATenumclass}{DW\-\_AT\-\_enum\-\_class}(present)
+12\$:   \livelink{chap:DWTAGenumerator}{DW\-\_TAG\-\_enumerator}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("E1")
+            \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(0)
 13\$:
-         DW\_TAG\_enumerator
-            DW\_AT\_name("E2")
-            DW\_AT\_const\_value(100)
-14\$: DW\_TAG\_variable
-        DW\_AT\_name("e1")
-        DW\_AT\_type(reference to 11\$)
+         \livelink{chap:DWTAGenumerator}{DW\-\_TAG\-\_enumerator}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("E2")
+            \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}(100)
+14\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("e1")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
 \end{alltt}
 
 \section{Template Example}
@@ -1745,21 +1915,21 @@ wrapper<int> obj;
 \begin{alltt}
 ! DWARF description
 !
-11\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("wrapper")
-12\$: DW\_TAG\_template\_type\_parameter
-        DW\_AT\_name("T")
-        DW\_AT\_type(reference to "int")
-13\$ DW\_TAG\_member
-        DW\_AT\_name("comp")
-        DW\_AT\_type(reference to 12\$)
-14\$: DW\_TAG\_variable
-        DW\_AT\_name("obj")
-        DW\_AT\_type(reference to 11\$)
+11\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("wrapper")
+12\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("T")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+13\$ \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("comp")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 12\$)
+14\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("obj")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
 \end{alltt}
 
 The actual type of the component comp is int, but in the DWARF
-the type references the DW\_TAG\_template\_type\_parameter for
+the type references the \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter} for
 T, which in turn references int. This implies that in the
 original template comp was of type T and that was replaced
 with int in the instance.  There exist situations where it is
@@ -1792,28 +1962,28 @@ Section \refersec{app:ctemplateexample2}.
 \begin{alltt}
 ! DWARF description
 !
-11\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("wrapper")
-12\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("T")
-            DW\_AT\_type(reference to "int")
-13\$    DW\_TAG\_member
-            DW\_AT\_name("comp")
-            DW\_AT\_type(reference to 12\$)
-14\$: DW\_TAG\_variable
-        DW\_AT\_name("obj")
-        DW\_AT\_type(reference to 11\$)
-21\$: DW\_TAG\_subprogram
-        DW\_AT\_name("consume")
-22\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("U")
-            DW\_AT\_type(reference to "int")
-23\$:   DW\_TAG\_formal\_parameter
-            DW\_AT\_name("formal")
-            DW\_AT\_type(reference to 11\$)
+11\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("wrapper")
+12\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("T")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+13\$    \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("comp")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 12\$)
+14\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("obj")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
+21\$: \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("consume")
+22\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("U")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+23\$:   \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("formal")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 11\$)
 \end{alltt}
 
-In the DW\_TAG\_subprogram entry for the instance of consume,
+In the \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram} entry for the instance of consume,
 U is described as 
 int. 
 The type of formal is 
@@ -1836,7 +2006,7 @@ the instantiation of
 \begin{alltt}
 wrapper<U>, 
 \end{alltt}
-in the DW\_AT\_type attribute at 
+in the \livelink{chap:DWATtype}{DW\-\_AT\-\_type} attribute at 
 23\$. 
 There is no
 description of the relationship between template type parameter
@@ -1880,29 +2050,29 @@ Beta<long> b;
 \begin{alltt}
 ! DWARF representation for variable 'b'
 !
-20\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("Alpha")
-21\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("T")
-            DW\_AT\_type(reference to "long")
-22\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("U")
-            DW\_AT\_type(reference to "long")
-23\$:   DW\_TAG\_member
-            DW\_AT\_name("tango")
-            DW\_AT\_type(reference to 21\$)
-24\$:   DW\_TAG\_member
-            DW\_AT\_name("uniform")
-            DW\_AT\_type(reference to 22\$)
-25\$: DW\_TAG\_template\_alias
-        DW\_AT\_name("Beta")
-        DW\_AT\_type(reference to 20\$)
-26\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("V")
-            DW\_AT\_type(reference to "long")
-27\$: DW\_TAG\_variable
-        DW\_AT\_name("b")
-        DW\_AT\_type(reference to 25\$)
+20\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Alpha")
+21\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("T")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "long")
+22\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("U")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "long")
+23\$:   \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("tango")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 21\$)
+24\$:   \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("uniform")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 22\$)
+25\$: \livelink{chap:DWTAGtemplatealias}{DW\-\_TAG\-\_template\-\_alias}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Beta")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 20\$)
+26\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("V")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "long")
+27\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("b")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 25\$)
 \end{alltt}
 
 
@@ -1922,37 +2092,37 @@ X<Z<int>> z;
 \begin{alltt}
 ! DWARF representation for X<Y<int>>
 !
-30\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("Y")
-31\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("TY")
-            DW\_AT\_type(reference to "int")
-32\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("X")
-33\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("TX")
-            DW\_AT\_type(reference to 30\$)
+30\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Y")
+31\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("TY")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+32\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("X")
+33\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("TX")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 30\$)
 
 ! DWARF representation for X<Z<int>>
 !
-40\$: DW\_TAG\_template\_alias
+40\$: \livelink{chap:DWTAGtemplatealias}{DW\-\_TAG\-\_template\-\_alias}
 using Z = Y<int>;
-        DW\_AT\_name("Z")
-        DW\_AT\_type(reference to 30\$)
-41\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("T")
-            DW\_AT\_type(reference to "int")
-42\$: DW\_TAG\_structure\_type
-        DW\_AT\_name("X")
-43\$:   DW\_TAG\_template\_type\_parameter
-            DW\_AT\_name("TX")
-            DW\_AT\_type(reference to 40\$)
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("Z")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 30\$)
+41\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("T")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to "int")
+42\$: \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("X")
+43\$:   \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}
+            \livelink{chap:DWATname}{DW\-\_AT\-\_name}("TX")
+            \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to 40\$)
 ! Note that 32\$ and 42\$ are actually the same type
 !
-50\$: DW\_TAG\_variable
-        DW\_AT\_name("y")
-        DW\_AT\_type(reference to \$32)
-51\$: DW\_TAG\_variable
-        DW\_AT\_name("z")
-        DW\_AT\_type(reference to \$42)
+50\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("y")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to \$32)
+51\$: \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}
+        \livelink{chap:DWATname}{DW\-\_AT\-\_name}("z")
+        \livelink{chap:DWATtype}{DW\-\_AT\-\_type}(reference to \$42)
 \end{alltt}