e1074b2c260632f60b21378ea7921df179854a5a
[dwarf-doc.git] / dwarf5 / latexdoc / typeentries.tex
1 \chapter{Type Entries}
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.
6
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 
11 \DWATstartscope{}
12 attribute as described for objects in 
13 Section \refersec{chap:dataobjectentries}.
14
15 \section{Base Type Entries}
16 \label{chap:basetypeentries}
17
18 \textit{A base type is a data type that is not defined in terms of
19 other data types. 
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.}
23
24 A base type is represented by a debugging information entry
25 with the tag 
26 \DWTAGbasetypeTARG.
27
28 A \addtoindex{base type entry}
29 has a \DWATname{} attribute
30 whose
31 \addtoindexx{name attribute}
32 value is
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.
36
37 A base type entry has 
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
45 is given in 
46 Table \refersec{tab:encodingattributevalues}
47 and following text.  
48
49 A base type entry
50 may have a \DWATendianity{} attribute
51 \addtoindexx{endianity attribute}
52 as described in 
53 Section \refersec{chap:dataobjectentries}. 
54 If omitted, the encoding assumes the representation that
55 is the default for the target architecture.
56
57 A base type entry has 
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
66 a value of the type.
67
68 \needlines{5}
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.}
75
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}
81
82 \DWATbitsize{} and a
83 \DWATdatabitoffset{} attribute, 
84 both 
85 \addtoindexx{data bit offset attribute}
86 of whose values are
87 \livelink{chap:classconstant}{integer constant} values
88 (see Section \refersec{chap:staticanddynamicvaluesofattributes}). 
89 The bit size
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
96 language on the
97 target system to locate the beginning of the storage and
98 value. If this attribute is omitted a default data bit offset
99 of zero is assumed.
100
101 \textit{Attribute 
102 \DWATdatabitoffset{} 
103 is 
104 \addtoindexx{bit offset attribute (Version 3)}
105 \addtoindexx{bit offset attribute (Version 3)|see{\textit{also} data bit offset attribute}}
106 new 
107 \addtoindexx{data bit offset attribute}
108 in 
109 \addtoindex{DWARF Version 4}, unchanged in \addtoindex{DWARF Version 5}, and
110 is also used for bit field members 
111 (see Section \refersec{chap:datamemberentries}). 
112 It
113 \hypertarget{chap:DWATbitoffsetbasetypebitlocation}{}
114 replaces the attribute 
115 \DWATbitoffset{} 
116 when used for base
117 \addtoindexx{bit offset attribute (Version 3)}
118 types as defined in \DWARFVersionIII{} and earlier.
119 \DWATbitoffset{}
120 is deprecated for use in base types in DWARF Version 4 and later.
121 See Section 5.1 in the \DWARFVersionIV{}
122 specification for a discussion of compatibility considerations.}
123
124 \begin{table}[!here]
125 \caption{Encoding attribute values}
126 \label{tab:encodingattributevalues}
127 \centering
128 \begin{tabular}{l|p{8cm}}
129 \hline
130 Name&Meaning\\ \hline
131 \DWATEaddressTARG{} & linear machine address (for segmented\break
132   addresses see
133   Section \refersec{chap:segmentedaddresses}) \\
134 \DWATEbooleanTARG& true or false \\
135
136 \DWATEcomplexfloatTARG& complex binary
137 floating\dash point number \\
138 \DWATEfloatTARG{} & binary floating\dash point number \\
139 \DWATEimaginaryfloatTARG& imaginary binary
140 floating\dash point number \\
141 \DWATEsignedTARG& signed binary integer \\
142 \DWATEsignedcharTARG& signed character \\
143 \DWATEunsignedTARG{} & unsigned binary integer \\
144 \DWATEunsignedcharTARG{} & unsigned character \\
145 \DWATEpackeddecimalTARG{}  & packed decimal \\
146 \DWATEnumericstringTARG& numeric string \\
147 \DWATEeditedTARG{} & edited string \\
148 \DWATEsignedfixedTARG{} & signed fixed\dash point scaled integer \\
149 \DWATEunsignedfixedTARG& unsigned fixed\dash point scaled integer \\
150 \DWATEdecimalfloatTARG{} & decimal floating\dash point number \\ 
151 \DWATEUTFTARG{} & \addtoindexi{Unicode character}{Unicode character base type} \\
152 \DWATEASCIITARG{} & \addtoindexi{ASCII character}{ASCII character base type}\\
153 \DWATEUCSTARG{} & \addtoindexi{ISO 10646 character}{ISO 10646 character base type}
154                   \addtoindexx{ISO 10646 character set standard}  \\
155 \hline
156 \end{tabular}
157 \end{table}
158
159 \textit{The \DWATEdecimalfloat{} encoding is intended for
160 floating\dash point representations that have a power\dash of\dash ten
161 exponent, such as that specified in IEEE 754R.}
162
163 \textit{The \DWATEUTF{} encoding is intended for \addtoindex{Unicode}
164 string encodings (see the Universal Character Set standard,
165 ISO/IEC 10646\dash 1:1993).
166  \addtoindexx{ISO 10646 character set standard}
167 For example, the 
168 \addtoindex{C++} type char16\_t is
169 represented by a base type entry with a name attribute whose
170 value is \doublequote{char16\_t}, an encoding attribute whose value
171 is \DWATEUTF{} and a byte size attribute whose value is 2.}
172
173 \textit{The \DWATEASCII{} and \DWATEUCS{} encodings are intended for
174 the {Fortran 2003} string kinds 
175 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (ISO/IEC 646:1991) and
176 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)} (UCS-4 in ISO/IEC 10646:2000).}
177 \addtoindexx{ISO 10646 character set standard}
178
179 The 
180 \DWATEpackeddecimal{} 
181 and 
182 \DWATEnumericstring{} 
183 base types
184 represent packed and unpacked decimal string numeric data
185 types, respectively, either of which may be 
186 either 
187 \addtoindexx{decimal scale attribute}
188 signed
189 \addtoindexx{decimal sign attribute}
190 or 
191 \addtoindexx{digit count attribute}
192 unsigned. 
193 \hypertarget{chap:DWATdecimalsigndecimalsignrepresentation}{}
194 These 
195 \hypertarget{chap:DWATdigitcountdigitcountforpackeddecimalornumericstringtype}{}
196 base types are used in combination with
197 \DWATdecimalsign, 
198 \DWATdigitcount{} and 
199 \DWATdecimalscale{}
200 attributes.
201
202 \needlines{5}
203 A \DWATdecimalsign{} attribute 
204 \addtoindexx{decimal sign attribute}
205 is an \livelink{chap:classconstant}{integer constant} that
206 conveys the representation of the sign of the decimal type
207 (see Table \refersec{tab:decimalsignattributevalues}). 
208 Its \livelink{chap:classconstant}{integer constant} value is interpreted to
209 mean that the type has a leading overpunch, trailing overpunch,
210 leading separate or trailing separate sign representation or,
211 alternatively, no sign at all.
212
213 \begin{table}[here]
214 \caption{Decimal sign attribute values}
215 \label{tab:decimalsignattributevalues}
216 \centering
217 \begin{tabular}{l|p{9cm}}
218 \hline
219  Name & Meaning \\
220 \hline
221 \DWDSunsignedTARG{} &  Unsigned \\
222 \DWDSleadingoverpunchTARG{} & Sign
223 is encoded in the most significant digit in a target\dash dependent  manner \\
224 \DWDStrailingoverpunchTARG{} & Sign
225 is encoded in the least significant digit in a target\dash dependent manner \\
226 \DWDSleadingseparateTARG{} 
227 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character 
228 to the left of the most significant digit. \\
229 \DWDStrailingseparateTARG{} 
230 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character 
231 to the right of the least significant digit. \\
232 &Packed decimal type: Least significant nibble contains
233 a target\dash dependent value
234 indicating positive or negative. \\
235 \hline
236 \end{tabular}
237 \end{table}
238
239 \hypertarget{chap:DWATdecimalscaledecimalscalefactor}{}
240 The \DWATdecimalscale{}
241 attribute 
242 \addtoindexx{decimal scale attribute}
243 is an integer constant value
244 that represents the exponent of the base ten scale factor to
245 be applied to an instance of the type. A scale of zero puts the
246 decimal point immediately to the right of the least significant
247 digit. Positive scale moves the decimal point to the right
248 and implies that additional zero digits on the right are not
249 stored in an instance of the type. Negative scale moves the
250 decimal point to the left; if the absolute value of the scale
251 is larger than the digit count, this implies additional zero
252 digits on the left are not stored in an instance of the type.
253
254 The 
255 \DWATdigitcount{}
256 attribute 
257 \addtoindexx{digit count attribute}
258 is an \livelink{chap:classconstant}{integer constant}
259 value that represents the number of digits in an instance of
260 the type.
261
262 The \DWATEedited{}
263 base 
264 \hypertarget{chap:DWATpicturestringpicturestringfornumericstringtype}{}
265 type is used to represent an edited
266 numeric or alphanumeric data type. It is used in combination
267 with a \DWATpicturestring{} attribute whose value is a 
268 null\dash terminated string containing the target\dash dependent picture
269 string associated with the type.
270
271 If the edited base type entry describes an edited numeric
272 data type, the edited type entry has a \DWATdigitcount{} and a
273 \DWATdecimalscale{} attribute. 
274 \addtoindexx{decimal scale attribute}
275 These attributes have the same
276 interpretation as described for the 
277 \DWATEpackeddecimal{} and
278 \DWATEnumericstring{} base 
279 types. If the edited type entry
280 describes an edited alphanumeric data type, the edited type
281 entry does not have these attributes.
282
283
284 \textit{The presence or absence of the \DWATdigitcount{} and
285 \DWATdecimalscale{} attributes 
286 \addtoindexx{decimal scale attribute}
287 allows a debugger to easily
288 distinguish edited numeric from edited alphanumeric, although
289 in principle the digit count and scale are derivable by
290 interpreting the picture string.}
291
292 The \DWATEsignedfixed{} and \DWATEunsignedfixed{} entries
293 describe signed and unsigned fixed\dash point binary data types,
294 respectively.
295
296 The fixed binary type entries have 
297 \addtoindexx{digit count attribute}
298
299 \DWATdigitcount{}
300 attribute with the same interpretation as described for the
301 \DWATEpackeddecimal{} and \DWATEnumericstring{} base types.
302
303 \needlines{4}
304 For a data type with a decimal scale factor, the fixed binary
305 type entry has a 
306 \DWATdecimalscale{} attribute 
307 \addtoindexx{decimal scale attribute}
308 with the same
309 interpretation as described for the 
310 \DWATEpackeddecimal{}
311 and \DWATEnumericstring{} base types.
312
313 \hypertarget{chap:DWATbinaryscalebinaryscalefactorforfixedpointtype}{}
314 For a data type with a binary scale factor, the fixed
315 \addtoindexx{binary scale attribute}
316 binary type entry has a 
317 \DWATbinaryscale{} attribute. 
318 The
319 \DWATbinaryscale{} attribute 
320 is an \livelink{chap:classconstant}{integer constant} value
321 that represents the exponent of the base two scale factor to
322 be applied to an instance of the type.  Zero scale puts the
323 binary point immediately to the right of the least significant
324 bit. Positive scale moves the binary point to the right and
325 implies that additional zero bits on the right are not stored
326 in an instance of the type. Negative scale moves the binary
327 point to the left; if the absolute value of the scale is
328 larger than the number of bits, this implies additional zero
329 bits on the left are not stored in an instance of the type.
330
331 For 
332 \hypertarget{chap:DWATsmallscalefactorforfixedpointtype}{}
333 a data type with a non\dash decimal and non\dash binary scale factor,
334 the fixed binary type entry has a 
335 \DWATsmall{} attribute which
336 \addtoindexx{small attribute}
337 references a 
338 \DWTAGconstant{} entry. The scale factor value
339 is interpreted in accordance with the value defined by the
340 \DWTAGconstant{} entry. The value represented is the product
341 of the integer value in memory and the associated constant
342 entry for the type.
343
344 \textit{The \DWATsmall{} attribute 
345 is defined with the \addtoindex{Ada} \texttt{small}
346 attribute in mind.}
347
348 \section{Unspecified Type Entries}
349 \label{chap:unspecifiedtypeentries}
350 \addtoindexx{unspecified type entry}
351 \addtoindexx{void type|see{unspecified type entry}}
352 Some languages have constructs in which a type 
353 may be left unspecified or the absence of a type
354 may be explicitly indicated.
355
356 An unspecified (implicit, unknown, ambiguous or nonexistent)
357 type is represented by a debugging information entry with
358 the tag \DWTAGunspecifiedtypeTARG. 
359 If a name has been given
360 to the type, then the corresponding unspecified type entry
361 has a \DWATname{} attribute 
362 \addtoindexx{name attribute}
363 whose value is
364 a null\dash terminated
365 string containing the name as it appears in the source program.
366
367 The interpretation of this debugging information entry is
368 intentionally left flexible to allow it to be interpreted
369 appropriately in different languages. For example, in 
370 \addtoindex{C} and \addtoindex{C++}
371 the language implementation can provide an unspecified type
372 entry with the name \doublequote{void} which can be referenced by the
373 type attribute of pointer types and typedef declarations for
374 'void' (see 
375 Sections \refersec{chap:typemodifierentries} and 
376 %The following reference was valid, so the following is probably correct.
377 Section \refersec{chap:typedefentries}, 
378 respectively). As another
379 example, in \addtoindex{Ada} such an unspecified type entry can be referred
380 to by the type attribute of an access type where the denoted
381 \addtoindexx{incomplete type (Ada)}
382 type is incomplete (the name is declared as a type but the
383 definition is deferred to a separate compilation unit).
384
385 \addtoindex{C++} permits using the 
386 \autoreturntype{} specifier for the return type of a member function declaration. 
387 The actual return type is deduced based on the definition of the 
388 function, so it may not be known when the function is declared.  The language 
389 implementation can provide an unspecified type entry with the name \texttt{auto} which 
390 can be referenced by the return type attribute of a function declaration entry.  
391 When the function is later defined, the \DWTAGsubprogram{} entry for the definition
392 includes a reference to the actual return type.
393
394
395 \section{Type Modifier Entries}
396 \label{chap:typemodifierentries}
397 \addtoindexx{type modifier entry}
398 \addtoindexx{type modifier|see{atomic type entry}}
399 \addtoindexx{type modifier|see{constant type entry}}
400 \addtoindexx{type modifier|see{reference type entry}}
401 \addtoindexx{type modifier|see{restricted type entry}}
402 \addtoindexx{type modifier|see{packed type entry}}
403 \addtoindexx{type modifier|see{pointer type entry}}
404 \addtoindexx{type modifier|see{shared type entry}}
405 \addtoindexx{type modifier|see{volatile type entry}}
406 A base or user\dash defined type may be modified in different ways
407 in different languages. A type modifier is represented in
408 DWARF by a debugging information entry with one of the tags
409 given in Table \refersec{tab:typemodifiertags}.
410
411 If a name has been given to the modified type in the source
412 program, then the corresponding modified type entry has
413 a \DWATname{} attribute 
414 \addtoindexx{name attribute}
415 whose value is a null\dash terminated
416 string containing the modified type name as it appears in
417 the source program.
418
419 Each of the type modifier entries has 
420 \addtoindexx{type attribute}
421
422 \DWATtype{} attribute,
423 whose value is a \livelink{chap:classreference}{reference} 
424 to a debugging information entry
425 describing a base type, a user-defined type or another type
426 modifier.
427
428 A modified type entry describing a 
429 \addtoindexx{pointer type entry}
430 pointer or \addtoindex{reference type}
431 (using \DWTAGpointertype,
432 \DWTAGreferencetype{} or
433 \DWTAGrvaluereferencetype) 
434 % Another instance of no-good-place-to-put-index entry.
435 may
436 \addtoindexx{address class attribute} 
437 have 
438 \hypertarget{chap:DWATadressclasspointerorreferencetypes}{}
439
440 \DWATaddressclass{}
441 attribute to describe how objects having the given pointer
442 or reference type ought to be dereferenced.
443
444 A modified type entry describing a \addtoindex{UPC} shared qualified type
445 (using \DWTAGsharedtype) may have a
446 \DWATcount{} attribute
447 \addtoindexx{count attribute}
448 whose value is a constant expressing the (explicit or implied) blocksize specified for the
449 type in the source. If no count attribute is present, then the \doublequote{infinite}
450 blocksize is assumed.
451
452 When multiple type modifiers are chained together to modify
453 a base or user-defined type, the tree ordering reflects the
454 semantics of the 
455 \addtoindexx{reference type entry, lvalue|see{reference type entry}}
456 applicable language 
457 \addtoindexx{reference type entry, rvalue|see{rvalue reference type entry}}
458 rather 
459 \addtoindexx{parameter|see{macro formal parameter list}}
460 than 
461 \addtoindexx{parameter|see{\textit{this} parameter}}
462 the 
463 \addtoindexx{parameter|see{variable parameter attribute}}
464 textual
465 \addtoindexx{parameter|see{optional parameter attribute}}
466 order 
467 \addtoindexx{parameter|see{unspecified parameters entry}}
468 in 
469 \addtoindexx{parameter|see{template value parameter entry}}
470 the 
471 \addtoindexx{parameter|see{template type parameter entry}}
472 source 
473 \addtoindexx{parameter|see{formal parameter entry}}
474 presentation.
475
476 \begin{table}[here]
477 \caption{Type modifier tags}
478 \label{tab:typemodifiertags}
479 \centering
480 \begin{tabular}{l|p{9cm}}
481 \hline
482 Name&Meaning\\ \hline
483 \DWTAGatomictypeTARG{} & C \addtoindex{\_Atomic} qualified type \\
484 \DWTAGconsttypeTARG{} &  C or C++ const qualified type
485 \addtoindexx{const qualified type entry} \addtoindexx{C} \addtoindexx{C++} \\
486 \DWTAGpackedtypeTARG& \addtoindex{Pascal} or Ada packed type\addtoindexx{packed type entry}
487 \addtoindexx{packed qualified type entry} \addtoindexx{Ada} \addtoindexx{Pascal} \\
488 \DWTAGpointertypeTARG{} & Pointer to an object of
489 the type being modified \addtoindexx{pointer qualified type entry} \\
490 \DWTAGreferencetypeTARG& \addtoindex{C++} (lvalue) reference 
491 to an object of the type 
492 \addtoindexx{reference type entry}
493 \mbox{being} modified
494 \addtoindexx{reference qualified type entry} \\
495 \DWTAGrestricttypeTARG& \addtoindex{C} 
496 restrict 
497 \addtoindexx{restricted type entry}
498 qualified type
499 \addtoindexx{restrict qualified type} \\
500 \DWTAGrvaluereferencetypeTARG{} & \addtoindex{C++}
501 \addtoindexx{rvalue reference type entry}
502 rvalue 
503 \addtoindexx{restricted type entry}
504 reference to an object of the type \mbox{being} modified 
505 \addtoindexx{rvalue reference qualified type entry} \\
506 \DWTAGsharedtypeTARG&\addtoindex{UPC} shared qualified type 
507 \addtoindexx{shared qualified type entry} \\
508 \DWTAGvolatiletypeTARG&\addtoindex{C} or \addtoindex{C++} volatile qualified type 
509 \addtoindexx{volatile qualified type entry} \\
510 \hline
511 \end{tabular}
512 \end{table}
513
514 \needlines{6}
515 \textit{As examples of how type modifiers are ordered, consider the following
516 \addtoindex{C} declarations:}
517 \begin{lstlisting}[numbers=none]
518    const unsigned char * volatile p;
519 \end{lstlisting}
520 \textit{which represents a volatile pointer to a constant
521 character. This is encoded in DWARF as:}
522
523 \begin{dwflisting}
524 \begin{alltt}
525         \DWTAGvariable(p) -->
526             \DWTAGvolatiletype -->
527                 \DWTAGpointertype -->
528                     \DWTAGconsttype -->
529                         \DWTAGbasetype(unsigned char)
530 \end{alltt}
531 \end{dwflisting}
532
533 %\needlines{5}
534 \textit{On the other hand}
535 \begin{lstlisting}[numbers=none]                        
536    volatile unsigned char * const restrict p;
537 \end{lstlisting}
538 \textit{represents a restricted constant
539 pointer to a volatile character. This is encoded as:}
540
541 \begin{dwflisting}
542 \begin{alltt}
543         \DWTAGvariable(p) -->
544             \DWTAGrestricttype -->
545                 \DWTAGconsttype -->
546                     \DWTAGpointertype -->
547                         \DWTAGvolatiletype -->
548                             \DWTAGbasetype(unsigned char)
549 \end{alltt}
550 \end{dwflisting}
551
552 \section{Typedef Entries}
553 \label{chap:typedefentries}
554 A named type that is defined in terms of another type
555 definition is represented by a debugging information entry with
556 \addtoindexx{typedef entry}
557 the tag \DWTAGtypedefTARG. 
558 The typedef entry has a \DWATname{} attribute 
559 \addtoindexx{name attribute}
560 whose value is a null\dash terminated string containing
561 the name of the typedef as it appears in the source program.
562
563 The typedef entry may also contain 
564 \addtoindexx{type attribute}
565
566 \DWATtype{} attribute whose
567 value is a \livelink{chap:classreference}{reference} 
568 to the type named by the typedef. If
569 the debugging information entry for a typedef represents
570 a declaration of the type that is not also a definition,
571 it does not contain a type attribute.
572
573 \textit{Depending on the language, a named type that is defined in
574 terms of another type may be called a type alias, a subtype,
575 a constrained type and other terms. A type name declared with
576 no defining details may be termed an 
577 \addtoindexx{incomplete type}
578 incomplete, forward or hidden type. 
579 While the DWARF \DWTAGtypedef{} entry was
580 originally inspired by the like named construct in 
581 \addtoindex{C} and \addtoindex{C++},
582 it is broadly suitable for similar constructs (by whatever
583 source syntax) in other languages.}
584
585 \section{Array Type Entries}
586 \label{chap:arraytypeentries}
587 \label{chap:DWTAGgenericsubrange}
588
589 \textit{Many languages share the concept of an \doublequote{array,} which is
590 \addtoindexx{array type entry}
591 a table of components of identical type.}
592
593 An array type is represented by a debugging information entry
594 with the tag \DWTAGarraytypeTARG. 
595 If a name has been given to
596 \addtoindexx{array!declaration of type}
597 the array type in the source program, then the corresponding
598 array type entry has a \DWATname{} attribute 
599 \addtoindexx{name attribute}
600 whose value is a
601 null\dash terminated string containing the array type name as it
602 appears in the source program.
603
604 The 
605 \hypertarget{chap:DWATorderingarrayrowcolumnordering}{}
606 array type entry describing a multidimensional array may
607 \addtoindexx{array!element ordering}
608 have a \DWATordering{} attribute whose 
609 \livelink{chap:classconstant}{integer constant} value is
610 interpreted to mean either row-major or column-major ordering
611 of array elements. The set of values and their meanings
612 for the ordering attribute are listed in 
613 Table \refersec{tab:arrayordering}. 
614 If no
615 ordering attribute is present, the default ordering for the
616 source language (which is indicated by the 
617 \DWATlanguage{}
618 attribute 
619 \addtoindexx{language attribute}
620 of the enclosing compilation unit entry) is assumed.
621
622 \begin{simplenametable}[1.8in]{Array ordering}{tab:arrayordering}
623 \DWORDcolmajorTARG{} \\
624 \DWORDrowmajorTARG{} \\
625 \end{simplenametable}
626
627 The ordering attribute may optionally appear on one-dimensional
628 arrays; it will be ignored.
629
630 An array type entry has 
631 \addtoindexx{type attribute}
632 a \DWATtype{} attribute
633 describing
634 \addtoindexx{array!element type}
635 the type of each element of the array.
636
637 If the amount of storage allocated to hold each element of an
638 object of the given array type is different from the amount
639 \addtoindexx{stride attribute|see{bit stride attribute or byte stride attribute}}
640 of storage that is normally allocated to hold an individual
641 \hypertarget{chap:DWATbitstridearrayelementstrideofarraytype}{}
642 object of the 
643 \hypertarget{chap:DWATbytestridearrayelementstrideofarraytype}{}
644 indicated element type, then the array type
645 \addtoindexx{bit stride attribute}
646 entry has either a 
647 \DWATbytestride{} 
648 or 
649 \addtoindexx{byte stride attribute}
650 a \DWATbitstride{}
651 attribute, 
652 \addtoindexx{bit stride attribute}
653 whose value 
654 (see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
655 is the size of each
656 element of the array.
657
658 The array type entry may have either a \DWATbytesize{} or a
659 \DWATbitsize{} attribute 
660 (see Section \refersec{chap:byteandbitsizes}), 
661 whose value is the
662 amount of storage needed to hold an instance of the array type.
663
664 \textit{If the size of the array can be determined statically at
665 compile time, this value can usually be computed by multiplying
666 the number of array elements by the size of each element.}
667
668
669 Each array dimension is described by a debugging information
670 entry with either the 
671 \addtoindexx{subrange type entry!as array dimension}
672 tag \DWTAGsubrangetype{} or the 
673 \addtoindexx{enumeration type entry!as array dimension}
674 tag
675 \DWTAGenumerationtype. These entries are
676 children of the
677 array type entry and are ordered to reflect the appearance of
678 the dimensions in the source program (that is, leftmost dimension
679 first, next to leftmost second, and so on).
680
681 \textit{In languages that have no concept of a 
682 \doublequote{multidimensional array} (for example, 
683 \addtoindex{C}), an array of arrays may
684 be represented by a debugging information entry for a
685 multidimensional array.}
686
687 Alternatively, for an array with dynamic rank the array dimensions 
688 are described by a debugging information entry with the tag
689 \DWTAGgenericsubrangeTARG.
690 This entry has the same attributes as a
691 \DWTAGsubrangetype{} entry; however,
692 there is just one \DWTAGgenericsubrangeNAME{} entry and it describes all of the
693 dimensions of the array.
694 If \DWTAGgenericsubrangeNAME{}
695 is used, the number of dimensions must be specified using a
696 \DWATrank{} attribute. See also Section
697 \refersec{chap:DWATrank}.
698
699
700 \needlines{5}
701 Other attributes especially applicable to arrays are
702 \DWATallocated, 
703 \DWATassociated{} and 
704 \DWATdatalocation,
705 which are described in 
706 Section \refersec{chap:dynamictypeproperties}. 
707 For relevant examples, see also Appendix \refersec{app:fortranarrayexample}.
708
709 \section{Coarray Type Entries}
710 \label{chap:coarraytypeentries}
711 \addtoindexx{coarray}
712 \textit{In Fortran, a \doublequote{coarray} is an array whose
713 elements are located in different processes rather than in the
714 memory of one process. The individual elements
715 of a coarray can be scalars or arrays.
716 Similar to arrays, coarrays have \doublequote{codimensions} that are 
717 indexed using a \doublequote{coindex} or multiple \doublequote{coindices}.
718 \addtoindexx{codimension|see{coarray}}
719 \addtoindexx{coindex|see{coarray}}
720 }
721
722 A coarray type is represented by a debugging information entry 
723 with the tag \DWTAGcoarraytypeTARG.
724 If a name has been given to the 
725 coarray type in the source, then the corresponding coarray type 
726 entry has a \DWATname{} attribute whose value is a null-terminated 
727 string containing the array type name as it appears in the source 
728 program.
729
730 A coarray entry has one or more \DWTAGsubrangetype{} child entries,
731 one for each codimension. It also has a \DWATtype{} attribute 
732 describing the type of each element of the coarray.
733
734 \textit{In a coarray application, the run-time number of processes in the application
735 is part of the coindex calculation.  It is represented in the Fortran source by
736 a coindex which is declared with a \doublequote{*} as the upper bound.  To express this
737 concept in DWARF, the \DWTAGsubrangetype{} child entry for that index has 
738 only a lower bound and no upper bound.}
739
740 \textit{How coarray elements are located and how coindices are 
741 converted to process specifications is processor-dependent.}
742
743 \needlines{8}
744 \section{Structure, Union, Class and Interface Type Entries}
745 \label{chap:structureunionclassandinterfacetypeentries}
746
747 \textit{The languages 
748 \addtoindex{C}, 
749 \addtoindex{C++}, and 
750 \addtoindex{Pascal}, among others, allow the
751 programmer to define types that are collections of related
752 \addtoindexx{structure type entry}
753 components. 
754 In \addtoindex{C} and \addtoindex{C++}, these collections are called
755 \doublequote{structures.} 
756 In \addtoindex{Pascal}, they are called \doublequote{records.}
757 The components may be of different types. The components are
758 called \doublequote{members} in \addtoindex{C} and 
759 \addtoindex{C++}, and \doublequote{fields} in \addtoindex{Pascal}.}
760
761 \textit{The components of these collections each exist in their
762 own space in computer memory. The components of a \addtoindex{C} or \addtoindex{C++}
763 \doublequote{union} all coexist in the same memory.}
764
765 \textit{\addtoindex{Pascal} and 
766 other languages have a \doublequote{discriminated union,}
767 \addtoindexx{discriminated union|see {variant entry}}
768 also called a \doublequote{variant record.} Here, selection of a
769 number of alternative substructures (\doublequote{variants}) is based
770 on the value of a component that is not part of any of those
771 substructures (the \doublequote{discriminant}).}
772
773 \textit{\addtoindex{C++} and 
774 \addtoindex{Java} have the notion of \doublequote{class,} which is in some
775 ways similar to a structure. A class may have \doublequote{member
776 functions} which are subroutines that are within the scope
777 of a class or structure.}
778
779 \textit{The \addtoindex{C++} notion of 
780 structure is more general than in \addtoindex{C}, being
781 equivalent to a class with minor differences. Accordingly,
782 in the following discussion statements about 
783 \addtoindex{C++} classes may
784 be understood to apply to \addtoindex{C++} structures as well.}
785
786 \subsection{Structure, Union and Class Type Entries}
787 \label{chap:structureunionandclasstypeentries}
788 Structure, union, and class types are represented by debugging
789 \addtoindexx{structure type entry}
790 information entries 
791 \addtoindexx{union type entry}
792 with 
793 \addtoindexx{class type entry}
794 the tags 
795 \DWTAGstructuretypeTARG,
796 \DWTAGuniontypeTARG, 
797 and \DWTAGclasstypeTARG,
798 respectively. If a name has been given to the structure,
799 union, or class in the source program, then the corresponding
800 structure type, union type, or class type entry has a
801 \DWATname{} attribute 
802 \addtoindexx{name attribute}
803 whose value is a null\dash terminated string
804 containing the type name as it appears in the source program.
805
806 The members of a structure, union, or class are represented
807 by debugging information entries that are owned by the
808 corresponding structure type, union type, or class type entry
809 and appear in the same order as the corresponding declarations
810 in the source program.
811
812 A structure, union, or class type may have a \DWATexportsymbolsNAME{}
813 attribute 
814 \livetarg{chap:DWATexportsymbolsofstructunionclass}{}
815 which indicates that all member names defined within 
816 the structure, union, or class may be referenced as if they were
817 defined within the containing structure, union, or class. 
818
819 \textit{This may be used to describe anonymous structures, unions 
820 and classes in \addtoindex{C} or \addtoindex{C++}}.
821
822 A structure type, union type or class type entry may have
823 either a \DWATbytesize{} or a
824 \DWATbitsize{} attribute 
825 \hypertarget{chap:DWATbitsizedatamemberbitsize}{}
826 (see Section \refersec{chap:byteandbitsizes}), 
827 whose value is the amount of storage needed
828 to hold an instance of the structure, union or class type,
829 including any padding.
830   
831 An incomplete structure, union or class type 
832 \addtoindexx{incomplete structure/union/class}
833 is 
834 \addtoindexx{incomplete type}
835 represented by a structure, union or class
836 entry that does not have a byte size attribute and that has
837 \addtoindexx{declaration attribute}
838 a \DWATdeclaration{} attribute.
839
840 If the complete declaration of a type has been placed in
841 \hypertarget{chap:DWATsignaturetypesignature}{}
842 a separate \addtoindex{type unit}
843 (see Section \refersec{chap:separatetypeunitentries}), 
844 an incomplete declaration 
845 \addtoindexx{incomplete type}
846 of that type in the compilation unit may provide
847 the unique 64\dash bit signature of the type using 
848 \addtoindexx{type signature}
849 a \DWATsignature{}
850 attribute.
851
852 If a structure, union or class entry represents the definition
853 of a structure, union or class member corresponding to a prior
854 incomplete structure, union or class, the entry may have a
855 \DWATspecification{} attribute 
856 \addtoindexx{specification attribute}
857 whose value is a \livelink{chap:classreference}{reference} to
858 the debugging information entry representing that incomplete
859 declaration.
860
861 Structure, union and class entries containing the
862 \DWATspecification{} attribute 
863 \addtoindexx{specification attribute}
864 do not need to duplicate
865 information provided by the declaration entry referenced by the
866 specification attribute.  In particular, such entries do not
867 need to contain an attribute for the name of the structure,
868 union or class they represent if such information is already
869 provided in the declaration.
870
871 \textit{For \addtoindex{C} and \addtoindex{C++}, 
872 data 
873 \addtoindexx{data member|see {member entry (data)}}
874 member declarations occurring within
875 the declaration of a structure, union or class type are
876 considered to be \doublequote{definitions} of those members, with
877 the exception of \doublequote{static} data members, whose definitions
878 appear outside of the declaration of the enclosing structure,
879 union or class type. Function member declarations appearing
880 within a structure, union or class type declaration are
881 definitions only if the body of the function also appears
882 within the type declaration.}
883
884 If the definition for a given member of the structure, union
885 or class does not appear within the body of the declaration,
886 that member also has a debugging information entry describing
887 its definition. That latter entry has a 
888 \DWATspecification{} attribute 
889 \addtoindexx{specification attribute}
890 referencing the debugging information entry
891 owned by the body of the structure, union or class entry and
892 representing a non\dash defining declaration of the data, function
893 or type member. The referenced entry will not have information
894 about the location of that member (low and high pc attributes
895 for function members, location descriptions for data members)
896 and will have a \DWATdeclaration{} attribute.
897
898 \needlines{5}
899 \textit{Consider a nested class whose 
900 definition occurs outside of the containing class definition, as in:}
901
902 \begin{lstlisting}[numbers=none]
903 struct A {
904     struct B;
905 };
906 struct A::B { ... };
907 \end{lstlisting}
908
909 \textit{The two different structs can be described in 
910 different compilation units to 
911 facilitate DWARF space compression 
912 (see Appendix \refersec{app:usingcompilationunits}).}
913
914 \subsection{Interface Type Entries}
915 \label{chap:interfacetypeentries}
916
917 \textit{The \addtoindex{Java} language defines \doublequote{interface} types. 
918 An interface
919 \addtoindexx{interface type entry}
920 in \addtoindex{Java} is similar to a \addtoindex{C++} or 
921 \addtoindex{Java} class with only abstract
922 methods and constant data members.}
923
924 Interface types 
925 \addtoindexx{interface type entry}
926 are represented by debugging information
927 entries with the 
928 tag \DWTAGinterfacetypeTARG.
929
930 An interface type entry has 
931 a \DWATname{} attribute,
932 \addtoindexx{name attribute}
933 whose
934 value is a null\dash terminated string containing the type name
935 as it appears in the source program.
936
937 The members of an interface are represented by debugging
938 information entries that are owned by the interface type
939 entry and that appear in the same order as the corresponding
940 declarations in the source program.
941
942 \subsection{Derived or Extended Structs, Classes and Interfaces}
943 \label{chap:derivedorextendedstructsclasesandinterfaces}
944
945 \textit{In \addtoindex{C++}, a class (or struct) 
946 may 
947 \addtoindexx{derived type (C++)|see{inheritance entry}}
948 be \doublequote{derived from} or be a
949 \doublequote{subclass of} another class. 
950 In \addtoindex{Java}, an interface may \doublequote{extend}
951 \addtoindexx{extended type (Java)|see{inheritance entry}}
952 one 
953 \addtoindexx{implementing type (Java)|see{inheritance entry}}
954 or more other interfaces, and a class may \doublequote{extend} another
955 class and/or \doublequote{implement} one or more interfaces. All of these
956 relationships may be described using the following. Note that
957 in \addtoindex{Java}, 
958 the distinction between extends and implements is
959 implied by the entities at the two ends of the relationship.}
960
961 A class type or interface type entry that describes a
962 derived, extended or implementing class or interface owns
963 \addtoindexx{implementing type (Java)|see{inheritance entry}}
964 debugging information entries describing each of the classes
965 or interfaces it is derived from, extending or implementing,
966 respectively, ordered as they were in the source program. Each
967 such entry has 
968 \addtoindexx{inheritance entry}
969 the 
970 tag \DWTAGinheritanceTARG.
971
972 An inheritance entry 
973 \addtoindexx{type attribute}
974 has 
975 \addtoindexx{inheritance entry}
976
977 \DWATtype{} attribute whose value is
978 a reference to the debugging information entry describing the
979 class or interface from which the parent class or structure
980 of the inheritance entry is derived, extended or implementing.
981
982 An inheritance entry 
983 \addtoindexx{inheritance entry}
984 for a class that derives from or extends
985 \hypertarget{chap:DWATdatamemberlocationinheritedmemberlocation}{}
986 another class or struct also has 
987 \addtoindexx{data member location attribute}
988
989 \DWATdatamemberlocation{}
990 attribute, whose value describes the location of the beginning
991 of the inherited type relative to the beginning address of the
992 instance of the derived class. If that value is a constant, it is the offset
993 in bytes from the beginning of the class to the beginning of
994 the instance of the inherited type. Otherwise, the value must be a location
995 description. In this latter case, the beginning address of
996 the instance of the derived class is pushed on the expression stack before
997 the \addtoindex{location description}
998 is evaluated and the result of the
999 evaluation is the location of the instance of the inherited type.
1000
1001 \textit{The interpretation of the value of this attribute for
1002 inherited types is the same as the interpretation for data
1003 members 
1004 (see Section \referfol{chap:datamemberentries}).  }
1005
1006 An 
1007 \addtoindexx{inheritance entry}
1008 inheritance entry 
1009 \hypertarget{chap:DWATaccessibilitycppinheritedmembers}{}
1010 may 
1011 \addtoindexx{accessibility attribute}
1012 have a
1013 \DWATaccessibility{}
1014 attribute. 
1015 If no accessibility attribute
1016 is present, private access is assumed for an entry of a class
1017 and public access is assumed for an entry of an interface,
1018 struct or union.
1019
1020 If 
1021 \hypertarget{chap:DWATvirtualityvirtualityofbaseclass}{}
1022 the class referenced by the 
1023 \addtoindexx{inheritance entry}
1024 inheritance entry serves
1025 as a \addtoindex{C++} virtual base class, the inheritance entry has a
1026 \DWATvirtuality{} attribute.
1027
1028 \textit{For a \addtoindex{C++} virtual base, the 
1029 \addtoindex{data member location attribute}
1030 will usually consist of a non-trivial 
1031 \addtoindex{location description}.}
1032
1033 \subsection{Access Declarations}
1034 \label{chap:accessdeclarations}
1035
1036 \textit{In \addtoindex{C++}, a derived class may contain access declarations that
1037 \addtoindexx{access declaration entry}
1038 change the accessibility of individual class members from the
1039 overall accessibility specified by the inheritance declaration.
1040 A single access declaration may refer to a set of overloaded
1041 names.}
1042
1043 If a derived class or structure contains access declarations,
1044 each such declaration may be represented by a debugging
1045 information entry with the tag 
1046 \DWTAGaccessdeclarationTARG. 
1047 Each
1048 such entry is a child of the class or structure type entry.
1049
1050 An access declaration entry has 
1051 a \DWATname{} attribute, 
1052 \addtoindexx{name attribute}
1053 whose
1054 value is a null\dash terminated string representing the name used
1055 in the declaration in the source program, including any class
1056 or structure qualifiers.
1057
1058 An access declaration entry 
1059 \hypertarget{chap:DWATaccessibilitycppbaseclasses}{}
1060 also 
1061 has a 
1062 \DWATaccessibility{}
1063 attribute describing the declared accessibility of the named
1064 entities.
1065
1066
1067 \needlines{6}
1068 \subsection{Friends}
1069 \label{chap:friends}
1070
1071 Each \doublequote{friend} 
1072 \addtoindexx{friend entry}
1073 declared by a structure, union or class
1074 \hypertarget{chap:DWATfriendfriendrelationship}{}
1075 type may be represented by a debugging information entry
1076 that is a child of the structure, union or class type entry;
1077 the friend entry has the 
1078 tag \DWTAGfriendTARG.
1079
1080 A friend entry has 
1081 \addtoindexx{friend attribute}
1082 a \DWATfriend{} attribute, whose value is
1083 a reference to the debugging information entry describing
1084 the declaration of the friend.
1085
1086
1087 \subsection{Data Member Entries}
1088 \label{chap:datamemberentries}
1089
1090 A data member (as opposed to a member function) is
1091 represented by a debugging information entry with the 
1092 tag \DWTAGmemberTARG. 
1093 The 
1094 \addtoindexx{member entry (data)}
1095 member entry for a named member has
1096 a \DWATname{} attribute 
1097 \addtoindexx{name attribute}
1098 whose value is a null\dash terminated
1099 string containing the member name as it appears in the source
1100 program. If the member entry describes an 
1101 \addtoindex{anonymous union},
1102 the name attribute is omitted or the value of the attribute
1103 consists of a single zero byte.
1104
1105 The data member entry has 
1106 \addtoindexx{type attribute}
1107
1108 \DWATtype{} attribute to denote
1109 \addtoindexx{member entry (data)}
1110 the type of that member.
1111
1112 A data member entry may 
1113 \addtoindexx{accessibility attribute}
1114 have a 
1115 \DWATaccessibility{}
1116 attribute. If no accessibility attribute is present, private
1117 access is assumed for an entry of a class and public access
1118 is assumed for an entry of a structure, union, or interface.
1119
1120 A data member 
1121 \hypertarget{chap:DWATmutablemutablepropertyofmemberdata}{}
1122 entry 
1123 \addtoindexx{member entry (data)}
1124 may 
1125 \addtoindexx{mutable attribute}
1126 have a \DWATmutable{} attribute,
1127 which is a \livelink{chap:classflag}{flag}. 
1128 This attribute indicates whether the data
1129 member was declared with the mutable storage class specifier.
1130
1131 The beginning of a data member 
1132 \addtoindexx{beginning of a data member} 
1133 is described relative to
1134 \addtoindexx{beginning of an object}
1135 the beginning of the object in which it is immediately
1136 contained. In general, the beginning is characterized by
1137 both an address and a bit offset within the byte at that
1138 address. When the storage for an entity includes all of
1139 the bits in the beginning byte, the beginning bit offset is
1140 defined to be zero.
1141
1142 Bit offsets in DWARF use the bit numbering and direction
1143 conventions that are appropriate to the current language on
1144 the target system.
1145
1146 The member entry 
1147 \addtoindexx{member entry (data)}
1148 corresponding to a data member that is
1149 \hypertarget{chap:DWATdatabitoffsetdatamemberbitlocation}{}
1150 defined 
1151 \hypertarget{chap:DWATdatamemberlocationdatamemberlocation}{}
1152 in a structure, union or class may have either
1153 \addtoindexx{data member location attribute}
1154 a
1155 \DWATdatamemberlocation{} attribute or a
1156 \DWATdatabitoffset{}
1157 attribute. If the beginning of the data member is the same as
1158 the beginning of the containing entity then neither attribute
1159 is required.
1160
1161 \needlines{4}
1162 For a \DWATdatamemberlocation{} attribute
1163 \addtoindexx{data member location attribute}
1164 there are two cases:
1165 \begin{enumerate}[1. ]
1166 \item If the value is an \livelink{chap:classconstant}{integer constant}, 
1167 it is the offset
1168 in bytes from the beginning of the containing entity. If
1169 the beginning of the containing entity has a non-zero bit
1170 offset then the beginning of the member entry has that same
1171 bit offset as well.
1172
1173 \item Otherwise, the value must be a \addtoindex{location description}.
1174 In
1175 this case, the beginning of the containing entity must be byte
1176 aligned. The beginning address is pushed on the DWARF stack
1177 before the \addtoindex{location} description is evaluated; the result of
1178 the evaluation is the base address of the member entry.
1179
1180 \textit{The push on the DWARF expression stack of the base address of
1181 the containing construct is equivalent to execution of the
1182 \DWOPpushobjectaddress{} operation 
1183 (see Section \refersec{chap:stackoperations});
1184 \DWOPpushobjectaddress{} therefore 
1185 is not needed at the
1186 beginning of a \addtoindex{location description} for a data member. 
1187 The
1188 result of the evaluation is a location---either an address or
1189 the name of a register, not an offset to the member.}
1190
1191 \textit{A \DWATdatamemberlocation{} 
1192 attribute 
1193 \addtoindexx{data member location attribute}
1194 that has the form of a
1195 \addtoindex{location description} is not valid for a data member contained
1196 in an entity that is not byte aligned because DWARF operations
1197 do not allow for manipulating or computing bit offsets.}
1198
1199 \end{enumerate}
1200
1201 \needlines{4}
1202 For a \DWATdatabitoffset{} attribute, 
1203 the value is an \livelink{chap:classconstant}{integer constant} 
1204 (see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
1205 that specifies the number of bits
1206 from the beginning of the containing entity to the beginning
1207 of the data member. This value must be greater than or equal
1208 to zero, but is not limited to less than the number of bits
1209 per byte.
1210
1211 If the size of a data member is not the same as the size
1212 of the type given for the data member, the data member has
1213 \addtoindexx{bit size attribute}
1214 either a \DWATbytesize{} 
1215 or a \DWATbitsize{} attribute whose
1216 \livelink{chap:classconstant}{integer constant} value 
1217 (see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
1218 is the amount
1219 of storage needed to hold the value of the data member.
1220
1221 \textit{Bit fields in \addtoindex{C} and \addtoindex{C++} 
1222 typically 
1223 \addtoindexx{bit fields} 
1224 require the use 
1225 \addtoindexx{data bit offset}
1226 of 
1227 \addtoindexx{data bit size}
1228 the
1229 \DWATdatabitoffset{} and 
1230 \DWATbitsize{} attributes.}
1231
1232 \needlines{6}
1233 \textit{This Standard uses the following bit numbering and direction
1234 conventions in examples. These conventions are for illustrative
1235 purposes and other conventions may apply on particular
1236 architectures.}
1237 \begin{itemize}
1238 \item \textit{For big\dash endian architectures, bit offsets are
1239 counted from high-order to low\dash order bits within a byte (or
1240 larger storage unit); in this case, the bit offset identifies
1241 the high\dash order bit of the object.}
1242
1243 \item \textit{For little\dash endian architectures, bit offsets are
1244 counted from low\dash order to high\dash order bits within a byte (or
1245 larger storage unit); in this case, the bit offset identifies
1246 the low\dash order bit of the object.}
1247 \end{itemize}
1248
1249
1250 \textit{In either case, the bit so identified is defined as the 
1251 \addtoindexx{beginning of an object}
1252 beginning of the object.}
1253
1254 \needlines{5}
1255 \textit{For example, take one possible representation of the following 
1256 \addtoindex{C} structure definition 
1257 in both big\dash and little\dash endian byte orders:}
1258
1259 \begin{lstlisting}
1260 struct S {
1261     int j:5;
1262     int k:6;
1263     int m:5;
1264     int n:8;
1265 };
1266 \end{lstlisting}
1267
1268 \textit{Figures \referfol{fig:bigendiandatabitoffsets} and
1269 \refersec{fig:littleendiandatabitoffsets}
1270 show the structure layout
1271 and data bit offsets for example big\dash\   and little\dash endian
1272 architectures, respectively. Both diagrams show a structure
1273 that begins at address A and whose size is four bytes. Also,
1274 high order bits are to the left and low order bits are to
1275 the right.}
1276
1277 \begin{figure}[h]
1278 \begin{dwflisting}
1279 \begin{verbatim}
1280
1281     j:0
1282     k:5
1283     m:11
1284     n:16
1285
1286     Addresses increase ->
1287     |       A       |     A + 1     |    A + 2      |    A + 3      | 
1288
1289     Data bit offsets increase ->
1290     +---------------+---------------+---------------+---------------+
1291     |0     4|5         10|11      15|16           23|24           31|
1292     |   j   |     k      | m        |        n      |       <pad>   |
1293     |       |            |          |               |               | 
1294     +---------------------------------------------------------------+ 
1295
1296 \end{verbatim}
1297 \end{dwflisting}
1298 \caption{Big-endian data bit offsets}
1299 \label{fig:bigendiandatabitoffsets}
1300 \end{figure}
1301
1302 \begin{figure}[h]
1303 \begin{dwflisting}
1304 \begin{verbatim}
1305
1306     j:0
1307     k:5
1308     m:11
1309     n:16
1310                                                <- Addresses increase
1311     |     A + 3     |     A + 2     |    A + 1      |       A       | 
1312
1313                                         <-  Data bit offsets increase 
1314     +---------------+---------------+---------------+---------------+
1315     |31           24|23           16|15     11|10       5|4        0|
1316     |     <pad>     |        n      |    m    |    k     |     j    |
1317     |               |               |         |          |          |
1318     +---------------------------------------------------------------+
1319
1320 \end{verbatim}
1321 \end{dwflisting}
1322 \caption{Little-endian data bit offsets}
1323 \label{fig:littleendiandatabitoffsets}
1324 \end{figure}
1325
1326 \needlines{4}
1327 \textit{Note that data member bit offsets in this example are the
1328 same for both big\dash\ and little\dash endian architectures even
1329 though the fields are allocated in different directions
1330 (high\dash order to low-order versus low\dash order to high\dash order);
1331 the bit naming conventions for memory and/or registers of
1332 the target architecture may or may not make this seem natural.}
1333
1334 \textit{For a more extensive example showing nested and packed records
1335 and arrays, see 
1336 Appendix \refersec{app:pascalexample}.}
1337
1338 \needlines{4}
1339 \textit{Attribute \DWATdatabitoffset{} 
1340 is new in 
1341 \addtoindex{DWARF Version 4}, unchanged in \addtoindex{DWARF Version 5},
1342 and is also used for base types 
1343 (see Section 
1344 \refersec{chap:basetypeentries}). 
1345 It replaces the
1346 \livetarg{chap:DWATbitoffsetdatamemberbitlocation}{}
1347 attributes \DWATbitoffset{} and
1348 \DWATbytesize{} when used to
1349 identify the beginning of bit field data members as defined
1350 in DWARF V3 and earlier. The \DWATbytesize, 
1351 \DWATbitsize{} and 
1352 \DWATbitoffset{}
1353 attribute combination is deprecated for data members in DWARF
1354 Version 4 and later. See Section 5.6.6 in the DWARF Version 4
1355 specification for a discussion of compatibility considerations.}
1356
1357 \subsection{Member Function Entries}
1358 \label{chap:memberfunctionentries}
1359
1360 A member function is represented by a 
1361 \addtoindexx{member function entry}
1362 debugging information entry 
1363 with the 
1364 \addtoindexx{subprogram entry!as member function}
1365 tag \DWTAGsubprogram.
1366 The member function entry
1367 may contain the same attributes and follows the same rules
1368 as non\dash member global subroutine entries 
1369 (see Section \refersec{chap:subroutineandentrypointentries}).
1370
1371 \textit{In particular, if the member function entry is an
1372 instantiation of a member function template, it follows the 
1373 same rules as function template instantiations (see Section 
1374 \refersec{chap:functiontemplateinstantiations}).
1375 }
1376
1377
1378 \addtoindexx{accessibility attribute}
1379 member function entry may have a 
1380 \DWATaccessibility{}
1381 attribute. If no accessibility attribute is present, private
1382 access is assumed for an entry of a class and public access
1383 is assumed for an entry of a structure, union or interface.
1384
1385 If 
1386 \hypertarget{chap:DWATvirtualityvirtualityoffunction}{}
1387 the member function entry describes a virtual function,
1388 then that entry has a 
1389 \DWATvirtuality{} attribute.
1390
1391 If 
1392 \hypertarget{chap:DWATexplicitexplicitpropertyofmemberfunction}{}
1393 the member function entry describes an explicit member
1394 function, then that entry has 
1395 \addtoindexx{explicit attribute}
1396
1397 \DWATexplicit{} attribute.
1398
1399 An 
1400 \hypertarget{chap:DWATvtableelemlocationvirtualfunctiontablevtableslot}{}
1401 entry for a virtual function also has a
1402 \DWATvtableelemlocation{}
1403 \addtoindexi{attribute}{vtable element location attribute} whose value contains
1404 a \addtoindex{location description} 
1405 yielding the address of the slot
1406 for the function within the virtual function table for the
1407 enclosing class. The address of an object of the enclosing
1408 type is pushed onto the expression stack before the location
1409 description is evaluated.
1410
1411 If 
1412 \hypertarget{chap:DWATobjectpointerobjectthisselfpointerofmemberfunction}{}
1413 the member function entry describes a non\dash static member
1414 \addtoindexx{this pointer attribute|see{object pointer attribute}}
1415 function, then that entry 
1416 \addtoindexx{self pointer attribute|see{object pointer attribute}}
1417 has 
1418 \addtoindexx{object pointer attribute}
1419 a \DWATobjectpointer{} 
1420 attribute
1421 whose value is a \livelink{chap:classreference}{reference} 
1422 to the formal parameter entry
1423 that corresponds to the object for which the function is
1424 called. The name attribute of that formal parameter is defined
1425 by the current language (for example, 
1426 \texttt{this} for \addtoindex{C++} or \texttt{self}
1427 for \addtoindex{Objective C} 
1428 and some other languages). That parameter
1429 also has a \DWATartificial{} attribute whose value is true.
1430
1431 Conversely, if the member function entry describes a static
1432 member function, the entry does not have 
1433 \addtoindexx{object pointer attribute}
1434
1435 \DWATobjectpointer{}
1436 attribute.
1437
1438 \textit{In \addtoindex{C++}, non-static member functions can have const-volatile
1439 qualifiers, which affect the type of the first formal parameter (the
1440 \doublequote{\texttt{this}}-pointer).}
1441  
1442 If the member function entry describes a non\dash static member
1443 function that has a const\dash volatile qualification, then
1444 the entry describes a non\dash static member function whose
1445 object formal parameter has a type that has an equivalent
1446 const\dash volatile qualification.
1447
1448 \textit{In \addtoindex{C++:2011 (ISO)}, non-static member functions can also have one of the
1449 ref-qualifiers, \& and \&\&. They do not change the type of the
1450 \doublequote{\texttt{this}}-pointer, but they affect the types of object values the
1451 function can be invoked on.}
1452
1453 The member function entry may have an \DWATreferenceNAME{} attribute
1454 \livetarg{chap:DWATreferenceofnonstaticmember}{}
1455 to indicate a non-static member function that can only be called on
1456 l-value objects, or the \DWATrvaluereferenceNAME{} attribute 
1457 \livetarg{chap:DWATrvaluereferenceofnonstaticmember}{}
1458 to indicate that it can only be called on pr-values and x-values.
1459
1460 If a subroutine entry represents the defining declaration
1461 of a member function and that definition appears outside of
1462 the body of the enclosing class declaration, the subroutine
1463 entry has a 
1464 \DWATspecification{} attribute, 
1465 \addtoindexx{specification attribute}
1466 whose value is
1467 a reference to the debugging information entry representing
1468 the declaration of this function member. The referenced entry
1469 will be a child of some class (or structure) type entry.
1470
1471 Subroutine entries containing the
1472 \DWATspecification{} attribute 
1473 \addtoindexx{specification attribute}
1474 do not need to duplicate information provided
1475 by the declaration entry referenced by the specification
1476 attribute. In particular, such entries do not need to contain
1477 a name attribute giving the name of the function member whose 
1478 definition they represent.  
1479 Similarly, such entries do not need to contain a return type attribute, 
1480 unless the return type on the declaration was unspecified (for example, the 
1481 declaration used the \addtoindex{C++} \autoreturntype{} specifier).
1482
1483 \needlines{5}
1484 \subsection{Class Template Instantiations}
1485 \label{chap:classtemplateinstantiations}
1486
1487 \textit{In \addtoindex{C++} a class template is a generic definition of a class
1488 type that may be instantiated when an instance of the class
1489 is declared or defined. The generic description of the class may include
1490 parameterized types, parameterized compile-time constant
1491 values, and/or parameterized run-time constant addresses. 
1492 DWARF does not represent the generic template
1493 definition, but does represent each instantiation.}
1494
1495 A class template instantiation is represented by a
1496 debugging information entry with the tag \DWTAGclasstype,
1497 \DWTAGstructuretype{} or 
1498 \DWTAGuniontype. With the following
1499 exceptions, such an entry will contain the same attributes
1500 and have the same types of child entries as would an entry
1501 for a class type defined explicitly using the instantiation
1502 types and values. The exceptions are:
1503
1504 \begin{enumerate}[1. ]
1505 \item Template parameters are described and referenced as
1506 specified in Section \refersec{chap:templateparameters}.
1507
1508 \needlines{4}
1509 \item If the compiler has generated a special compilation unit to
1510 hold the 
1511 \addtoindexx{template instantiation!and special compilation unit}
1512 template instantiation and that special compilation
1513 unit has a different name from the compilation unit containing
1514 the template definition, the name attribute for the debugging
1515 information entry representing the special compilation unit
1516 should be empty or omitted.
1517
1518 \needlines{4}
1519 \item If the class type entry representing the template
1520 instantiation or any of its child entries contains declaration
1521 coordinate attributes, those attributes should refer to
1522 the source for the template definition, not to any source
1523 generated artificially by the compiler.
1524 \end{enumerate}
1525
1526
1527 \subsection{Variant Entries}
1528 \label{chap:variantentries}
1529
1530 A variant part of a structure is represented by a debugging
1531 information entry\addtoindexx{variant part entry} with the 
1532 tag \DWTAGvariantpartTARG{} and is
1533 owned by the corresponding structure type entry.
1534
1535 If the variant part has a discriminant, the discriminant is
1536 \hypertarget{chap:DWATdiscrdiscriminantofvariantpart}{}
1537 represented by a 
1538 \addtoindexx{discriminant (entry)}
1539 separate debugging information entry which
1540 is a child of the variant part entry. This entry has the form
1541 of a 
1542 \addtoindexx{member entry (data)!as discriminant}
1543 structure data member entry. The variant part entry will
1544 \addtoindexx{discriminant attribute}
1545 have a 
1546 \DWATdiscr{} attribute 
1547 whose value is a \livelink{chap:classreference}{reference} to
1548 the member entry for the discriminant.
1549
1550 If the variant part does not have a discriminant (tag field),
1551 the variant part entry has 
1552 \addtoindexx{type attribute}
1553
1554 \DWATtype{} attribute to represent
1555 the tag type.
1556
1557 Each variant of a particular variant part is represented by
1558 \hypertarget{chap:DWATdiscrvaluediscriminantvalue}{}
1559 a debugging information entry\addtoindexx{variant entry} with the 
1560 tag \DWTAGvariantTARG{}
1561 and is a child of the variant part entry. The value that
1562 selects a given variant may be represented in one of three
1563 ways. The variant entry may have a 
1564 \DWATdiscrvalue{} attribute
1565 whose value represents a single case label. The value of this
1566 attribute is encoded as an LEB128 number. The number is signed
1567 if the tag type for the variant part containing this variant
1568 is a signed type. The number is unsigned if the tag type is
1569 an unsigned type.
1570
1571 \needlines{5}
1572 Alternatively, 
1573 \hypertarget{chap:DWATdiscrlistlistofdiscriminantvalues}{}
1574 the variant entry may contain 
1575 \addtoindexx{discriminant list attribute}
1576
1577 \DWATdiscrlist{}
1578 attribute, whose value represents a list of discriminant
1579 values. This list is represented by any of the 
1580 \livelink{chap:classblock}{block} forms and
1581 may contain a mixture of case labels and label ranges. Each
1582 item on the list is prefixed with a discriminant value
1583 descriptor that determines whether the list item represents
1584 a single label or a label range. A single case label is
1585 represented as an LEB128 number as defined above for 
1586 \addtoindexx{discriminant value attribute}
1587 the
1588 \DWATdiscrvalue{} 
1589 attribute. A label range is represented by
1590 two LEB128 numbers, the low value of the range followed by the
1591 high value. Both values follow the rules for signedness just
1592 described. The discriminant value descriptor is an integer
1593 constant that may have one of the values given in 
1594 Table \refersec{tab:discriminantdescriptorvalues}.
1595
1596 \begin{simplenametable}[1.4in]{Discriminant descriptor values}{tab:discriminantdescriptorvalues}
1597 \DWDSClabelTARG{} \\
1598 \DWDSCrangeTARG{} \\
1599 \end{simplenametable}
1600
1601 If a variant entry has neither a \DWATdiscrvalue{}
1602 attribute nor a \DWATdiscrlist{} attribute, or if it has
1603 a \DWATdiscrlist{} attribute with 0 size, the variant is a
1604 default variant.
1605
1606 The components selected by a particular variant are represented
1607 by debugging information entries owned by the corresponding
1608 variant entry and appear in the same order as the corresponding
1609 declarations in the source program.
1610
1611 \needlines{6}
1612 \section{Condition Entries}
1613 \label{chap:conditionentries}
1614
1615 \textit{COBOL has the notion of 
1616 \addtoindexx{level-88 condition, COBOL}
1617 a \doublequote{level\dash 88 condition} that
1618 associates a data item, called the conditional variable, with
1619 a set of one or more constant values and/or value ranges.
1620 % Note: the {} after \textquoteright (twice) is necessary to assure a following space separator
1621 Semantically, the condition is \textquoteleft true\textquoteright{}
1622 if the conditional
1623 variable's value matches any of the described constants,
1624 and the condition is \textquoteleft false\textquoteright{} otherwise.}
1625
1626 The \DWTAGconditionTARG{}
1627 debugging information entry\addtoindexx{condition entry}
1628 describes a
1629 logical condition that tests whether a given data item\textquoteright s
1630 value matches one of a set of constant values. If a name
1631 has been given to the condition, the condition entry has a
1632 \DWATname{} attribute
1633 \addtoindexx{name attribute}
1634 whose value is a null\dash terminated string
1635 giving the condition name as it appears in the source program.
1636
1637 \needlines{4}
1638 The condition entry's parent entry describes the conditional
1639 variable; normally this will be a \DWTAGvariable,
1640 \DWTAGmember{} or 
1641 \DWTAGformalparameter{} entry.
1642 If 
1643 \addtoindexx{formal parameter entry}
1644 the parent
1645 entry has an array type, the condition can test any individual
1646 element, but not the array as a whole. The condition entry
1647 implicitly specifies a \doublequote{comparison type} that is the
1648 type of an array element if the parent has an array type;
1649 otherwise it is the type of the parent entry.
1650
1651 \needlines{4}
1652 The condition entry owns \DWTAGconstant{} and/or
1653 \DWTAGsubrangetype{} entries that describe the constant
1654 values associated with the condition. If any child entry 
1655 \addtoindexx{type attribute}
1656 has
1657 a \DWATtype{} attribute,
1658 that attribute should describe a type
1659 compatible with the comparison type (according to the source
1660 language); otherwise the child\textquoteright s type is the same as the
1661 comparison type.
1662
1663 \textit{For conditional variables with alphanumeric types, COBOL
1664 permits a source program to provide ranges of alphanumeric
1665 constants in the condition. Normally a subrange type entry
1666 does not describe ranges of strings; however, this can be
1667 represented using bounds attributes that are references to
1668 constant entries describing strings. A subrange type entry may
1669 refer to constant entries that are siblings of the subrange
1670 type entry.}
1671
1672
1673 \section{Enumeration Type Entries}
1674 \label{chap:enumerationtypeentries}
1675
1676 \textit{An \doublequote{enumeration type} is a scalar that can assume one of
1677 a fixed number of symbolic values.}
1678
1679 An enumeration type is represented by a debugging information
1680 entry with the tag 
1681 \DWTAGenumerationtypeTARG.
1682
1683 If a name has been given to the enumeration type in the source
1684 program, then the corresponding enumeration type entry has
1685 a \DWATname{} attribute
1686 \addtoindexx{name attribute}
1687 whose value is a null\dash terminated
1688 string containing the enumeration type name as it appears
1689 in the source program. 
1690
1691 The \addtoindex{enumeration type entry}
1692 may have 
1693 \addtoindexx{type attribute}
1694 a \DWATtype{} attribute
1695 which refers to the underlying data type used to implement
1696 the enumeration. The entry also may have a 
1697 \DWATbytesize{} attribute whose 
1698 \livelink{chap:classconstant}{integer constant} value is the number of bytes 
1699 required to hold an instance of the enumeration. If no \DWATbytesize{} attribute 
1700 is present, the size for holding an instance of the enumeration is given by the size 
1701 of the underlying data type.
1702
1703 \needlines{4}
1704 If an enumeration type has type safe 
1705 \addtoindexx{type safe enumeration types}
1706 semantics such that
1707
1708 \begin{enumerate}[1. ]
1709 \item Enumerators are contained in the scope of the enumeration type, and/or
1710
1711 \item Enumerators are not implicitly converted to another type
1712 \end{enumerate}
1713
1714 then the \addtoindex{enumeration type entry} may 
1715 \addtoindexx{enum class|see{type-safe enumeration}}
1716 have a \DWATenumclass{}
1717 attribute, which is a \livelink{chap:classflag}{flag}. 
1718 In a language that offers only
1719 one kind of enumeration declaration, this attribute is not
1720 required.
1721
1722 \textit{In \addtoindex{C} or \addtoindex{C++}, 
1723 the underlying type will be the appropriate
1724 integral type determined by the compiler from the properties of
1725 \hypertarget{chap:DWATenumclasstypesafeenumerationdefinition}{}
1726 the enumeration literal values. 
1727 A \addtoindex{C++} type declaration written
1728 using enum class declares a strongly typed enumeration and
1729 is represented using \DWTAGenumerationtype{} 
1730 in combination with \DWATenumclass.}
1731
1732 Each enumeration literal is represented by a debugging
1733 \addtoindexx{enumeration literal|see{enumeration entry}}
1734 information entry with the 
1735 tag \DWTAGenumeratorTARG. 
1736 Each
1737 such entry is a child of the 
1738 \addtoindex{enumeration type entry}, and the
1739 enumerator entries appear in the same order as the declarations
1740 of the enumeration literals in the source program.
1741
1742 Each \addtoindex{enumerator entry} has a 
1743 \DWATname{} attribute, whose
1744 \addtoindexx{name attribute}
1745 value is a null\dash terminated string containing the name of the
1746 \hypertarget{chap:DWATconstvalueenumerationliteralvalue}{}
1747 enumeration literal as it appears in the source program. 
1748 Each enumerator entry also has a 
1749 \DWATconstvalue{} attribute,
1750 whose value is the actual numeric value of the enumerator as
1751 represented on the target system.
1752
1753
1754 If the enumeration type occurs as the description of a
1755 \addtoindexx{enumeration type entry!as array dimension}
1756 dimension of an array type, and the stride for that dimension
1757 \hypertarget{chap:DWATbytestrideenumerationstridedimensionofarraytype}{}
1758 is different than what would otherwise be determined, then
1759 \hypertarget{chap:DWATbitstrideenumerationstridedimensionofarraytype}{}
1760 the enumeration type entry has either a 
1761 \DWATbytestride{}
1762 or \DWATbitstride{} attribute 
1763 \addtoindexx{bit stride attribute}
1764 which specifies the separation
1765 between successive elements along the dimension as described
1766 in 
1767 Section \refersec{chap:staticanddynamicvaluesofattributes}. 
1768 The value of the 
1769 \DWATbitstride{} attribute
1770 \addtoindexx{bit stride attribute}
1771 is interpreted as bits and the value of 
1772 \addtoindexx{byte stride attribute}
1773 the 
1774 \DWATbytestride{}
1775 attribute is interpreted as bytes.
1776
1777
1778 \section{Subroutine Type Entries}
1779 \label{chap:subroutinetypeentries}
1780
1781 \textit{It is possible in \addtoindex{C}
1782 to declare pointers to subroutines
1783 that return a value of a specific type. In both 
1784 \addtoindex{C} and \addtoindex{C++},
1785 it is possible to declare pointers to subroutines that not
1786 only return a value of a specific type, but accept only
1787 arguments of specific types. The type of such pointers would
1788 be described with a \doublequote{pointer to} modifier applied to a
1789 user\dash defined type.}
1790
1791 \needlines{4}
1792 A subroutine type is represented by a debugging information
1793 entry with the 
1794 \addtoindexx{subroutine type entry}
1795 tag \DWTAGsubroutinetypeTARG. 
1796 If a name has
1797 been given to the subroutine type in the source program,
1798 then the corresponding subroutine type entry has 
1799 a \DWATname{} attribute 
1800 \addtoindexx{name attribute}
1801 whose value is a null\dash terminated string containing
1802 the subroutine type name as it appears in the source program.
1803
1804 If the subroutine type describes a function that returns
1805 a value, then the subroutine type entry has 
1806 \addtoindexx{type attribute}
1807 a \DWATtype{}
1808 attribute to denote the type returned by the subroutine. If
1809 the types of the arguments are necessary to describe the
1810 subroutine type, then the corresponding subroutine type
1811 entry owns debugging information entries that describe the
1812 arguments. These debugging information entries appear in the
1813 order that the corresponding argument types appear in the
1814 source program.
1815
1816 \textit{In \addtoindex{C} there 
1817 is a difference between the types of functions
1818 declared using function prototype style declarations and
1819 those declared using non\dash prototype declarations.}
1820
1821
1822 \hypertarget{chap:DWATprototypedsubroutineprototype}{}
1823 subroutine entry declared with a function prototype style
1824 declaration may have 
1825 \addtoindexx{prototyped attribute}
1826
1827 \DWATprototyped{} attribute, which is
1828 a \livelink{chap:classflag}{flag}.
1829
1830 Each debugging information entry owned by a subroutine
1831 type entry corresponds to either a formal parameter or the sequence of
1832 unspecified parameters of the subprogram type:
1833
1834 \begin{enumerate}[1. ]
1835 \item A formal parameter of a parameter list (that has a
1836 specific type) is represented by a debugging information entry
1837 with the tag \DWTAGformalparameter. 
1838 Each formal parameter
1839 entry has 
1840 \addtoindexx{type attribute}
1841 a \DWATtype{} attribute that refers to the type of
1842 the formal parameter.
1843
1844 \item The unspecified parameters of a variable parameter list
1845 \addtoindexx{unspecified parameters entry}
1846 are 
1847 \addtoindexx{\texttt{...} parameters|see{unspecified parameters entry}}
1848 represented by a debugging information entry with the
1849 tag \DWTAGunspecifiedparameters.
1850 \end{enumerate}
1851
1852 \textit{\addtoindex{C++} const-volatile qualifiers are encoded as 
1853 part of the type of the
1854 \doublequote{\texttt{this}}-pointer. 
1855 \addtoindex{C++:2011 (ISO)} reference and rvalue-reference qualifiers are encoded using
1856 the \DWATreference{} and \DWATrvaluereference{} attributes, respectively. 
1857 See also Section \refersec{chap:memberfunctionentries}.}
1858
1859 \needlines{4}
1860 A subroutine type entry may have the \DWATreference{} or
1861 \DWATrvaluereference{} attribute to indicate that it describes the
1862 type of a member function with reference or rvalue-reference 
1863 semantics, respectively.
1864
1865
1866 \section{String Type Entries}
1867 \label{chap:stringtypeentries}
1868
1869 \textit{A \doublequote{string} is a sequence of characters that have specific
1870 \addtoindexx{string type entry}
1871 semantics and operations that distinguish them from arrays of
1872 characters. 
1873 \addtoindex{Fortran} is one of the languages that has a string
1874 type. Note that \doublequote{string} in this context refers to a target
1875 machine concept, not the class string as used in this document
1876 (except for the name attribute).}
1877
1878 A string type is represented by a debugging information entry
1879 with the tag \DWTAGstringtypeTARG. 
1880 If a name has been given to
1881 the string type in the source program, then the corresponding
1882 string type entry has a 
1883 \DWATname{} attribute
1884 \addtoindexx{name attribute}
1885 whose value is
1886 a null\dash terminated string containing the string type name as
1887 it appears in the source program.
1888
1889 \textit{The 
1890 \addtoindex{Fortran 2003} language standard allows string 
1891 types that are composed of different types of (same sized) characters. 
1892 While there is no standard list of character kinds, the kinds
1893 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (see \DWATEASCII), 
1894 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)}
1895 \addtoindexx{ISO 10646 character set standard}
1896 (see \DWATEUCS) and 
1897 \texttt{DEFAULT}\index{DEFAULT@\texttt{DEFAULT} (Fortran string kind)}
1898 are defined.}
1899
1900 A string type entry may have a \DWATtype{} 
1901 \livetargi{char:DWAATtypeofstringtype}{attribute}{type attribute!of string type entry}
1902 describing how each character is encoded and is to be interpreted.  
1903 The value of this attribute is a \CLASSreference to a 
1904 \DWTAGbasetype{} base type entry.  If the attribute is absent, 
1905 then the character is encoded using the system default.
1906
1907 \needlines{4}
1908 The string type entry may have a 
1909 \DWATbytesize{} attribute or 
1910 \DWATbitsize{}
1911 attribute, whose value 
1912 (see Section \refersec{chap:byteandbitsizes}) 
1913 is the amount of
1914 storage needed to hold a value of the string type.
1915
1916 The 
1917 \hypertarget{chap:DWATstringlengthstringlengthofstringtype}{}
1918 string type entry may also have a 
1919 \DWATstringlength{} attribute
1920 whose 
1921 \addtoindexx{string length attribute}
1922 value is a 
1923 \addtoindex{location description} yielding the location
1924 where the length of the string is stored in the program.
1925 If the \DWATstringlength{} attribute is not present, the size
1926 of the string is assumed to be the amount of storage that is
1927 allocated for the string (as specified by the \DWATbytesize{}
1928 or \DWATbitsize{} attribute).
1929
1930 The string type entry may also have a 
1931 \DWATstringlengthbytesizeNAME{}
1932 attribute or
1933 \DWATstringlengthbitsizeNAME{} attribute,
1934 \addtoindexx{string length attribute!size of length data}
1935 whose value (see Section \refersec{chap:byteandbitsizes}) 
1936 is the size of the data to be retrieved from the location
1937 referenced by the string length attribute. If no (byte or bit)
1938 size attribute is present, the size of the data to be retrieved
1939 is the same as the 
1940 \addtoindex{size of an address} on the target machine.
1941
1942 \addtoindexx{DWARF Version 5}   % Avoid italics
1943 \textit{Prior to DWARF Version 5, the meaning of a 
1944 \DWATbytesize{} attribute depends on the presence of the
1945 \DWATstringlength{} attribute:
1946 \begin{itemize}
1947 \item If \DWATstringlength{} is present, \DWATbytesize{} 
1948         specifies the size of the length data to be retrieved 
1949         from the location specified by the \DWATstringlength{} attribute.
1950 \item If \DWATstringlength{} is not present, \DWATbytesize{}
1951         specifies the amount of storage allocated for objects
1952         of the string type.
1953 \end{itemize}
1954 In DWARF Version 5, \DWATbytesize{} always specifies the amount of storage 
1955 allocated for objects of the string type.}
1956
1957 \needlines{6}
1958 \section{Set Type Entries}
1959 \label{chap:settypeentries}
1960
1961 \textit{\addtoindex{Pascal} provides the concept of a \doublequote{set,} which represents
1962 a group of values of ordinal type.}
1963
1964 A set is represented by a debugging information entry with
1965 the tag \DWTAGsettypeTARG. 
1966 \addtoindexx{set type entry}
1967 If a name has been given to the
1968 set type, then the set type entry has 
1969 a \DWATname{} attribute
1970 \addtoindexx{name attribute}
1971 whose value is a null\dash terminated string containing the
1972 set type name as it appears in the source program.
1973
1974 The set type entry has 
1975 \addtoindexx{type attribute}
1976 a \DWATtype{} attribute to denote the
1977 type of an element of the set.
1978
1979 \needlines{4}
1980 If the amount of storage allocated to hold each element of an
1981 object of the given set type is different from the amount of
1982 storage that is normally allocated to hold an individual object
1983 of the indicated element type, then the set type entry has
1984 either a \DWATbytesize{} attribute, or 
1985 \DWATbitsize{} attribute
1986 whose value (see Section \refersec{chap:byteandbitsizes}) is
1987 the amount of storage needed to hold a value of the set type.
1988
1989
1990 \section{Subrange Type Entries}
1991 \label{chap:subrangetypeentries}
1992
1993 \textit{Several languages support the concept of a \doublequote{subrange}
1994 type object. These objects can represent a subset of the
1995 values that an object of the basis type for the subrange can
1996 represent. 
1997 Subrange type entries may also be used to represent
1998 the bounds of array dimensions.}
1999
2000 A subrange type is represented by a debugging information
2001 entry with the 
2002 \addtoindexx{subrange type entry}
2003 tag \DWTAGsubrangetypeTARG. 
2004 If a name has been
2005 given to the subrange type, then the subrange type entry
2006 has a \DWATname{} attribute
2007 \addtoindexx{name attribute}
2008 whose value is a null\dash terminated
2009 string containing the subrange type name as it appears in
2010 the source program.
2011
2012 The tag \DWTAGgenericsubrange{} is
2013 used to describe arrays with a dynamic rank. See Section
2014 \refersec{chap:DWTAGgenericsubrange}.
2015
2016 The subrange entry may have 
2017 \addtoindexx{type attribute}
2018 a \DWATtype{} attribute to describe
2019 the type of object, called the basis type, of whose values
2020 this subrange is a subset.
2021
2022 If the amount of storage allocated to hold each element of an
2023 object of the given subrange type is different from the amount
2024 of storage that is normally allocated to hold an individual
2025 object of the indicated element type, then the subrange
2026 type entry has a 
2027 \DWATbytesize{} attribute or 
2028 \DWATbitsize{}
2029 attribute, whose value 
2030 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
2031 is the amount of
2032 storage needed to hold a value of the subrange type.
2033
2034 The 
2035 \hypertarget{chap:DWATthreadsscaledupcarrayboundthreadsscalfactor}{}
2036 subrange entry may have 
2037 \addtoindexx{threads scaled attribute}
2038
2039 \DWATthreadsscaled{} attribute,
2040 which is a \livelink{chap:classflag}{flag}. 
2041 If present, this attribute indicates whether
2042 this subrange represents a \addtoindex{UPC} array bound which is scaled
2043 by the runtime THREADS value (the number of \addtoindex{UPC} threads in
2044 this execution of the program).
2045
2046 \textit{This allows the representation of a \addtoindex{UPC} shared array such as}
2047
2048 \begin{lstlisting}[numbers=none]
2049 int shared foo[34*THREADS][10][20];
2050 \end{lstlisting}
2051
2052 The 
2053 \hypertarget{chap:DWATlowerboundlowerboundofsubrange}{}
2054 subrange 
2055 \hypertarget{chap:DWATupperboundupperboundofsubrange}{}
2056 entry may have the attributes 
2057 \DWATlowerbound{}
2058 \addtoindexx{lower bound attribute}
2059 and \DWATupperbound{}
2060 \addtoindexx{upper bound attribute} to specify, respectively, the lower
2061 and upper bound values of the subrange. The 
2062 \DWATupperbound{}
2063 attribute 
2064 \hypertarget{chap:DWATcountelementsofsubrangetype}{}
2065 may 
2066 % FIXME: The following matches DWARF4: odd as there is no default count.
2067 \addtoindexx{count attribute!default}
2068 be 
2069 \addtoindexx{count attribute}
2070 replaced by a 
2071 \DWATcount{} attribute, 
2072 whose
2073 value describes the number of elements in the subrange rather
2074 than the value of the last element. The value of each of
2075 these attributes is determined as described in 
2076 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2077
2078 If the lower bound value is missing, the value is assumed to
2079 be a language\dash dependent default constant as defined in
2080 Table \refersec{tab:languageencodings}.
2081 \addtoindexx{lower bound attribute!default}
2082
2083 If the upper bound and count are missing, then the upper bound value is 
2084 \textit{unknown}.\addtoindexx{upper bound attribute!default unknown}
2085
2086 If the subrange entry has no type attribute describing the
2087 basis type, the basis type is determined as follows:
2088 \begin{enumerate}[1. ]
2089 \item
2090 If there is a lower bound attribute that references an object,
2091 the basis type is assumed to be the same as the type of that object.
2092 \item
2093 Otherwise, if there is an upper bound or count attribute that references
2094 an object, the basis type is assumed to be the same as the type of that object.
2095 \item
2096 Otherwise, the type is
2097 assumed to be the same type, in the source language of the
2098 compilation unit containing the subrange entry, as a signed
2099 integer with the same size as an address on the target machine.
2100 \end{enumerate}
2101
2102 If the subrange type occurs as the description of a dimension
2103 of an array type, and the stride for that dimension is
2104 \hypertarget{chap:DWATbytestridesubrangestridedimensionofarraytype}{}
2105 different than what would otherwise be determined, then
2106 \hypertarget{chap:DWATbitstridesubrangestridedimensionofarraytype}{}
2107 the subrange type entry has either 
2108 \addtoindexx{byte stride attribute}
2109
2110 \DWATbytestride{} or
2111 \DWATbitstride{} attribute 
2112 \addtoindexx{bit stride attribute}
2113 which specifies the separation
2114 between successive elements along the dimension as described
2115 in 
2116 Section \refersec{chap:byteandbitsizes}.
2117
2118 \textit{Note that the stride can be negative.}
2119
2120 \needlines{4}
2121 \section{Pointer to Member Type Entries}
2122 \label{chap:pointertomembertypeentries}
2123
2124 \textit{In \addtoindex{C++}, a 
2125 pointer to a data or function member of a class or
2126 structure is a unique type.}
2127
2128 A debugging information entry representing the type of an
2129 object that is a pointer to a structure or class member has
2130 the tag \DWTAGptrtomembertypeTARG.
2131
2132 If the \addtoindex{pointer to member type} has a name, the 
2133 \addtoindexx{pointer to member type entry}
2134 pointer to member entry has a
2135 \DWATname{} attribute, 
2136 \addtoindexx{name attribute}
2137 whose value is a
2138 null\dash terminated string containing the type name as it appears
2139 in the source program.
2140
2141 The \addtoindex{pointer to member} entry 
2142 has 
2143 \addtoindexx{type attribute}
2144 a \DWATtype{} attribute to
2145 describe the type of the class or structure member to which
2146 objects of this type may point.
2147
2148 The \addtoindexx{pointer to member} entry also 
2149 \hypertarget{chap:DWATcontainingtypecontainingtypeofpointertomembertype}{}
2150 has a 
2151 \DWATcontainingtype{}
2152 attribute, whose value is a \livelink{chap:classreference}{reference} to a debugging
2153 information entry for the class or structure to whose members
2154 objects of this type may point.
2155
2156 The \addtoindex{pointer to member entry} 
2157 \hypertarget{chap:DWATuselocationmemberlocationforpointertomembertype}{}
2158 has a 
2159 \DWATuselocation{} attribute
2160 \addtoindexx{use location attribute}
2161 whose value is a 
2162 \addtoindex{location description} that computes the
2163 address of the member of the class to which the pointer to
2164 member entry points.
2165
2166 \textit{The method used to find the address of a given member of a
2167 class or structure is common to any instance of that class
2168 or structure and to any instance of the pointer or member
2169 type. The method is thus associated with the type entry,
2170 rather than with each instance of the type.}
2171
2172 The \DWATuselocation{} description is used in conjunction
2173 with the location descriptions for a particular object of the
2174 given \addtoindex{pointer to member type} and for a particular structure or
2175 class instance. The \DWATuselocation{} 
2176 attribute expects two values to be 
2177 \addtoindexi{pushed}{address!implicit push for member operator}
2178 onto the DWARF expression stack before
2179 the \DWATuselocation{} description is evaluated.
2180 The first value 
2181 \addtoindexi{pushed}{address!implicit push for member operator}
2182 is the value of the \addtoindex{pointer to member} object
2183 itself. The second value 
2184 \addtoindexi{pushed}{address!implicit push for member operator} 
2185 is the base address of the
2186 entire structure or union instance containing the member
2187 whose address is being calculated.
2188
2189 \needlines{6}
2190 \textit{For an expression such as}
2191
2192 \begin{lstlisting}[numbers=none]
2193     object.*mbr_ptr
2194 \end{lstlisting}
2195 \textit{where \texttt{mbr\_ptr} has some \addtoindex{pointer to member type}, a debugger should:}
2196 \begin{enumerate}[1. ]
2197 \item \textit{Push the value of \texttt{mbr\_ptr} onto the DWARF expression stack.}
2198 \item \textit{Push the base address of \texttt{object} onto the DWARF expression stack.}
2199 \item \textit{Evaluate the \DWATuselocation{} description 
2200 given in the type of \texttt{mbr\_ptr}.}
2201 \end{enumerate}
2202
2203
2204 \section{File Type Entries}
2205 \label{chap:filetypeentries}
2206
2207 \textit{Some languages, such as \addtoindex{Pascal}, 
2208 provide a data type to represent 
2209 files.}
2210
2211 A file type is represented by a debugging information entry
2212 with 
2213 \addtoindexx{file type entry}
2214 the tag
2215 \DWTAGfiletypeTARG. 
2216 If the file type has a name,
2217 the file type entry has a \DWATname{} attribute,
2218 \addtoindexx{name attribute}
2219 whose value
2220 is a null\dash terminated string containing the type name as it
2221 appears in the source program.
2222
2223 The file type entry has 
2224 \addtoindexx{type attribute}
2225 a \DWATtype{} attribute describing
2226 the type of the objects contained in the file.
2227
2228 The file type entry also has a 
2229 \DWATbytesize{}\addtoindexx{byte size attribute} or
2230 \DWATbitsize{}\addtoindexx{bit size attribute} attribute, whose value 
2231 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
2232 is the amount of storage need to hold a value of the file type.
2233
2234 \section{Dynamic Type Entries and Properties}
2235
2236 \subsection{Dynamic Type Entries}
2237 \textit{Some languages such as 
2238 \addtoindex{Fortran 90}, provide types whose values
2239 may be dynamically allocated or associated with a variable
2240 under explicit program control. However, unlike the related
2241 pointer type in \addtoindex{C} or 
2242 \addtoindex{C++}, the indirection involved in accessing
2243 the value of the variable is generally implicit, that is, not
2244 indicated as part of program source.}
2245
2246 A dynamic type entry is used to declare a dynamic type that is 
2247 \doublequote{just like} another non-dynamic type without needing to
2248 replicate the full description of that other type.
2249
2250 A dynamic type is represented by a debugging information entry
2251 with the tag \DWTAGdynamictypeTARG. If a name has been given to the
2252 dynamic type, then the dynamic type has a \DWATname{} attribute 
2253 whose value is a null-terminated string containing the dynamic
2254 type name as it appears in the source.
2255         
2256 A dynamic type entry has a \DWATtype{} attribute whose value is a
2257 reference to the type of the entities that are dynamically allocated.
2258         
2259 A dynamic type entry also has a \DWATdatalocation, and may also
2260 have \DWATallocated{} and/or \DWATassociated{} attributes as 
2261 described in Section \referfol{chap:dynamictypeproperties}. 
2262 A \DWATdatalocation, \DWATallocated{} or \DWATassociated{} attribute 
2263 may not occur on a dynamic type entry if the same kind of attribute 
2264 already occurs on the type referenced by the \DWATtype{} attribute.
2265
2266 \subsection{Dynamic Type Properties}
2267 \label{chap:dynamictypeproperties}
2268 \textit{
2269 The \DWATdatalocation, \DWATallocated{} and \DWATassociated{} 
2270 attributes described in this section can be used for any type, not
2271 just dynamic types.}
2272
2273 \needlines{6}
2274 \subsubsection{Data Location}
2275 \label{chap:datalocation}
2276
2277 \textit{Some languages may represent objects using descriptors to hold
2278 information, including a location and/or run\dash time parameters,
2279 about the data that represents the value for that object.}
2280
2281 \hypertarget{chap:DWATdatalocationindirectiontoactualdata}{}
2282 The \DWATdatalocation{} 
2283 attribute may be used with any
2284 \addtoindexx{data location attribute}
2285 type that provides one or more levels of 
2286 \addtoindexx{hidden indirection|see{data location attribute}}
2287 hidden indirection
2288 and/or run\dash time parameters in its representation. Its value
2289 is a \addtoindex{location description}. 
2290 The result of evaluating this
2291 description yields the location of the data for an object.
2292 When this attribute is omitted, the address of the data is
2293 the same as the address of the object.
2294
2295 \needlines{5}
2296 \textit{This location description will typically begin with
2297 \DWOPpushobjectaddress{} 
2298 which loads the address of the
2299 object which can then serve as a descriptor in subsequent
2300 calculation. For an example using 
2301 \DWATdatalocation{} 
2302 for a \addtoindex{Fortran 90 array}, see 
2303 Appendix \refersec{app:fortranarrayexample}.}
2304
2305 \subsubsection{Allocation and Association Status}
2306 \label{chap:allocationandassociationstatus}
2307
2308 \textit{Some languages, such as \addtoindex{Fortran 90},
2309 provide types whose values
2310 may be dynamically allocated or associated with a variable
2311 under explicit program control.}
2312
2313 \hypertarget{chap:DWATallocatedallocationstatusoftypes}{}
2314 The 
2315 \DWATallocated{} 
2316 attribute 
2317 \addtoindexx{allocated attribute}
2318 may optionally be used with any
2319 type for which objects of the type can be explicitly allocated
2320 and deallocated. The presence of the attribute indicates that
2321 objects of the type are allocatable and deallocatable. The
2322 integer value of the attribute (see below) specifies whether
2323 an object of the type is 
2324 currently allocated or not.
2325
2326 \needlines{4}
2327 \hypertarget{chap:DWATassociatedassociationstatusoftypes}{}
2328 The 
2329 \DWATassociated{} attribute 
2330 may 
2331 \addtoindexx{associated attribute}
2332 optionally be used with
2333 any type for which objects of the type can be dynamically
2334 associated with other objects. The presence of the attribute
2335 indicates that objects of the type can be associated. The
2336 integer value of the attribute (see below) indicates whether
2337 an object of the type is currently associated or not.
2338
2339 \textit{While these attributes are defined specifically with 
2340 \addtoindex{Fortran 90} ALLOCATABLE and POINTER types
2341 in mind, usage is not limited
2342 to just that language.}
2343
2344 The value of these attributes is determined as described in
2345 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2346
2347 A non\dash zero value is interpreted as allocated or associated,
2348 and zero is interpreted as not allocated or not associated.
2349
2350 \textit{For \addtoindex{Fortran 90}, 
2351 if the \DWATassociated{} 
2352 attribute is present,
2353 the type has the POINTER property where either the parent
2354 variable is never associated with a dynamic object or the
2355 implementation does not track whether the associated object
2356 is static or dynamic. If the \DWATallocated{} attribute is
2357 present and the \DWATassociated{} attribute is not, the type
2358 has the ALLOCATABLE property. If both attributes are present,
2359 then the type should be assumed to have the POINTER property
2360 (and not ALLOCATABLE); the \DWATallocated{} attribute may then
2361 be used to indicate that the association status of the object
2362 resulted from execution of an ALLOCATE statement rather than
2363 pointer assignment.}
2364
2365 \textit{For examples using 
2366 \DWATallocated{} for \addtoindex{Ada} and 
2367 \addtoindex{Fortran 90}
2368 arrays, 
2369 see Appendix \refersec{app:aggregateexamples}.}
2370
2371 \subsubsection{Array Rank}
2372 \label{chap:DWATrank}
2373 \addtoindexx{array!assumed-rank}
2374 \addtoindexx{assumed-rank array|see{array, assumed-rank}}
2375 \textit{The Fortran language supports \doublequote{assumed-rank arrays}. The
2376   rank (the number of dimensions) of an assumed-rank array is unknown
2377   at compile time. The Fortran runtime stores the rank in the array
2378   descriptor metadata.}
2379
2380 The presence of the
2381 \hypertarget{chap:DWATrankofdynamicarray}{\DWATrankINDX}
2382 attribute indicates that an array's rank
2383 (number of dimensions) is dynamic, and therefore unknown at compile
2384 time. The value of the \DWATrankNAME{} attribute is either an integer constant
2385 or a location expression whose evaluation yields the dynamic rank.
2386
2387 The bounds of an array with dynamic rank are described using a
2388 \DWTAGgenericsubrange{} entry, which  
2389 is the dynamic rank array equivalent of
2390 \DWTAGsubrangetype. The
2391 difference is that a \DWTAGgenericsubrange{} entry contains generic
2392 lower/upper bound and stride expressions that need to be evaluated for
2393 each dimension. Before any expression contained in a
2394 \DWTAGgenericsubrange{} can be evaluated, the dimension for which the
2395 expression is to be evaluated needs to be pushed onto the stack. The
2396 expression will use it to find the offset of the respective field in
2397 the array descriptor metadata.
2398
2399 \textit{The Fortran compiler is free to choose any layout for the
2400   array descriptor. In particular, the upper and lower bounds and
2401   stride values do not need to be bundled into a structure or record,
2402   but could be laid end to end in the containing descriptor, pointed
2403   to by the descriptor, or even allocated independently of the
2404   descriptor.}
2405
2406 Dimensions are enumerated $0$ to $\mathit{rank}-1$ in a left-to-right
2407 fashion.
2408
2409 \textit{For an example in Fortran 2008, see
2410   Section~\refersec{app:assumedrankexample}.}
2411
2412 \needlines{6}
2413 \section{Template Alias Entries}
2414 \label{chap:templatealiasentries}
2415
2416 \textit{
2417 In \addtoindex{C++}, a template alias is a form of typedef that has template
2418 parameters.  DWARF does not represent the template alias definition
2419 but does represent instantiations of the alias.
2420 }
2421
2422 A type named using a template alias is represented
2423 by a debugging information entry 
2424 \addtoindexx{template alias entry}
2425 with the tag
2426 \DWTAGtemplatealiasTARG. 
2427 The template alias entry has a
2428 \DWATname{} attribute 
2429 \addtoindexx{name attribute}
2430 whose value is a null\dash terminated string
2431 containing the name of the template alias as it appears in
2432 the source program.
2433 The template alias entry has child entries describing the template
2434 actual parameters (see Section \refersec{chap:templateparameters}).
2435