First draft of Version 5, incorporating numerous approved changes
authorRon Brender <ron.brender@gmail.com>
Sat, 22 Jun 2013 21:21:14 +0000 (17:21 -0400)
committerRon Brender <ron.brender@gmail.com>
Sat, 22 Jun 2013 21:21:14 +0000 (17:21 -0400)
(see new Change Summary in Draft versions).

Signed-off-by: Ron Brender <ron.brender@gmail.com>
13 files changed:
dwarf5/latexdoc/attributesbytag.tex
dwarf5/latexdoc/changesummary.tex [new file with mode: 0644]
dwarf5/latexdoc/copyright.tex
dwarf5/latexdoc/datarepresentation.tex
dwarf5/latexdoc/dwarf5.tex
dwarf5/latexdoc/dwarfnamecmds.tex
dwarf5/latexdoc/examples.tex
dwarf5/latexdoc/generaldescription.tex
dwarf5/latexdoc/introduction.tex
dwarf5/latexdoc/otherdebugginginformation.tex
dwarf5/latexdoc/programscope.tex
dwarf5/latexdoc/sectionversionnumbers.tex
dwarf5/latexdoc/typeentries.tex

index 02a70ef..451b0c6 100644 (file)
@@ -116,6 +116,13 @@ means include all three of the
 &\livelink{chap:DWATstartscope}{DW\_AT\_start\_scope} \\
 &\livelink{chap:DWATvisibility}{DW\_AT\_visibility} \\
 
+\hline
+\livelink{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type}
+&\livelink{chap:DECL}{DECL} \\
+&\livelink{chap:DWATname}{DW\_AT\_name} \\
+&\livelink{chap:DWATsibling}{DW\_AT\_sibling} \\
+&\livelink{chap:DWATtype}{DW\_AT\_type} \\
+
 \hline
 \livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block}
 &\livelink{chap:DECL}{DECL} \\
@@ -541,6 +548,8 @@ means include all three of the
 &\livelink{chap:DWATsibling}{DW\_AT\_sibling}  \\
 &\livelink{chap:DWATstartscope}{DW\_AT\_start\_scope}  \\
 &\livelink{chap:DWATstringlength}{DW\_AT\_string\_length}  \\
+&\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size}  \\
+&\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size}  \\
 &\livelink{chap:DWATvisibility}{DW\_AT\_visibility}  \\
 
 \hline
diff --git a/dwarf5/latexdoc/changesummary.tex b/dwarf5/latexdoc/changesummary.tex
new file mode 100644 (file)
index 0000000..afd0d1c
--- /dev/null
@@ -0,0 +1,29 @@
+\renewcommand{\abstractname}{\textit{\textbf{\LARGE Change Summary}}}
+\setlength{\parindent}{0pt}
+\begin{abstract}
+\nonzeroparskip
+\setlength{\parindent}{0pt}
+\ \break
+\itshape
+\begin{center}
+Note
+\\
+This change summary is included only in draft versions of this document.
+\end{center}
+
+\vspace{1cm}
+\begin{tabular}{ll}
+\textbf{Date}  & \textbf{Issue Incorported or Other Change}    \\ \hline \\
+6/22/2013      & 100805.1 (value of reference), 100816.1 (remove .debug\_types), \\ 
+                       & 101014.1, 101111.1, 120218.1 (Go, Modula-3 and Haskell), \\
+                       & 110803.1 (tls), 110926.1 (DW\_OP\_callx), 121212.1 (type unit)        \\
+                       & 121221.1 (location length), 130121.1 (default location) \\
+                       & 110110.1 (size of string length--\textbf{normative text only, still need examples})   \\
+6/20/2013      & 090824.1 (coarray)                                                    \\
+6/18/2013      & 100211.1 (OpenCL), add this Change Summary    \\
+6/1/2013       & Begin V5 (from V4.1), delete V4 vs V3 stuff, delete "new in V4" \\
+(Pre-V5)       & 100923.1 (bungled subheader), 101015.1 (sig8 typo), \\
+                       & 110404.1 (DW\_TAG\_member typos) \\
+
+\end{tabular}
+\end{abstract}
\ No newline at end of file
index d30818c..9026c34 100644 (file)
@@ -5,7 +5,7 @@
 \nonzeroparskip
 
 \begin{center}
-\dwf, Version 4.1
+\dwf, Version 5
 
 Copyright\copyright 2010, 2013 \dwf\ Committee
 \end{center}
@@ -52,14 +52,10 @@ This document is further based on the \dwf, Version 3, which
 is subject to the GNU Free Documentation License.
 
 Trademarks:
-
 \begin{itemize}
 \item Intel386 is a trademark of Intel Corporation.
-
 \item Java is a trademark of Oracle, Inc.
-
 \item All other trademarks found herein are property of their respective owners.
-
 \end{itemize}
 
 \end{abstract}
index 12a42f2..0bad0dc 100644 (file)
@@ -380,7 +380,7 @@ consists of the following information:
 A 4\dash byte or 12\dash byte unsigned integer 
 \addtoindexx{initial length}
 representing the length
-of the \dotdebugtypes{} contribution for that compilation unit,
+of the \dotdebugtypes{} contribution for that type unit,
 not including the length field itself. In the \thirtytwobitdwarfformat, 
 this is a 4\dash byte unsigned integer (which must be
 less than \xfffffffzero); in the \sixtyfourbitdwarfformat, this
@@ -392,7 +392,7 @@ consists of the 4\dash byte value \wffffffff followed by an
 \item  \texttt{version} (\addtoindex{uhalf}) \\
 A 2\dash byte unsigned integer representing the version of the
 DWARF information for the 
-compilation unit\addtoindexx{version number!type unit} 
+type unit\addtoindexx{version number!type unit} 
 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
 The value in this field is 4.
 
@@ -401,7 +401,7 @@ A
 \addtoindexx{section offset!in .debug\_types header}
 4\dash byte or 8\dash byte unsigned offset into the 
 \dotdebugabbrev{}
-section. This offset associates the compilation unit with a
+section. This offset associates the type unit with a
 particular set of debugging information entry abbreviations. In
 the \thirtytwobitdwarfformat, this is a 4\dash byte unsigned length;
 in the \sixtyfourbitdwarfformat, this is an 8\dash byte unsigned length
@@ -417,7 +417,6 @@ an address on the target architecture. If the system uses
 segmented addressing, this value represents the size of the
 offset portion of an address.
 
-
 \item \texttt{type\_signature} (8\dash byte unsigned integer) \\
 \addtoindexx{type signature}
 A 
@@ -432,7 +431,6 @@ unit.
 the primary type contained in this 
 \addtoindex{type unit} uses this value.}
 
-
 \item \texttt{type\_offset} (\livelink{datarep:sectionoffsetlength}{section offset}) \\
 \addttindexx{type\_offset}
 A 4\dash byte or 8\dash byte unsigned offset 
@@ -504,7 +502,6 @@ Table \refersec{tab:tagencodings}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
 \endlastfoot
 \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type} &0x01 \\
 \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}&0x02 \\
@@ -563,9 +560,10 @@ Table \refersec{tab:tagencodings}.
 \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}&0x3d      \\
 \livelink{chap:DWTAGcondition}{DW\_TAG\_condition}&\xiiif      \\
 \livelink{chap:DWTAGsharedtype}{DW\_TAG\_shared\_type}&0x40      \\
-\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} \ddag &0x41      \\
-\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type} \ddag &0x42      \\
-\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias} \ddag &0x43      \\
+\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} &0x41      \\
+\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type} &0x42      \\
+\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias} &0x43      \\
+\livelink{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type} &0x44 \\
 \livelink{chap:DWXXXlohiuser}{DW\_TAG\_lo\_user}&0x4080      \\
 \livelink{chap:DWXXXlohiuser}{DW\_TAG\_hi\_user}&\xffff      \\
 \end{longtable}
@@ -1026,8 +1024,7 @@ Table \refersec{tab:attributeformencodings}.
 \endhead
   \hline \emph{Continued on next page}
 \endfoot
-  \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
+  \hline \ddag\ \textit{New in DWARF Version 5}
 \endlastfoot
 \livelink{chap:DWATsibling}{DW\_AT\_sibling}&0x01&\livelink{chap:classreference}{reference} 
         \addtoindexx{sibling attribute!encoding} \\
@@ -1202,24 +1199,29 @@ Table \refersec{tab:attributeformencodings}.
         \addtoindexx{pure attribute!encoding}  \\
 \livelink{chap:DWATrecursive}{DW\_AT\_recursive}&0x68&\livelink{chap:classflag}{flag} 
         \addtoindexx{recursive attribute!encoding}  \\
-\livelink{chap:DWATsignature}{DW\_AT\_signature} \ddag &0x69&\livelink{chap:classreference}{reference} 
+\livelink{chap:DWATsignature}{DW\_AT\_signature} &0x69&\livelink{chap:classreference}{reference} 
         \addtoindexx{signature attribute!encoding}  \\ 
-\livelink{chap:DWATmainsubprogram}{DW\_AT\_main\_subprogram} \ddag &0x6a&\livelink{chap:classflag}{flag} 
+\livelink{chap:DWATmainsubprogram}{DW\_AT\_main\_subprogram} &0x6a&\livelink{chap:classflag}{flag} 
         \addtoindexx{main subprogram attribute!encoding}  \\
-\livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset} \ddag &0x6b&\livelink{chap:classconstant}{constant} 
+\livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset} &0x6b&\livelink{chap:classconstant}{constant} 
         \addtoindexx{data bit offset attribute!encoding}  \\
-\livelink{chap:DWATconstexpr}{DW\_AT\_const\_expr} \ddag &0x6c&\livelink{chap:classflag}{flag} 
+\livelink{chap:DWATconstexpr}{DW\_AT\_const\_expr} &0x6c&\livelink{chap:classflag}{flag} 
         \addtoindexx{constant expression attribute!encoding}  \\
-\livelink{chap:DWATenumclass}{DW\_AT\_enum\_class} \ddag &0x6d&\livelink{chap:classflag}{flag} 
+\livelink{chap:DWATenumclass}{DW\_AT\_enum\_class} &0x6d&\livelink{chap:classflag}{flag} 
         \addtoindexx{enumeration class attribute!encoding}  \\
-\livelink{chap:DWATlinkagename}{DW\_AT\_linkage\_name} \ddag &0x6e&\livelink{chap:classstring}{string} 
+\livelink{chap:DWATlinkagename}{DW\_AT\_linkage\_name} &0x6e&\livelink{chap:classstring}{string} 
         \addtoindexx{linkage name attribute!encoding}  \\
+\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size} \ddag&0x6f&
+               \livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length}  \\
+\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size} \ddag&0x70&
+               \livelink{chap:classconstant}{constant}\addtoindexx{string length attribute!size of length}  \\
 \livelink{chap:DWXXXlohiuser}{DW\_AT\_lo\_user}&0x2000 & --- \addtoindexx{low user attribute encoding}  \\
 \livelink{chap:DWXXXlohiuser}{DW\_AT\_hi\_user}&\xiiifff& --- \addtoindexx{high user attribute encoding}  \\
 
 \end{longtable} 
 \end{centering}
 
+
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|l|l}
@@ -1231,7 +1233,7 @@ Table \refersec{tab:attributeformencodings}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
+
 \endlastfoot
 \livelink{chap:DWFORMaddr}{DW\_FORM\_addr}&0x01&\livelink{chap:classaddress}{address}  \\
 \livelink{chap:DWFORMblock2}{DW\_FORM\_block2}&0x03&\livelink{chap:classblock}{block} \\
@@ -1254,10 +1256,10 @@ Table \refersec{tab:attributeformencodings}.
 \livelink{chap:DWFORMref8}{DW\_FORM\_ref8}&0x14&\livelink{chap:classreference}{reference} \\
 \livelink{chap:DWFORMrefudata}{DW\_FORM\_ref\_udata}&0x15&\livelink{chap:classreference}{reference}  \\
 \livelink{chap:DWFORMindirect}{DW\_FORM\_indirect}&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
-\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset} \ddag &0x17&\livelink{chap:classlineptr}{lineptr}, \livelink{chap:classloclistptr}{loclistptr}, \livelink{chap:classmacptr}{macptr}, \livelink{chap:classrangelistptr}{rangelistptr} \\
-\livelink{chap:DWFORMexprloc}{DW\_FORM\_exprloc} \ddag &0x18&\livelink{chap:classexprloc}{exprloc} \\
-\livelink{chap:DWFORMflagpresent}{DW\_FORM\_flag\_present} \ddag &0x19&\livelink{chap:classflag}{flag} \\
-\livelink{chap:DWFORMrefsig8}{DW\_FORM\_ref\_sig8} \ddag &0x20&\livelink{chap:classreference}{reference} \\
+\livelink{chap:DWFORMsecoffset}{DW\_FORM\_sec\_offset} &0x17&\livelink{chap:classlineptr}{lineptr}, \livelink{chap:classloclistptr}{loclistptr}, \livelink{chap:classmacptr}{macptr}, \livelink{chap:classrangelistptr}{rangelistptr} \\
+\livelink{chap:DWFORMexprloc}{DW\_FORM\_exprloc} &0x18&\livelink{chap:classexprloc}{exprloc} \\
+\livelink{chap:DWFORMflagpresent}{DW\_FORM\_flag\_present} &0x19&\livelink{chap:classflag}{flag} \\
+\livelink{chap:DWFORMrefsig8}{DW\_FORM\_ref\_sig8} &0x20&\livelink{chap:classreference}{reference} \\
  
 \end{longtable}
 \end{centering}
@@ -1405,7 +1407,6 @@ Table \refersec{tab:dwarfoperationencodings}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
 \endlastfoot
 
 \livelink{chap:DWOPaddr}{DW\_OP\_addr}&0x03&1 & constant address  \\ 
@@ -1493,9 +1494,9 @@ Table \refersec{tab:dwarfoperationencodings}.
 \livelink{chap:DWOPcallframecfa}{DW\_OP\_call\_frame\_cfa} &0x9c &0& \\
 \livelink{chap:DWOPbitpiece}{DW\_OP\_bit\_piece}&0x9d &2&ULEB128 size followed by \\
 &&&ULEB128 offset\\
-\livelink{chap:DWOPimplicitvalue}{DW\_OP\_implicit\_value} \ddag &0x9e &2&ULEB128 size followed by \\
+\livelink{chap:DWOPimplicitvalue}{DW\_OP\_implicit\_value} &0x9e &2&ULEB128 size followed by \\
 &&&\nolink{block} of that size\\
-\livelink{chap:DWOPstackvalue}{DW\_OP\_stack\_value} \ddag &0x9f &0& \\
+\livelink{chap:DWOPstackvalue}{DW\_OP\_stack\_value} &0x9f &0& \\
 \livelink{chap:DWXXXlohiuser}{DW\_OP\_lo\_user} &0xe0 && \\
 \livelink{chap:DWXXXlohiuser}{DW\_OP\_hi\_user} &\xff && \\
 
@@ -1558,9 +1559,7 @@ Table \refersec{tab:basetypeencodingvalues}
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
 \endlastfoot
-
 \livelink{chap:DWATEaddress}{DW\_ATE\_address}&0x01 \\
 \livelink{chap:DWATEboolean}{DW\_ATE\_boolean}&0x02 \\
 \livelink{chap:DWATEcomplexfloat}{DW\_ATE\_complex\_float}&0x03 \\
@@ -1576,10 +1575,9 @@ Table \refersec{tab:basetypeencodingvalues}
 \livelink{chap:DWATEsignedfixed}{DW\_ATE\_signed\_fixed}&0x0d \\
 \livelink{chap:DWATEunsignedfixed}{DW\_ATE\_unsigned\_fixed}&0x0e \\
 \livelink{chap:DWATEdecimalfloat}{DW\_ATE\_decimal\_float} & 0x0f \\
-\livelink{chap:DWATEUTF}{DW\_ATE\_UTF} \ddag & 0x10 \\
+\livelink{chap:DWATEUTF}{DW\_ATE\_UTF} & 0x10 \\
 \livelink{chap:DWXXXlohiuser}{DW\_ATE\_lo\_user} & 0x80 \\
 \livelink{chap:DWXXXlohiuser}{DW\_ATE\_hi\_user} & \xff \\
-
 \end{longtable}
 \end{centering}
 
@@ -1589,7 +1587,6 @@ The encodings of the constants used in the
 are given in 
 Table \refersec{tab:decimalsignencodings}.
 
-
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
 \begin{longtable}{l|c}
@@ -1763,31 +1760,35 @@ defined language.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \dag \ \textit{See text}
+  \dag \ \textit{See text} \\ \ddag \ \textit{New in \addtoindex{DWARF Version 5}}
 \endlastfoot
 
-\livelink{chap:DWLANGC89}{DW\_LANG\_C89}&0x0001&0       \\
-\livelink{chap:DWLANGC}{DW\_LANG\_C}&0x0002&0  \\
-\livelink{chap:DWLANGAda83}{DW\_LANG\_Ada83} \dag &0x0003&1  \addtoindexx{Ada}     \\
-\livelink{chap:DWLANGCplusplus}{DW\_LANG\_C\_plus\_plus} &0x0004&0       \\
-\livelink{chap:DWLANGCobol74}{DW\_LANG\_Cobol74} \dag &0x0005&1       \\
-\livelink{chap:DWLANGCobol85}{DW\_LANG\_Cobol85} \dag &0x0006&1       \\
-\livelink{chap:DWLANGFortran77}{DW\_LANG\_Fortran77}&0x0007&1       \\
-\livelink{chap:DWLANGFortran90}{DW\_LANG\_Fortran90}&0x0008&1       \\
-\livelink{chap:DWLANGPascal83}{DW\_LANG\_Pascal83}&0x0009&1       \\
-\livelink{chap:DWLANGModula2}{DW\_LANG\_Modula2}&0x000a&1       \\
-\livelink{chap:DWLANGJava}{DW\_LANG\_Java}&0x000b&0       \\
-\livelink{chap:DWLANGC99}{DW\_LANG\_C99}&0x000c&0       \\
-\livelink{chap:DWLANGAda95}{DW\_LANG\_Ada95} \dag &0x000d&1 \addtoindexx{Ada}      \\
-\livelink{chap:DWLANGFortran95}{DW\_LANG\_Fortran95} &0x000e&1       \\
-\livelink{chap:DWLANGPLI}{DW\_LANG\_PLI} \dag &0x000f&1 \\
-\livelink{chap:DWLANGObjC}{DW\_LANG\_ObjC}&0x0010&0 \\
-\livelink{chap:DWLANGObjCplusplus}{DW\_LANG\_ObjC\_plus\_plus}&0x0011&0 \\
-\livelink{chap:DWLANGUPC}{DW\_LANG\_UPC}&0x0012&0 \\
-\livelink{chap:DWLANGD}{DW\_LANG\_D}&0x0013&0 \\
-\livelink{chap:DWLANGPython}{DW\_LANG\_Python} \dag &0x0014&0 \\
-\livelink{chap:DWXXXlohiuser}{DW\_LANG\_lo\_user}&0x8000 & \\
-\livelink{chap:DWXXXlohiuser}{DW\_LANG\_hi\_user}&\xffff & \\
+\livelink{chap:DWLANGC89}{DW\_LANG\_C89} &0x0001 &0       \\
+\livelink{chap:DWLANGC}{DW\_LANG\_C} &0x0002 &0  \\
+\livelink{chap:DWLANGAda83}{DW\_LANG\_Ada83} \dag &0x0003 &1  \addtoindexx{Ada}     \\
+\livelink{chap:DWLANGCplusplus}{DW\_LANG\_C\_plus\_plus} &0x0004 &0       \\
+\livelink{chap:DWLANGCobol74}{DW\_LANG\_Cobol74} \dag &0x0005 &1       \\
+\livelink{chap:DWLANGCobol85}{DW\_LANG\_Cobol85} \dag &0x0006 &1       \\
+\livelink{chap:DWLANGFortran77}{DW\_LANG\_Fortran77} &0x0007 &1       \\
+\livelink{chap:DWLANGFortran90}{DW\_LANG\_Fortran90} &0x0008 &1       \\
+\livelink{chap:DWLANGPascal83}{DW\_LANG\_Pascal83} &0x0009 &1       \\
+\livelink{chap:DWLANGModula2}{DW\_LANG\_Modula2} &0x000a &1       \\
+\livelink{chap:DWLANGJava}{DW\_LANG\_Java}&0x000b &0       \\
+\livelink{chap:DWLANGC99}{DW\_LANG\_C99}&0x000c &0       \\
+\livelink{chap:DWLANGAda95}{DW\_LANG\_Ada95} \dag &0x000d &1 \addtoindexx{Ada}      \\
+\livelink{chap:DWLANGFortran95}{DW\_LANG\_Fortran95} &0x000e &1       \\
+\livelink{chap:DWLANGPLI}{DW\_LANG\_PLI} \dag &0x000f &1 \\
+\livelink{chap:DWLANGObjC}{DW\_LANG\_ObjC} &0x0010 &0 \\
+\livelink{chap:DWLANGObjCplusplus}{DW\_LANG\_ObjC\_plus\_plus} &0x0011 &0 \\
+\livelink{chap:DWLANGUPC}{DW\_LANG\_UPC} &0x0012 &0 \\
+\livelink{chap:DWLANGD}{DW\_LANG\_D} &0x0013 &0 \\
+\livelink{chap:DWLANGPython}{DW\_LANG\_Python} \dag &0x0014 &0 \\
+\livelink{chap:DWLANGOpenCL}{DW\_LANG\_OpenCL} \dag \ddag &0x0015 &0 \\
+\livelink{chap:DWLANGGo}{DW\_LANG\_Go} \dag \ddag &0x0016 &0 \\
+\livelink{chap:DWLANGModula3}{DW\_LANG\_Modula3} \dag \ddag &0x0017 &1 \\
+\livelink{chap:DWLANGHaskell}{DW\_LANG\_Haskell} \dag \ddag &0x0018 &0 \\
+\livelink{chap:DWXXXlohiuser}{DW\_LANG\_lo\_user} &0x8000 & \\
+\livelink{chap:DWXXXlohiuser}{DW\_LANG\_hi\_user} &\xffff & \\
 
 \end{longtable}
 \end{centering}
@@ -2154,13 +2155,12 @@ Table \refersec{tab:linenumberextendedopcodeencodings}.
   \hline \emph{Continued on next page}
 \endfoot
   \hline
-  \ddag \ \textit{New in \addtoindex{DWARF Version 4}}
 \endlastfoot
 
 \livelink{chap:DWLNEendsequence}{DW\_LNE\_end\_sequence}&0x01    \\
 \livelink{chap:DWLNEsetaddress}{DW\_LNE\_set\_address}&0x02\\
 \livelink{chap:DWLNEdefinefile}{DW\_LNE\_define\_file}&0x03\\
-\livelink{chap:DWLNEsetdiscriminator}{DW\_LNE\_set\_discriminator} \ddag &0x04   \\
+\livelink{chap:DWLNEsetdiscriminator}{DW\_LNE\_set\_discriminator} &0x04   \\
 \livelink{chap:DWXXXlohiuser}{DW\_LNE\_lo\_user}&0x80   \\
 \livelink{chap:DWXXXlohiuser}{DW\_LNE\_hi\_user}&\xff   \\
 
@@ -2484,6 +2484,8 @@ code, and the attribute value.
 \livelink{chap:DWATsmall}{DW\_AT\_small},
 \livelink{chap:DWATsegment}{DW\_AT\_segment},
 \livelink{chap:DWATstringlength}{DW\_AT\_string\_length},
+\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size},
+\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size},
 \livelink{chap:DWATthreadsscaled}{DW\_AT\_threads\_scaled},
 \livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound},
 \livelink{chap:DWATuselocation}{DW\_AT\_use\_location},
index 2a12acb..47cec9d 100644 (file)
@@ -3,7 +3,12 @@
 % If draft is in the document class list, pix are just suggested
 % by an outline, the pic does not appear as a picture.
 %
-\newcommand{\docdate}{May 18, 2013 \hspace{1cm}(***\textbf{DRAFT}***)}
+\newcommand{\docdate}{June 22, 2013}
+%
+\usepackage{ifthen}
+\newboolean{isdraft}
+\setboolean{isdraft}{true}
+\newcommand{\draftmark}{\ifthenelse{\boolean{isdraft}}{*** DRAFT ***}{}}
 %
 \usepackage[T1]{fontenc}
 \usepackage{palatino}
@@ -79,7 +84,7 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \hypersetup{colorlinks=true,
   %bookmarks=true,
   pdfauthor={\dwf\ Committee},
-  pdftitle={\dwf\ Version 4.1}
+  pdftitle={\dwf\ Version 5}
 }
 
 % An environment to create a listing-like (boxed) presentation for DWARF examples
@@ -210,43 +215,39 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \setlength{\topsep}{0pt}
 \tightlists                                    % less spacing before/after lists
 
-\begin{centering}
+\begin{center}
 \LARGE
 \textbf{\dwf}
-
-\textbf{Version 4.1}
-
-\centering
+\\
+\textbf{Version 5}
+\\
 \vspace{1cm}
 \includegraphics[keepaspectratio=true,scale=1.0]{dwarf-logo}
-
-%\centering
-\vspace{2cm}
+\\
+\vspace{1cm}
 \href{http://www.dwarfstd.org}{\dwf}
 \href{http://www.dwarfstd.org}{Committee}
-
-\vspace{1cm} 
+\\
+\vspace{0.3cm} 
 \url{http://www.dwarfstd.org}
-
-\large
-\vspace{2cm}
+\\
+\vspace{3cm}
 \textbf{\docdate}
-
-\end{centering}
-
-%\clearpage
-%\openany
+\\
+\ifthenelse{\boolean{isdraft}}{
+       \vspace{1cm}
+       \draftmark}
+       {}
+\end{center}
 
 \textmd
 \normalsize
 \setlength{\headheight}{15pt}  
-
 \pagestyle{plain}
 %\makeevenhead{plain}{}{}{}
 %\makeoddhead{plain}{}{}{}
 %\makeevenfoot{plain}{}{}{}
 %\makeoddfoot{plain}{}{}{}
-
 \nonzeroparskip
 \setlength{\parindent}{0pt} 
 \settrims{0.5in}{0.5in}
@@ -257,19 +258,16 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \nouppercaseheads
 \makeevenhead{plain}{}{\rightmark}{}
 \makeoddhead{plain}{}{\rightmark}{}
-\makeevenfoot{plain}{\docdate}{}{Page \thepage}
-\makeoddfoot{plain}{\docdate}{}{Page \thepage}
+\makeevenfoot{plain}{\docdate}{\draftmark}{Page \thepage}
+\makeoddfoot{plain}{\docdate}{\draftmark}{Page \thepage}
 
 %\openany
 
 \nonzeroparskip
 \setlength{\parindent}{0pt} 
-
 \flushleft
 \include{copyright}
 \include{foreword}
-\include{foreword4.1}
-\emptypage
 
 \newpage
 \tableofcontents
@@ -280,6 +278,15 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \cleardoublepage
 \listoftables
 
+\ifthenelse{\boolean{isdraft}}
+       {       {% Environment to keep the following header change local
+               \cleardoublepage
+               \makeevenhead{plain}{}{Change Summary}{}
+               \makeoddhead{plain}{}{Change Summary}{}
+               \include{changesummary}
+               \cleardoublepage}
+       }{}
+
 \flushleft
 \raggedbottom
 \chapterstyle{default}
@@ -289,8 +296,8 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \makepagestyle{fragFirstChPage}
     \makeevenhead{fragFirstChPage}{}{}{}
     \makeoddhead{fragFirstChPage}{}{}{}
-    \makeoddfoot{fragFirstChPage}{\docdate}{}{Page \thepage}
-    \makeevenfoot{fragFirstChPage}{\docdate}{}{Page \thepage}
+    \makeoddfoot{fragFirstChPage}{\docdate}{\draftmark}{Page \thepage}
+    \makeevenfoot{fragFirstChPage}{\docdate}{\draftmark}{Page \thepage}
 \nouppercaseheads
 \aliaspagestyle{chapter}{fragFirstChPage}
 
@@ -298,11 +305,12 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \mainmatter
 % Define the levels of sectionality that are numbered.
 \setcounter{secnumdepth}{5}
+
 \include{introduction}
-\include{generaldescription}            \emptypage
+\include{generaldescription}            %\emptypage
 \include{programscope}                  \emptypage
 \include{dataobject}                    \emptypage
-\include{typeentries}                   \emptypage
+\include{typeentries}                   %\emptypage
 \include{otherdebugginginformation}    \emptypage
 \include{datarepresentation}            \emptypage
 
@@ -312,7 +320,7 @@ escapeinside={\%*}{*)}     % if you want to add a comment within your code
 \include{attributesbytag}                              %\emptypage
 \include{debugsectionrelationships}     \emptypage
 \include{encodingdecoding}              \emptypage
-\include{examples}                      %\emptypage
+\include{examples}                      \emptypage
 \include{compression}                   %\emptypage
 \include{sectionversionnumbers}
 \include{gnulicense}
index b42eda4..c140835 100644 (file)
@@ -2,13 +2,57 @@
 % These eliminate the need to use escapes for the underscores and
 % add entries for indexing
 %
-\newcommand{\DWFORMstrp}[1][]{\addtoindex{DW\_FORM\_strp}}
-\newcommand{\DWOPcallref}[1][]{\addtoindex{DW\_OP\_call\_ref}}
+% DW_AT
+%
+\newcommand{\DWATbitsize}{\addtoindex{DW\_AT\_bit\_size}}
+\newcommand{\DWATbytesize}{\addtoindex{DW\_AT\_byte\_size}}
 \newcommand{\DWATlocation}[1][]{\addtoindex{DW\_AT\_location}}
-\newcommand{\DWATranges}[1][]{\addtoindex{DW\_AT\_ranges}}
+\newcommand{\DWATlowerbound}{\addtoindex{DW\_AT\_lower\_bound}}
 \newcommand{\DWATmacroinfo}[1][]{\addtoindex{DW\_AT\_macro\_info}}
+\newcommand{\DWATname}{\addtoindex{DW\_AT\_name}}
+\newcommand{\DWATordering}{\addtoindex{DW\_AT\_ordering}}
+\newcommand{\DWATranges}[1][]{\addtoindex{DW\_AT\_ranges}}
+\newcommand{\DWATsibling}{\addtoindexx{DW\_AT\_sibling}}
 \newcommand{\DWATstmtlist}[1][]{\addtoindex{DW\_AT\_stmt\_list}}
-
+\newcommand{\DWATstringlength}{\addtoindex{DW\_AT\_string\_length}}
+\newcommand{\DWATstringlengthbitsize}{\addtoindex{DW\_AT\_string\_length\_bit\_size}}
+\newcommand{\DWATstringlengthbytesize}{\addtoindex{DW\_AT\_string\_length\_byte\_size}}
+\newcommand{\DWATtype}{\addtoindex{DW\_AT\_type}}
+\newcommand{\DWATupperbound}{\addtoindex{DW\_AT\_upper\_bound}}
+%
+% DW_FORM
+%
+\newcommand{\DWFORMrefsigeight}{\addtoindex{DW\_FORM\_ref\_sig8}}
+\newcommand{\DWFORMstrp}[1][]{\addtoindex{DW\_FORM\_strp}}
+%
+% DW_LANG
+%
+\newcommand{\DWLANGGo}{\addtoindex{DW\_LANG\_Go}}
+\newcommand{\DWLANGHaskell}{\addtoindex{DW\_LANG\_Haskell}}
+\newcommand{\DWLANGModulaThree}{\addtoindex{DW\_LANG\_Modula3}}
+\newcommand{\DWLANGOpenCL}{\addtoindex{DW\_LANG\_OpenCL}}
+%
+% DW_OP
+%
+\newcommand{\DWOPcallref}[1][]{\addtoindex{DW\_OP\_call\_ref}}
+\newcommand{\DWOPconst}{\addtoindex{DW\_OP\_const}}
+\newcommand{\DWOPformtlsaddress}{\addtoindex{DW\_OP\_form\_tls\_address}}
+%
+% DW_ORD
+%
+\newcommand{\DWORDcolmajor}{\addtoindex{DW\_ORD\_col\_major}}
+\newcommand{\DWORDrowmajor}{\addtoindex{DW\_ORD\_row\_major}}
+%
+% DW_TAG
+%
+\newcommand{\DWTAGarraytype}{\addtoindex{DW\_TAG\_array\_type}}
+\newcommand{\DWTAGcoarraytype}{\addtoindex{DW\_TAG\_coarray\_type}}
+\newcommand{\DWTAGmember}{\addtoindex{DW\_TAG\_member}}
+\newcommand{\DWTAGsubrangetype}{\addtoindex{DW\_TAG\_subrange\_type}}
+\newcommand{\DWTAGvariable}{\addtoindex{DW\_TAG\_variable}}
+%
+% .debug, et al
+%
 \newcommand{\dotdebugabbrev}[1][]{\addtoindex{\texttt{.debug\_abbrev}}}
 \newcommand{\dotdebugaranges}[1][]{\addtoindex{\texttt{.debug\_aranges}}}
 \newcommand{\dotdebugframe}[1][]{\addtoindex{\texttt{.debug\_frame}}}
 \newcommand{\dotdebugranges}[1][]{\addtoindex{\texttt{.debug\_ranges}}}
 \newcommand{\dotdebugstr}[1][]{\addtoindex{\texttt{.debug\_str}}}
 \newcommand{\dotdebugtypes}[1][]{\addtoindex{\texttt{.debug\_types}}}
-
+%
 \newcommand{\dotdata}[1][]{\addtoindex{\texttt{.data}}}
 \newcommand{\dottext}[1][]{\addtoindex{\texttt{.text}}}
+%
+% Current section version numbers
+%
+\newcommand{\versiondotdebugabbrev}  {5}
+\newcommand{\versiondotdebugaranges} {2}
+\newcommand{\versiondotdebugframe}   {4}
+\newcommand{\versiondotdebuginfo}    {5}
+\newcommand{\versiondotdebugline}    {4}
+\newcommand{\versiondotdebugloc}     {5}
+\newcommand{\versiondotdebugmacinfo} {5}
+\newcommand{\versiondotdebugpubnames}{2}
+\newcommand{\versiondotdebugpubtypes}{2}
+\newcommand{\versiondotdebugranges}  {5}
+\newcommand{\versiondotdebugstr}     {5}
+\newcommand{\versiondotdebugtypes}   {\versiondotdebuginfo}
+
index c8d1d9a..01adf51 100644 (file)
@@ -215,11 +215,11 @@ The following examples illustrate how to represent some of
 the more complicated forms of array and record aggregates
 using DWARF.
 
-\subsection{Fortran 90 Example}
-\label{app:fortran90example}
-Consider the \addtoindex{Fortran 90} source fragment in 
+\subsection{Fortran Array Example}
+\label{app:fortranarrayexample}
+Consider the \addtoindex{Fortran array}\addtoindexx{Fortran 90} source fragment in 
 \addtoindexx{array type entry!examples}
-Figure \referfol{fig:fortran90examplesourcefragment}.
+Figure \referfol{fig:fortranarrayexamplesourcefragment}.
 
 \begin{figure}[here]
 \begin{lstlisting}
@@ -233,11 +233,11 @@ do i = 1, 20
 allocate(arrayvar(i)%ap(i+10))
 end do
 \end{lstlisting}
-\caption{Fortran 90 example: source fragment} \label{fig:fortran90examplesourcefragment}
+\caption{Fortran array example: source fragment} \label{fig:fortranarrayexamplesourcefragment}
 \end{figure}
 
 For allocatable and pointer arrays, it is essentially required
-by the \addtoindex{Fortran 90} semantics that each array consist of 
+by the \addtoindex{Fortran array} semantics that each array consist of 
 \addtoindexx{descriptor!array}
 two
 \addtoindexx{array!descriptor for}
@@ -253,14 +253,12 @@ the \doublequote{variable} is allocated or associated).
 
 For concreteness, suppose that a descriptor looks something
 like the C structure in 
-Figure \refersec{fig:fortran90exampledescriptorrepresentation}.
+Figure \refersec{fig:fortranarrayexampledescriptorrepresentation}.
 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 
-\addtoindexx{Fortran 90}
-debugger.
+input to the debugger.
 
 \begin{figure}[here]
 \begin{lstlisting}
@@ -277,8 +275,8 @@ struct desc {
     } dims[63];
 };
 \end{lstlisting}
-\caption{Fortran 90 example: descriptor representation}
-\label{fig:fortran90exampledescriptorrepresentation}
+\caption{Fortran array example: descriptor representation}
+\label{fig:fortranarrayexampledescriptorrepresentation}
 \end{figure}
 
 
@@ -317,7 +315,7 @@ a descriptor does have a
 \livelink{chap:DWATdatalocation}{DW\_AT\_data\_location} attribute. In
 that case the object doubles as its own descriptor.)
 
-The \addtoindex{Fortran 90} derived type \texttt{array\_ptr} can now be redescribed
+The \addtoindex{Fortran} derived type \texttt{array\_ptr} can now be redescribed
 in C\dash like terms that expose some of the representation as in
 
 \begin{lstlisting}[numbers=none]
@@ -345,7 +343,7 @@ within an entity of the given type
 
 The DWARF description is shown 
 \addtoindexx{Fortran 90}
-in Figure \refersec{fig:fortran90exampledwarfdescription}.
+in Figure \refersec{fig:fortranarrayexampledwarfdescription}.
 
 \begin{figure}[h]
 \figurepart{1}{2}
@@ -394,8 +392,8 @@ in Figure \refersec{fig:fortran90exampledwarfdescription}.
             !  dimension (other than to express the larger offsets involved).
 \end{alltt}
 \end{dwflisting}
-\caption{Fortran 90 example: DWARF description}
-\label{fig:fortran90exampledwarfdescription}
+\caption{Fortran array example: DWARF description}
+\label{fig:fortranarrayexampledwarfdescription}
 \end{figure}
 
 \begin{figure}
@@ -450,12 +448,12 @@ in Figure \refersec{fig:fortran90exampledwarfdescription}.
 \end{dwflisting}
 \begin{center}
 
-Figure~\ref{fig:fortran90exampledwarfdescription} Fortran 90 example: DWARF description \textit{(concluded)}
+Figure~\ref{fig:fortranarrayexampledwarfdescription} Fortran array example: DWARF description \textit{(concluded)}
 \end{center}
 \end{figure}
 
 Suppose 
-\addtoindexx{Fortran 90 example}
+\addtoindexx{Fortran array example}
 the program is stopped immediately following completion
 of the do loop. Suppose further that the user enters the
 following debug command:
@@ -555,16 +553,136 @@ could be completely different descriptor arrangements and the
 mechanics would still be the same---only the stack machines
 would be different.
 
+%\needlines{8}
+\subsection{Fortran Coarray Examples}
+\label{app:Fortrancoarrayexamples}
+
+\subsubsection{Fortran Scalar Coarray Example}
+The \addtoindex{Fortran} scalar coarray example
+\addtoindexx{coarray!example}\addtoindexx{scalar coarray|see{coarray}}
+in Figure \refersec{fig:Fortranscalarcoarraysourcefragment} can be described as 
+illustrated in Figure \refersec{fig:FortranscalarcoarrayDWARFdescription}.
+
+\begin{figure}[!h]
+\begin{lstlisting}
+        INTEGER X[*]
+\end{lstlisting}
+\caption{Fortran scalar coarray: source fragment}
+\label{fig:Fortranscalarcoarraysourcefragment}
+\end{figure}
+
+\begin{figure}[!h]
+\begin{dwflisting}
+\begin{alltt}
+10\$:  \DWTAGcoarraytype
+        \DWATtype(reference to INTEGER)
+        \DWTAGsubrangetype                ! Note omitted upper bound                   
+            \DWATlowerbound(constant 1)
+
+11\$:  \DWTAGvariable
+        \DWATname("X")
+        \DWATtype(reference to coarray type at 10\$)
+\end{alltt}
+\end{dwflisting}
+\caption{Fortran scalar coarray: DWARF description}
+\label{fig:FortranscalarcoarrayDWARFdescription}
+\end{figure}
+
+\subsubsection{Fortran Array Coarray Example}
+The \addtoindex{Fortran} (simple) array coarray example
+\addtoindexx{coarray!example}\addtoindexx{array coarray|see{coarray}}
+in Figure \refersec{fig:Fortranarraycoarraysourcefragment} can be described as 
+illustrated in Figure \refersec{fig:FortranarraycoarrayDWARFdescription}.
+
+\begin{figure}[here]
+\begin{lstlisting}
+        INTEGER X(10)[*]
+\end{lstlisting}
+\caption{Fortran array coarray: source fragment}
+\label{fig:Fortranarraycoarraysourcefragment}
+\end{figure}
+
+\begin{figure}[here]
+\begin{dwflisting}
+\begin{alltt}
+10\$: \DWTAGarraytype
+        \DWATordering(\DWORDcolmajor)
+        \DWATtype(reference to INTEGER)
+11\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant 1)
+            \DWATupperbound(constant 10)
+
+12\$: \DWTAGcoarraytype
+        \DWATtype(reference to array type at 10\$)
+13\$:    \DWTAGsubrangetype                ! Note omitted upper bound
+            \DWATlowerbound(constant 1)
+
+14$: \DWTAGvariable
+        \DWATname("X")
+        \DWATtype(reference to coarray type at 12\$)
+\end{alltt}
+\end{dwflisting}
+\caption{Fortran array coarray: DWARF description}
+\label{fig:FortranarraycoarrayDWARFdescription}
+\end{figure}
 
+\subsubsection{Fortran Multidimensional Coarray Example}
+The \addtoindex{Fortran} multidimensional coarray of a multidimensional array example
+\addtoindexx{coarray!example}\addtoindexx{array coarray|see{coarray}}
+in Figure \refersec{fig:Fortranmultidimensionalcoarraysourcefragment} can be described as 
+illustrated in Figure \refersec{fig:FortranmultidimensionalcoarrayDWARFdescription}.
+
+\begin{figure}[here]
+\begin{lstlisting}
+        INTEGER X(10,11,12)[2,3,*]
+\end{lstlisting}
+\caption{Fortran multidimentional coarray: source fragment}
+\label{fig:Fortranmultidimensionalcoarraysourcefragment}
+\end{figure}
 
+\begin{figure}[here]
+\begin{dwflisting}
+\begin{alltt}
+10\$: \DWTAGarraytype
+        \DWATordering(\DWORDcolmajor)
+        \DWATtype(reference to INTEGER)
+11\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant 1)
+            \DWATupperbound(constant 10)
+12\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant  1)
+            \DWATupperbound(constant 11)
+13\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant  1)
+            \DWATupperbound(constant 12)
+
+14\$: \DWTAGcoarraytype
+        \DWATtype(reference to array_type at 10\$)
+15\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant 1)
+            \DWATupperbound(constant 2)
+16\$:    \DWTAGsubrangetype
+            \DWATlowerbound(constant 1)
+            \DWATupperbound(constant 3)
+17\$:    \DWTAGsubrangetype                ! Note omitted upper bound
+            \DWATlowerbound(constant 1)
+
+18\$: \DWTAGvariable
+        \DWATname("X")
+        \DWATtype(reference to coarray type at 14\$)
+\end{alltt}
+\end{dwflisting}
+\caption{Fortran multidimensional coarray: DWARF description}
+\label{fig:FortranmultidimensionalcoarrayDWARFdescription}
+\end{figure}
+
+\clearpage
 \subsection{Ada Example}
 \label{app:adaexample}
-
 Figure \refersec{fig:adaexamplesourcefragment}
 illustrates two kinds of \addtoindex{Ada} 
 parameterized array, one embedded in a record.
 
-
 \begin{figure}[here]
 \begin{lstlisting}
 M : INTEGER := <exp>;
@@ -577,7 +695,7 @@ end record;
 
 OBJ2B : REC2;
 \end{lstlisting}
-\caption{Ada 90 example: source fragment}
+\caption{Ada example: source fragment}
 \label{fig:adaexamplesourcefragment}
 \end{figure}
 
@@ -681,7 +799,7 @@ of this example and therefore is not shown.
         \livelink{chap:DWATlocation}{DW\_AT\_location}(...as appropriate...)
 \end{alltt}
 \end{dwflisting}
-\caption{Ada 90 example: DWARF description}
+\caption{Ada example: DWARF description}
 \label{fig:adaexampledwarfdescription}
 \end{figure}
 
@@ -727,8 +845,6 @@ Section \refersec{chap:datamemberentries}.
 \begin{figure}[p]
 \figurepart{1}{2}
 \begin{dwflisting}
-% 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}
 10\$: \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
         \livelink{chap:DWATname}{DW\_AT\_name}("BOOLEAN")
index 2c8b34e..e9f8905 100644 (file)
@@ -22,7 +22,7 @@ The set of tag names
 \addtoindexx{tag names|see{debugging information entry}}
 is listed in Table \refersec{tab:tagnames}. 
 The debugging information entries they identify are
-described in Sections 3, 4 and 5.
+described in Chapters 3, 4 and 5.
 
 % These each need to link to definition page: FIXME
 
@@ -37,6 +37,7 @@ described in Sections 3, 4 and 5.
 \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type},
 \livelink{chap:DWTAGcatchblock}{DW\_TAG\_catch\_block},
 \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type},
+\livelink{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type},
 \livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block},
 \livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion},
 \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit},
@@ -357,6 +358,12 @@ actually declared in the source}{objects or types that are not actually declared
 \livetarg{chap:DWATstringlength}{DW\_AT\_string\_length}
 &\livelinki{chap:DWATstringlengthstringlengthofstringtype}{String length of string type}{string length of string type}
  \\
+\livetarg{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size}
+&\livelinki{chap:DWATstringlengthstringlengthofstringtype}{Size of string length of string type}{string length of string type!size of}
+ \\
+\livetarg{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size}
+&\livelinki{chap:DWATstringlengthstringlengthofstringtype}{Size of string length of string type}{string length of string type!size of}
+ \\
 \livetarg{chap:DWATthreadsscaled}{DW\_AT\_threads\_scaled}
 &\livelink{chap:DWATthreadsscaledupcarrayboundthreadsscalfactor}{UPC!array bound THREADS scale factor}\\
 \livetarg{chap:DWATtrampoline}{DW\_AT\_trampoline}
@@ -817,33 +824,38 @@ Appendix \refersec{app:aggregateexamples}.}
 \needlines{4}
 \itembfnl{\livetarg{chap:DWOPformtlsaddress}{DW\_OP\_form\_tls\_address}}
 The \livetarg{chap:DWOPformtlsaddress}{DW\_OP\_form\_tls\_address} 
-operation pops a value from the
-stack, translates it into an address in the current thread's
-\addtoindexx{thread-local storage}
-thread\dash local storage \nolink{block}, and pushes the address. If the
-DWARF expression containing 
-the \addtoindex{DW\_OP\_form\_tls\_address}
-operation belongs to the main executable's DWARF info, the
-operation uses the main executable's thread\dash local storage
-\nolink{block}; if the expression belongs to a shared library's
-DWARF info, then it uses that shared library's 
+operation pops a value from the stack, translates this
+value into an address in the 
 \addtoindexx{thread-local storage}
-thread\dash local storage \nolink{block}.
-
+thread\dash local storage for a thread, and pushes the address 
+onto the stack. 
+The meaning of the value on the top of the stack prior to this 
+operation is defined by the run-time environment.  If the run-time 
+environment supports multiple thread\dash local storage 
+\nolink{blocks} for a single thread, then the \nolink{block} 
+corresponding to the executable or shared 
+library containing this DWARF expression is used.
+   
 \textit{Some implementations of 
 \addtoindex{C} and \addtoindex{C++} support a
-\_\_thread storage class. Variables with this storage class
+thread\dash local storage class. Variables with this storage class
 have distinct values and addresses in distinct threads, much
 as automatic variables have distinct values and addresses in
 each function invocation. Typically, there is a single \nolink{block}
-of storage containing all \_\_thread variables declared in
+of storage containing all thread\dash local variables declared in
 the main executable, and a separate \nolink{block} for the variables
-declared in each shared library. Computing the address of
+declared in each shared library. 
+Each thread\dash local variable can then be accessed in its block using an
+identifier. This identifier is typically an offset into the block and pushed
+onto the DWARF stack by one of the \DWOPconst{} operations prior to the
+\DWOPformtlsaddress{} operation. 
+Computing the address of
 the appropriate \nolink{block} can be complex (in some cases, the
 compiler emits a function call to do it), and difficult
 to describe using ordinary DWARF location descriptions.
-\addtoindex{DW\_OP\_form\_tls\_address} leaves the computation to the
-consumer.}
+Instead of    forcing complex thread-local storage calculations into 
+the DWARF expressions, the \DWOPformtlsaddress{} allows the consumer 
+to perform the computation based on the run-time environment.}
 
 \itembfnl{\livetarg{chap:DWOPcallframecfa}{DW\_OP\_call\_frame\_cfa}}
 The \livetarg{chap:DWOPcallframecfa}{DW\_OP\_call\_frame\_cfa} 
@@ -871,9 +883,10 @@ as otherwise specified, the arithmetic operations perfom
 addressing arithmetic, that is, unsigned arithmetic that is
 performed modulo one plus the largest representable address
 (for example, 0x100000000 when the 
-\addtoindex{size of an address} is 32
-bits). 
+\addtoindex{size of an address} is 32 bits). 
 Such operations do not cause an exception on overflow.
+
+\needlines{4}
 \begin{enumerate}[1. ]
 \itembfnl{\livetarg{chap:DWOPabs}{DW\_OP\_abs}}
 The \livetarg{chap:DWOPabs}{DW\_OP\_abs} operation pops the top stack entry, interprets
@@ -1460,9 +1473,12 @@ or an
 \addtoindexx{end of list entry!in location list}
 end of list entry.
 
+A location list entry has two forms:
+a normal location list entry and a default location list entry.
+
 A 
-\addtoindexx{location list!entry}
-location list entry consists of:
+\addtoindexx{location list!normal entry}
+normal location list entry consists of:
 \begin{enumerate}[1. ]
 \item A beginning address offset. 
 This address offset has the \addtoindex{size of an address} and is
@@ -1485,12 +1501,16 @@ and ending addresses are equal has no effect
 because the size of the range covered by such
 an entry is zero.}
 
+\item A 2-byte length describing the length of the location 
+description that follows.
+
 \item A \addtoindex{single location description} 
 describing the location of the object over the range specified by
 the beginning and end addresses.
 \end{enumerate}
 
-The applicable base address of a 
+\needlines{5}
+The applicable base address of a normal
 location list entry is
 \addtoindexx{location list!base address selection entry}
 determined by the closest preceding base address selection
@@ -1503,16 +1523,43 @@ Section \refersec{chap:normalandpartialcompilationunitentries}).
 the machine code is contained in a single contiguous section,
 no base address selection entry is needed.}
 
-Address ranges may overlap. When they do, they describe a
+Address ranges defined by normal location list entries
+may overlap. When they do, they describe a
 situation in which an object exists simultaneously in more than
 one place. If all of the address ranges in a given location
 list do not collectively cover the entire range over which the
 object in question is defined, it is assumed that the object is
 not available for the portion of the range that is not covered.
 
+A default location list entry consists of:
+\addtoindexx{location list!default entry}
+\begin{enumerate}[1. ]
+\item The value 0.
+\item The value of the largest representable address offset (for
+      example, \wffffffff when the size of an address is 32 bits).
+\item A simple location description describing the location of the
+      object when there is no prior normal location list entry
+      that applies in the same location list.
+\end{enumerate}
+
+A default location list entry is independent of any applicable
+base address (except to the extent to which base addresses
+affect prior normal location list entries).
+
+A default location list entry must be the last location list
+entry of a location list except for the terminating end of list
+entry.
+
+A default location list entry describes an unlimited number
+(zero, one or more) of address ranges, none of which overlap
+any of the address ranges defined earlier in the same location
+list. Further, all such address ranges have the same simple
+location.
+
 \needlines{5}
 A base 
 \addtoindexi{address}{address selection|see{base address selection}}
+\addtoindexx{location list!base address selection entry}
 selection 
 \addtoindexi{entry}{base address selection entry!in location list}
 consists of:
@@ -1525,12 +1572,12 @@ appropriate base address for use in interpreting the beginning
 and ending address offsets of subsequent entries of the location list.
 \end{enumerate}
 
-
 \textit{A base address selection entry 
 affects only the list in which it is contained.}
 
+\needlines{5}
 The end of any given location list is marked by an 
-\addtoindexx{location list!enf of list entry}
+\addtoindexx{location list!end of list entry}
 end of list entry, which consists of a 0 for the beginning address
 offset and a 0 for the ending address offset. A location list
 containing only an 
@@ -1541,6 +1588,18 @@ exists in the source code but not in the executable program.
 Neither a base address selection entry nor an end of list
 entry includes a location description.
 
+\textit{When a DWARF consumer is parsing and decoding a location
+list, it must recognize the beginning and ending address
+offsets of (0, 0) for an end of list entry and (0, \doublequote{-1}) for
+a default location list entry prior to applying any base
+address. Any other pair of offsets beginning with 0 is a
+valid normal location list entry. Next, it must recognize the
+beginning address offset of \doublequote{-1} for a base address selection
+entry prior to applying any base address. The current base
+address is not applied to the subsequent value (although there
+may be an underlying object language relocation that affects
+that value).}
+
 \textit{A base address selection entry and an end of list
 entry for a location list are identical to a base address
 selection entry and end of list entry, respectively, for a
@@ -2182,8 +2241,7 @@ attributes is determined based on the class as follows:
 the attribute.
 
 \item For a \livelink{chap:classreference}{reference}, the
-value is a \livelink{chap:classreference}{reference} to another
-entity which specifies the value of the attribute.
+value is a DWARF procedure that computes the value of the attribute.
 
 \item For an \livelink{chap:classexprloc}{exprloc}, the value is interpreted as a 
 DWARF expression; 
@@ -2209,7 +2267,7 @@ rules of the applicable programming language.
 \livelink{chap:DWATupperbound}{DW\_AT\_upper\_bound} (and
 possibly others).}
 
-
+\needlines{6}
 \section{Entity Descriptions}
 \textit{Some debugging information entries may describe entities
 in the program that are artificial, or which otherwise are
@@ -2247,13 +2305,18 @@ Many debugging information entries allow either a
 \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute or a 
 \livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} attribute,
 whose \livelink{chap:classconstant}{integer constant} value 
-(see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
+(see Section \ref{chap:staticanddynamicvaluesofattributes}) 
 specifies an
-amount of storage. The value of the \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute
-is interpreted in bytes and the value of the \livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}
-attribute is interpreted in bits.  
-
-Similarly, the \livelink{chap:classconstant}{integer constant}
+amount of storage. The value of the 
+\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute
+is interpreted in bytes and the value of the 
+\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}
+attribute is interpreted in bits. The
+\livelink{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size} and 
+\livelink{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size} 
+attributes are similar.
+
+In addition, the \livelink{chap:classconstant}{integer constant}
 value of a \livelink{chap:DWATbytestride}{DW\_AT\_byte\_stride} attribute is interpreted
 in bytes and the \livelink{chap:classconstant}{integer constant} value of a 
 \livelink{chap:DWATbitstride}{DW\_AT\_bit\_stride}
index 0d5ca4e..89c0098 100644 (file)
@@ -131,14 +131,30 @@ to read and process files generated according to a later
 version of this standard or which contain vendor extensions,
 albeit possibly in a degraded manner.
 
+\section{Changes from Version 4 to Version 5}
+\addtoindexx{DWARF Version 5}
+The following is a list of the major changes made to the DWARF Debugging Information
+Format since Version 4 was published. The list is not meant to be exhaustive.
+\begin{itemize}
+\item TBD...
+\end{itemize}
+
+DWARF Version 5 is compatible with DWARF Version 4 except as follows:
+\begin{itemize}
+\item A location list entry (see Section \refersec{chap:locationlists}) with 
+the address range (0, \doublequote{-1}) is defined as the new default location 
+list entry.
+\item In a string type (see Section \refersec{chap:stringtypeentries}, a \DWATbytesize{}
+attribute is defined to always describe the size of the string type. (Previously
+it described the size of the optional string length data field if the \DWATstringlength{}
+attribute was present.)
+\end{itemize}
 
 \section{Changes from Version 3 to Version 4}
+\addtoindexx{DWARF Version 4}
 The following is a list of the major changes made to the DWARF Debugging Information
 Format since Version 3 was published. The list is not meant to be exhaustive.
-
-
 \begin{itemize}
-
 \item Reformulate 
 Section 2.6 (Location Descriptions) 
 to better distinguish DWARF location descriptions, which
@@ -177,52 +193,42 @@ and interpretation of other data in the section.
 \end{itemize}
 
 \section{Changes from Version 2 to Version 3}
+\addtoindexx{DWARF Version 3}
 The following is a list of the major differences between
 Version 2 and Version 3 of the DWARF Debugging Information
 Format. The list is not meant to be exhaustive.
-
 \begin{itemize}
 \item
 Make provision for DWARF information files that are larger
 than 4 GBytes.
-
 \item
 Allow attributes to refer to debugging information entries
 in other shared libraries.
-
 \item
 Add support for \addtoindex{Fortran 90} modules as well as allocatable
 array and pointer types.
-
 \item
 Add additional base types for \addtoindex{C} (as revised for 1999).
-
 \item
 Add support for \addtoindex{Java} and \addtoindex{COBOL}.
-
 \item
 Add namespace support for \addtoindex{C++}.
-
 \item
 Add an optional section for global type names (similar to
 the global section for objects and functions).
-
 \item
 Adopt \addtoindex{UTF-8} as the preferred representation of program name strings.
 \item
 Add improved support for optimized code (discontiguous
 scopes, end of prologue determination, multiple section
 code generation).  
-
 \item Improve the ability to eliminate
 duplicate DWARF information during linking.  
-
 \end{itemize}
 
 \addtoindex{DWARF Version 3}
 is compatible with 
 \addtoindex{DWARF Version 2} except as follows:
-
 \begin{itemize}
 \item
 Certain very large values of the initial length fields that
@@ -230,7 +236,6 @@ begin DWARF sections as well as certain structures are reserved
 to act as escape codes for future extension; one such extension
 is defined to increase the possible size of DWARF descriptions
 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
-
 \item
 References that use the attribute form 
 \livelink{chap:DWFORMrefaddr}{DW\_FORM\_ref\_addr}
@@ -241,16 +246,13 @@ specifies that such references have the same size as an
 address on the target system (see Sections 
 \refersec{datarep:32bitand64bitdwarfformats} and 
 \refersec{datarep:attributeencodings}).
-
 \item
 The return\_address\_register field in a Common Information
 Entry record for call frame information is changed to unsigned
 LEB representation (see Section 
 \refersec{chap:structureofcallframeinformation}).
-
 \end{itemize}
 
-
 \section{Changes from Version 1 to Version 2}
 \addtoindex{DWARF Version 2} 
 describes the second generation of debugging
index 257492c..0a90f8c 100644 (file)
@@ -175,8 +175,7 @@ independent of the DWARF version number.
 \item debug\_info\_offset (section offset) \\
 The offset from the
 \addtoindexx{section offset!in .debug\_pubnames header}
-beginning of the \dotdebuginfo{} or 
-\dotdebugtypes{} section of the
+beginning of the \dotdebuginfo{} section of the
 compilation unit header referenced by the set.
 
 \item address\_size (\addtoindex{ubyte}) \\
@@ -568,10 +567,11 @@ number assigned to the first special opcode.
 \textit{Opcode base is typically one greater than the highest-numbered
 \addttindexx{opcode\_base}
 standard opcode defined for the specified version of the line
-number information (12 in 
-\addtoindex{DWARF Version 3} and 
+number information (12 in DWARF Versions 3, 4 and 5,
+\addtoindexx{DWARF Version 3}
 \addtoindexx{DWARF Version 4}
-Version 4, 9 in
+\addtoindexx{DWARF Version 5}
+and 9 in
 \addtoindexx{DWARF Version 2}
 Version 2).  
 If opcode\_base is less than the typical value,
@@ -1652,10 +1652,8 @@ operators cannot be used in such operands:
 \begin{itemize}
 \item \livelink{chap:DWOPcall2}{DW\_OP\_call2}, \livelink{chap:DWOPcall4}{DW\_OP\_call4} 
 and \livelink{chap:DWOPcallref}{DW\_OP\_call\_ref} operators
-are not meaningful in an operand of these instructions
-because there is no mapping from call frame information to
-any corresponding debugging compilation unit information,
-thus there is no way to interpret the call offset.
+are allowed the call frame information must not depend on other
+debug sections.
 
 \needlines{5}
 \item \livelink{chap:DWOPpushobjectaddress}{DW\_OP\_push\_object\_address} is not meaningful in an operand
index 56085e9..b7721fe 100644 (file)
@@ -151,10 +151,14 @@ Language name & Meaning\\ \hline
 \livetarg{chap:DWLANGFortran77}{DW\_LANG\_Fortran77} &ISO \addtoindex{FORTRAN} 77\\
 \livetarg{chap:DWLANGFortran90}{DW\_LANG\_Fortran90} & ISO \addtoindex{Fortran 90}\\
 \livetarg{chap:DWLANGFortran95}{DW\_LANG\_Fortran95} & ISO \addtoindex{Fortran 95}\\
+\livetarg{chap:DWLANGGo}{DW\_LANG\_Go} \dag & \addtoindex{Go}\\
+\livetarg{chap:DWLANGHaskell}{DW\_LANG\_Haskell} \dag & \addtoindex{Haskell}\\
 \livetarg{chap:DWLANGJava}{DW\_LANG\_Java} & \addtoindex{Java}\\
 \livetarg{chap:DWLANGModula2}{DW\_LANG\_Modula2} & ISO Modula\dash 2:1996 \addtoindexx{Modula-2}\\
+\livetarg{chap:DWLANGModula3}{DW\_LANG\_Modula3} & \addtoindex{Modula-3}\\
 \livetarg{chap:DWLANGObjC}{DW\_LANG\_ObjC} & \addtoindex{Objective C}\\
 \livetarg{chap:DWLANGObjCplusplus}{DW\_LANG\_ObjC\_plus\_plus} & \addtoindex{Objective C++}\\
+\livetarg{chap:DWLANGOpenCL}{DW\_LANG\_OpenCL} \dag & \addtoindex{OpenCL}\\
 \livetarg{chap:DWLANGPascal83}{DW\_LANG\_Pascal83} & ISO \addtoindex{Pascal}:1983\\
 \livetarg{chap:DWLANGPLI}{DW\_LANG\_PLI} \dag & ANSI \addtoindex{PL/I}:1976\\
 \livetarg{chap:DWLANGPython}{DW\_LANG\_Python} \dag & \addtoindex{Python}\\
@@ -196,6 +200,7 @@ the \dotdebugmacinfo{} section of the first byte of the macro
 information for this compilation unit 
 (see Section \refersec{chap:macroinformation}).
 
+\needlines{6}
 \item  A 
 \livelink{chap:DWATcompdir}{DW\_AT\_comp\_dir} 
 attribute 
@@ -259,6 +264,7 @@ reflect the names as they appear in the source program. The
 debugger should convert all names to lower case when doing
 lookups.
 
+\needlines{4}
 \livetarg{chap:DWIDcaseinsensitive}{DW\_ID\_case\_insensitive} means that the values of the name
 attributes reflect the names as they appear in the source
 program but that a case insensitive lookup should be used to
index 1c6dae3..d4496c4 100644 (file)
@@ -30,9 +30,9 @@ and \dotdebugtypes{} section version number.
 \clearpage
 \begin{centering}
 \setlength{\extrarowheight}{0.1cm}
-\begin{longtable}{lccc}
+\begin{longtable}{lcccc}
   \caption{Section version numbers} \label{tab:sectionversionnumbers} \\
-  \hline \bfseries Section Name &\bfseries V2 &\bfseries V3 &\bfseries V4 \\ \hline
+  \hline \bfseries Section Name &\bfseries V2 &\bfseries V3 &\bfseries V4 &\bfseries V5 \\ \hline
 \endfirsthead
    \bfseries Section Name &\bfseries V2 &\bfseries V3 &\bfseries V4 \\ \hline
 \endhead
@@ -40,27 +40,29 @@ and \dotdebugtypes{} section version number.
 \endfoot
   \hline
 \endlastfoot
-\dotdebugabbrev{}& -  & -  & -  \\
-\dotdebugaranges{}&2&2&2 \\
-\dotdebugframe{}&1&3&4 \\
-\dotdebuginfo{}&2&3&4 \\
-\dotdebugline{}&2&3&4   \\
-\dotdebugloc{}& -  & -  & -  \\
-\dotdebugmacinfo{}& -  & - & -   \\
-\dotdebugpubnames{}&2&2&2    \\
-\dotdebugpubtypes{}&x&2&2   \\
-\dotdebugranges{}&x& - & -  \\
-\dotdebugstr{}& -  & -  & -  \\
-\dotdebugtypes{}&x&x&4   \\
+\dotdebugabbrev{}   & - & - & - & - \\
+\dotdebugaranges{}  & 2 & 2 & 2 & 2 \\
+\dotdebugframe{}    & 1 & 3 & 4 & 4 \\
+\dotdebuginfo{}     & 2 & 3 & 4 & 5 \\
+\dotdebugline{}     & 2 & 3 & 4 & 4 \\
+\dotdebugloc{}      & - & - & - & - \\
+\dotdebugmacinfo{}  & - & - & - & - \\
+\dotdebugpubnames{} & 2 & 2 & 2 & 2 \\
+\dotdebugpubtypes{} & x & 2 & 2 & 2 \\
+\dotdebugranges{}   & x & - & - & - \\
+\dotdebugstr{}      & - & - & - & - \\
+\dotdebugtypes{}    & x & x & 4 & 5 \\
 \end{longtable}
 \end{centering}
 
 Notes:
 
 \begin{itemize}
-\item  \doublequote{V2} means \addtoindex{DWARF Version 2}, published July 1993.
-\item  \doublequote{V3} means \addtoindex{DWARF Version 3}, published December 2005.
-\item  \doublequote{V4} means \addtoindex{DWARF Version 4}, published June 2010.
+\item  \doublequote{V2} means \addtoindex{DWARF Version 2}, published July 27, 1993.
+\item  \doublequote{V3} means \addtoindex{DWARF Version 3}, published December 20, 2005.
+\item  \doublequote{V4} means \addtoindex{DWARF Version 4}, published June 10, 2010.
+\item  \doublequote{V5} means \addtoindex{DWARF Version 5}, published 
+                       \ifthenelse{\boolean{isdraft}}{\textit{<to be determined>}}{\docdate}.
 \item  \doublequote{-} means that a version number is not applicable
 (the section's header does not include a version).
 
index 4bd6c29..407d151 100644 (file)
@@ -105,7 +105,7 @@ is
 new 
 \addtoindexx{data bit offset attribute}
 in 
-\addtoindex{DWARF Version 4} and
+\addtoindex{DWARF Version 4}, unchanged in \addtoindex{DWARF Version 5}, and
 is also used for bit field members 
 (see Section \refersec{chap:datamemberentries}). 
 It
@@ -114,67 +114,11 @@ replaces the attribute
 \livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} 
 when used for base
 \addtoindexx{bit offset attribute (V3)}
-types as defined in DWARF V3 and earlier. The earlier attribute
-is defined in a manner suitable for bit field members on
-big\dash endian architectures but which is wasteful for use on
-little\dash endian architectures.}
-
-\textit{The attribute \livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} is 
-deprecated in 
-\addtoindex{DWARF Version 4}
-for use in base types, but implementations may continue to
-support its use for compatibility.}
-
-\textit{The 
-\addtoindex{DWARF Version 3}
-definition of these attributes is as follows.}
-\begin{myindentpara}{1cm}
-\textit{A base type entry has a \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}
-attribute, whose value
-(see Section \refersec{chap:staticanddynamicvaluesofattributes})
-is the size in bytes of the storage unit
-used to represent an object of the given type.}
-
-\textit{If the value of an object of the given type does not fully
-occupy the storage unit described by the byte size attribute,
-the base type entry may have a 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} attribute 
-\addtoindexx{bit size attribute (V3)}
-and a
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} attribute, both of whose values 
-(see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
-are integers. The bit size attribute describes the actual
-size in bits used to represent a value of the given type.
-The bit offset attribute describes the offset in bits of the
-high order bit of a value of the given type from the high
-order bit of the storage unit used to contain that value.}
-\end{myindentpara}
-
-\needlines{5}
-\textit{In comparing 
-DWARF Versions 3 
-\addtoindexx{DWARF Version 3}
-and 
-\addtoindexx{DWARF Version 4} and 4, note that DWARF V4
-defines the following combinations of attributes:}
-
-\begin{itemize}
-\item \textit{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}}
-\item \textit{\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}}
-\item \textit{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size},
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} 
-and optionally \livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset}}
-\end{itemize}
-\textit{DWARF V3 defines the following combinations:}
-\addtoindexx{DWARF Version 3}
-% FIXME: the figure below interferes with the following
-% bullet list, which looks horrible as a result.
-\begin{itemize}
-\item \textit{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}}
-\item \textit{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}, 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} and 
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset}}
-\end{itemize}
+types as defined in DWARF V3 and earlier.
+\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset}
+is deprecated for use in base types in DWARF Version 4 and later.
+See Section 5.1 in the DWARF Version 4
+specification for a discussion of compatibility considerations.}
 
 \begin{table}[!here]
 \caption{Encoding attribute values}
@@ -243,6 +187,7 @@ base types are used in combination with
 \livelink{chap:DWATdecimalscale}{DW\_AT\_decimal\_scale}
 attributes.
 
+\needlines{5}
 A \livelink{chap:DWATdecimalsign}{DW\_AT\_decimal\_sign} attribute 
 \addtoindexx{decimal sign attribute}
 is an \livelink{chap:classconstant}{integer constant} that
@@ -343,6 +288,7 @@ a
 attribute with the same interpretation as described for the
 \livelink{chap:DWATEpackeddecimal}{DW\_ATE\_packed\_decimal} and \livelink{chap:DWATEnumericstring}{DW\_ATE\_numeric\_string} base types.
 
+\needlines{4}
 For a data type with a decimal scale factor, the fixed binary
 type entry has a 
 \livelink{chap:DWATdecimalscale}{DW\_AT\_decimal\_scale} attribute 
@@ -561,7 +507,7 @@ character. This is encoded in DWARF as:}
 \end{alltt}
 \end{dwflisting}
 
-\needlines{3}
+\needlines{5}
 \textit{On the other hand}
 \begin{lstlisting}[numbers=none]                        
    volatile unsigned char * const restrict p;
@@ -723,6 +669,40 @@ which are described in
 Section \refersec{chap:dynamictypeproperties}. 
 For relevant examples, see also Appendix \refersec{app:fortran90example}.
 
+\section{Coarray Type Entries}
+\label{chap:coarraytypeentries}
+\addtoindexx{coarray}
+\textit{In Fortran, a \doublequote{coarray} is an array whose
+elements are located in different processes rather than in the
+memory of one process. The individual elements
+of a coarray can be scalars or arrays.
+Similar to arrays, coarrays have \doublequote{codimensions} that are 
+indexed using a \doublequote{coindex} or multiple \doublequote{coindices}.
+\addtoindexx{codimension|see{coarray}}
+\addtoindexx{coindex|see{coarray}}
+}
+
+A coarray type is represented by a debugging information entry 
+with the tag \livetarg{chap:DWTAGcoarraytype}{DW\_TAG\_coarray\_type}.
+If a name has been given to the 
+coarray type in the source, then the corresponding coarray type 
+entry has a \DWATname{} attribute whose value is a null-terminated 
+string containing the array type name as it appears in the source 
+program.
+
+A coarray entry has one or more \DWTAGsubrangetype{} child entries,
+one for each codimension. It also has a \DWATtype{} attribute 
+describing the type of each element of the coarray.
+
+\textit{In a coarray application, the run-time number of processes in the application
+is part of the coindex calculation.  It is represented in the Fortran source by
+a coindex which is declared with a \doublequote{*} as the upper bound.  To express this
+concept in DWARF, the \DWTAGsubrangetype{} child entry for that index has 
+only a lower bound and no upper bound.}
+
+\textit{How coarray elements are located and how coindices are 
+converted to process specifications is processor-dependent.}
+
 \section{Structure, Union, Class and Interface Type Entries}
 \label{chap:structureunionclassandinterfacetypeentries}
 
@@ -1308,7 +1288,7 @@ Appendix \refersec{app:pascalexample}.}
 
 \textit{Attribute \livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset} 
 is new in 
-\addtoindex{DWARF Version 4}
+\addtoindex{DWARF Version 4}, unchanged in \addtoindex{DWARF Version 5},
 and is also used for base types 
 (see Section 
 \refersec{chap:basetypeentries}). 
@@ -1317,108 +1297,12 @@ It replaces the
 attributes \livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} and
 \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} when used to
 identify the beginning of bit field data members as defined
-in DWARF V3 and earlier. The earlier attributes are defined
-in a manner suitable for bit field members on big-endian
-architectures but which is either awkward or incomplete for
-use on little-endian architectures.  
-(\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} also
-has other uses that are not affected by this change.)}
-
-\textit{The \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}, 
+in DWARF V3 and earlier. The \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}, 
 \livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} and 
 \livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset}
 attribute combination is deprecated for data members in DWARF
-Version 4, but implementations may continue to support this
-use for compatibility.}
-
-\textit{The 
-\addtoindex{DWARF Version 3} 
-definitions of these attributes are
-as follows.}
-\begin{myindentpara}{1cm}
-\textit{If the data member entry describes a bit field, then that
-entry has the following attributes:}
-
-\begin{itemize}
-\item \textit{A \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} 
-attribute whose value 
-(see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
-is the number of bytes that contain an instance of the
-bit field and any padding bits.}
-
-\textit{The byte size attribute may be omitted if the size of the
-object containing the bit field can be inferred from the type
-attribute of the data member containing the bit field.}
-
-\item \textit{A \livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} 
-attribute 
-\addtoindexx{bit offset attribute (V3)}
-whose value 
-(see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
-is the number of bits to the left of the leftmost
-(most significant) bit of the bit field value.}
-
-\item \textit{A \livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} 
-attribute 
-\addtoindexx{bit size attribute (V3)}
-whose value 
-(see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
-is the number of bits occupied by the bit field value.}
-
-\end{itemize}
-
-\textit{The 
-\addtoindex{location description} for a bit field calculates the address
-of an anonymous object containing the bit field. The address
-is relative to the structure, union, or class that most closely
-encloses the bit field declaration. The number of bytes in this
-anonymous object is the value of the byte size attribute of
-the bit field. The offset (in bits) from the most significant
-bit of the anonymous object to the most significant bit of
-the bit field is the value of the bit offset attribute.}
-\end{myindentpara}
-
-
-\textit{Diagrams similar to the above that show the use of the
-\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}, 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} and 
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset} attribute
-combination may be found in the 
-\addtoindex{DWARF Version 3} Standard.}
-
-\textit{In comparing 
-DWARF Versions 3 and 4,
-\addtoindexx{DWARF Version 3}
-\addtoindexx{DWARF Version 4}
-note that DWARF V4
-defines the following combinations of attributes:}
-\begin{itemize}
-\item \textit{either \livelink{chap:DWATdatamemberlocation}{DW\_AT\_data\_member\_location} 
-or
-\livelink{chap:DWATdatabitoffset}{DW\_AT\_data\_bit\_offset} 
-(to specify the beginning of the data member)}
-\end{itemize}
-\textit{optionally together with}
-\begin{itemize}
-\item  \textit{either \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} or 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} (to
-specify the size of the data member)}
-\end{itemize}
-\textit{DWARF V3 defines the following combinations:}
-\begin{itemize}
-\item \textit{\livelink{chap:DWATdatamemberlocation}{DW\_AT\_data\_member\_location} 
-(to specify the beginning
-of the data member, except this specification is only partial
-in the case of a bit field) }
-\end{itemize}
-\textit{optionally together with}
-\begin{itemize}
-\item \textit{\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size}, 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} and 
-\livelink{chap:DWATbitoffset}{DW\_AT\_bit\_offset}
-(to further specify the beginning of a bit field data member
-as well as specify the size of the data member) }
-\end{itemize}
+Version 4 and later. See Section 5.6.6 in the DWARF Version 4
+specification for a discussion of compatibility considerations.}
 
 \subsection{Member Function Entries}
 \label{chap:memberfunctionentries}
@@ -1605,7 +1489,7 @@ the template definition, the name attribute for the debugging
 information entry representing the special compilation unit
 should be empty or omitted.
 
-\needlines{5}
+\needlines{4}
 \item If the class type entry representing the template
 instantiation or any of its child entries contains declaration
 coordinate attributes, those attributes should refer to
@@ -1937,11 +1821,11 @@ tag \livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters}
 
 
 \section{String Type Entries}
-\label{chap:classstringtypeentries}
+\label{chap:stringtypeentries}
 
 \textit{A \doublequote{string} is a sequence of characters that have specific
 \addtoindexx{string type entry}
-semantics and operations that separate them from arrays of
+semantics and operations that distinguish them from arrays of
 characters. 
 \addtoindex{Fortran} is one of the languages that has a string
 type. Note that \doublequote{string} in this context refers to a target
@@ -1952,39 +1836,63 @@ A string type is represented by a debugging information entry
 with the tag \livetarg{chap:DWTAGstringtype}{DW\_TAG\_string\_type}. 
 If a name has been given to
 the string type in the source program, then the corresponding
-string type entry has a \livelink{chap:DWATname}{DW\_AT\_name} attribute
+string type entry has a 
+\livelink{chap:DWATname}{DW\_AT\_name} attribute
 \addtoindexx{name attribute}
 whose value is
 a null\dash terminated string containing the string type name as
 it appears in the source program.
 
+\needlines{4}
+The string type entry may have a 
+\livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute or 
+\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}
+attribute, whose value 
+(see Section \refersec{chap:byteandbitsizes}) 
+is the amount of
+storage needed to hold a value of the string type.
+
+
 The 
 \hypertarget{chap:DWATstringlengthstringlengthofstringtype}
-string type entry may have a 
+string type entry may also have a 
 \livelink{chap:DWATstringlength}{DW\_AT\_string\_length} attribute
 whose 
 \addtoindexx{string length attribute}
 value is a 
 \addtoindex{location description} yielding the location
-where the length of the string is stored in the program. The
-string type entry may also have a \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute
-or \livelink{chap:DWATbitsize}{DW\_AT\_bit\_size} attribute, whose value 
-(see Section \refersec{chap:byteandbitsizes}) 
+where the length of the string is stored in the program.
+If the \DWATstringlength{} attribute is not present, the size
+of the string is assumed to be the amount of storage that is
+allocated for the string (as specified by the \DWATbytesize{}
+or \DWATbitsize{} attribute).
+
+The string type entry may also have a 
+\livetarg{chap:DWATstringlengthbytesize}{DW\_AT\_string\_length\_byte\_size}
+attribute or
+\livetarg{chap:DWATstringlengthbitsize}{DW\_AT\_string\_length\_bit\_size} attribute,
+\addtoindexx{string length attribute!size of length data}
+whose value (see Section \refersec{chap:byteandbitsizes}) 
 is the size of the data to be retrieved from the location
 referenced by the string length attribute. If no (byte or bit)
 size attribute is present, the size of the data to be retrieved
 is the same as the 
-\addtoindex{size of an address} on the target machine.Fif the amount
-
-\needlines{4}
-If no string length attribute is present, the string type
-entry may have a \livelink{chap:DWATbytesize}{DW\_AT\_byte\_size} attribute or 
-\livelink{chap:DWATbitsize}{DW\_AT\_bit\_size}
-attribute, whose value 
-(see Section \refersec{chap:byteandbitsizes}) 
-is the amount of
-storage needed to hold a value of the string type.
+\addtoindex{size of an address} on the target machine.
 
+\addtoindexx{DWARF Version 5}  % Avoid italics
+\textit{Prior to DWARF Version 5, the meaning of a 
+\DWATbytesize{} attribute depends on the presence of the
+\DWATstringlength{} attribute:
+\begin{itemize}
+\item If \DWATstringlength{} is present, \DWATbytesize{} 
+       specifies the size of the length data to be retrieved 
+       from the location specified by the \DWATstringlength{} attribute.
+\item If \DWATstringlength{} is not present, \DWATbytesize{}
+       specifies the amount of storage allocated for objects
+       of the string type.
+\end{itemize}
+In DWARF Version 5, \DWATbytesize{} always specifies the amount of storage 
+allocated for objects of the string type.}
 
 \section{Set Type Entries}
 \label{chap:settypeentries}
@@ -2107,16 +2015,21 @@ be a language\dash dependent default constant.
 \addtoindexx{lower bound attribute!default}
 The default lower bound is 0 for 
 \addtoindex{C}, \addtoindex{C++}, 
-\addtoindex{D}, 
+\addtoindex{D},
+\addtoindex{Go},
+\addtoindex{Haskell}, 
 \addtoindex{Java}, 
 \addtoindex{Objective C}, 
 \addtoindex{Objective C++},
+\addtoindex{OpenCL},
 \addtoindex{Python}, and 
 \addtoindex{UPC}. 
 The default lower bound is 1 for 
-\addtoindex{Ada}, \addtoindex{COBOL},
+\addtoindex{Ada}, 
+\addtoindex{COBOL},
 \addtoindex{Fortran}, 
 \addtoindex{Modula-2},
+\addtoindex{Modula-3},
 \addtoindex{Pascal} and 
 \addtoindex{PL/I}.