(see new Change Summary in Draft versions).
Signed-off-by: Ron Brender <ron.brender@gmail.com>
&\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} \\
&\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
--- /dev/null
+\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
\nonzeroparskip
\begin{center}
-\dwf, Version 4.1
+\dwf, Version 5
Copyright\copyright 2010, 2013 \dwf\ Committee
\end{center}
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}
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
\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.
\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
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
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
\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 \\
\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}
\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} \\
\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}
\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} \\
\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}
\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 \\
\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 && \\
\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 \\
\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}
are given in
Table \refersec{tab:decimalsignencodings}.
-
\begin{centering}
\setlength{\extrarowheight}{0.1cm}
\begin{longtable}{l|c}
\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}
\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 \\
\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},
% 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}
\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
\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}
\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
\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}
\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}
\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
\include{attributesbytag} %\emptypage
\include{debugsectionrelationships} \emptypage
\include{encodingdecoding} \emptypage
-\include{examples} %\emptypage
+\include{examples} \emptypage
\include{compression} %\emptypage
\include{sectionversionnumbers}
\include{gnulicense}
% 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}
+
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}
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}
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}
} dims[63];
};
\end{lstlisting}
-\caption{Fortran 90 example: descriptor representation}
-\label{fig:fortran90exampledescriptorrepresentation}
+\caption{Fortran array example: descriptor representation}
+\label{fig:fortranarrayexampledescriptorrepresentation}
\end{figure}
\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]
The DWARF description is shown
\addtoindexx{Fortran 90}
-in Figure \refersec{fig:fortran90exampledwarfdescription}.
+in Figure \refersec{fig:fortranarrayexampledwarfdescription}.
\begin{figure}[h]
\figurepart{1}{2}
! 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}
\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:
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>;
OBJ2B : REC2;
\end{lstlisting}
-\caption{Ada 90 example: source fragment}
+\caption{Ada example: source fragment}
\label{fig:adaexamplesourcefragment}
\end{figure}
\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}
\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")
\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
\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},
\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}
\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}
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
\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
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
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:
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
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
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;
\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
\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}
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
\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
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}
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
\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}) \\
\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,
\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
\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}\\
information for this compilation unit
(see Section \refersec{chap:macroinformation}).
+\needlines{6}
\item A
\livelink{chap:DWATcompdir}{DW\_AT\_comp\_dir}
attribute
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
\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
\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).
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
\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}
\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
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
\end{alltt}
\end{dwflisting}
-\needlines{3}
+\needlines{5}
\textit{On the other hand}
\begin{lstlisting}[numbers=none]
volatile unsigned char * const restrict p;
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}
\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}).
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}
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
\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
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}
\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}.