2 \label{chap:typeentries}
3 This section presents the debugging information entries
4 that describe program types: base types, modified types and
5 user\dash defined types.
7 If the scope of the declaration of a named type begins after
8 \hypertarget{chap:DWATstartscopetypedeclaration}{}
9 the low pc value for the scope most closely enclosing the
10 declaration, the declaration may have a
12 attribute as described for objects in
13 Section \refersec{chap:dataobjectentries}.
15 \section{Base Type Entries}
16 \label{chap:basetypeentries}
18 \textit{A base type is a data type that is not defined in terms of
20 \addtoindexx{fundamental type|see{base type entry}}
21 Each programming language has a set of base
22 types that are considered to be built into that language.}
24 A base type is represented by a debugging information entry
28 A \addtoindex{base type entry}
29 has a \DWATname{} attribute
31 \addtoindexx{name attribute}
33 a null\dash terminated string containing the name of the base type
34 as recognized by the programming language of the compilation
35 unit containing the base type entry.
38 \addtoindexx{encoding attribute}
39 a \DWATencoding{} attribute describing
40 how the base type is encoded and is to be interpreted. The
41 value of this attribute is an
42 \livelink{chap:classconstant}{integer constant}. The set of
43 values and their meanings for the
44 \DWATencoding{} attribute
46 Table \refersec{tab:encodingattributevalues}
50 may have a \DWATendianity{} attribute
51 \addtoindexx{endianity attribute}
53 Section \refersec{chap:dataobjectentries}.
54 If omitted, the encoding assumes the representation that
55 is the default for the target architecture.
58 \hypertarget{chap:DWATbytesizedataobjectordatatypesize}{}
59 either a \DWATbytesize{} attribute
60 \hypertarget{chap:DWATbitsizebasetypebitsize}{}
61 or a \DWATbitsize{} attribute
62 \addtoindexx{bit size attribute}
63 whose \livelink{chap:classconstant}{integer constant} value
64 (see Section \refersec{chap:byteandbitsizes})
65 is the amount of storage needed to hold
69 \textit{For example, the
70 \addtoindex{C} type \texttt{int} on a machine that uses 32\dash bit
71 integers is represented by a base type entry with a name
72 attribute whose value is \doublequote{int}, an encoding attribute
73 whose value is \DWATEsigned{}
74 and a byte size attribute whose value is 4.}
76 If the value of an object of the given type does not fully
77 occupy the storage described by a byte size attribute,
78 \hypertarget{chap:DWATdatabitoffsetbasetypebitlocation}{}
79 the base type entry may also have
80 \addtoindexx{bit size attribute}
83 \DWATdatabitoffset{} attribute,
85 \addtoindexx{data bit offset attribute}
87 \livelink{chap:classconstant}{integer constant} values
88 (see Section \refersec{chap:staticanddynamicvaluesofattributes}).
90 attribute describes the actual size in bits used to represent
91 values of the given type. The data bit offset attribute is the
92 offset in bits from the beginning of the containing storage to
93 the beginning of the value. Bits that are part of the offset
94 are padding. The data bit offset uses the bit numbering and
95 direction conventions that are appropriate to the current
97 target system to locate the beginning of the storage and
98 value. If this attribute is omitted a default data bit offset
103 is\addtoindexx{bit offset attribute (Version 3)}
104 \addtoindexx{bit offset attribute (Version 3)|see{\textit{also} data bit offset attribute}}
106 \addtoindexx{data bit offset attribute}
108 \DWARFVersionIV{}, unchanged in \DWARFVersionV{}, and
109 is also used for bit field members
110 (see Section \refersec{chap:datamemberentries}).
111 %\hypertarget{chap:DWATbitoffsetbasetypebitlocation}{}
112 It replaces the attribute DW\_AT\_bit\_offset
113 \addtoindexx{bit offset attribute (Version 3)}
115 types as defined in \DWARFVersionIII{} and earlier.
116 DW\_AT\_bit\_offset is deprecated
117 \addtoindexx{DW\_AT\_bit\_offset (deprecated)}
118 for use in base types in DWARF Version 4 and later.
119 See Section 5.1 in the \DWARFVersionIV{}
120 specification for a discussion of compatibility considerations.}
123 \caption{Encoding attribute values}
124 \label{tab:encodingattributevalues}
126 \begin{tabular}{l|p{8cm}}
128 Name&Meaning\\ \hline
129 \DWATEaddressTARG{} & linear machine address (for segmented\break
131 Section \refersec{chap:segmentedaddresses}) \\
132 \DWATEbooleanTARG& true or false \\
134 \DWATEcomplexfloatTARG& complex binary
135 floating\dash point number \\
136 \DWATEfloatTARG{} & binary floating\dash point number \\
137 \DWATEimaginaryfloatTARG& imaginary binary
138 floating\dash point number \\
139 \DWATEsignedTARG& signed binary integer \\
140 \DWATEsignedcharTARG& signed character \\
141 \DWATEunsignedTARG{} & unsigned binary integer \\
142 \DWATEunsignedcharTARG{} & unsigned character \\
143 \DWATEpackeddecimalTARG{} & packed decimal \\
144 \DWATEnumericstringTARG& numeric string \\
145 \DWATEeditedTARG{} & edited string \\
146 \DWATEsignedfixedTARG{} & signed fixed\dash point scaled integer \\
147 \DWATEunsignedfixedTARG& unsigned fixed\dash point scaled integer \\
148 \DWATEdecimalfloatTARG{} & decimal floating\dash point number \\
149 \DWATEUTFTARG{} & \addtoindexi{Unicode character}{Unicode character base type} \\
150 \DWATEASCIITARG{} & \addtoindexi{ASCII character}{ASCII character base type}\\
151 \DWATEUCSTARG{} & \addtoindexi{ISO 10646 character}{ISO 10646 character base type}
152 \addtoindexx{ISO 10646 character set standard} \\
157 \textit{The \DWATEdecimalfloat{} encoding is intended for
158 floating\dash point representations that have a power\dash of\dash ten
159 exponent, such as that specified in IEEE 754R.}
161 \textit{The \DWATEUTF{} encoding is intended for \addtoindex{Unicode}
162 string encodings (see the Universal Character Set standard,
163 ISO/IEC 10646\dash 1:1993).
164 \addtoindexx{ISO 10646 character set standard}
166 \addtoindex{C++} type char16\_t is
167 represented by a base type entry with a name attribute whose
168 value is \doublequote{char16\_t}, an encoding attribute whose value
169 is \DWATEUTF{} and a byte size attribute whose value is 2.}
171 \textit{The \DWATEASCII{} and \DWATEUCS{} encodings are intended for
172 the {Fortran 2003} string kinds
173 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (ISO/IEC 646:1991) and
174 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)} (UCS-4 in ISO/IEC 10646:2000).}
175 \addtoindexx{ISO 10646 character set standard}
178 \DWATEpackeddecimal{}
180 \DWATEnumericstring{}
182 represent packed and unpacked decimal string numeric data
183 types, respectively, either of which may be
185 \addtoindexx{decimal scale attribute}
187 \addtoindexx{decimal sign attribute}
189 \addtoindexx{digit count attribute}
191 \hypertarget{chap:DWATdecimalsigndecimalsignrepresentation}{}
193 \hypertarget{chap:DWATdigitcountdigitcountforpackeddecimalornumericstringtype}{}
194 base types are used in combination with
196 \DWATdigitcount{} and
201 A \DWATdecimalsign{} attribute
202 \addtoindexx{decimal sign attribute}
203 is an \livelink{chap:classconstant}{integer constant} that
204 conveys the representation of the sign of the decimal type
205 (see Table \refersec{tab:decimalsignattributevalues}).
206 Its \livelink{chap:classconstant}{integer constant} value is interpreted to
207 mean that the type has a leading overpunch, trailing overpunch,
208 leading separate or trailing separate sign representation or,
209 alternatively, no sign at all.
212 \caption{Decimal sign attribute values}
213 \label{tab:decimalsignattributevalues}
215 \begin{tabular}{l|p{9cm}}
219 \DWDSunsignedTARG{} & Unsigned \\
220 \DWDSleadingoverpunchTARG{} & Sign
221 is encoded in the most significant digit in a target\dash dependent manner \\
222 \DWDStrailingoverpunchTARG{} & Sign
223 is encoded in the least significant digit in a target\dash dependent manner \\
224 \DWDSleadingseparateTARG{}
225 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character
226 to the left of the most significant digit. \\
227 \DWDStrailingseparateTARG{}
228 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character
229 to the right of the least significant digit. \\
230 &Packed decimal type: Least significant nibble contains
231 a target\dash dependent value
232 indicating positive or negative. \\
237 \hypertarget{chap:DWATdecimalscaledecimalscalefactor}{}
238 The \DWATdecimalscale{}
240 \addtoindexx{decimal scale attribute}
241 is an integer constant value
242 that represents the exponent of the base ten scale factor to
243 be applied to an instance of the type. A scale of zero puts the
244 decimal point immediately to the right of the least significant
245 digit. Positive scale moves the decimal point to the right
246 and implies that additional zero digits on the right are not
247 stored in an instance of the type. Negative scale moves the
248 decimal point to the left; if the absolute value of the scale
249 is larger than the digit count, this implies additional zero
250 digits on the left are not stored in an instance of the type.
255 \addtoindexx{digit count attribute}
256 is an \livelink{chap:classconstant}{integer constant}
257 value that represents the number of digits in an instance of
262 \hypertarget{chap:DWATpicturestringpicturestringfornumericstringtype}{}
263 type is used to represent an edited
264 numeric or alphanumeric data type. It is used in combination
265 with a \DWATpicturestring{} attribute whose value is a
266 null\dash terminated string containing the target\dash dependent picture
267 string associated with the type.
269 If the edited base type entry describes an edited numeric
270 data type, the edited type entry has a \DWATdigitcount{} and a
271 \DWATdecimalscale{} attribute.
272 \addtoindexx{decimal scale attribute}
273 These attributes have the same
274 interpretation as described for the
275 \DWATEpackeddecimal{} and
276 \DWATEnumericstring{} base
277 types. If the edited type entry
278 describes an edited alphanumeric data type, the edited type
279 entry does not have these attributes.
282 \textit{The presence or absence of the \DWATdigitcount{} and
283 \DWATdecimalscale{} attributes
284 \addtoindexx{decimal scale attribute}
285 allows a debugger to easily
286 distinguish edited numeric from edited alphanumeric, although
287 in principle the digit count and scale are derivable by
288 interpreting the picture string.}
290 The \DWATEsignedfixed{} and \DWATEunsignedfixed{} entries
291 describe signed and unsigned fixed\dash point binary data types,
294 The fixed binary type entries have
295 \addtoindexx{digit count attribute}
298 attribute with the same interpretation as described for the
299 \DWATEpackeddecimal{} and \DWATEnumericstring{} base types.
302 For a data type with a decimal scale factor, the fixed binary
304 \DWATdecimalscale{} attribute
305 \addtoindexx{decimal scale attribute}
307 interpretation as described for the
308 \DWATEpackeddecimal{}
309 and \DWATEnumericstring{} base types.
311 \hypertarget{chap:DWATbinaryscalebinaryscalefactorforfixedpointtype}{}
312 For a data type with a binary scale factor, the fixed
313 \addtoindexx{binary scale attribute}
314 binary type entry has a
315 \DWATbinaryscale{} attribute.
317 \DWATbinaryscale{} attribute
318 is an \livelink{chap:classconstant}{integer constant} value
319 that represents the exponent of the base two scale factor to
320 be applied to an instance of the type. Zero scale puts the
321 binary point immediately to the right of the least significant
322 bit. Positive scale moves the binary point to the right and
323 implies that additional zero bits on the right are not stored
324 in an instance of the type. Negative scale moves the binary
325 point to the left; if the absolute value of the scale is
326 larger than the number of bits, this implies additional zero
327 bits on the left are not stored in an instance of the type.
330 \hypertarget{chap:DWATsmallscalefactorforfixedpointtype}{}
331 a data type with a non\dash decimal and non\dash binary scale factor,
332 the fixed binary type entry has a
333 \DWATsmall{} attribute which
334 \addtoindexx{small attribute}
336 \DWTAGconstant{} entry. The scale factor value
337 is interpreted in accordance with the value defined by the
338 \DWTAGconstant{} entry. The value represented is the product
339 of the integer value in memory and the associated constant
342 \textit{The \DWATsmall{} attribute
343 is defined with the \addtoindex{Ada} \texttt{small}
346 \section{Unspecified Type Entries}
347 \label{chap:unspecifiedtypeentries}
348 \addtoindexx{unspecified type entry}
349 \addtoindexx{void type|see{unspecified type entry}}
350 Some languages have constructs in which a type
351 may be left unspecified or the absence of a type
352 may be explicitly indicated.
354 An unspecified (implicit, unknown, ambiguous or nonexistent)
355 type is represented by a debugging information entry with
356 the tag \DWTAGunspecifiedtypeTARG.
357 If a name has been given
358 to the type, then the corresponding unspecified type entry
359 has a \DWATname{} attribute
360 \addtoindexx{name attribute}
362 a null\dash terminated
363 string containing the name as it appears in the source program.
365 \textit{The interpretation of this debugging information entry is
366 intentionally left flexible to allow it to be interpreted
367 appropriately in different languages. For example, in
368 \addtoindex{C} and \addtoindex{C++}
369 the language implementation can provide an unspecified type
370 entry with the name \doublequote{void} which can be referenced by the
371 type attribute of pointer types and typedef declarations for
373 Sections \refersec{chap:typemodifierentries} and
374 %The following reference was valid, so the following is probably correct.
375 Section \refersec{chap:typedefentries},
376 respectively). As another
377 example, in \addtoindex{Ada} such an unspecified type entry can be referred
378 to by the type attribute of an access type where the denoted
379 \addtoindexx{incomplete type (Ada)}
380 type is incomplete (the name is declared as a type but the
381 definition is deferred to a separate compilation unit).}
383 \textit{\addtoindex{C++} permits using the
384 \autoreturntype{} specifier for the return type of a member function declaration.
385 The actual return type is deduced based on the definition of the
386 function, so it may not be known when the function is declared. The language
387 implementation can provide an unspecified type entry with the name \texttt{auto} which
388 can be referenced by the return type attribute of a function declaration entry.
389 When the function is later defined, the \DWTAGsubprogram{} entry for the definition
390 includes a reference to the actual return type.}
393 \section{Type Modifier Entries}
394 \label{chap:typemodifierentries}
395 \addtoindexx{type modifier entry}
396 \addtoindexx{type modifier|see{atomic type entry}}
397 \addtoindexx{type modifier|see{constant type entry}}
398 \addtoindexx{type modifier|see{reference type entry}}
399 \addtoindexx{type modifier|see{restricted type entry}}
400 \addtoindexx{type modifier|see{packed type entry}}
401 \addtoindexx{type modifier|see{pointer type entry}}
402 \addtoindexx{type modifier|see{shared type entry}}
403 \addtoindexx{type modifier|see{volatile type entry}}
404 A base or user\dash defined type may be modified in different ways
405 in different languages. A type modifier is represented in
406 DWARF by a debugging information entry with one of the tags
407 given in Table \refersec{tab:typemodifiertags}.
409 If a name has been given to the modified type in the source
410 program, then the corresponding modified type entry has
411 a \DWATname{} attribute
412 \addtoindexx{name attribute}
413 whose value is a null\dash terminated
414 string containing the modified type name as it appears in
417 Each of the type modifier entries has
418 \addtoindexx{type attribute}
420 \DWATtype{} attribute,
421 whose value is a \livelink{chap:classreference}{reference}
422 to a debugging information entry
423 describing a base type, a user-defined type or another type
426 A modified type entry describing a
427 \addtoindexx{pointer type entry}
428 pointer or \addtoindex{reference type}
429 (using \DWTAGpointertype,
430 \DWTAGreferencetype{} or
431 \DWTAGrvaluereferencetype)
432 % Another instance of no-good-place-to-put-index entry.
434 \addtoindexx{address class attribute}
436 \hypertarget{chap:DWATadressclasspointerorreferencetypes}{}
439 attribute to describe how objects having the given pointer
440 or reference type ought to be dereferenced.
442 A modified type entry describing a \addtoindex{UPC} shared qualified type
443 (using \DWTAGsharedtype) may have a
444 \DWATcount{} attribute
445 \addtoindexx{count attribute}
446 whose value is a constant expressing the (explicit or implied) blocksize specified for the
447 type in the source. If no count attribute is present, then the \doublequote{infinite}
448 blocksize is assumed.
450 When multiple type modifiers are chained together to modify
451 a base or user-defined type, the tree ordering reflects the
453 \addtoindexx{reference type entry, lvalue|see{reference type entry}}
455 \addtoindexx{reference type entry, rvalue|see{rvalue reference type entry}}
457 \addtoindexx{parameter|see{macro formal parameter list}}
459 \addtoindexx{parameter|see{\textit{this} parameter}}
461 \addtoindexx{parameter|see{variable parameter attribute}}
463 \addtoindexx{parameter|see{optional parameter attribute}}
465 \addtoindexx{parameter|see{unspecified parameters entry}}
467 \addtoindexx{parameter|see{template value parameter entry}}
469 \addtoindexx{parameter|see{template type parameter entry}}
471 \addtoindexx{parameter|see{formal parameter entry}}
475 \caption{Type modifier tags}
476 \label{tab:typemodifiertags}
478 \begin{tabular}{l|p{9cm}}
480 Name&Meaning\\ \hline
481 \DWTAGatomictypeTARG{} & C \addtoindex{\_Atomic} qualified type \\
482 \DWTAGconsttypeTARG{} & C or C++ const qualified type
483 \addtoindexx{const qualified type entry} \addtoindexx{C} \addtoindexx{C++} \\
484 \DWTAGpackedtypeTARG& \addtoindex{Pascal} or Ada packed type\addtoindexx{packed type entry}
485 \addtoindexx{packed qualified type entry} \addtoindexx{Ada} \addtoindexx{Pascal} \\
486 \DWTAGpointertypeTARG{} & Pointer to an object of
487 the type being modified \addtoindexx{pointer qualified type entry} \\
488 \DWTAGreferencetypeTARG& \addtoindex{C++} (lvalue) reference
489 to an object of the type
490 \addtoindexx{reference type entry}
491 \mbox{being} modified
492 \addtoindexx{reference qualified type entry} \\
493 \DWTAGrestricttypeTARG& \addtoindex{C}
495 \addtoindexx{restricted type entry}
497 \addtoindexx{restrict qualified type} \\
498 \DWTAGrvaluereferencetypeTARG{} & \addtoindex{C++}
499 \addtoindexx{rvalue reference type entry}
501 \addtoindexx{restricted type entry}
502 reference to an object of the type \mbox{being} modified
503 \addtoindexx{rvalue reference qualified type entry} \\
504 \DWTAGsharedtypeTARG&\addtoindex{UPC} shared qualified type
505 \addtoindexx{shared qualified type entry} \\
506 \DWTAGvolatiletypeTARG&\addtoindex{C} or \addtoindex{C++} volatile qualified type
507 \addtoindexx{volatile qualified type entry} \\
513 \textit{As examples of how type modifiers are ordered, consider the following
514 \addtoindex{C} declarations:}
515 \begin{lstlisting}[numbers=none]
516 const unsigned char * volatile p;
518 \textit{which represents a volatile pointer to a constant
519 character. This is encoded in DWARF as:}
523 \DWTAGvariable(p) -->
524 \DWTAGvolatiletype -->
525 \DWTAGpointertype -->
527 \DWTAGbasetype(unsigned char)
532 \textit{On the other hand}
533 \begin{lstlisting}[numbers=none]
534 volatile unsigned char * const restrict p;
536 \textit{represents a restricted constant
537 pointer to a volatile character. This is encoded as:}
541 \DWTAGvariable(p) -->
542 \DWTAGrestricttype -->
544 \DWTAGpointertype -->
545 \DWTAGvolatiletype -->
546 \DWTAGbasetype(unsigned char)
550 \section{Typedef Entries}
551 \label{chap:typedefentries}
552 A named type that is defined in terms of another type
553 definition is represented by a debugging information entry with
554 \addtoindexx{typedef entry}
555 the tag \DWTAGtypedefTARG.
556 The typedef entry has a \DWATname{} attribute
557 \addtoindexx{name attribute}
558 whose value is a null\dash terminated string containing
559 the name of the typedef as it appears in the source program.
561 The typedef entry may also contain
562 \addtoindexx{type attribute}
564 \DWATtype{} attribute whose
565 value is a \livelink{chap:classreference}{reference}
566 to the type named by the typedef. If
567 the debugging information entry for a typedef represents
568 a declaration of the type that is not also a definition,
569 it does not contain a type attribute.
571 \textit{Depending on the language, a named type that is defined in
572 terms of another type may be called a type alias, a subtype,
573 a constrained type and other terms. A type name declared with
574 no defining details may be termed an
575 \addtoindexx{incomplete type}
576 incomplete, forward or hidden type.
577 While the DWARF \DWTAGtypedef{} entry was
578 originally inspired by the like named construct in
579 \addtoindex{C} and \addtoindex{C++},
580 it is broadly suitable for similar constructs (by whatever
581 source syntax) in other languages.}
583 \section{Array Type Entries}
584 \label{chap:arraytypeentries}
585 \label{chap:DWTAGgenericsubrange}
587 \textit{Many languages share the concept of an \doublequote{array,} which is
588 \addtoindexx{array type entry}
589 a table of components of identical type.}
591 An array type is represented by a debugging information entry
592 with the tag \DWTAGarraytypeTARG.
593 If a name has been given to
594 \addtoindexx{array!declaration of type}
595 the array type in the source program, then the corresponding
596 array type entry has a \DWATname{} attribute
597 \addtoindexx{name attribute}
599 null\dash terminated string containing the array type name as it
600 appears in the source program.
603 \hypertarget{chap:DWATorderingarrayrowcolumnordering}{}
604 array type entry describing a multidimensional array may
605 \addtoindexx{array!element ordering}
606 have a \DWATordering{} attribute whose
607 \livelink{chap:classconstant}{integer constant} value is
608 interpreted to mean either row-major or column-major ordering
609 of array elements. The set of values and their meanings
610 for the ordering attribute are listed in
611 Table \refersec{tab:arrayordering}.
613 ordering attribute is present, the default ordering for the
614 source language (which is indicated by the
617 \addtoindexx{language attribute}
618 of the enclosing compilation unit entry) is assumed.
620 \begin{simplenametable}[1.8in]{Array ordering}{tab:arrayordering}
621 \DWORDcolmajorTARG{} \\
622 \DWORDrowmajorTARG{} \\
623 \end{simplenametable}
625 The ordering attribute may optionally appear on one-dimensional
626 arrays; it will be ignored.
628 An array type entry has
629 \addtoindexx{type attribute}
630 a \DWATtype{} attribute
632 \addtoindexx{array!element type}
633 the type of each element of the array.
635 If the amount of storage allocated to hold each element of an
636 object of the given array type is different from the amount
637 \addtoindexx{stride attribute|see{bit stride attribute or byte stride attribute}}
638 of storage that is normally allocated to hold an individual
639 \hypertarget{chap:DWATbitstridearrayelementstrideofarraytype}{}
641 \hypertarget{chap:DWATbytestridearrayelementstrideofarraytype}{}
642 indicated element type, then the array type
643 \addtoindexx{bit stride attribute}
647 \addtoindexx{byte stride attribute}
650 \addtoindexx{bit stride attribute}
652 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
654 element of the array.
656 The array type entry may have either a \DWATbytesize{} or a
657 \DWATbitsize{} attribute
658 (see Section \refersec{chap:byteandbitsizes}),
660 amount of storage needed to hold an instance of the array type.
662 \textit{If the size of the array can be determined statically at
663 compile time, this value can usually be computed by multiplying
664 the number of array elements by the size of each element.}
667 Each array dimension is described by a debugging information
668 entry with either the
669 \addtoindexx{subrange type entry!as array dimension}
670 tag \DWTAGsubrangetype{} or the
671 \addtoindexx{enumeration type entry!as array dimension}
673 \DWTAGenumerationtype. These entries are
675 array type entry and are ordered to reflect the appearance of
676 the dimensions in the source program (that is, leftmost dimension
677 first, next to leftmost second, and so on).
679 \textit{In languages that have no concept of a
680 \doublequote{multidimensional array} (for example,
681 \addtoindex{C}), an array of arrays may
682 be represented by a debugging information entry for a
683 multidimensional array.}
685 Alternatively, for an array with dynamic rank the array dimensions
686 are described by a debugging information entry with the tag
687 \DWTAGgenericsubrangeTARG.
688 This entry has the same attributes as a
689 \DWTAGsubrangetype{} entry; however,
690 there is just one \DWTAGgenericsubrangeNAME{} entry and it describes all of the
691 dimensions of the array.
692 If \DWTAGgenericsubrangeNAME{}
693 is used, the number of dimensions must be specified using a
694 \DWATrank{} attribute. See also Section
695 \refersec{chap:DWATrank}.
699 Other attributes especially applicable to arrays are
701 \DWATassociated{} and
703 which are described in
704 Section \refersec{chap:dynamictypeproperties}.
705 For relevant examples, see also Appendix \refersec{app:fortranarrayexample}.
707 \section{Coarray Type Entries}
708 \label{chap:coarraytypeentries}
709 \addtoindexx{coarray}
710 \textit{In Fortran, a \doublequote{coarray} is an array whose
711 elements are located in different processes rather than in the
712 memory of one process. The individual elements
713 of a coarray can be scalars or arrays.
714 Similar to arrays, coarrays have \doublequote{codimensions} that are
715 indexed using a \doublequote{coindex} or multiple \doublequote{coindices}.
716 \addtoindexx{codimension|see{coarray}}
717 \addtoindexx{coindex|see{coarray}}
720 A coarray type is represented by a debugging information entry
721 with the tag \DWTAGcoarraytypeTARG.
722 If a name has been given to the
723 coarray type in the source, then the corresponding coarray type
724 entry has a \DWATname{} attribute whose value is a null-terminated
725 string containing the array type name as it appears in the source
728 A coarray entry has one or more \DWTAGsubrangetype{} child entries,
729 one for each codimension. It also has a \DWATtype{} attribute
730 describing the type of each element of the coarray.
732 \textit{In a coarray application, the run-time number of processes in the application
733 is part of the coindex calculation. It is represented in the Fortran source by
734 a coindex which is declared with a \doublequote{*} as the upper bound. To express this
735 concept in DWARF, the \DWTAGsubrangetype{} child entry for that index has
736 only a lower bound and no upper bound.}
738 \textit{How coarray elements are located and how coindices are
739 converted to process specifications is implementation-dependent.}
742 \section{Structure, Union, Class and Interface Type Entries}
743 \label{chap:structureunionclassandinterfacetypeentries}
745 \textit{The languages
747 \addtoindex{C++}, and
748 \addtoindex{Pascal}, among others, allow the
749 programmer to define types that are collections of related
750 \addtoindexx{structure type entry}
752 In \addtoindex{C} and \addtoindex{C++}, these collections are called
753 \doublequote{structures.}
754 In \addtoindex{Pascal}, they are called \doublequote{records.}
755 The components may be of different types. The components are
756 called \doublequote{members} in \addtoindex{C} and
757 \addtoindex{C++}, and \doublequote{fields} in \addtoindex{Pascal}.}
759 \textit{The components of these collections each exist in their
760 own space in computer memory. The components of a \addtoindex{C} or \addtoindex{C++}
761 \doublequote{union} all coexist in the same memory.}
763 \textit{\addtoindex{Pascal} and
764 other languages have a \doublequote{discriminated union,}
765 \addtoindexx{discriminated union|see {variant entry}}
766 also called a \doublequote{variant record.} Here, selection of a
767 number of alternative substructures (\doublequote{variants}) is based
768 on the value of a component that is not part of any of those
769 substructures (the \doublequote{discriminant}).}
771 \textit{\addtoindex{C++} and
772 \addtoindex{Java} have the notion of \doublequote{class,} which is in some
773 ways similar to a structure. A class may have \doublequote{member
774 functions} which are subroutines that are within the scope
775 of a class or structure.}
777 \textit{The \addtoindex{C++} notion of
778 structure is more general than in \addtoindex{C}, being
779 equivalent to a class with minor differences. Accordingly,
780 in the following discussion, statements about
781 \addtoindex{C++} classes may
782 be understood to apply to \addtoindex{C++} structures as well.}
784 \subsection{Structure, Union and Class Type Entries}
785 \label{chap:structureunionandclasstypeentries}
786 Structure, union, and class types are represented by debugging
787 \addtoindexx{structure type entry}
789 \addtoindexx{union type entry}
791 \addtoindexx{class type entry}
793 \DWTAGstructuretypeTARG,
795 and \DWTAGclasstypeTARG,
796 respectively. If a name has been given to the structure,
797 union, or class in the source program, then the corresponding
798 structure type, union type, or class type entry has a
799 \DWATname{} attribute
800 \addtoindexx{name attribute}
801 whose value is a null\dash terminated string
802 containing the type name as it appears in the source program.
804 The members of a structure, union, or class are represented
805 by debugging information entries that are owned by the
806 corresponding structure type, union type, or class type entry
807 and appear in the same order as the corresponding declarations
808 in the source program.
810 A structure, union, or class type may have a \DWATexportsymbolsNAME{}
812 \livetarg{chap:DWATexportsymbolsofstructunionclass}{}
813 which indicates that all member names defined within
814 the structure, union, or class may be referenced as if they were
815 defined within the containing structure, union, or class.
817 \textit{This may be used to describe anonymous structures, unions
818 and classes in \addtoindex{C} or \addtoindex{C++}}.
820 A structure type, union type or class type entry may have
821 either a \DWATbytesize{} or a
822 \DWATbitsize{} attribute
823 \hypertarget{chap:DWATbitsizedatamemberbitsize}{}
824 (see Section \refersec{chap:byteandbitsizes}),
825 whose value is the amount of storage needed
826 to hold an instance of the structure, union or class type,
827 including any padding.
829 An incomplete structure, union or class type
830 \addtoindexx{incomplete structure/union/class}
832 \addtoindexx{incomplete type}
833 represented by a structure, union or class
834 entry that does not have a byte size attribute and that has
835 \addtoindexx{declaration attribute}
836 a \DWATdeclaration{} attribute.
838 If the complete declaration of a type has been placed in
839 \hypertarget{chap:DWATsignaturetypesignature}{}
840 a separate \addtoindex{type unit}
841 (see Section \refersec{chap:typeunitentries}),
842 an incomplete declaration
843 \addtoindexx{incomplete type}
844 of that type in the compilation unit may provide
845 the unique 64\dash bit signature of the type using
846 \addtoindexx{type signature}
850 If a structure, union or class entry represents the definition
851 of a structure, union or class member corresponding to a prior
852 incomplete structure, union or class, the entry may have a
853 \DWATspecification{} attribute
854 \addtoindexx{specification attribute}
855 whose value is a \livelink{chap:classreference}{reference} to
856 the debugging information entry representing that incomplete
859 Structure, union and class entries containing the
860 \DWATspecification{} attribute
861 \addtoindexx{specification attribute}
862 do not need to duplicate
863 information provided by the declaration entry referenced by the
864 specification attribute. In particular, such entries do not
865 need to contain an attribute for the name of the structure,
866 union or class they represent if such information is already
867 provided in the declaration.
869 \textit{For \addtoindex{C} and \addtoindex{C++},
871 \addtoindexx{data member|see {member entry (data)}}
872 member declarations occurring within
873 the declaration of a structure, union or class type are
874 considered to be \doublequote{definitions} of those members, with
875 the exception of \doublequote{static} data members, whose definitions
876 appear outside of the declaration of the enclosing structure,
877 union or class type. Function member declarations appearing
878 within a structure, union or class type declaration are
879 definitions only if the body of the function also appears
880 within the type declaration.}
882 If the definition for a given member of the structure, union
883 or class does not appear within the body of the declaration,
884 that member also has a debugging information entry describing
885 its definition. That latter entry has a
886 \DWATspecification{} attribute
887 \addtoindexx{specification attribute}
888 referencing the debugging information entry
889 owned by the body of the structure, union or class entry and
890 representing a non\dash defining declaration of the data, function
891 or type member. The referenced entry will not have information
892 about the location of that member (low and high pc attributes
893 for function members, location descriptions for data members)
894 and will have a \DWATdeclaration{} attribute.
897 \textit{Consider a nested class whose
898 definition occurs outside of the containing class definition, as in:}
900 \begin{lstlisting}[numbers=none]
907 \textit{The two different structs can be described in
908 different compilation units to
909 facilitate DWARF space compression
910 (see Appendix \refersec{app:usingcompilationunits}).}
913 A structure type, union type or class type entry may have a
914 \DWATcallingconvention{} attribute,
915 \addtoindexx{calling convention attribute}
916 whose value indicates whether a value of the type should be passed by reference
917 or passed by value. The set of calling convention codes for use with types
918 \addtoindexx{calling convention codes!for types}
919 \hypertarget{chap:DWATcallingconventionfortypes}{}
920 is given in Table \referfol{tab:callingconventioncodesfortypes}.
922 \begin{simplenametable}[2.2in]{Calling convention codes for types}{tab:callingconventioncodesfortypes}
924 \DWCCpassbyvalueTARG \\
925 \DWCCpassbyreferenceTARG \\
926 \end{simplenametable}
928 If this attribute is not present, or its value is
929 \DWCCnormalNAME, the convention to be used for an object of the
930 given type is assumed to be unspecified.
932 \textit{Note that \DWCCnormalNAME{} is also used as a calling convention
933 code for certain subprograms
934 (see Table \refersec{tab:callingconventioncodesforsubroutines}).}
936 \textit{If unspecified, a consumer may be able to deduce the calling
937 convention based on knowledge of the type and the ABI.}
940 \subsection{Interface Type Entries}
941 \label{chap:interfacetypeentries}
943 \textit{The \addtoindex{Java} language defines \doublequote{interface} types.
945 \addtoindexx{interface type entry}
946 in \addtoindex{Java} is similar to a \addtoindex{C++} or
947 \addtoindex{Java} class with only abstract
948 methods and constant data members.}
951 \addtoindexx{interface type entry}
952 are represented by debugging information
954 tag \DWTAGinterfacetypeTARG.
956 An interface type entry has
957 a \DWATname{} attribute,
958 \addtoindexx{name attribute}
960 value is a null\dash terminated string containing the type name
961 as it appears in the source program.
963 The members of an interface are represented by debugging
964 information entries that are owned by the interface type
965 entry and that appear in the same order as the corresponding
966 declarations in the source program.
968 \subsection{Derived or Extended Structures, Classes and Interfaces}
969 \label{chap:derivedorextendedstructsclasesandinterfaces}
971 \textit{In \addtoindex{C++}, a class (or struct)
973 \addtoindexx{derived type (C++)|see{inheritance entry}}
974 be \doublequote{derived from} or be a
975 \doublequote{subclass of} another class.
976 In \addtoindex{Java}, an interface may \doublequote{extend}
977 \addtoindexx{extended type (Java)|see{inheritance entry}}
979 \addtoindexx{implementing type (Java)|see{inheritance entry}}
980 or more other interfaces, and a class may \doublequote{extend} another
981 class and/or \doublequote{implement} one or more interfaces. All of these
982 relationships may be described using the following. Note that
983 in \addtoindex{Java},
984 the distinction between extends and implements is
985 implied by the entities at the two ends of the relationship.}
987 A class type or interface type entry that describes a
988 derived, extended or implementing class or interface owns
989 \addtoindexx{implementing type (Java)|see{inheritance entry}}
990 debugging information entries describing each of the classes
991 or interfaces it is derived from, extending or implementing,
992 respectively, ordered as they were in the source program. Each
994 \addtoindexx{inheritance entry}
996 tag \DWTAGinheritanceTARG.
999 \addtoindexx{type attribute}
1001 \addtoindexx{inheritance entry}
1003 \DWATtype{} attribute whose value is
1004 a reference to the debugging information entry describing the
1005 class or interface from which the parent class or structure
1006 of the inheritance entry is derived, extended or implementing.
1008 An inheritance entry
1009 \addtoindexx{inheritance entry}
1010 for a class that derives from or extends
1011 \hypertarget{chap:DWATdatamemberlocationinheritedmemberlocation}{}
1012 another class or struct also has
1013 \addtoindexx{data member location attribute}
1015 \DWATdatamemberlocation{}
1016 attribute, whose value describes the location of the beginning
1017 of the inherited type relative to the beginning address of the
1018 instance of the derived class. If that value is a constant, it is the offset
1019 in bytes from the beginning of the class to the beginning of
1020 the instance of the inherited type. Otherwise, the value must be a location
1021 description. In this latter case, the beginning address of
1022 the instance of the derived class is pushed on the expression stack before
1023 the \addtoindex{location description}
1024 is evaluated and the result of the
1025 evaluation is the location of the instance of the inherited type.
1027 \textit{The interpretation of the value of this attribute for
1028 inherited types is the same as the interpretation for data
1030 (see Section \referfol{chap:datamemberentries}). }
1033 \addtoindexx{inheritance entry}
1035 \hypertarget{chap:DWATaccessibilitycppinheritedmembers}{}
1037 \addtoindexx{accessibility attribute}
1039 \DWATaccessibility{}
1041 If no accessibility attribute is present, private access
1042 is assumed for an entry of a class and public access is
1043 assumed for an entry of a struct, union or interface.
1045 If\hypertarget{chap:DWATvirtualityvirtualityofbaseclass}{}
1046 the class referenced by the
1047 \addtoindexx{inheritance entry}
1048 inheritance entry serves
1049 as a \addtoindex{C++} virtual base class, the inheritance entry has a
1050 \DWATvirtuality{} attribute.
1052 \textit{For a \addtoindex{C++} virtual base, the
1053 \addtoindex{data member location attribute}
1054 will usually consist of a non-trivial
1055 \addtoindex{location description}.}
1057 \subsection{Access Declarations}
1058 \label{chap:accessdeclarations}
1060 \textit{In \addtoindex{C++}, a derived class may contain access declarations that
1061 \addtoindexx{access declaration entry}
1062 change the accessibility of individual class members from the
1063 overall accessibility specified by the inheritance declaration.
1064 A single access declaration may refer to a set of overloaded
1067 If a derived class or structure contains access declarations,
1068 each such declaration may be represented by a debugging
1069 information entry with the tag
1070 \DWTAGaccessdeclarationTARG.
1072 such entry is a child of the class or structure type entry.
1074 An access declaration entry has
1075 a \DWATname{} attribute,
1076 \addtoindexx{name attribute}
1078 value is a null\dash terminated string representing the name used
1079 in the declaration in the source program, including any class
1080 or structure qualifiers.
1082 An access declaration entry
1083 \hypertarget{chap:DWATaccessibilitycppbaseclasses}{}
1086 \DWATaccessibility{}
1087 attribute describing the declared accessibility of the named
1092 \subsection{Friends}
1093 \label{chap:friends}
1095 Each \doublequote{friend}
1096 \addtoindexx{friend entry}
1097 declared by a structure, union or class
1098 \hypertarget{chap:DWATfriendfriendrelationship}{}
1099 type may be represented by a debugging information entry
1100 that is a child of the structure, union or class type entry;
1101 the friend entry has the
1102 tag \DWTAGfriendTARG.
1105 \addtoindexx{friend attribute}
1106 a \DWATfriend{} attribute, whose value is
1107 a reference to the debugging information entry describing
1108 the declaration of the friend.
1111 \subsection{Data Member Entries}
1112 \label{chap:datamemberentries}
1114 A data member (as opposed to a member function) is
1115 represented by a debugging information entry with the
1116 tag \DWTAGmemberTARG.
1118 \addtoindexx{member entry (data)}
1119 member entry for a named member has
1120 a \DWATname{} attribute
1121 \addtoindexx{name attribute}
1122 whose value is a null\dash terminated
1123 string containing the member name as it appears in the source
1124 program. If the member entry describes an
1125 \addtoindex{anonymous union},
1126 the name attribute is omitted or the value of the attribute
1127 consists of a single zero byte.
1129 The data member entry has
1130 \addtoindexx{type attribute}
1132 \DWATtype{} attribute to denote
1133 \addtoindexx{member entry (data)}
1134 the type of that member.
1136 A data member entry may
1137 \addtoindexx{accessibility attribute}
1139 \DWATaccessibility{}
1140 attribute. If no accessibility attribute is present, private
1141 access is assumed for an entry of a class and public access
1142 is assumed for an entry of a structure, union, or interface.
1145 \hypertarget{chap:DWATmutablemutablepropertyofmemberdata}{}
1147 \addtoindexx{member entry (data)}
1149 \addtoindexx{mutable attribute}
1150 have a \DWATmutable{} attribute,
1151 which is a \livelink{chap:classflag}{flag}.
1152 This attribute indicates whether the data
1153 member was declared with the mutable storage class specifier.
1155 The beginning of a data member
1156 \addtoindexx{beginning of a data member}
1157 is described relative to
1158 \addtoindexx{beginning of an object}
1159 the beginning of the object in which it is immediately
1160 contained. In general, the beginning is characterized by
1161 both an address and a bit offset within the byte at that
1162 address. When the storage for an entity includes all of
1163 the bits in the beginning byte, the beginning bit offset is
1166 Bit offsets in DWARF use the bit numbering and direction
1167 conventions that are appropriate to the current language on
1171 \addtoindexx{member entry (data)}
1172 corresponding to a data member that is
1173 \hypertarget{chap:DWATdatabitoffsetdatamemberbitlocation}{}
1175 \hypertarget{chap:DWATdatamemberlocationdatamemberlocation}{}
1176 in a structure, union or class may have either
1177 \addtoindexx{data member location attribute}
1179 \DWATdatamemberlocation{} attribute or a
1180 \DWATdatabitoffset{}
1181 attribute. If the beginning of the data member is the same as
1182 the beginning of the containing entity then neither attribute
1186 For a \DWATdatamemberlocation{} attribute
1187 \addtoindexx{data member location attribute}
1188 there are two cases:
1189 \begin{enumerate}[1. ]
1190 \item If the value is an \livelink{chap:classconstant}{integer constant},
1192 in bytes from the beginning of the containing entity. If
1193 the beginning of the containing entity has a non-zero bit
1194 offset then the beginning of the member entry has that same
1197 \item Otherwise, the value must be a \addtoindex{location description}.
1199 this case, the beginning of the containing entity must be byte
1200 aligned. The beginning address is pushed on the DWARF stack
1201 before the \addtoindex{location} description is evaluated; the result of
1202 the evaluation is the base address of the member entry.
1204 \textit{The push on the DWARF expression stack of the base address of
1205 the containing construct is equivalent to execution of the
1206 \DWOPpushobjectaddress{} operation
1207 (see Section \refersec{chap:stackoperations});
1208 \DWOPpushobjectaddress{} therefore
1209 is not needed at the
1210 beginning of a \addtoindex{location description} for a data member.
1212 result of the evaluation is a location---either an address or
1213 the name of a register, not an offset to the member.}
1215 \textit{A \DWATdatamemberlocation{}
1217 \addtoindexx{data member location attribute}
1218 that has the form of a
1219 \addtoindex{location description} is not valid for a data member contained
1220 in an entity that is not byte aligned because DWARF operations
1221 do not allow for manipulating or computing bit offsets.}
1226 For a \DWATdatabitoffset{} attribute,
1227 the value is an \livelink{chap:classconstant}{integer constant}
1228 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
1229 that specifies the number of bits
1230 from the beginning of the containing entity to the beginning
1231 of the data member. This value must be greater than or equal
1232 to zero, but is not limited to less than the number of bits
1235 If the size of a data member is not the same as the size
1236 of the type given for the data member, the data member has
1237 \addtoindexx{bit size attribute}
1238 either a \DWATbytesize{}
1239 or a \DWATbitsize{} attribute whose
1240 \livelink{chap:classconstant}{integer constant} value
1241 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
1243 of storage needed to hold the value of the data member.
1245 \textit{Bit fields in \addtoindex{C} and \addtoindex{C++}
1247 \addtoindexx{bit fields}
1249 \addtoindexx{data bit offset}
1251 \addtoindexx{data bit size}
1253 \DWATdatabitoffset{} and
1254 \DWATbitsize{} attributes.}
1257 \textit{This Standard uses the following bit numbering and direction
1258 conventions in examples. These conventions are for illustrative
1259 purposes and other conventions may apply on particular
1262 \item \textit{For big\dash endian architectures, bit offsets are
1263 counted from high-order to low\dash order bits within a byte (or
1264 larger storage unit); in this case, the bit offset identifies
1265 the high\dash order bit of the object.}
1267 \item \textit{For little\dash endian architectures, bit offsets are
1268 counted from low\dash order to high\dash order bits within a byte (or
1269 larger storage unit); in this case, the bit offset identifies
1270 the low\dash order bit of the object.}
1274 \textit{In either case, the bit so identified is defined as the
1275 \addtoindexx{beginning of an object}
1276 beginning of the object.}
1279 \textit{For example, take one possible representation of the following
1280 \addtoindex{C} structure definition
1281 in both big\dash and little\dash endian byte orders:}
1292 \textit{Figures \referfol{fig:bigendiandatabitoffsets} and
1293 \refersec{fig:littleendiandatabitoffsets}
1294 show the structure layout
1295 and data bit offsets for example big\dash\ and little\dash endian
1296 architectures, respectively. Both diagrams show a structure
1297 that begins at address A and whose size is four bytes. Also,
1298 high order bits are to the left and low order bits are to
1310 Addresses increase ->
1311 | A | A + 1 | A + 2 | A + 3 |
1313 Data bit offsets increase ->
1314 +---------------+---------------+---------------+---------------+
1315 |0 4|5 10|11 15|16 23|24 31|
1316 | j | k | m | n | <pad> |
1318 +---------------------------------------------------------------+
1322 \caption{Big-endian data bit offsets}
1323 \label{fig:bigendiandatabitoffsets}
1334 <- Addresses increase
1335 | A + 3 | A + 2 | A + 1 | A |
1337 <- Data bit offsets increase
1338 +---------------+---------------+---------------+---------------+
1339 |31 24|23 16|15 11|10 5|4 0|
1340 | <pad> | n | m | k | j |
1342 +---------------------------------------------------------------+
1346 \caption{Little-endian data bit offsets}
1347 \label{fig:littleendiandatabitoffsets}
1351 \textit{Note that data member bit offsets in this example are the
1352 same for both big\dash\ and little\dash endian architectures even
1353 though the fields are allocated in different directions
1354 (high\dash order to low-order versus low\dash order to high\dash order);
1355 the bit naming conventions for memory and/or registers of
1356 the target architecture may or may not make this seem natural.}
1358 \textit{For a more extensive example showing nested and packed records
1360 Appendix \refersec{app:pascalexample}.}
1363 \textit{Attribute \DWATdatabitoffset{}
1365 \addtoindex{DWARF Version 4}, unchanged in \DWARFVersionV,
1366 and is also used for base types
1368 \refersec{chap:basetypeentries}).
1369 %\livetarg{chap:DWATbitoffsetdatamemberbitlocation}{}
1370 It replaces the attributes
1371 DW\_AT\_bit\_offset\addtoindexx{bit offset attribute (Version 3)}
1372 and \DWATbytesize{} when used to
1373 identify the beginning of bit field data members as defined
1374 in \DWARFVersionIII{} and earlier. The
1377 DW\_AT\_bit\_offset\addtoindexx{DW\_AT\_bit\_offset (deprecated)}
1378 attribute combination is deprecated for data members in
1379 \DWARFVersionIV{} and later. See Section 5.6.6 in the \DWARFVersionIV{}
1380 specification for a discussion of compatibility considerations.}
1382 \subsection{Member Function Entries}
1383 \label{chap:memberfunctionentries}
1385 A member function is represented by a
1386 \addtoindexx{member function entry}
1387 debugging information entry
1389 \addtoindexx{subprogram entry!as member function}
1390 tag \DWTAGsubprogram.
1391 The member function entry
1392 may contain the same attributes and follows the same rules
1393 as non\dash member global subroutine entries
1394 (see Section \refersec{chap:subroutineandentrypointentries}).
1397 \textit{In particular, if the member function entry is an
1398 instantiation of a member function template, it follows the
1399 same rules as function template instantiations (see Section
1400 \refersec{chap:functiontemplateinstantiations}).
1404 \addtoindexx{accessibility attribute}
1405 member function entry may have a
1406 \DWATaccessibility{}
1407 attribute. If no accessibility attribute is present, private
1408 access is assumed for an entry of a class and public access
1409 is assumed for an entry of a structure, union or interface.
1412 \hypertarget{chap:DWATvirtualityvirtualityoffunction}{}
1413 the member function entry describes a virtual function,
1414 then that entry has a
1415 \DWATvirtuality{} attribute.
1418 \hypertarget{chap:DWATexplicitexplicitpropertyofmemberfunction}{}
1419 the member function entry describes an explicit member
1420 function, then that entry has
1421 \addtoindexx{explicit attribute}
1423 \DWATexplicit{} attribute.
1426 \hypertarget{chap:DWATvtableelemlocationvirtualfunctiontablevtableslot}{}
1427 entry for a virtual function also has a
1428 \DWATvtableelemlocation{}
1429 \addtoindexi{attribute}{vtable element location attribute} whose value contains
1430 a \addtoindex{location description}
1431 yielding the address of the slot
1432 for the function within the virtual function table for the
1433 enclosing class. The address of an object of the enclosing
1434 type is pushed onto the expression stack before the location
1435 description is evaluated.
1438 \hypertarget{chap:DWATobjectpointerobjectthisselfpointerofmemberfunction}{}
1439 the member function entry describes a non\dash static member
1440 \addtoindexx{this pointer attribute|see{object pointer attribute}}
1441 function, then that entry
1442 \addtoindexx{self pointer attribute|see{object pointer attribute}}
1444 \addtoindexx{object pointer attribute}
1445 a \DWATobjectpointer{}
1447 whose value is a \livelink{chap:classreference}{reference}
1448 to the formal parameter entry
1449 that corresponds to the object for which the function is
1450 called. The name attribute of that formal parameter is defined
1451 by the current language (for example,
1452 \texttt{this} for \addtoindex{C++} or \texttt{self}
1453 for \addtoindex{Objective C}
1454 and some other languages). That parameter
1455 also has a \DWATartificial{} attribute whose value is true.
1457 Conversely, if the member function entry describes a static
1458 member function, the entry does not have
1459 \addtoindexx{object pointer attribute}
1461 \DWATobjectpointer{}
1464 \textit{In \addtoindex{C++}, non-static member functions can have const-volatile
1465 qualifiers, which affect the type of the first formal parameter (the
1466 \doublequote{\texttt{this}}-pointer).}
1468 If the member function entry describes a non\dash static member
1469 function that has a const\dash volatile qualification, then
1470 the entry describes a non\dash static member function whose
1471 object formal parameter has a type that has an equivalent
1472 const\dash volatile qualification.
1474 \textit{Beginning in \addtoindex{C++:2011 (ISO)}, non-static member
1475 functions can also have one of the ref-qualifiers, \& and \&\&.
1476 These do not change the type of the
1477 \doublequote{\texttt{this}}-pointer, but they do affect the types of
1478 object values on which the function can be invoked.}
1481 The member function entry may have an \DWATreferenceNAME{} attribute
1482 \livetarg{chap:DWATreferenceofnonstaticmember}{}
1483 to indicate a non-static member function that can only be called on
1484 lvalue objects, or the \DWATrvaluereferenceNAME{} attribute
1485 \livetarg{chap:DWATrvaluereferenceofnonstaticmember}{}
1486 to indicate that it can only be called on prvalues and xvalues.
1488 \textit{The lvalue, prvalue and xvalue concepts are defined in the
1489 \addtoindex{C++:2011} and later standards and not repeated or
1490 considered further in DWARF.}
1492 If a subroutine entry represents the defining declaration
1493 of a member function and that definition appears outside of
1494 the body of the enclosing class declaration, the subroutine
1496 \DWATspecification{} attribute,
1497 \addtoindexx{specification attribute}
1499 a reference to the debugging information entry representing
1500 the declaration of this function member. The referenced entry
1501 will be a child of some class (or structure) type entry.
1503 Subroutine entries containing the
1504 \DWATspecification{} attribute
1505 \addtoindexx{specification attribute}
1506 do not need to duplicate information provided
1507 by the declaration entry referenced by the specification
1508 attribute. In particular, such entries do not need to contain
1509 a name attribute giving the name of the function member whose
1510 definition they represent.
1511 Similarly, such entries do not need to contain a return type
1512 attribute, unless the return type on the declaration was
1513 unspecified (for example, the declaration used the
1514 \addtoindex{C++} \autoreturntype{} specifier).
1516 \textit{In \addtoindex{C++}, a member function may be declared
1517 as deleted. This prevents the compiler from generating a default
1518 implementation of a special member function such as a
1519 constructor or destructor, and can affect overload resolution
1520 when used on other member functions.}
1522 If the member function entry has been declared as deleted,
1523 \hypertarget{chap:DWATdeleted}{}
1524 then that entry has a \DWATdeletedNAME{}\livetarg{chap:DWATdeleteddef}{}
1525 attribute.\addtoindexx{deleted attribute}
1527 \textit{In \addtoindex{C++}, a special member function may be
1528 declared as defaulted, which explicitly declares a default
1529 compiler-generated implementation of the function. The
1530 declaration may have different effects on the calling
1531 convention used for objects of its class, depending on
1532 whether the default declaration is made inside or outside the
1535 If the member function has been declared as defaulted,
1536 then the entry has a \DWATdefaultedNAME{}\livetarg{chap:DWATdefaulteddef}{}
1537 attribute\addtoindexx{defaulted attribute}
1538 whose integer constant value indicates whether, and if so,
1539 how, that member is defaulted. The possible values and
1540 their meanings are shown in
1541 Table \referfol{tab:defaultedattributevaluenames}.
1545 \setlength{\extrarowheight}{0.1cm}
1546 \begin{longtable}{l|l}
1547 \caption{Defaulted attribute names} \label{tab:defaultedattributevaluenames} \\
1548 \hline \bfseries Defaulted attribute name & \bfseries Meaning \\ \hline
1550 \bfseries Defaulted attribute name & \bfseries Meaning \\ \hline
1552 \hline \emph{Continued on next page}
1555 \DWDEFAULTEDnoTARG & Not declared default \\
1556 \DWDEFAULTEDinclassTARG & Defaulted within the class \\
1557 \DWDEFAULTEDoutofclassTARG& Defaulted outside of the class \\
1562 \textit{An artificial member function (that is, a compiler-generated
1563 copy that does not appear in the source) does not have a
1564 \DWATdefaultedNAME{} attribute.}
1567 \subsection{Class Template Instantiations}
1568 \label{chap:classtemplateinstantiations}
1570 \textit{In \addtoindex{C++} a class template is a generic definition of a class
1571 type that may be instantiated when an instance of the class
1572 is declared or defined. The generic description of the class may include
1573 parameterized types, parameterized compile-time constant
1574 values, and/or parameterized run-time constant addresses.
1575 DWARF does not represent the generic template
1576 definition, but does represent each instantiation.}
1578 A class template instantiation is represented by a
1579 debugging information entry with the tag \DWTAGclasstype,
1580 \DWTAGstructuretype{} or
1581 \DWTAGuniontype. With the following
1582 exceptions, such an entry will contain the same attributes
1583 and have the same types of child entries as would an entry
1584 for a class type defined explicitly using the instantiation
1585 types and values. The exceptions are:
1587 \begin{enumerate}[1. ]
1588 \item Template parameters are described and referenced as
1589 specified in Section \refersec{chap:templateparameters}.
1592 \item If the compiler has generated a special compilation unit to
1594 \addtoindexx{template instantiation!and special compilation unit}
1595 template instantiation and that special compilation
1596 unit has a different name from the compilation unit containing
1597 the template definition, the name attribute for the debugging
1598 information entry representing the special compilation unit
1599 should be empty or omitted.
1602 \item If the class type entry representing the template
1603 instantiation or any of its child entries contains declaration
1604 coordinate attributes, those attributes should refer to
1605 the source for the template definition, not to any source
1606 generated artificially by the compiler.
1610 \subsection{Variant Entries}
1611 \label{chap:variantentries}
1613 A variant part of a structure is represented by a debugging
1614 information entry\addtoindexx{variant part entry} with the
1615 tag \DWTAGvariantpartTARG{} and is
1616 owned by the corresponding structure type entry.
1618 If the variant part has a discriminant, the discriminant is
1619 \hypertarget{chap:DWATdiscrdiscriminantofvariantpart}{}
1621 \addtoindexx{discriminant (entry)}
1622 separate debugging information entry which
1623 is a child of the variant part entry. This entry has the form
1625 \addtoindexx{member entry (data)!as discriminant}
1626 structure data member entry. The variant part entry will
1627 \addtoindexx{discriminant attribute}
1629 \DWATdiscr{} attribute
1630 whose value is a \livelink{chap:classreference}{reference} to
1631 the member entry for the discriminant.
1633 If the variant part does not have a discriminant (tag field),
1634 the variant part entry has
1635 \addtoindexx{type attribute}
1637 \DWATtype{} attribute to represent
1640 Each variant of a particular variant part is represented by
1641 \hypertarget{chap:DWATdiscrvaluediscriminantvalue}{}
1642 a debugging information entry\addtoindexx{variant entry} with the
1643 tag \DWTAGvariantTARG{}
1644 and is a child of the variant part entry. The value that
1645 selects a given variant may be represented in one of three
1646 ways. The variant entry may have a
1647 \DWATdiscrvalue{} attribute
1648 whose value represents a single case label. The value of this
1649 attribute is encoded as an LEB128 number. The number is signed
1650 if the tag type for the variant part containing this variant
1651 is a signed type. The number is unsigned if the tag type is
1656 \hypertarget{chap:DWATdiscrlistlistofdiscriminantvalues}{}
1657 the variant entry may contain
1658 \addtoindexx{discriminant list attribute}
1661 attribute, whose value represents a list of discriminant
1662 values. This list is represented by any of the
1663 \livelink{chap:classblock}{block} forms and
1664 may contain a mixture of case labels and label ranges. Each
1665 item on the list is prefixed with a discriminant value
1666 descriptor that determines whether the list item represents
1667 a single label or a label range. A single case label is
1668 represented as an LEB128 number as defined above for
1669 \addtoindexx{discriminant value attribute}
1672 attribute. A label range is represented by
1673 two LEB128 numbers, the low value of the range followed by the
1674 high value. Both values follow the rules for signedness just
1675 described. The discriminant value descriptor is an integer
1676 constant that may have one of the values given in
1677 Table \refersec{tab:discriminantdescriptorvalues}.
1679 \begin{simplenametable}[1.4in]{Discriminant descriptor values}{tab:discriminantdescriptorvalues}
1680 \DWDSClabelTARG{} \\
1681 \DWDSCrangeTARG{} \\
1682 \end{simplenametable}
1684 If a variant entry has neither a \DWATdiscrvalue{}
1685 attribute nor a \DWATdiscrlist{} attribute, or if it has
1686 a \DWATdiscrlist{} attribute with 0 size, the variant is a
1689 The components selected by a particular variant are represented
1690 by debugging information entries owned by the corresponding
1691 variant entry and appear in the same order as the corresponding
1692 declarations in the source program.
1695 \section{Condition Entries}
1696 \label{chap:conditionentries}
1698 \textit{COBOL has the notion of
1699 \addtoindexx{level-88 condition, COBOL}
1700 a \doublequote{level\dash 88 condition} that
1701 associates a data item, called the conditional variable, with
1702 a set of one or more constant values and/or value ranges.
1703 % Note: the {} after \textquoteright (twice) is necessary to assure a following space separator
1704 Semantically, the condition is \textquoteleft true\textquoteright{}
1706 variable's value matches any of the described constants,
1707 and the condition is \textquoteleft false\textquoteright{} otherwise.}
1709 The \DWTAGconditionTARG{}
1710 debugging information entry\addtoindexx{condition entry}
1712 logical condition that tests whether a given data item\textquoteright s
1713 value matches one of a set of constant values. If a name
1714 has been given to the condition, the condition entry has a
1715 \DWATname{} attribute
1716 \addtoindexx{name attribute}
1717 whose value is a null\dash terminated string
1718 giving the condition name as it appears in the source program.
1721 The condition entry's parent entry describes the conditional
1722 variable; normally this will be a \DWTAGvariable,
1724 \DWTAGformalparameter{} entry.
1726 \addtoindexx{formal parameter entry}
1728 entry has an array type, the condition can test any individual
1729 element, but not the array as a whole. The condition entry
1730 implicitly specifies a \doublequote{comparison type} that is the
1731 type of an array element if the parent has an array type;
1732 otherwise it is the type of the parent entry.
1735 The condition entry owns \DWTAGconstant{} and/or
1736 \DWTAGsubrangetype{} entries that describe the constant
1737 values associated with the condition. If any child entry
1738 \addtoindexx{type attribute}
1740 a \DWATtype{} attribute,
1741 that attribute should describe a type
1742 compatible with the comparison type (according to the source
1743 language); otherwise the child\textquoteright s type is the same as the
1746 \textit{For conditional variables with alphanumeric types, COBOL
1747 permits a source program to provide ranges of alphanumeric
1748 constants in the condition. Normally a subrange type entry
1749 does not describe ranges of strings; however, this can be
1750 represented using bounds attributes that are references to
1751 constant entries describing strings. A subrange type entry may
1752 refer to constant entries that are siblings of the subrange
1756 \section{Enumeration Type Entries}
1757 \label{chap:enumerationtypeentries}
1759 \textit{An \doublequote{enumeration type} is a scalar that can assume one of
1760 a fixed number of symbolic values.}
1762 An enumeration type is represented by a debugging information
1764 \DWTAGenumerationtypeTARG.
1766 If a name has been given to the enumeration type in the source
1767 program, then the corresponding enumeration type entry has
1768 a \DWATname{} attribute
1769 \addtoindexx{name attribute}
1770 whose value is a null\dash terminated
1771 string containing the enumeration type name as it appears
1772 in the source program.
1774 The \addtoindex{enumeration type entry}
1776 \addtoindexx{type attribute}
1777 a \DWATtype{} attribute
1778 which refers to the underlying data type used to implement
1779 the enumeration. The entry also may have a
1780 \DWATbytesize{} attribute whose
1781 \livelink{chap:classconstant}{integer constant} value is the number of bytes
1782 required to hold an instance of the enumeration. If no \DWATbytesize{} attribute
1783 is present, the size for holding an instance of the enumeration is given by the size
1784 of the underlying data type.
1787 If an enumeration type has type safe
1788 \addtoindexx{type safe enumeration types}
1791 \begin{enumerate}[1. ]
1792 \item Enumerators are contained in the scope of the enumeration type, and/or
1794 \item Enumerators are not implicitly converted to another type
1797 then the \addtoindex{enumeration type entry} may
1798 \addtoindexx{enum class|see{type-safe enumeration}}
1799 have a \DWATenumclass{}
1800 attribute, which is a \livelink{chap:classflag}{flag}.
1801 In a language that offers only
1802 one kind of enumeration declaration, this attribute is not
1805 \textit{In \addtoindex{C} or \addtoindex{C++},
1806 the underlying type will be the appropriate
1807 integral type determined by the compiler from the properties of
1808 \hypertarget{chap:DWATenumclasstypesafeenumerationdefinition}{}
1809 the enumeration literal values.
1810 A \addtoindex{C++} type declaration written
1811 using enum class declares a strongly typed enumeration and
1812 is represented using \DWTAGenumerationtype{}
1813 in combination with \DWATenumclass.}
1815 Each enumeration literal is represented by a debugging
1816 \addtoindexx{enumeration literal|see{enumeration entry}}
1817 information entry with the
1818 tag \DWTAGenumeratorTARG.
1820 such entry is a child of the
1821 \addtoindex{enumeration type entry}, and the
1822 enumerator entries appear in the same order as the declarations
1823 of the enumeration literals in the source program.
1825 Each \addtoindex{enumerator entry} has a
1826 \DWATname{} attribute, whose
1827 \addtoindexx{name attribute}
1828 value is a null\dash terminated string containing the name of the
1829 \hypertarget{chap:DWATconstvalueenumerationliteralvalue}{}
1830 enumeration literal as it appears in the source program.
1831 Each enumerator entry also has a
1832 \DWATconstvalue{} attribute,
1833 whose value is the actual numeric value of the enumerator as
1834 represented on the target system.
1837 If the enumeration type occurs as the description of a
1838 \addtoindexx{enumeration type entry!as array dimension}
1839 dimension of an array type, and the stride for that dimension
1840 \hypertarget{chap:DWATbytestrideenumerationstridedimensionofarraytype}{}
1841 is different than what would otherwise be determined, then
1842 \hypertarget{chap:DWATbitstrideenumerationstridedimensionofarraytype}{}
1843 the enumeration type entry has either a
1845 or \DWATbitstride{} attribute
1846 \addtoindexx{bit stride attribute}
1847 which specifies the separation
1848 between successive elements along the dimension as described
1850 Section \refersec{chap:staticanddynamicvaluesofattributes}.
1852 \DWATbitstride{} attribute
1853 \addtoindexx{bit stride attribute}
1854 is interpreted as bits and the value of
1855 \addtoindexx{byte stride attribute}
1858 attribute is interpreted as bytes.
1861 \section{Subroutine Type Entries}
1862 \label{chap:subroutinetypeentries}
1864 \textit{It is possible in \addtoindex{C}
1865 to declare pointers to subroutines
1866 that return a value of a specific type. In both
1867 \addtoindex{C} and \addtoindex{C++},
1868 it is possible to declare pointers to subroutines that not
1869 only return a value of a specific type, but accept only
1870 arguments of specific types. The type of such pointers would
1871 be described with a \doublequote{pointer to} modifier applied to a
1872 user\dash defined type.}
1875 A subroutine type is represented by a debugging information
1877 \addtoindexx{subroutine type entry}
1878 tag \DWTAGsubroutinetypeTARG.
1880 been given to the subroutine type in the source program,
1881 then the corresponding subroutine type entry has
1882 a \DWATname{} attribute
1883 \addtoindexx{name attribute}
1884 whose value is a null\dash terminated string containing
1885 the subroutine type name as it appears in the source program.
1887 If the subroutine type describes a function that returns
1888 a value, then the subroutine type entry has
1889 \addtoindexx{type attribute}
1891 attribute to denote the type returned by the subroutine. If
1892 the types of the arguments are necessary to describe the
1893 subroutine type, then the corresponding subroutine type
1894 entry owns debugging information entries that describe the
1895 arguments. These debugging information entries appear in the
1896 order that the corresponding argument types appear in the
1899 \textit{In \addtoindex{C} there
1900 is a difference between the types of functions
1901 declared using function prototype style declarations and
1902 those declared using non\dash prototype declarations.}
1905 \hypertarget{chap:DWATprototypedsubroutineprototype}{}
1906 subroutine entry declared with a function prototype style
1907 declaration may have
1908 \addtoindexx{prototyped attribute}
1910 \DWATprototyped{} attribute, which is
1911 a \livelink{chap:classflag}{flag}.
1913 Each debugging information entry owned by a subroutine
1914 type entry corresponds to either a formal parameter or the sequence of
1915 unspecified parameters of the subprogram type:
1917 \begin{enumerate}[1. ]
1918 \item A formal parameter of a parameter list (that has a
1919 specific type) is represented by a debugging information entry
1920 with the tag \DWTAGformalparameter.
1921 Each formal parameter
1923 \addtoindexx{type attribute}
1924 a \DWATtype{} attribute that refers to the type of
1925 the formal parameter.
1927 \item The unspecified parameters of a variable parameter list
1928 \addtoindexx{unspecified parameters entry}
1930 \addtoindexx{\texttt{...} parameters|see{unspecified parameters entry}}
1931 represented by a debugging information entry with the
1932 tag \DWTAGunspecifiedparameters.
1935 \textit{\addtoindex{C++} const-volatile qualifiers are encoded as
1936 part of the type of the
1937 \doublequote{\texttt{this}}-pointer.
1938 \addtoindex{C++:2011 (ISO)} reference and rvalue-reference qualifiers are encoded using
1939 the \DWATreference{} and \DWATrvaluereference{} attributes, respectively.
1940 See also Section \refersec{chap:memberfunctionentries}.}
1943 A subroutine type entry may have the \DWATreference{} or
1944 \DWATrvaluereference{} attribute to indicate that it describes the
1945 type of a member function with reference or rvalue-reference
1946 semantics, respectively.
1949 \section{String Type Entries}
1950 \label{chap:stringtypeentries}
1952 \textit{A \doublequote{string} is a sequence of characters that have specific
1953 \addtoindexx{string type entry}
1954 semantics and operations that distinguish them from arrays of
1956 \addtoindex{Fortran} is one of the languages that has a string
1957 type. Note that \doublequote{string} in this context refers to a target
1958 machine concept, not the class string as used in this document
1959 (except for the name attribute).}
1961 A string type is represented by a debugging information entry
1962 with the tag \DWTAGstringtypeTARG.
1963 If a name has been given to
1964 the string type in the source program, then the corresponding
1965 string type entry has a
1966 \DWATname{} attribute
1967 \addtoindexx{name attribute}
1969 a null\dash terminated string containing the string type name as
1970 it appears in the source program.
1972 A string type entry may have a \DWATtype{}
1973 \livetargi{char:DWAATtypeofstringtype}{attribute}{type attribute!of string type entry}
1974 describing how each character is encoded and is to be interpreted.
1975 The value of this attribute is a \CLASSreference{} to a
1976 \DWTAGbasetype{} base type entry. If the attribute is absent,
1977 then the character is encoded using the system default.
1980 \addtoindex{Fortran 2003} language standard allows string
1981 types that are composed of different types of (same sized) characters.
1982 While there is no standard list of character kinds, the kinds
1983 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (see \DWATEASCII),
1984 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)}
1985 \addtoindexx{ISO 10646 character set standard}
1987 \texttt{DEFAULT}\index{DEFAULT@\texttt{DEFAULT} (Fortran string kind)}
1991 The string type entry may have a
1992 \DWATbytesize{} attribute or
1994 attribute, whose value
1995 (see Section \refersec{chap:byteandbitsizes})
1997 storage needed to hold a value of the string type.
2000 \hypertarget{chap:DWATstringlengthstringlengthofstringtype}{}
2001 string type entry may also have a
2002 \DWATstringlength{} attribute
2004 \addtoindexx{string length attribute}
2006 \addtoindex{location description} yielding the location
2007 where the length of the string is stored in the program.
2008 If the \DWATstringlength{} attribute is not present, the size
2009 of the string is assumed to be the amount of storage that is
2010 allocated for the string (as specified by the \DWATbytesize{}
2011 or \DWATbitsize{} attribute).
2013 The string type entry may also have a
2014 \DWATstringlengthbytesizeNAME{}
2016 \DWATstringlengthbitsizeNAME{} attribute,
2017 \addtoindexx{string length attribute!size of length data}
2018 whose value (see Section \refersec{chap:byteandbitsizes})
2019 is the size of the data to be retrieved from the location
2020 referenced by the string length attribute. If no (byte or bit)
2021 size attribute is present, the size of the data to be retrieved
2023 \addtoindex{size of an address} on the target machine.
2026 \addtoindexx{DWARF Version 5} % Avoid italics
2027 \textit{Prior to DWARF Version 5, the meaning of a
2028 \DWATbytesize{} attribute depended on the presence of the
2029 \DWATstringlength{} attribute:
2031 \item If \DWATstringlength{} was present, \DWATbytesize{}
2032 specified the size of the length data to be retrieved
2033 from the location specified by the \DWATstringlength{} attribute.
2034 \item If \DWATstringlength{} was not present, \DWATbytesize{}
2035 specified the amount of storage allocated for objects
2038 In \DWARFVersionV{}, \DWATbytesize{} always specifies the amount of storage
2039 allocated for objects of the string type.}
2042 \section{Set Type Entries}
2043 \label{chap:settypeentries}
2045 \textit{\addtoindex{Pascal} provides the concept of a \doublequote{set,} which represents
2046 a group of values of ordinal type.}
2048 A set is represented by a debugging information entry with
2049 the tag \DWTAGsettypeTARG.
2050 \addtoindexx{set type entry}
2051 If a name has been given to the
2052 set type, then the set type entry has
2053 a \DWATname{} attribute
2054 \addtoindexx{name attribute}
2055 whose value is a null\dash terminated string containing the
2056 set type name as it appears in the source program.
2058 The set type entry has
2059 \addtoindexx{type attribute}
2060 a \DWATtype{} attribute to denote the
2061 type of an element of the set.
2064 If the amount of storage allocated to hold each element of an
2065 object of the given set type is different from the amount of
2066 storage that is normally allocated to hold an individual object
2067 of the indicated element type, then the set type entry has
2068 either a \DWATbytesize{} attribute, or
2069 \DWATbitsize{} attribute
2070 whose value (see Section \refersec{chap:byteandbitsizes}) is
2071 the amount of storage needed to hold a value of the set type.
2074 \section{Subrange Type Entries}
2075 \label{chap:subrangetypeentries}
2077 \textit{Several languages support the concept of a \doublequote{subrange}
2078 type object. These objects can represent a subset of the
2079 values that an object of the basis type for the subrange can
2081 Subrange type entries may also be used to represent
2082 the bounds of array dimensions.}
2084 A subrange type is represented by a debugging information
2086 \addtoindexx{subrange type entry}
2087 tag \DWTAGsubrangetypeTARG.
2089 given to the subrange type, then the subrange type entry
2090 has a \DWATname{} attribute
2091 \addtoindexx{name attribute}
2092 whose value is a null\dash terminated
2093 string containing the subrange type name as it appears in
2096 The tag \DWTAGgenericsubrange{} is
2097 used to describe arrays with a dynamic rank. See Section
2098 \refersec{chap:DWTAGgenericsubrange}.
2100 The subrange entry may have
2101 \addtoindexx{type attribute}
2102 a \DWATtype{} attribute to describe
2103 the type of object, called the basis type, of whose values
2104 this subrange is a subset.
2106 If the amount of storage allocated to hold each element of an
2107 object of the given subrange type is different from the amount
2108 of storage that is normally allocated to hold an individual
2109 object of the indicated element type, then the subrange
2111 \DWATbytesize{} attribute or
2113 attribute, whose value
2114 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
2116 storage needed to hold a value of the subrange type.
2119 \hypertarget{chap:DWATthreadsscaledupcarrayboundthreadsscalfactor}{}
2120 subrange entry may have
2121 \addtoindexx{threads scaled attribute}
2123 \DWATthreadsscaled{} attribute,
2124 which is a \livelink{chap:classflag}{flag}.
2125 If present, this attribute indicates whether
2126 this subrange represents a \addtoindex{UPC} array bound which is scaled
2127 by the runtime THREADS value (the number of \addtoindex{UPC} threads in
2128 this execution of the program).
2130 \textit{This allows the representation of a \addtoindex{UPC} shared array such as}
2132 \begin{lstlisting}[numbers=none]
2133 int shared foo[34*THREADS][10][20];
2137 \hypertarget{chap:DWATlowerboundlowerboundofsubrange}{}
2139 \hypertarget{chap:DWATupperboundupperboundofsubrange}{}
2140 entry may have the attributes
2142 \addtoindexx{lower bound attribute}
2143 and \DWATupperbound{}
2144 \addtoindexx{upper bound attribute} to specify, respectively, the lower
2145 and upper bound values of the subrange. The
2148 \hypertarget{chap:DWATcountelementsofsubrangetype}{}
2150 % FIXME: The following matches DWARF4: odd as there is no default count.
2151 \addtoindexx{count attribute!default}
2153 \addtoindexx{count attribute}
2155 \DWATcount{} attribute,
2157 value describes the number of elements in the subrange rather
2158 than the value of the last element. The value of each of
2159 these attributes is determined as described in
2160 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2162 If the lower bound value is missing, the value is assumed to
2163 be a language\dash dependent default constant as defined in
2164 Table \refersec{tab:languageencodings}.
2165 \addtoindexx{lower bound attribute!default}
2167 If the upper bound and count are missing, then the upper bound value is
2168 \textit{unknown}.\addtoindexx{upper bound attribute!default unknown}
2170 If the subrange entry has no type attribute describing the
2171 basis type, the basis type is determined as follows:
2172 \begin{enumerate}[1. ]
2174 If there is a lower bound attribute that references an object,
2175 the basis type is assumed to be the same as the type of that object.
2177 Otherwise, if there is an upper bound or count attribute that references
2178 an object, the basis type is assumed to be the same as the type of that object.
2180 Otherwise, the type is
2181 assumed to be the same type, in the source language of the
2182 compilation unit containing the subrange entry, as a signed
2183 integer with the same size as an address on the target machine.
2186 If the subrange type occurs as the description of a dimension
2187 of an array type, and the stride for that dimension is
2188 \hypertarget{chap:DWATbytestridesubrangestridedimensionofarraytype}{}
2189 different than what would otherwise be determined, then
2190 \hypertarget{chap:DWATbitstridesubrangestridedimensionofarraytype}{}
2191 the subrange type entry has either
2192 \addtoindexx{byte stride attribute}
2194 \DWATbytestride{} or
2195 \DWATbitstride{} attribute
2196 \addtoindexx{bit stride attribute}
2197 which specifies the separation
2198 between successive elements along the dimension as described
2200 Section \refersec{chap:byteandbitsizes}.
2202 \textit{Note that the stride can be negative.}
2205 \section{Pointer to Member Type Entries}
2206 \label{chap:pointertomembertypeentries}
2208 \textit{In \addtoindex{C++}, a
2209 pointer to a data or function member of a class or
2210 structure is a unique type.}
2212 A debugging information entry representing the type of an
2213 object that is a pointer to a structure or class member has
2214 the tag \DWTAGptrtomembertypeTARG.
2216 If the \addtoindex{pointer to member type} has a name, the
2217 \addtoindexx{pointer to member type entry}
2218 pointer to member entry has a
2219 \DWATname{} attribute,
2220 \addtoindexx{name attribute}
2222 null\dash terminated string containing the type name as it appears
2223 in the source program.
2225 The \addtoindex{pointer to member} entry
2227 \addtoindexx{type attribute}
2228 a \DWATtype{} attribute to
2229 describe the type of the class or structure member to which
2230 objects of this type may point.
2232 The \addtoindexx{pointer to member} entry also
2233 \hypertarget{chap:DWATcontainingtypecontainingtypeofpointertomembertype}{}
2235 \DWATcontainingtype{}
2236 attribute, whose value is a \livelink{chap:classreference}{reference} to a debugging
2237 information entry for the class or structure to whose members
2238 objects of this type may point.
2240 The \addtoindex{pointer to member entry}
2241 \hypertarget{chap:DWATuselocationmemberlocationforpointertomembertype}{}
2243 \DWATuselocation{} attribute
2244 \addtoindexx{use location attribute}
2246 \addtoindex{location description} that computes the
2247 address of the member of the class to which the pointer to
2248 member entry points.
2250 \textit{The method used to find the address of a given member of a
2251 class or structure is common to any instance of that class
2252 or structure and to any instance of the pointer or member
2253 type. The method is thus associated with the type entry,
2254 rather than with each instance of the type.}
2256 The \DWATuselocation{} description is used in conjunction
2257 with the location descriptions for a particular object of the
2258 given \addtoindex{pointer to member type} and for a particular structure or
2259 class instance. The \DWATuselocation{}
2260 attribute expects two values to be
2261 \addtoindexi{pushed}{address!implicit push for member operator}
2262 onto the DWARF expression stack before
2263 the \DWATuselocation{} description is evaluated.
2265 \addtoindexi{pushed}{address!implicit push for member operator}
2266 is the value of the \addtoindex{pointer to member} object
2267 itself. The second value
2268 \addtoindexi{pushed}{address!implicit push for member operator}
2269 is the base address of the
2270 entire structure or union instance containing the member
2271 whose address is being calculated.
2274 \textit{For an expression such as}
2276 \begin{lstlisting}[numbers=none]
2279 \textit{where \texttt{mbr\_ptr} has some \addtoindex{pointer to member type}, a debugger should:}
2280 \begin{enumerate}[1. ]
2281 \item \textit{Push the value of \texttt{mbr\_ptr} onto the DWARF expression stack.}
2282 \item \textit{Push the base address of \texttt{object} onto the DWARF expression stack.}
2283 \item \textit{Evaluate the \DWATuselocation{} description
2284 given in the type of \texttt{mbr\_ptr}.}
2288 \section{File Type Entries}
2289 \label{chap:filetypeentries}
2291 \textit{Some languages, such as \addtoindex{Pascal},
2292 provide a data type to represent
2295 A file type is represented by a debugging information entry
2297 \addtoindexx{file type entry}
2300 If the file type has a name,
2301 the file type entry has a \DWATname{} attribute,
2302 \addtoindexx{name attribute}
2304 is a null\dash terminated string containing the type name as it
2305 appears in the source program.
2307 The file type entry has
2308 \addtoindexx{type attribute}
2309 a \DWATtype{} attribute describing
2310 the type of the objects contained in the file.
2312 The file type entry also has a
2313 \DWATbytesize{}\addtoindexx{byte size attribute} or
2314 \DWATbitsize{}\addtoindexx{bit size attribute} attribute, whose value
2315 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
2316 is the amount of storage need to hold a value of the file type.
2318 \section{Dynamic Type Entries and Properties}
2320 \subsection{Dynamic Type Entries}
2321 \textit{Some languages such as
2322 \addtoindex{Fortran 90}, provide types whose values
2323 may be dynamically allocated or associated with a variable
2324 under explicit program control. However, unlike the related
2325 pointer type in \addtoindex{C} or
2326 \addtoindex{C++}, the indirection involved in accessing
2327 the value of the variable is generally implicit, that is, not
2328 indicated as part of program source.}
2330 A dynamic type entry is used to declare a dynamic type that is
2331 \doublequote{just like} another non-dynamic type without needing to
2332 replicate the full description of that other type.
2334 A dynamic type is represented by a debugging information entry
2335 with the tag \DWTAGdynamictypeTARG. If a name has been given to the
2336 dynamic type, then the dynamic type has a \DWATname{} attribute
2337 whose value is a null-terminated string containing the dynamic
2338 type name as it appears in the source.
2340 A dynamic type entry has a \DWATtype{} attribute whose value is a
2341 reference to the type of the entities that are dynamically allocated.
2343 A dynamic type entry also has a \DWATdatalocation, and may also
2344 have \DWATallocated{} and/or \DWATassociated{} attributes as
2345 described in Section \referfol{chap:dynamictypeproperties}.
2346 A \DWATdatalocation, \DWATallocated{} or \DWATassociated{} attribute
2347 may not occur on a dynamic type entry if the same kind of attribute
2348 already occurs on the type referenced by the \DWATtype{} attribute.
2350 \subsection{Dynamic Type Properties}
2351 \label{chap:dynamictypeproperties}
2353 The \DWATdatalocation, \DWATallocated{} and \DWATassociated{}
2354 attributes described in this section can be used for any type, not
2355 just dynamic types.}
2358 \subsubsection{Data Location}
2359 \label{chap:datalocation}
2361 \textit{Some languages may represent objects using descriptors to hold
2362 information, including a location and/or run\dash time parameters,
2363 about the data that represents the value for that object.}
2365 \hypertarget{chap:DWATdatalocationindirectiontoactualdata}{}
2366 The \DWATdatalocation{}
2367 attribute may be used with any
2368 \addtoindexx{data location attribute}
2369 type that provides one or more levels of
2370 \addtoindexx{hidden indirection|see{data location attribute}}
2372 and/or run\dash time parameters in its representation. Its value
2373 is a \addtoindex{location description}.
2374 The result of evaluating this
2375 description yields the location of the data for an object.
2376 When this attribute is omitted, the address of the data is
2377 the same as the address of the object.
2380 \textit{This location description will typically begin with
2381 \DWOPpushobjectaddress{}
2382 which loads the address of the
2383 object which can then serve as a descriptor in subsequent
2384 calculation. For an example using
2386 for a \addtoindex{Fortran 90 array}, see
2387 Appendix \refersec{app:fortranarrayexample}.}
2389 \subsubsection{Allocation and Association Status}
2390 \label{chap:allocationandassociationstatus}
2392 \textit{Some languages, such as \addtoindex{Fortran 90},
2393 provide types whose values
2394 may be dynamically allocated or associated with a variable
2395 under explicit program control.}
2397 \hypertarget{chap:DWATallocatedallocationstatusoftypes}{}
2401 \addtoindexx{allocated attribute}
2402 may optionally be used with any
2403 type for which objects of the type can be explicitly allocated
2404 and deallocated. The presence of the attribute indicates that
2405 objects of the type are allocatable and deallocatable. The
2406 integer value of the attribute (see below) specifies whether
2407 an object of the type is
2408 currently allocated or not.
2411 \hypertarget{chap:DWATassociatedassociationstatusoftypes}{}
2413 \DWATassociated{} attribute
2415 \addtoindexx{associated attribute}
2416 optionally be used with
2417 any type for which objects of the type can be dynamically
2418 associated with other objects. The presence of the attribute
2419 indicates that objects of the type can be associated. The
2420 integer value of the attribute (see below) indicates whether
2421 an object of the type is currently associated or not.
2423 \textit{While these attributes are defined specifically with
2424 \addtoindex{Fortran 90} ALLOCATABLE and POINTER types
2425 in mind, usage is not limited
2426 to just that language.}
2428 The value of these attributes is determined as described in
2429 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2431 A non\dash zero value is interpreted as allocated or associated,
2432 and zero is interpreted as not allocated or not associated.
2434 \textit{For \addtoindex{Fortran 90},
2435 if the \DWATassociated{}
2436 attribute is present,
2437 the type has the POINTER property where either the parent
2438 variable is never associated with a dynamic object or the
2439 implementation does not track whether the associated object
2440 is static or dynamic. If the \DWATallocated{} attribute is
2441 present and the \DWATassociated{} attribute is not, the type
2442 has the ALLOCATABLE property. If both attributes are present,
2443 then the type should be assumed to have the POINTER property
2444 (and not ALLOCATABLE); the \DWATallocated{} attribute may then
2445 be used to indicate that the association status of the object
2446 resulted from execution of an ALLOCATE statement rather than
2447 pointer assignment.}
2449 \textit{For examples using
2450 \DWATallocated{} for \addtoindex{Ada} and
2451 \addtoindex{Fortran 90}
2453 see Appendix \refersec{app:aggregateexamples}.}
2455 \subsubsection{Array Rank}
2456 \label{chap:DWATrank}
2457 \addtoindexx{array!assumed-rank}
2458 \addtoindexx{assumed-rank array|see{array, assumed-rank}}
2459 \textit{The Fortran language supports \doublequote{assumed-rank arrays}. The
2460 rank (the number of dimensions) of an assumed-rank array is unknown
2461 at compile time. The Fortran runtime stores the rank in the array
2462 descriptor metadata.}
2465 \hypertarget{chap:DWATrankofdynamicarray}{\DWATrankINDX}
2466 attribute indicates that an array's rank
2467 (number of dimensions) is dynamic, and therefore unknown at compile
2468 time. The value of the \DWATrankNAME{} attribute is either an integer constant
2469 or a DWARF expression whose evaluation yields the dynamic rank.
2471 The bounds of an array with dynamic rank are described using a
2472 \DWTAGgenericsubrange{} entry, which
2473 is the dynamic rank array equivalent of
2474 \DWTAGsubrangetype. The
2475 difference is that a \DWTAGgenericsubrange{} entry contains generic
2476 lower/upper bound and stride expressions that need to be evaluated for
2477 each dimension. Before any expression contained in a
2478 \DWTAGgenericsubrange{} can be evaluated, the dimension for which the
2479 expression is to be evaluated needs to be pushed onto the stack. The
2480 expression will use it to find the offset of the respective field in
2481 the array descriptor metadata.
2483 \textit{The Fortran compiler is free to choose any layout for the
2484 array descriptor. In particular, the upper and lower bounds and
2485 stride values do not need to be bundled into a structure or record,
2486 but could be laid end to end in the containing descriptor, pointed
2487 to by the descriptor, or even allocated independently of the
2490 Dimensions are enumerated $0$ to $\mathit{rank}-1$ in source program
2493 \textit{For an example in Fortran 2008, see
2494 Section~\refersec{app:assumedrankexample}.}
2497 \section{Template Alias Entries}
2498 \label{chap:templatealiasentries}
2501 In \addtoindex{C++}, a template alias is a form of typedef that has template
2502 parameters. DWARF does not represent the template alias definition
2503 but does represent instantiations of the alias.
2506 A type named using a template alias is represented
2507 by a debugging information entry
2508 \addtoindexx{template alias entry}
2510 \DWTAGtemplatealiasTARG.
2511 The template alias entry has a
2512 \DWATname{} attribute
2513 \addtoindexx{name attribute}
2514 whose value is a null\dash terminated string
2515 containing the name of the template alias as it appears in
2517 The template alias entry has child entries describing the template
2518 actual parameters (see Section \refersec{chap:templateparameters}).