Working copy for backup...
[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 \DWATstartscopeDEFN{}
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 \DWTAGbasetypeTARG.
26
27 A \addtoindex{base type entry}
28 may have a \DWATname{} attribute\addtoindexx{name attribute}
29 whose value is
30 a null-terminated string containing the name of the base type
31 as recognized by the programming language of the compilation
32 unit containing the base type entry.
33
34 A base type entry has 
35 \addtoindexx{encoding attribute}
36 a \DWATencoding{} attribute describing
37 how the base type is encoded and is to be interpreted. 
38 The \DWATencoding{} attribute is described in
39 Section \referfol{chap:basetypeencodings}.
40
41 A base type entry
42 may have a \DWATendianity{} attribute
43 \addtoindexx{endianity attribute}
44 as described in 
45 Section \refersec{chap:dataobjectentries}. 
46 If omitted, the encoding assumes the representation that
47 is the default for the target architecture.
48
49 \needlines{4}
50 A base type entry has 
51 \hypertarget{chap:DWATbytesizedataobjectordatatypesize}{}
52 either a \DWATbytesize{} attribute
53 \hypertarget{chap:DWATbitsizebasetypebitsize}{}
54 or a \DWATbitsize{} attribute 
55 \addtoindexx{bit size attribute}
56 whose \livelink{chap:classconstant}{integer constant} value
57 (see Section \refersec{chap:byteandbitsizes}) 
58 is the amount of storage needed to hold
59 a value of the type.
60
61 \needlines{5}
62 \textit{For example, the 
63 \addtoindex{C} type \texttt{int} on a machine that uses 32-bit
64 integers is represented by a base type entry with a name
65 attribute whose value is \doublequote{int}, an encoding attribute
66 whose value is \DWATEsigned{}
67 and a byte size attribute whose value is 4.}
68
69 If the value of an object of the given type does not fully
70 occupy the storage described by a byte size attribute,
71 \hypertarget{chap:DWATdatabitoffsetbasetypebitlocation}{}
72 the base type entry may also have a 
73 \DWATbitsizeDEFN{} and a \DWATdatabitoffsetDEFN{} attribute,
74 \addtoindexx{bit size attribute}
75 \addtoindexx{data bit offset attribute}
76 both of whose values are
77 \livelink{chap:classconstant}{integer constant} values
78 (see Section \refersec{chap:staticanddynamicvaluesofattributes}). 
79 The bit size
80 attribute describes the actual size in bits used to represent
81 values of the given type. The data bit offset attribute is the
82 offset in bits from the beginning of the containing storage to
83 the beginning of the value. Bits that are part of the offset
84 are padding. The data bit offset uses the bit numbering and
85 direction conventions that are appropriate to the current
86 language on the
87 target system to locate the beginning of the storage and
88 value. If this attribute is omitted a default data bit offset
89 of zero is assumed.
90
91 A \DWTAGbasetype{} entry may have additional attributes that
92 augment certain of the base type encodings; these are described
93 in the following section.
94
95 \subsection{Base Type Encodings}
96 \label{chap:basetypeencodings}
97 A base type entry has 
98 \addtoindexx{encoding attribute}
99 a \DWATencoding{} attribute describing
100 how the base type is encoded and is to be interpreted. The 
101 value of this attribute is an integer of class \CLASSconstant.
102 The set of values and their meanings for the
103 \DWATencoding{} attribute is given in 
104 Table \refersec{tab:encodingattributevalues}.
105
106 \textit{In Table \ref{tab:encodingattributevalues}, encodings
107 are shown in groups that have similar characteristics purely
108 for presentation purposes. These groups are not part of this
109 DWARF specification.}
110
111 \newcommand{\EncodingGroup}[1]{\multicolumn{2}{l}{\hspace{2cm}\bfseries\textit{#1}}}
112 \begin{table}[!h]
113 \caption{Encoding attribute values}
114 \label{tab:encodingattributevalues}
115 \centering
116 \begin{tabular}{l|P{8cm}}
117 \hline
118 \bfseries Name & \bfseries Meaning\\ \hline
119
120 \EncodingGroup{Simple encodings} \\
121 \DWATEbooleanTARG      & true or false \\
122 \DWATEaddressTARG{}    & linear machine address$^a$ \\
123 \DWATEsignedTARG       & signed binary integer \\
124 \DWATEsignedcharTARG   & signed character \\
125 \DWATEunsignedTARG     & unsigned binary integer \\
126 \DWATEunsignedcharTARG & unsigned character \\
127
128 \EncodingGroup{Character encodings} \\
129 \DWATEASCIITARG{} & \addtoindex{ISO/IEC 646:1991 character} 
130                     \addtoindexx{ASCII character} \\
131 \DWATEUCSTARG{}   & \addtoindex{ISO/IEC 10646-1:1993 character (UCS-4)} 
132                     \addtoindexx{UCS character} \\
133 \DWATEUTFTARG{}   & \addtoindex{ISO/IEC 10646-1:1993 character}
134                     \addtoindexx{UTF character} \\
135
136 \EncodingGroup{Scaled encodings} \\
137 \DWATEsignedfixedTARG{} & signed fixed-point scaled integer \\
138 \DWATEunsignedfixedTARG & unsigned fixed-point scaled integer \\
139
140 \EncodingGroup{Floating-point encodings} \\
141 \DWATEfloatTARG          & binary floating-point number \\
142 \DWATEcomplexfloatTARG   & complex binary floating-point number \\
143 \DWATEimaginaryfloatTARG & imaginary binary floating-point number \\
144 \DWATEdecimalfloatTARG{} & \addtoindex{IEEE 754R decimal floating-point number} \\ 
145
146 \EncodingGroup{Decimal string encodings} \\
147 \DWATEpackeddecimalTARG & packed decimal number\\
148 \DWATEnumericstringTARG & numeric string \\
149 \DWATEeditedTARG        & edited string \\
150
151 \hline
152 \multicolumn{2}{l}{$^a$For segmented addresses, see Section \refersec{chap:segmentedaddresses}} \\
153 \end{tabular}
154 \end{table}
155
156 \subsubsection{Simple Encodings}
157 \label{simpleencodings}
158 Types with simple encodings are widely supported in many
159 programming languages and do not require further discussion.
160
161 \needlines{6}
162 \subsubsection{Character Encodings}
163 \label{characterencodings}
164 The \DWATEUTF{} encoding is intended for \addtoindex{Unicode}
165 string encodings (see the Universal Character Set standard,
166 ISO/IEC 10646\dash 1:1993).
167 \addtoindexx{ISO 10646 character set standard}
168 For example, the 
169 \addtoindex{C++} type char16\_t is
170 represented by a base type entry with a name attribute whose
171 value is \doublequote{char16\_t}, an encoding attribute whose value
172 is \DWATEUTF{} and a byte size attribute whose value is 2.
173
174 \needlines{4}
175 The \DWATEASCII{} and \DWATEUCS{} encodings are intended for
176 the {Fortran 2003} string kinds 
177 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (ISO/IEC 646:1991) and
178 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)} (UCS-4 in ISO/IEC 10646:2000).
179 \addtoindexx{ISO 10646 character set standard}
180
181 \subsubsection{Scaled Encodings}
182 \label{scaledencodings}
183 The \DWATEsignedfixed{} and \DWATEunsignedfixed{} entries
184 describe signed and unsigned fixed\dash point binary data types,
185 respectively.
186
187 The fixed binary type encodings have a
188 \DWATdigitcount{} attribute\addtoindexx{digit count attribute}
189 with the same interpretation as described for the
190 \DWATEpackeddecimal{} and \DWATEnumericstring{} base type encodings
191 (see Section \refersec{chap:decimalstringencodings}).
192
193 \needlines{4}
194 For a data type with a decimal scale factor, the fixed binary
195 type entry has a \DWATdecimalscale{} attribute 
196 \addtoindexx{decimal scale attribute}
197 with the same interpretation as described for the 
198 \DWATEpackeddecimal{} and \DWATEnumericstring{} base types
199 (see Section \refersec{chap:decimalstringencodings}).
200
201 \hypertarget{chap:DWATbinaryscalebinaryscalefactorforfixedpointtype}{}
202 For a data type with a binary scale factor, the fixed
203 binary type entry has a \DWATbinaryscaleNAME{} attribute. 
204 The \DWATbinaryscaleDEFN{} attribute\addtoindexx{binary scale attribute} 
205 is an \livelink{chap:classconstant}{integer constant} value
206 that represents the exponent of the base two scale factor to
207 be applied to an instance of the type.  Zero scale puts the
208 binary point immediately to the right of the least significant
209 bit. Positive scale moves the binary point to the right and
210 implies that additional zero bits on the right are not stored
211 in an instance of the type. Negative scale moves the binary
212 point to the left; if the absolute value of the scale is
213 larger than the number of bits, this implies additional zero
214 bits on the left are not stored in an instance of the type.
215
216 For 
217 \hypertarget{chap:DWATsmallscalefactorforfixedpointtype}{}
218 a data type with a non-decimal and non-binary scale factor,
219 the fixed binary type entry has a \DWATsmallDEFN{} attribute which
220 \addtoindexx{small attribute} references a 
221 \DWTAGconstant{} entry. The scale factor value
222 is interpreted in accordance with the value defined by the
223 \DWTAGconstant{} entry. The value represented is the product
224 of the integer value in memory and the associated constant
225 entry for the type.
226
227 \textit{The \DWATsmall{} attribute is defined with the 
228 \addtoindex{Ada} \texttt{small} attribute in mind.}
229
230 \needlines{6}
231 \subsubsection{Floating-Point Encodings}
232 \label{chap:floatingpointencodings}
233 Types with binary floating-point encodings 
234 (\DWATEfloat{}, \DWATEcomplexfloat{} and \DWATEimaginaryfloat{})
235 are supported in many
236 programming languages and do not require further discussion.
237
238 The \DWATEdecimalfloat{} encoding is intended for
239 floating-point representations that have a power-of-ten
240 exponent, such as that specified in IEEE 754R.
241
242 \subsubsection{Decimal String Encodings}
243 \label{chap:decimalstringencodings}
244 The \DWATEpackeddecimalDEFN{} and \DWATEnumericstringDEFN{} 
245 base type encodings
246 represent packed and unpacked decimal string numeric data
247 types, respectively, either of which may be either 
248 \addtoindexx{decimal scale attribute}
249 signed
250 \addtoindexx{decimal sign attribute}
251 or 
252 \addtoindexx{digit count attribute}
253 unsigned. These 
254 base types are used in combination with
255 \DWATdecimalsign, 
256 \DWATdigitcount{} and 
257 \DWATdecimalscale{}
258 attributes.
259
260 \needlines{5}
261 \hypertarget{chap:DWATdecimalsigndecimalsignrepresentation}{}
262 A \DWATdecimalsignDEFN{} attribute 
263 \addtoindexx{decimal sign attribute}
264 is an \livelink{chap:classconstant}{integer constant} that
265 conveys the representation of the sign of the decimal type
266 (see Table \refersec{tab:decimalsignattributevalues}). 
267 Its \livelink{chap:classconstant}{integer constant} value is interpreted to
268 mean that the type has a leading overpunch, trailing overpunch,
269 leading separate or trailing separate sign representation or,
270 alternatively, no sign at all.
271
272 \begin{table}[h]
273 \caption{Decimal sign attribute values}
274 \label{tab:decimalsignattributevalues}
275 \centering
276 \begin{tabular}{l|P{9cm}}
277 \hline
278  Name & Meaning \\
279 \hline
280 \DWDSunsignedTARG{} &  Unsigned \\
281 \DWDSleadingoverpunchTARG{} & Sign
282 is encoded in the most significant digit in a target-dependent  manner \\
283 \DWDStrailingoverpunchTARG{} & Sign
284 is encoded in the least significant digit in a target-dependent manner \\
285 \DWDSleadingseparateTARG{} 
286 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character 
287 to the left of the most significant digit. \\
288 \DWDStrailingseparateTARG{} 
289 & Decimal type: Sign is a \doublequote{+} or \doublequote{-} character 
290 to the right of the least significant digit. \\
291 &Packed decimal type: Least significant nibble contains
292 a target\dash dependent value
293 indicating positive or negative. \\
294 \hline
295 \end{tabular}
296 \end{table}
297
298 \needlines{4}
299 \hypertarget{chap:DWATdecimalscaledecimalscalefactor}{}
300 The \DWATdecimalscaleDEFN{}
301 attribute 
302 \addtoindexx{decimal scale attribute}
303 is an integer constant value
304 that represents the exponent of the base ten scale factor to
305 be applied to an instance of the type. A scale of zero puts the
306 decimal point immediately to the right of the least significant
307 digit. Positive scale moves the decimal point to the right
308 and implies that additional zero digits on the right are not
309 stored in an instance of the type. Negative scale moves the
310 decimal point to the left; if the absolute value of the scale
311 is larger than the digit count, this implies additional zero
312 digits on the left are not stored in an instance of the type.
313
314 The \DWATdigitcountDEFN{} attribute 
315 \addtoindexx{digit count attribute}
316 \hypertarget{chap:DWATdigitcountdigitcountforpackeddecimalornumericstringtype}{}
317 is an \livelink{chap:classconstant}{integer constant}
318 value that represents the number of digits in an instance of
319 the type.
320
321 The \DWATEedited{} base 
322 \hypertarget{chap:DWATpicturestringpicturestringfornumericstringtype}{}
323 type is used to represent an edited
324 numeric or alphanumeric data type. It is used in combination
325 with a \DWATpicturestringDEFN{} attribute whose value is a 
326 null\dash terminated string containing the target\dash dependent picture
327 string associated with the type.
328
329 If the edited base type entry describes an edited numeric
330 data type, the edited type entry has a \DWATdigitcount{} and a
331 \DWATdecimalscale{} attribute.\addtoindexx{decimal scale attribute}
332 These attributes have the same
333 interpretation as described for the 
334 \DWATEpackeddecimal{} and
335 \DWATEnumericstring{} base 
336 types. If the edited type entry
337 describes an edited alphanumeric data type, the edited type
338 entry does not have these attributes.
339
340 \textit{The presence or absence of the \DWATdigitcount{} and
341 \DWATdecimalscale{} attributes\addtoindexx{decimal scale attribute}
342 allows a debugger to easily
343 distinguish edited numeric from edited alphanumeric, although
344 in principle the digit count and scale are derivable by
345 interpreting the picture string.}
346
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 \textit{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 \textit{\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 \DWATaddressclassDEFN{}
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}[h]
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 \DWATorderingDEFN{} 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 \referfol{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 \DWATbytestrideDEFN{} 
648 or 
649 \addtoindexx{byte stride attribute}
650 a \DWATbitstrideDEFN{}
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 %\needlines{5}
700 Other attributes especially applicable to arrays are
701 \DWATallocated, 
702 \DWATassociated{} and 
703 \DWATdatalocation,
704 which are described in 
705 Section \refersec{chap:dynamicpropertiesoftypes}. 
706 For relevant examples, see also Appendix \refersec{app:fortranarrayexample}.
707
708 \section{Coarray Type Entries}
709 \label{chap:coarraytypeentries}
710 \addtoindexx{coarray}
711 \textit{In Fortran, a \doublequote{coarray} is an array whose
712 elements are located in different processes rather than in the
713 memory of one process. The individual elements
714 of a coarray can be scalars or arrays.
715 Similar to arrays, coarrays have \doublequote{codimensions} that are 
716 indexed using a \doublequote{coindex} or multiple \doublequote{coindices}.
717 \addtoindexx{codimension|see{coarray}}
718 \addtoindexx{coindex|see{coarray}}
719 }
720
721 A coarray type is represented by a debugging information entry 
722 with the tag \DWTAGcoarraytypeTARG.
723 If a name has been given to the 
724 coarray type in the source, then the corresponding coarray type 
725 entry has a \DWATname{} attribute whose value is a null-terminated 
726 string containing the array type name as it appears in the source 
727 program.
728
729 A coarray entry has one or more \DWTAGsubrangetype{} child entries,
730 one for each codimension. It also has a \DWATtype{} attribute 
731 describing the type of each element of the coarray.
732
733 \textit{In a coarray application, the run-time number of processes in the application
734 is part of the coindex calculation.  It is represented in the Fortran source by
735 a coindex which is declared with a \doublequote{*} as the upper bound.  To express this
736 concept in DWARF, the \DWTAGsubrangetype{} child entry for that index has 
737 only a lower bound and no upper bound.}
738
739 \textit{How coarray elements are located and how coindices are 
740 converted to process specifications is implementation-defined.}
741
742 \needlines{8}
743 \section{Structure, Union, Class and Interface Type Entries}
744 \label{chap:structureunionclassandinterfacetypeentries}
745
746 \textit{The languages 
747 \addtoindex{C}, 
748 \addtoindex{C++}, and 
749 \addtoindex{Pascal}, among others, allow the
750 programmer to define types that are collections of related
751 \addtoindexx{structure type entry}
752 components. 
753 In \addtoindex{C} and \addtoindex{C++}, these collections are called
754 \doublequote{structures.} 
755 In \addtoindex{Pascal}, they are called \doublequote{records.}
756 The components may be of different types. The components are
757 called \doublequote{members} in \addtoindex{C} and 
758 \addtoindex{C++}, and \doublequote{fields} in \addtoindex{Pascal}.}
759
760 \textit{The components of these collections each exist in their
761 own space in computer memory. The components of a \addtoindex{C} or \addtoindex{C++}
762 \doublequote{union} all coexist in the same memory.}
763
764 \textit{\addtoindex{Pascal} and 
765 other languages have a \doublequote{discriminated union,}
766 \addtoindexx{discriminated union|see {variant entry}}
767 also called a \doublequote{variant record.} Here, selection of a
768 number of alternative substructures (\doublequote{variants}) is based
769 on the value of a component that is not part of any of those
770 substructures (the \doublequote{discriminant}).}
771
772 \textit{\addtoindex{C++} and 
773 \addtoindex{Java} have the notion of \doublequote{class,} which is in some
774 ways similar to a structure. A class may have \doublequote{member
775 functions} which are subroutines that are within the scope
776 of a class or structure.}
777
778 \textit{The \addtoindex{C++} notion of 
779 structure is more general than in \addtoindex{C}, being
780 equivalent to a class with minor differences. Accordingly,
781 in the following discussion, statements about 
782 \addtoindex{C++} classes may
783 be understood to apply to \addtoindex{C++} structures as well.}
784
785 \subsection{Structure, Union and Class Type Entries}
786 \label{chap:structureunionandclasstypeentries}
787 Structure, union, and class types are represented by debugging
788 \addtoindexx{structure type entry}
789 information entries 
790 \addtoindexx{union type entry}
791 with 
792 \addtoindexx{class type entry}
793 the tags 
794 \DWTAGstructuretypeTARG,
795 \DWTAGuniontypeTARG, 
796 and \DWTAGclasstypeTARG,
797 respectively. If a name has been given to the structure,
798 union, or class in the source program, then the corresponding
799 structure type, union type, or class type entry has a
800 \DWATname{} attribute 
801 \addtoindexx{name attribute}
802 whose value is a null\dash terminated string
803 containing the type name as it appears in the source program.
804
805 The members of a structure, union, or class are represented
806 by debugging information entries that are owned by the
807 corresponding structure type, union type, or class type entry
808 and appear in the same order as the corresponding declarations
809 in the source program.
810
811 A structure, union, or class type may have a \DWATexportsymbolsDEFN{}
812 attribute\addtoindexx{export symbols (of structure, class or union) attribute} 
813 \livetarg{chap:DWATexportsymbolsofstructunionclass}{}
814 which indicates that all member names defined within 
815 the structure, union, or class may be referenced as if they were
816 defined within the containing structure, union, or class. 
817
818 \textit{This may be used to describe anonymous structures, unions 
819 and classes in \addtoindex{C} or \addtoindex{C++}}.
820
821 A structure type, union type or class type entry may have
822 either a \DWATbytesize{} or a
823 \DWATbitsize{} attribute 
824 \hypertarget{chap:DWATbitsizedatamemberbitsize}{}
825 (see Section \refersec{chap:byteandbitsizes}), 
826 whose value is the amount of storage needed
827 to hold an instance of the structure, union or class type,
828 including any padding.
829   
830 An incomplete structure, union or class type 
831 \addtoindexx{incomplete structure/union/class}
832 is 
833 \addtoindexx{incomplete type}
834 represented by a structure, union or class
835 entry that does not have a byte size attribute and that has
836 \addtoindexx{declaration attribute}
837 a \DWATdeclaration{} attribute.
838
839 If the complete declaration of a type has been placed in
840 \hypertarget{chap:DWATsignaturetypesignature}{}
841 a separate \addtoindex{type unit}
842 (see Section \refersec{chap:typeunitentries}), 
843 an incomplete declaration 
844 \addtoindexx{incomplete type}
845 of that type in the compilation unit may provide
846 the unique 
847 \bb
848 8-byte 
849 \eb
850 signature of the type using a
851 \addtoindexx{type signature}
852 \DWATsignatureDEFN{} attribute.
853
854 If a structure, union or class entry represents the definition
855 of a structure, union or class member corresponding to a prior
856 incomplete structure, union or class, the entry may have a
857 \DWATspecification{} attribute 
858 \addtoindexx{specification attribute}
859 whose value is a \livelink{chap:classreference}{reference} to
860 the debugging information entry representing that incomplete
861 declaration.
862
863 Structure, union and class entries containing the
864 \DWATspecification{} attribute 
865 \addtoindexx{specification attribute}
866 do not need to duplicate
867 information provided by the declaration entry referenced by the
868 specification attribute.  In particular, such entries do not
869 need to contain an attribute for the name of the structure,
870 union or class they represent if such information is already
871 provided in the declaration.
872
873 \textit{For \addtoindex{C} and \addtoindex{C++}, 
874 data 
875 \addtoindexx{data member|see {member entry (data)}}
876 member declarations occurring within
877 the declaration of a structure, union or class type are
878 considered to be \doublequote{definitions} of those members, with
879 the exception of \doublequote{static} data members, whose definitions
880 appear outside of the declaration of the enclosing structure,
881 union or class type. Function member declarations appearing
882 within a structure, union or class type declaration are
883 definitions only if the body of the function also appears
884 within the type declaration.}
885
886 If the definition for a given member of the structure, union
887 or class does not appear within the body of the declaration,
888 that member also has a debugging information entry describing
889 its definition. That latter entry has a 
890 \DWATspecification{} attribute 
891 \addtoindexx{specification attribute}
892 referencing the debugging information entry
893 owned by the body of the structure, union or class entry and
894 representing a non\dash defining declaration of the data, function
895 or type member. The referenced entry will not have information
896 about the location of that member (low and high PC attributes
897 for function members, location descriptions for data members)
898 and will have a \DWATdeclaration{} attribute.
899
900 \needlines{5}
901 \textit{Consider a nested class whose 
902 definition occurs outside of the containing class definition, as in:}
903
904 \begin{lstlisting}[numbers=none]
905 struct A {
906     struct B;
907 };
908 struct A::B { ... };
909 \end{lstlisting}
910
911 \textit{The two different structs can be described in 
912 different compilation units to 
913 facilitate DWARF space compression 
914 (see Appendix \refersec{app:usingcompilationunits}).}
915
916 \needlines{4}
917 A structure type, union type or class type entry may have a
918 \DWATcallingconventionDEFN{} attribute,
919 \addtoindexx{calling convention attribute!for types} 
920 whose value indicates whether a value of the type should be passed by reference 
921 or passed by value. The set of calling convention codes for use with types 
922 \addtoindexx{calling convention codes!for types}
923 \hypertarget{chap:DWATcallingconventionfortypes}{}
924 is given in Table \referfol{tab:callingconventioncodesfortypes}.
925
926 \begin{simplenametable}[2.2in]{Calling convention codes for types}{tab:callingconventioncodesfortypes}
927 \DWCCnormal             \\
928 \DWCCpassbyvalueTARG        \\
929 \DWCCpassbyreferenceTARG    \\
930 \end{simplenametable}
931
932 If this attribute is not present, or its value is
933 \DWCCnormalNAME, the convention to be used for an object of the
934 given type is assumed to be unspecified.
935
936 \textit{Note that \DWCCnormalNAME{} is also used as a calling convention 
937 code for certain subprograms 
938 (see Table \refersec{tab:callingconventioncodesforsubroutines}).}
939
940 \textit{If unspecified, a consumer may be able to deduce the calling
941 convention based on knowledge of the type and the ABI.}
942
943
944 \subsection{Interface Type Entries}
945 \label{chap:interfacetypeentries}
946
947 \textit{The \addtoindex{Java} language defines \doublequote{interface} types. 
948 An interface
949 \addtoindexx{interface type entry}
950 in \addtoindex{Java} is similar to a \addtoindex{C++} or 
951 \addtoindex{Java} class with only abstract
952 methods and constant data members.}
953
954 Interface types 
955 \addtoindexx{interface type entry}
956 are represented by debugging information
957 entries with the 
958 tag \DWTAGinterfacetypeTARG.
959
960 An interface type entry has 
961 a \DWATname{} attribute,
962 \addtoindexx{name attribute}
963 whose
964 value is a null\dash terminated string containing the type name
965 as it appears in the source program.
966
967 The members of an interface are represented by debugging
968 information entries that are owned by the interface type
969 entry and that appear in the same order as the corresponding
970 declarations in the source program.
971
972 \subsection{Derived or Extended Structures, Classes and Interfaces}
973 \label{chap:derivedorextendedstructsclasesandinterfaces}
974
975 \textit{In \addtoindex{C++}, a class (or struct) 
976 may 
977 \addtoindexx{derived type (C++)|see{inheritance entry}}
978 be \doublequote{derived from} or be a
979 \doublequote{subclass of} another class. 
980 In \addtoindex{Java}, an interface may \doublequote{extend}
981 \addtoindexx{extended type (Java)|see{inheritance entry}}
982 one 
983 \addtoindexx{implementing type (Java)|see{inheritance entry}}
984 or more other interfaces, and a class may \doublequote{extend} another
985 class and/or \doublequote{implement} one or more interfaces. All of these
986 relationships may be described using the following. Note that
987 in \addtoindex{Java}, 
988 the distinction between extends and implements is
989 implied by the entities at the two ends of the relationship.}
990
991 A class type or interface type entry that describes a
992 derived, extended or implementing class or interface owns
993 \addtoindexx{implementing type (Java)|see{inheritance entry}}
994 debugging information entries describing each of the classes
995 or interfaces it is derived from, extending or implementing,
996 respectively, ordered as they were in the source program. Each
997 such entry has 
998 \addtoindexx{inheritance entry}
999 the 
1000 tag \DWTAGinheritanceTARG.
1001
1002 \needlines{4}
1003 An inheritance entry 
1004 \addtoindexx{type attribute}
1005 has 
1006 \addtoindexx{inheritance entry}
1007
1008 \DWATtype{} attribute whose value is
1009 a reference to the debugging information entry describing the
1010 class or interface from which the parent class or structure
1011 of the inheritance entry is derived, extended or implementing.
1012
1013 An inheritance entry 
1014 \addtoindexx{inheritance entry}
1015 for a class that derives from or extends
1016 \hypertarget{chap:DWATdatamemberlocationinheritedmemberlocation}{}
1017 another class or struct also has a 
1018 \DWATdatamemberlocationDEFN{} attribute, 
1019 \addtoindexx{data member location attribute}
1020 whose value describes the location of the beginning
1021 of the inherited type relative to the beginning address of the
1022 instance of the derived class. If that value is a constant, it is the offset
1023 in bytes from the beginning of the class to the beginning of
1024 the instance of the inherited type. Otherwise, the value must be a location
1025 description. In this latter case, the beginning address of
1026 the instance of the derived class is pushed on the expression stack before
1027 the \addtoindex{location description}
1028 is evaluated and the result of the
1029 evaluation is the location of the instance of the inherited type.
1030
1031 \textit{The interpretation of the value of this attribute for
1032 inherited types is the same as the interpretation for data
1033 members 
1034 (see Section \referfol{chap:datamemberentries}).  }
1035
1036 An 
1037 \addtoindexx{inheritance entry}
1038 inheritance entry 
1039 \hypertarget{chap:DWATaccessibilitycppinheritedmembers}{}
1040 may 
1041 \addtoindexx{accessibility attribute}
1042 have a
1043 \DWATaccessibilityDEFN{}
1044 attribute. 
1045 If no accessibility attribute is present, private access 
1046 is assumed for an entry of a class and public access is 
1047 assumed for an entry of a struct, union or interface.
1048
1049 If\hypertarget{chap:DWATvirtualityvirtualityofbaseclass}{}
1050 the class referenced by the 
1051 \addtoindexx{inheritance entry}
1052 inheritance entry serves
1053 as a \addtoindex{C++} virtual base class, the inheritance entry has a
1054 \DWATvirtualityDEFN{} attribute.
1055
1056 \textit{For a \addtoindex{C++} virtual base, the 
1057 \addtoindex{data member location attribute}
1058 will usually consist of a non-trivial 
1059 \addtoindex{location description}.}
1060
1061 \subsection{Access Declarations}
1062 \label{chap:accessdeclarations}
1063
1064 \textit{In \addtoindex{C++}, a derived class may contain access declarations that
1065 \addtoindexx{access declaration entry}
1066 change the accessibility of individual class members from the
1067 overall accessibility specified by the inheritance declaration.
1068 A single access declaration may refer to a set of overloaded
1069 names.}
1070
1071 If a derived class or structure contains access declarations,
1072 each such declaration may be represented by a debugging
1073 information entry with the tag 
1074 \DWTAGaccessdeclarationTARG. 
1075 Each
1076 such entry is a child of the class or structure type entry.
1077
1078 An access declaration entry has 
1079 a \DWATname{} attribute, 
1080 \addtoindexx{name attribute}
1081 whose
1082 value is a null\dash terminated string representing the name used
1083 in the declaration in the source program, including any class
1084 or structure qualifiers.
1085
1086 An access declaration entry 
1087 \hypertarget{chap:DWATaccessibilitycppbaseclasses}{}
1088 also 
1089 has a 
1090 \DWATaccessibilityDEFN{}
1091 attribute describing the declared accessibility of the named
1092 entities.
1093
1094
1095 \needlines{6}
1096 \subsection{Friends}
1097 \label{chap:friends}
1098
1099 Each friend\addtoindexx{friend entry}
1100 declared by a structure, union or class
1101 \hypertarget{chap:DWATfriendfriendrelationship}{}
1102 type may be represented by a debugging information entry
1103 that is a child of the structure, union or class type entry;
1104 the friend entry has the tag \DWTAGfriendTARG.
1105
1106 A friend entry has a \DWATfriendDEFN{} attribute,
1107 \addtoindexx{friend attribute} whose value is
1108 a reference to the debugging information entry describing
1109 the declaration of the friend.
1110
1111
1112 \subsection{Data Member Entries}
1113 \label{chap:datamemberentries}
1114
1115 A data member (as opposed to a member function) is
1116 represented by a debugging information entry with the 
1117 tag \DWTAGmemberTARG. 
1118 The 
1119 \addtoindexx{member entry (data)}
1120 member entry for a named member has
1121 a \DWATname{} attribute 
1122 \addtoindexx{name attribute}
1123 whose value is a null\dash terminated
1124 string containing the member name as it appears in the source
1125 program. If the member entry describes an 
1126 \addtoindex{anonymous union},
1127 the name attribute is omitted or the value of the attribute
1128 consists of a single zero byte.
1129
1130 The data member entry has a 
1131 \DWATtype{} attribute\addtoindexx{type attribute} to denote
1132 \addtoindexx{member entry (data)} the type of that member.
1133
1134 A data member entry may have a \DWATaccessibility{}
1135 attribute.\addtoindexx{accessibility attribute} 
1136 If no accessibility attribute is present, private
1137 access is assumed for an member of a class and public access
1138 is assumed for an member of a structure, union, or interface.
1139
1140 A data member 
1141 \hypertarget{chap:DWATmutablemutablepropertyofmemberdata}{}
1142 entry 
1143 \addtoindexx{member entry (data)}
1144 may 
1145 \addtoindexx{mutable attribute}
1146 have a \DWATmutableDEFN{} attribute,
1147 which is a \livelink{chap:classflag}{flag}. 
1148 This attribute indicates whether the data
1149 member was declared with the mutable storage class specifier.
1150
1151 The beginning of a data member 
1152 \addtoindexx{beginning of a data member} 
1153 is described relative to
1154 \addtoindexx{beginning of an object}
1155 the beginning of the object in which it is immediately
1156 contained. In general, the beginning is characterized by
1157 both an address and a bit offset within the byte at that
1158 address. When the storage for an entity includes all of
1159 the bits in the beginning byte, the beginning bit offset is
1160 defined to be zero.
1161
1162 Bit offsets in DWARF use the bit numbering and direction
1163 conventions that are appropriate to the current language on
1164 the target system.
1165
1166 The member entry 
1167 \addtoindexx{member entry (data)}
1168 corresponding to a data member that is defined
1169 \hypertarget{chap:DWATdatabitoffsetdatamemberbitlocation}{}
1170 \hypertarget{chap:DWATdatamemberlocationdatamemberlocation}{}
1171 in a structure, union or class may have either a 
1172 \DWATdatamemberlocationDEFN{} attribute
1173 \addtoindexx{data member location attribute}
1174 or a \DWATdatabitoffsetDEFN{} attribute. 
1175 \addtoindexx{data bit offset attribute}
1176 If the beginning of the data member is the same as
1177 the beginning of the containing entity then neither attribute
1178 is required.
1179
1180 \needlines{4}
1181 For a \DWATdatamemberlocation{} attribute
1182 \addtoindexx{data member location attribute}
1183 there are two cases:
1184 \begin{enumerate}[1. ]
1185 \item If the value is an 
1186 \livelink{chap:classconstant}{integer constant}, 
1187 it is the offset
1188 in bytes from the beginning of the containing entity. If
1189 the beginning of the containing entity has a non-zero bit
1190 offset then the beginning of the member entry has that same
1191 bit offset as well.
1192
1193 \item Otherwise, the value must be a \addtoindex{location description}.
1194 In
1195 this case, the beginning of the containing entity must be byte
1196 aligned. The beginning address is pushed on the DWARF stack
1197 before the \addtoindex{location} description is evaluated; the result of
1198 the evaluation is the base address of the member entry.
1199
1200 \textit{The push on the DWARF expression stack of the base address of
1201 the containing construct is equivalent to execution of the
1202 \DWOPpushobjectaddress{} operation 
1203 (see Section \refersec{chap:stackoperations});
1204 \DWOPpushobjectaddress{} therefore 
1205 is not needed at the
1206 beginning of a \addtoindex{location description} for a data member. 
1207 The
1208 result of the evaluation is a location---either an address or
1209 the name of a register, not an offset to the member.}
1210
1211 \textit{A \DWATdatamemberlocation{} 
1212 attribute 
1213 \addtoindexx{data member location attribute}
1214 that has the form of a
1215 \addtoindex{location description} is not valid for a data member contained
1216 in an entity that is not byte aligned because DWARF operations
1217 do not allow for manipulating or computing bit offsets.}
1218
1219 \end{enumerate}
1220
1221 \needlines{4}
1222 For a \DWATdatabitoffset{} attribute, 
1223 the value is an \livelink{chap:classconstant}{integer constant} 
1224 (see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
1225 that specifies the number of bits
1226 from the beginning of the containing entity to the beginning
1227 of the data member. This value must be greater than or equal
1228 to zero, but is not limited to less than the number of bits
1229 per byte.
1230
1231 If the size of a data member is not the same as the size
1232 of the type given for the data member, the data member has
1233 either a \DWATbytesize\addtoindexx{byte size attribute} 
1234 or a \DWATbitsize{} attribute\addtoindexx{bit size attribute} whose
1235 \livelink{chap:classconstant}{integer constant} value 
1236 (see Section \refersec{chap:staticanddynamicvaluesofattributes}) 
1237 is the amount
1238 of storage needed to hold the value of the data member.
1239
1240 \textit{For showing nested and packed records and arrays, 
1241 see Appendix \refersec{app:pascalexample} and 
1242 \refersec{app:ccppbitfieldexamples}.}
1243
1244
1245 \subsection{Member Function Entries}
1246 \label{chap:memberfunctionentries}
1247
1248 A member function is represented by a 
1249 \addtoindexx{member function entry}
1250 debugging information entry 
1251 with the 
1252 \addtoindexx{subprogram entry!as member function}
1253 tag \DWTAGsubprogram.
1254 The member function entry
1255 may contain the same attributes and follows the same rules
1256 as non\dash member global subroutine entries 
1257 (see Section \refersec{chap:subroutineandentrypointentries}).
1258
1259 \needlines{4}
1260 \textit{In particular, if the member function entry is an
1261 instantiation of a member function template, it follows the 
1262 same rules as function template instantiations (see Section 
1263 \refersec{chap:functiontemplateinstantiations}).
1264 }
1265
1266
1267 \addtoindexx{accessibility attribute}
1268 member function entry may have a 
1269 \DWATaccessibility{}
1270 attribute. If no accessibility attribute is present, private
1271 access is assumed for an entry of a class and public access
1272 is assumed for an entry of a structure, union or interface.
1273
1274 If 
1275 \hypertarget{chap:DWATvirtualityvirtualityoffunction}{}
1276 the member function entry describes a virtual function,
1277 then that entry has a 
1278 \DWATvirtualityDEFN{} attribute.
1279
1280 If 
1281 \hypertarget{chap:DWATexplicitexplicitpropertyofmemberfunction}{}
1282 the member function entry describes an explicit member
1283 function, then that entry has 
1284 \addtoindexx{explicit attribute}
1285
1286 \DWATexplicitDEFN{} attribute.
1287
1288 An 
1289 \hypertarget{chap:DWATvtableelemlocationvirtualfunctiontablevtableslot}{}
1290 entry for a virtual function also has a
1291 \DWATvtableelemlocationDEFN{}
1292 \addtoindexi{attribute}{vtable element location attribute} whose value contains
1293 a \addtoindex{location description} 
1294 yielding the address of the slot
1295 for the function within the virtual function table for the
1296 enclosing class. The address of an object of the enclosing
1297 type is pushed onto the expression stack before the location
1298 description is evaluated.
1299
1300 If 
1301 \hypertarget{chap:DWATobjectpointerobjectthisselfpointerofmemberfunction}{}
1302 the member function entry describes a non\dash static member
1303 \addtoindexx{this pointer attribute|see{object pointer attribute}}
1304 function, then that entry 
1305 \addtoindexx{self pointer attribute|see{object pointer attribute}}
1306 has 
1307 \addtoindexx{object pointer attribute}
1308 a \DWATobjectpointerDEFN{} attribute
1309 whose value is a \livelink{chap:classreference}{reference} 
1310 to the formal parameter entry
1311 that corresponds to the object for which the function is
1312 called. The name attribute of that formal parameter is defined
1313 by the current language (for example, 
1314 \texttt{this} for \addtoindex{C++} or \texttt{self}
1315 for \addtoindex{Objective C} 
1316 and some other languages). That parameter
1317 also has a \DWATartificial{} attribute whose value is true.
1318
1319 Conversely, if the member function entry describes a static
1320 member function, the entry does not have 
1321 \addtoindexx{object pointer attribute}
1322
1323 \DWATobjectpointer{}
1324 attribute.
1325
1326 \textit{In \addtoindex{C++}, non-static member functions can have const-volatile
1327 qualifiers, which affect the type of the first formal parameter (the
1328 \doublequote{\texttt{this}}-pointer).}
1329  
1330 If the member function entry describes a non\dash static member
1331 function that has a const\dash volatile qualification, then
1332 the entry describes a non\dash static member function whose
1333 object formal parameter has a type that has an equivalent
1334 const\dash volatile qualification.
1335
1336 \textit{Beginning in \addtoindex{C++:2011 (ISO)}, non-static member 
1337 functions can also have one of the ref-qualifiers, \& and \&\&. 
1338 These do not change the type of the
1339 \doublequote{\texttt{this}}-pointer, but they do affect the types of 
1340 object values on which the function can be invoked.}
1341
1342 \needlines{6}
1343 The member function entry may have an \DWATreferenceDEFN{} attribute
1344 \livetarg{chap:DWATreferenceofnonstaticmember}{}
1345 to indicate a non-static member function that can only be called on
1346 lvalue objects, or the \DWATrvaluereferenceDEFN{} attribute 
1347 \livetarg{chap:DWATrvaluereferenceofnonstaticmember}{}
1348 to indicate that it can only be called on prvalues and xvalues.
1349
1350 \textit{The lvalue, prvalue and xvalue concepts are defined in the
1351 \addtoindex{C++:2011} and later standards and not repeated or
1352 considered further in DWARF.}
1353
1354 If a subroutine entry represents the defining declaration
1355 of a member function and that definition appears outside of
1356 the body of the enclosing class declaration, the subroutine
1357 entry has a 
1358 \DWATspecification{} attribute, 
1359 \addtoindexx{specification attribute}
1360 whose value is
1361 a reference to the debugging information entry representing
1362 the declaration of this function member. The referenced entry
1363 will be a child of some class (or structure) type entry.
1364
1365 \needlines{6}
1366 Subroutine entries containing the
1367 \DWATspecification{} attribute 
1368 \addtoindexx{specification attribute}
1369 do not need to duplicate information provided
1370 by the declaration entry referenced by the specification
1371 attribute. In particular, such entries do not need to contain
1372 a name attribute giving the name of the function member whose 
1373 definition they represent.  
1374 Similarly, such entries do not need to contain a return type 
1375 attribute, unless the return type on the declaration was 
1376 unspecified (for example, the declaration used the 
1377 \addtoindex{C++} \autoreturntype{} specifier).
1378
1379 \textit{In \addtoindex{C++}, a member function may be declared 
1380 as deleted. This prevents the compiler from generating a default
1381 implementation of a special member function such as a
1382 constructor or destructor, and can affect overload resolution
1383 when used on other member functions.}
1384
1385 If the member function entry has been declared as deleted,
1386 then that entry has a \DWATdeletedDEFN{}\livetarg{chap:DWATdeleteddef}{}
1387 attribute.\addtoindexx{deleted attribute}
1388
1389 \textit{In \addtoindex{C++}, a special member function may be 
1390 declared as defaulted, which explicitly declares a default
1391 compiler-generated implementation of the function. The
1392 declaration may have different effects on the calling
1393 convention used for objects of its class, depending on
1394 whether the default declaration is made inside or outside the
1395 class.}
1396
1397 If the member function has been declared as defaulted, 
1398 then the entry has a \DWATdefaultedDEFN{}\livetarg{chap:DWATdefaulteddef}{}
1399 attribute\addtoindexx{defaulted attribute}
1400 whose integer constant value indicates whether, and if so,
1401 how, that member is defaulted. The possible values and
1402 their meanings are shown in 
1403 Table \referfol{tab:defaultedattributevaluenames}.
1404
1405 \needlines{8}
1406 \begin{centering}
1407   \setlength{\extrarowheight}{0.1cm}
1408 \begin{longtable}{l|l}
1409   \caption{Defaulted attribute names} \label{tab:defaultedattributevaluenames} \\
1410   \hline \bfseries Defaulted attribute name & \bfseries Meaning \\ \hline
1411 \endfirsthead
1412   \bfseries Defaulted attribute name & \bfseries Meaning \\ \hline
1413 \endhead
1414   \hline \emph{Continued on next page}
1415 \endfoot
1416 \endlastfoot
1417 \DWDEFAULTEDnoTARG        & Not declared default \\
1418 \DWDEFAULTEDinclassTARG   & Defaulted within the class \\
1419 \DWDEFAULTEDoutofclassTARG& Defaulted outside of the class \\
1420 \hline
1421 \end{longtable}
1422 \end{centering}
1423
1424 \textit{An artificial member function (that is, a compiler-generated
1425 copy that does not appear in the source) does not have a
1426 \DWATdefaultedNAME{} attribute.}
1427
1428 \needlines{5}
1429 \subsection{Class Template Instantiations}
1430 \label{chap:classtemplateinstantiations}
1431
1432 \textit{In \addtoindex{C++} a class template is a generic definition of a class
1433 type that may be instantiated when an instance of the class
1434 is declared or defined. The generic description of the class may include
1435 parameterized types, parameterized compile-time constant
1436 values, and/or parameterized run-time constant addresses. 
1437 DWARF does not represent the generic template
1438 definition, but does represent each instantiation.}
1439
1440 A class template instantiation is represented by a
1441 debugging information entry with the tag \DWTAGclasstype,
1442 \DWTAGstructuretype{} or 
1443 \DWTAGuniontype. With the following
1444 exceptions, such an entry will contain the same attributes
1445 and have the same types of child entries as would an entry
1446 for a class type defined explicitly using the instantiation
1447 types and values. The exceptions are:
1448
1449 \begin{enumerate}[1. ]
1450 \item Template parameters are described and referenced as
1451 specified in Section \refersec{chap:templateparameters}.
1452
1453 %\needlines{4}
1454 \item If the compiler has generated a special compilation unit to
1455 hold the 
1456 \addtoindexx{template instantiation!and special compilation unit}
1457 template instantiation and that special compilation
1458 unit has a different name from the compilation unit containing
1459 the template definition, the name attribute for the debugging
1460 information entry representing the special compilation unit
1461 should be empty or omitted.
1462
1463 %\needlines{4}
1464 \item If the class type entry representing the template
1465 instantiation or any of its child entries contains declaration
1466 coordinate attributes, those attributes should refer to
1467 the source for the template definition, not to any source
1468 generated artificially by the compiler.
1469 \end{enumerate}
1470
1471
1472 \subsection{Variant Entries}
1473 \label{chap:variantentries}
1474
1475 A variant part of a structure is represented by a debugging
1476 information entry\addtoindexx{variant part entry} with the 
1477 tag \DWTAGvariantpartTARG{} and is
1478 owned by the corresponding structure type entry.
1479
1480 If the variant part has a discriminant, the discriminant is
1481 \hypertarget{chap:DWATdiscrdiscriminantofvariantpart}{}
1482 represented by a 
1483 \addtoindexx{discriminant (entry)}
1484 separate debugging information entry which
1485 is a child of the variant part entry. This entry has the form
1486 of a 
1487 \addtoindexx{member entry (data)!as discriminant}
1488 structure data member entry. The variant part entry will
1489 have a 
1490 \DWATdiscrDEFN{} attribute \addtoindexx{discriminant attribute}
1491 whose value is a \livelink{chap:classreference}{reference} to
1492 the member entry for the discriminant.
1493
1494 If the variant part does not have a discriminant (tag field),
1495 the variant part entry has 
1496 \addtoindexx{type attribute}
1497
1498 \DWATtype{} attribute to represent
1499 the tag type.
1500
1501 Each variant of a particular variant part is represented by
1502 \hypertarget{chap:DWATdiscrvaluediscriminantvalue}{}
1503 a debugging information entry\addtoindexx{variant entry} with the 
1504 tag \DWTAGvariantTARG{}
1505 and is a child of the variant part entry. The value that
1506 selects a given variant may be represented in one of three
1507 ways. The variant entry may have a \DWATdiscrvalueDEFN{} 
1508 attribute\addtoindexx{discriminant value attribute}
1509 whose value represents the discriminant value selecting 
1510 this variant. The value of this
1511 attribute is encoded as an LEB128 number. The number is signed
1512 if the tag type for the variant part containing this variant
1513 is a signed type. The number is unsigned if the tag type is
1514 an unsigned type.
1515
1516 \needlines{5}
1517 Alternatively, 
1518 \hypertarget{chap:DWATdiscrlistlistofdiscriminantvalues}{}
1519 the variant entry may contain 
1520 \addtoindexx{discriminant list attribute}
1521 a \DWATdiscrlistDEFN{}
1522 attribute, whose value represents a list of discriminant
1523 values. This list is represented by any of the 
1524 \livelink{chap:classblock}{block} forms and may contain a 
1525 mixture of discriminant values and discriminant ranges. 
1526 Each item on the list is prefixed with a discriminant value
1527 descriptor that determines whether the list item represents
1528 a single label or a label range. A single case label is
1529 represented as an LEB128 number as defined above for 
1530 \addtoindexx{discriminant value attribute}
1531 the
1532 \DWATdiscrvalue{} 
1533 attribute. A label range is represented by
1534 two LEB128 numbers, the low value of the range followed by the
1535 high value. Both values follow the rules for signedness just
1536 described. The discriminant value descriptor is an integer
1537 constant that may have one of the values given in 
1538 Table \refersec{tab:discriminantdescriptorvalues}.
1539
1540 \begin{simplenametable}[1.4in]{Discriminant descriptor values}{tab:discriminantdescriptorvalues}
1541 \DWDSClabelTARG{} \\
1542 \DWDSCrangeTARG{} \\
1543 \end{simplenametable}
1544
1545 \needlines{4}
1546 If a variant entry has neither a \DWATdiscrvalue{}
1547 attribute nor a \DWATdiscrlist{} attribute, or if it has
1548 a \DWATdiscrlist{} attribute with 0 size, the variant is a
1549 default variant.
1550
1551 The components selected by a particular variant are represented
1552 by debugging information entries owned by the corresponding
1553 variant entry and appear in the same order as the corresponding
1554 declarations in the source program.
1555
1556 \needlines{6}
1557 \section{Condition Entries}
1558 \label{chap:conditionentries}
1559
1560 \textit{COBOL has the notion of 
1561 \addtoindexx{level-88 condition, COBOL}
1562 a \doublequote{level\dash 88 condition} that
1563 associates a data item, called the conditional variable, with
1564 a set of one or more constant values and/or value ranges.
1565 % Note: the {} after \textquoteright (twice) is necessary to assure a following space separator
1566 Semantically, the condition is \textquoteleft true\textquoteright{}
1567 if the conditional
1568 variable's value matches any of the described constants,
1569 and the condition is \textquoteleft false\textquoteright{} otherwise.}
1570
1571 The \DWTAGconditionTARG{}
1572 debugging information entry\addtoindexx{condition entry}
1573 describes a
1574 logical condition that tests whether a given data item\textquoteright s
1575 value matches one of a set of constant values. If a name
1576 has been given to the condition, the condition entry has a
1577 \DWATname{} attribute
1578 \addtoindexx{name attribute}
1579 whose value is a null\dash terminated string
1580 giving the condition name as it appears in the source program.
1581
1582 \needlines{4}
1583 The condition entry's parent entry describes the conditional
1584 variable; normally this will be a \DWTAGvariable,
1585 \DWTAGmember{} or 
1586 \DWTAGformalparameter{} entry.
1587 If 
1588 \addtoindexx{formal parameter entry}
1589 the parent
1590 entry has an array type, the condition can test any individual
1591 element, but not the array as a whole. The condition entry
1592 implicitly specifies a \doublequote{comparison type} that is the
1593 type of an array element if the parent has an array type;
1594 otherwise it is the type of the parent entry.
1595
1596 %\needlines{4}
1597 The condition entry owns \DWTAGconstant{} and/or
1598 \DWTAGsubrangetype{} entries that describe the constant
1599 values associated with the condition. If any child entry 
1600 \addtoindexx{type attribute}
1601 has
1602 a \DWATtype{} attribute,
1603 that attribute should describe a type
1604 compatible with the comparison type (according to the source
1605 language); otherwise the child\textquoteright s type is the same as the
1606 comparison type.
1607
1608 \textit{For conditional variables with alphanumeric types, COBOL
1609 permits a source program to provide ranges of alphanumeric
1610 constants in the condition. Normally a subrange type entry
1611 does not describe ranges of strings; however, this can be
1612 represented using bounds attributes that are references to
1613 constant entries describing strings. A subrange type entry may
1614 refer to constant entries that are siblings of the subrange
1615 type entry.}
1616
1617
1618 \section{Enumeration Type Entries}
1619 \label{chap:enumerationtypeentries}
1620
1621 \textit{An \doublequote{enumeration type} is a scalar that can assume one of
1622 a fixed number of symbolic values.}
1623
1624 An enumeration type is represented by a debugging information
1625 entry with the tag 
1626 \DWTAGenumerationtypeTARG.
1627
1628 If a name has been given to the enumeration type in the source
1629 program, then the corresponding enumeration type entry has
1630 a \DWATname{} attribute
1631 \addtoindexx{name attribute}
1632 whose value is a null\dash terminated
1633 string containing the enumeration type name as it appears
1634 in the source program. 
1635
1636 The \addtoindex{enumeration type entry}
1637 may have 
1638 \addtoindexx{type attribute}
1639 a \DWATtype{} attribute
1640 which refers to the underlying data type used to implement
1641 the enumeration. The entry also may have a 
1642 \DWATbytesize{} attribute whose 
1643 \livelink{chap:classconstant}{integer constant} value is the number of bytes 
1644 required to hold an instance of the enumeration. If no \DWATbytesize{} attribute 
1645 is present, the size for holding an instance of the enumeration is given by the size 
1646 of the underlying data type.
1647
1648 \needlines{4}
1649 If an enumeration type has type safe 
1650 \addtoindexx{type safe enumeration types}
1651 semantics such that
1652
1653 \begin{enumerate}[1. ]
1654 \item Enumerators are contained in the scope of the enumeration type, and/or
1655
1656 \item Enumerators are not implicitly converted to another type
1657 \end{enumerate}
1658
1659 then the \addtoindex{enumeration type entry} may 
1660 \addtoindexx{enum class|see{type-safe enumeration}}
1661 have a \DWATenumclassDEFN{}
1662 attribute, which is a \livelink{chap:classflag}{flag}. 
1663 In a language that offers only
1664 one kind of enumeration declaration, this attribute is not
1665 required.
1666
1667 \textit{In \addtoindex{C} or \addtoindex{C++}, 
1668 the underlying type will be the appropriate
1669 integral type determined by the compiler from the properties of
1670 \hypertarget{chap:DWATenumclasstypesafeenumerationdefinition}{}
1671 the enumeration literal values. 
1672 A \addtoindex{C++} type declaration written
1673 using enum class declares a strongly typed enumeration and
1674 is represented using \DWTAGenumerationtype{} 
1675 in combination with \DWATenumclass.}
1676
1677 Each enumeration literal is represented by a debugging
1678 \addtoindexx{enumeration literal|see{enumeration entry}}
1679 information entry with the 
1680 tag \DWTAGenumeratorTARG. 
1681 Each
1682 such entry is a child of the 
1683 \addtoindex{enumeration type entry}, and the
1684 enumerator entries appear in the same order as the declarations
1685 of the enumeration literals in the source program.
1686
1687 \needlines{4}
1688 Each \addtoindex{enumerator entry} has a \DWATname{} attribute, whose
1689 \addtoindexx{name attribute}
1690 value is a null-terminated string containing the name of the
1691 \hypertarget{chap:DWATconstvalueenumerationliteralvalue}{}
1692 enumeration literal as it appears in the source program. 
1693 Each enumerator entry also has a 
1694 \DWATconstvalueDEFN{} attribute,
1695 \addtoindexx{constant value attribute}
1696 whose value is the actual numeric value of the enumerator as
1697 represented on the target system.
1698
1699 If the enumeration type occurs as the description of a
1700 \addtoindexx{enumeration type entry!as array dimension}
1701 dimension of an array type, and the stride for that dimension
1702 \hypertarget{chap:DWATbytestrideenumerationstridedimensionofarraytype}{}
1703 is different than what would otherwise be determined, then
1704 \hypertarget{chap:DWATbitstrideenumerationstridedimensionofarraytype}{}
1705 the enumeration type entry has either a 
1706 \DWATbytestrideDEFN{}
1707 or \DWATbitstrideDEFN{} attribute 
1708 \addtoindexx{bit stride attribute}
1709 which specifies the separation
1710 between successive elements along the dimension as described
1711 in 
1712 Section \refersec{chap:staticanddynamicvaluesofattributes}. 
1713 The value of the 
1714 \DWATbitstride{} attribute
1715 \addtoindexx{bit stride attribute}
1716 is interpreted as bits and the value of 
1717 \addtoindexx{byte stride attribute}
1718 the 
1719 \DWATbytestride{}
1720 attribute is interpreted as bytes.
1721
1722
1723 \section{Subroutine Type Entries}
1724 \label{chap:subroutinetypeentries}
1725
1726 \textit{It is possible in \addtoindex{C}
1727 to declare pointers to subroutines
1728 that return a value of a specific type. In both 
1729 \addtoindex{C} and \addtoindex{C++},
1730 it is possible to declare pointers to subroutines that not
1731 only return a value of a specific type, but accept only
1732 arguments of specific types. The type of such pointers would
1733 be described with a \doublequote{pointer to} modifier applied to a
1734 user\dash defined type.}
1735
1736 \needlines{4}
1737 A subroutine type is represented by a debugging information
1738 entry with the 
1739 \addtoindexx{subroutine type entry}
1740 tag \DWTAGsubroutinetypeTARG. 
1741 If a name has
1742 been given to the subroutine type in the source program,
1743 then the corresponding subroutine type entry has 
1744 a \DWATname{} attribute 
1745 \addtoindexx{name attribute}
1746 whose value is a null\dash terminated string containing
1747 the subroutine type name as it appears in the source program.
1748
1749 If the subroutine type describes a function that returns
1750 a value, then the subroutine type entry has 
1751 \addtoindexx{type attribute}
1752 a \DWATtype{}
1753 attribute to denote the type returned by the subroutine. If
1754 the types of the arguments are necessary to describe the
1755 subroutine type, then the corresponding subroutine type
1756 entry owns debugging information entries that describe the
1757 arguments. These debugging information entries appear in the
1758 order that the corresponding argument types appear in the
1759 source program.
1760
1761 \textit{In \addtoindex{C} there 
1762 is a difference between the types of functions
1763 declared using function prototype style declarations and
1764 those declared using non\dash prototype declarations.}
1765
1766
1767 \hypertarget{chap:DWATprototypedsubroutineprototype}{}
1768 subroutine entry declared with a function prototype style
1769 declaration may have 
1770 \addtoindexx{prototyped attribute}
1771
1772 \DWATprototypedDEFN{} attribute, which is
1773 a \livelink{chap:classflag}{flag}.
1774
1775 \needlines{4}
1776 Each debugging information entry owned by a subroutine
1777 type entry corresponds to either a formal parameter or the sequence of
1778 unspecified parameters of the subprogram type:
1779
1780 \begin{enumerate}[1. ]
1781 \item A formal parameter of a parameter list (that has a
1782 specific type) is represented by a debugging information entry
1783 with the tag \DWTAGformalparameter. 
1784 Each formal parameter
1785 entry has 
1786 \addtoindexx{type attribute}
1787 a \DWATtype{} attribute that refers to the type of
1788 the formal parameter.
1789
1790 \item The unspecified parameters of a variable parameter list
1791 \addtoindexx{unspecified parameters entry}
1792 are 
1793 \addtoindexx{\texttt{...} parameters|see{unspecified parameters entry}}
1794 represented by a debugging information entry with the
1795 tag \DWTAGunspecifiedparameters.
1796 \end{enumerate}
1797
1798 \textit{\addtoindex{C++} const-volatile qualifiers are encoded as 
1799 part of the type of the
1800 \doublequote{\texttt{this}}-pointer. 
1801 \addtoindex{C++:2011 (ISO)} reference and rvalue-reference qualifiers are encoded using
1802 the \DWATreference{} and \DWATrvaluereference{} attributes, respectively. 
1803 See also Section \refersec{chap:memberfunctionentries}.}
1804
1805 \needlines{4}
1806 A subroutine type entry may have the \DWATreference{} or
1807 \DWATrvaluereference{} attribute to indicate that it describes the
1808 type of a member function with reference or rvalue-reference 
1809 semantics, respectively.
1810
1811 \needlines{6}
1812 \section{String Type Entries}
1813 \label{chap:stringtypeentries}
1814
1815 \textit{A \doublequote{string} is a sequence of characters that have specific
1816 \addtoindexx{string type entry}
1817 semantics and operations that distinguish them from arrays of
1818 characters. 
1819 \addtoindex{Fortran} is one of the languages that has a string
1820 type. Note that \doublequote{string} in this context refers to a target
1821 machine concept, not the class string as used in this document
1822 (except for the name attribute).}
1823
1824 A string type is represented by a debugging information entry
1825 with the tag \DWTAGstringtypeTARG. 
1826 If a name has been given to
1827 the string type in the source program, then the corresponding
1828 string type entry has a 
1829 \DWATname{} attribute
1830 \addtoindexx{name attribute}
1831 whose value is
1832 a null\dash terminated string containing the string type name as
1833 it appears in the source program.
1834
1835 A string type entry may have a \DWATtypeDEFN{} 
1836 \livetargi{char:DWAATtypeofstringtype}{attribute}{type attribute!of string type entry}
1837 describing how each character is encoded and is to be interpreted.  
1838 The value of this attribute is a \CLASSreference{} to a 
1839 \DWTAGbasetype{} base type entry.  If the attribute is absent, 
1840 then the character is encoded using the system default.
1841
1842 \textit{The 
1843 \addtoindex{Fortran 2003} language standard allows string 
1844 types that are composed of different types of (same sized) characters. 
1845 While there is no standard list of character kinds, the kinds
1846 \texttt{ASCII}\index{ASCII@\texttt{ASCII} (Fortran string kind)} (see \DWATEASCII), 
1847 \texttt{ISO\_10646}\index{ISO\_10646@\texttt{ISO\_10646} (Fortran string kind)}
1848 \addtoindexx{ISO 10646 character set standard}
1849 (see \DWATEUCS) and 
1850 \texttt{DEFAULT}\index{DEFAULT@\texttt{DEFAULT} (Fortran string kind)}
1851 are defined.}
1852
1853 \needlines{4}
1854 The string type entry may have a 
1855 \DWATbytesize{} attribute or 
1856 \DWATbitsize{}
1857 attribute, whose value 
1858 (see Section \refersec{chap:byteandbitsizes}) 
1859 is the amount of
1860 storage needed to hold a value of the string type.
1861
1862 The 
1863 \hypertarget{chap:DWATstringlengthstringlengthofstringtype}{}
1864 string type entry may also have a 
1865 \DWATstringlengthDEFN{} attribute
1866 whose 
1867 \addtoindexx{string length attribute}
1868 value is a 
1869 \addtoindex{location description} yielding the location
1870 where the length of the string is stored in the program.
1871 If the \DWATstringlengthNAME{} attribute is not present, the size
1872 of the string is assumed to be the amount of storage that is
1873 allocated for the string (as specified by the \DWATbytesize{}
1874 or \DWATbitsize{} attribute).
1875
1876 The string type entry may also have a 
1877 \DWATstringlengthbytesizeDEFN{} or
1878 \DWATstringlengthbitsizeDEFN{} attribute,
1879 \addtoindexx{string length size attribute}
1880 \addtoindexx{string length attribute!size of length data}
1881 whose value (see Section \refersec{chap:byteandbitsizes}) 
1882 is the size of the data to be retrieved from the location
1883 referenced by the \DWATstringlength{} attribute. If no byte or bit
1884 size attribute is present, the size of the data to be retrieved
1885 is the same as the 
1886 \addtoindex{size of an address} on the target machine.
1887
1888 \needlines{8}
1889 \addtoindexx{DWARF Version 5}   % Avoid italics
1890 \textit{Prior to DWARF Version 5, the meaning of a 
1891 \DWATbytesize{} attribute depended on the presence of the
1892 \DWATstringlength{} attribute:
1893 \begin{itemize}
1894 \item If \DWATstringlength{} was present, \DWATbytesize{} 
1895         specified the size of the length data to be retrieved 
1896         from the location specified by the \DWATstringlength{} attribute.
1897 \item If \DWATstringlength{} was not present, \DWATbytesize{}
1898         specified the amount of storage allocated for objects
1899         of the string type.
1900 \end{itemize}
1901 In \DWARFVersionV{}, \DWATbytesize{} always specifies the amount of storage 
1902 allocated for objects of the string type.}
1903
1904 \needlines{6}
1905 \section{Set Type Entries}
1906 \label{chap:settypeentries}
1907
1908 \textit{\addtoindex{Pascal} provides the concept of a \doublequote{set,} which represents
1909 a group of values of ordinal type.}
1910
1911 A set is represented by a debugging information entry with
1912 the tag \DWTAGsettypeTARG. 
1913 \addtoindexx{set type entry}
1914 If a name has been given to the
1915 set type, then the set type entry has 
1916 a \DWATname{} attribute
1917 \addtoindexx{name attribute}
1918 whose value is a null\dash terminated string containing the
1919 set type name as it appears in the source program.
1920
1921 The set type entry has 
1922 \addtoindexx{type attribute}
1923 a \DWATtype{} attribute to denote the
1924 type of an element of the set.
1925
1926 \needlines{4}
1927 If the amount of storage allocated to hold each element of an
1928 object of the given set type is different from the amount of
1929 storage that is normally allocated to hold an individual object
1930 of the indicated element type, then the set type entry has
1931 either a \DWATbytesize{} attribute, or 
1932 \DWATbitsize{} attribute
1933 whose value (see Section \refersec{chap:byteandbitsizes}) is
1934 the amount of storage needed to hold a value of the set type.
1935
1936 \needlines{5}
1937 \section{Subrange Type Entries}
1938 \label{chap:subrangetypeentries}
1939
1940 \textit{Several languages support the concept of a \doublequote{subrange}
1941 type. Objects of the subrange type can represent only a contiguous 
1942 subset (range) of values from the type on which the subrange is defined.
1943 Subrange types may also be used to represent the bounds of array dimensions.}
1944
1945 A subrange type is represented by a debugging information
1946 entry with the tag 
1947 \DWTAGsubrangetypeTARG.\addtoindexx{subrange type entry} 
1948 If a name has been given to the subrange type, then the 
1949 subrange type entry has a 
1950 \DWATname{} attribute\addtoindexx{name attribute}
1951 whose value is a null-terminated
1952 string containing the subrange type name as it appears in
1953 the source program.
1954
1955 The tag \DWTAGgenericsubrange{}
1956 is used to describe arrays with a dynamic rank. See Section
1957 \refersec{chap:DWTAGgenericsubrange}.
1958
1959 The subrange entry may have a 
1960 \DWATtype{} attribute\addtoindexx{type attribute} to describe
1961 the type of object, called the basis type, of whose values
1962 this subrange is a subset.
1963
1964 If the amount of storage allocated to hold each element of an
1965 object of the given subrange type is different from the amount
1966 of storage that is normally allocated to hold an individual
1967 object of the indicated element type, then the subrange
1968 type entry has a 
1969 \DWATbytesize{} attribute or 
1970 \DWATbitsize{}
1971 attribute, whose value 
1972 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
1973 is the amount of storage needed to hold a value of the subrange type.
1974
1975 The 
1976 \hypertarget{chap:DWATthreadsscaledupcarrayboundthreadsscalfactor}{}
1977 subrange entry may have a 
1978 \DWATthreadsscaledDEFN{} attribute\addtoindexx{threads scaled attribute},
1979 which is a \livelink{chap:classflag}{flag}. 
1980 If present, this attribute indicates whether
1981 this subrange represents a \addtoindex{UPC} array bound which is scaled
1982 by the runtime \texttt{THREADS} value (the number of \addtoindex{UPC} threads in
1983 this execution of the program).
1984
1985 \textit{This allows the representation of a \addtoindex{UPC} shared array such as}
1986
1987 \begin{lstlisting}[numbers=none]
1988 int shared foo[34*THREADS][10][20];
1989 \end{lstlisting}
1990
1991 \needlines{4}
1992 The 
1993 \hypertarget{chap:DWATlowerboundlowerboundofsubrange}{}
1994 subrange 
1995 \hypertarget{chap:DWATupperboundupperboundofsubrange}{}
1996 entry may have the attributes 
1997 \DWATlowerboundDEFN{}
1998 \addtoindexx{lower bound attribute}
1999 and \DWATupperboundDEFN{}
2000 \addtoindexx{upper bound attribute} to specify, respectively, the lower
2001 and upper bound values of the subrange. The 
2002 \DWATupperboundNAME{} attribute 
2003 \hypertarget{chap:DWATcountelementsofsubrangetype}{}
2004 may be replaced by a
2005 \addtoindexx{count attribute!default}
2006 \addtoindexx{count attribute}
2007 \DWATcountDEFN{} attribute, 
2008 whose value describes the number of elements in the subrange 
2009 rather than the value of the last element. The value of each 
2010 of these attributes is determined as described in 
2011 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2012
2013 If the lower bound value is missing, the value is assumed to
2014 be a language-dependent default constant as defined in
2015 Table \refersec{tab:languageencodings}.
2016 \addtoindexx{lower bound attribute!default}
2017
2018 If the upper bound and count are missing, then the upper bound value is 
2019 \textit{unknown}.\addtoindexx{upper bound attribute!default unknown}
2020
2021 If the subrange entry has no type attribute describing the
2022 basis type, the basis type is determined as follows:
2023 \begin{enumerate}[1. ]
2024 \item
2025 If there is a lower bound attribute that references an object,
2026 the basis type is assumed to be the same as the type of that object.
2027 \item
2028 Otherwise, if there is an upper bound or count attribute that references
2029 an object, the basis type is assumed to be the same as the type of that object.
2030 \item
2031 Otherwise, the type is
2032 assumed to be the same type, in the source language of the
2033 compilation unit containing the subrange entry, as a signed
2034 integer with the same size as an address on the target machine.
2035 \end{enumerate}
2036
2037 If the subrange type occurs as the description of a dimension
2038 of an array type, and the stride for that dimension is
2039 \hypertarget{chap:DWATbytestridesubrangestridedimensionofarraytype}{}
2040 different than what would otherwise be determined, then
2041 \hypertarget{chap:DWATbitstridesubrangestridedimensionofarraytype}{}
2042 the subrange type entry has either 
2043 \addtoindexx{byte stride attribute}
2044
2045 \DWATbytestrideDEFN{} or
2046 \DWATbitstrideDEFN{} attribute 
2047 \addtoindexx{bit stride attribute}
2048 which specifies the separation
2049 between successive elements along the dimension as described in 
2050 Section \refersec{chap:byteandbitsizes}.
2051
2052 \textit{Note that the stride can be negative.}
2053
2054 \needlines{4}
2055 \section{Pointer to Member Type Entries}
2056 \label{chap:pointertomembertypeentries}
2057
2058 \textit{In \addtoindex{C++}, a 
2059 pointer to a data or function member of a class or
2060 structure is a unique type.}
2061
2062 A debugging information entry representing the type of an
2063 object that is a pointer to a structure or class member has
2064 the tag \DWTAGptrtomembertypeTARG.
2065
2066 If the \addtoindex{pointer to member type} has a name, the 
2067 \addtoindexx{pointer to member type entry}
2068 pointer to member entry has a
2069 \DWATname{} attribute, 
2070 \addtoindexx{name attribute}
2071 whose value is a
2072 null\dash terminated string containing the type name as it appears
2073 in the source program.
2074
2075 The \addtoindex{pointer to member} entry 
2076 has 
2077 \addtoindexx{type attribute}
2078 a \DWATtype{} attribute to
2079 describe the type of the class or structure member to which
2080 objects of this type may point.
2081
2082 The \addtoindexx{pointer to member} entry also 
2083 \hypertarget{chap:DWATcontainingtypecontainingtypeofpointertomembertype}{}
2084 has a \DWATcontainingtypeDEFN{} attribute, 
2085 \addtoindexx{containing type (of pointer) attribute}
2086 whose value is a \livelink{chap:classreference}{reference} to a debugging
2087 information entry for the class or structure to whose members
2088 objects of this type may point.
2089
2090 The \addtoindex{pointer to member entry} 
2091 \hypertarget{chap:DWATuselocationmemberlocationforpointertomembertype}{}
2092 has a 
2093 \DWATuselocationDEFN{} attribute
2094 \addtoindexx{use location attribute}
2095 whose value is a 
2096 \addtoindex{location description} that computes the
2097 address of the member of the class to which the pointer to
2098 member entry points.
2099
2100 \textit{The method used to find the address of a given member of a
2101 class or structure is common to any instance of that class
2102 or structure and to any instance of the pointer or member
2103 type. The method is thus associated with the type entry,
2104 rather than with each instance of the type.}
2105
2106 The \DWATuselocation{} description is used in conjunction
2107 with the location descriptions for a particular object of the
2108 given \addtoindex{pointer to member type} and for a particular structure or
2109 class instance. The \DWATuselocation{} 
2110 attribute expects two values to be 
2111 \addtoindexi{pushed}{address!implicit push for member operator}
2112 onto the DWARF expression stack before
2113 the \DWATuselocation{} description is evaluated.
2114 The first value 
2115 \addtoindexi{pushed}{address!implicit push for member operator}
2116 is the value of the \addtoindex{pointer to member} object
2117 itself. The second value 
2118 \addtoindexi{pushed}{address!implicit push for member operator} 
2119 is the base address of the
2120 entire structure or union instance containing the member
2121 whose address is being calculated.
2122
2123 \needlines{6}
2124 \textit{For an expression such as}
2125
2126 \begin{lstlisting}[numbers=none]
2127     object.*mbr_ptr
2128 \end{lstlisting}
2129 \textit{where \texttt{mbr\_ptr} has some \addtoindex{pointer to member type}, a debugger should:}
2130 \begin{enumerate}[1. ]
2131 \item \textit{Push the value of \texttt{mbr\_ptr} onto the DWARF expression stack.}
2132 \item \textit{Push the base address of \texttt{object} onto the DWARF expression stack.}
2133 \item \textit{Evaluate the \DWATuselocation{} description 
2134 given in the type of \texttt{mbr\_ptr}.}
2135 \end{enumerate}
2136
2137
2138 \section{File Type Entries}
2139 \label{chap:filetypeentries}
2140
2141 \textit{Some languages, such as \addtoindex{Pascal}, 
2142 provide a data type to represent 
2143 files.}
2144
2145 A file type is represented by a debugging information entry
2146 with 
2147 \addtoindexx{file type entry}
2148 the tag
2149 \DWTAGfiletypeTARG. 
2150 If the file type has a name,
2151 the file type entry has a \DWATname{} attribute,
2152 \addtoindexx{name attribute}
2153 whose value
2154 is a null\dash terminated string containing the type name as it
2155 appears in the source program.
2156
2157 The file type entry has 
2158 \addtoindexx{type attribute}
2159 a \DWATtype{} attribute describing
2160 the type of the objects contained in the file.
2161
2162 The file type entry also has a 
2163 \DWATbytesize{}\addtoindexx{byte size attribute} or
2164 \DWATbitsize{}\addtoindexx{bit size attribute} attribute, whose value 
2165 (see Section \refersec{chap:staticanddynamicvaluesofattributes})
2166 is the amount of storage need to hold a value of the file type.
2167
2168 \section{Dynamic Type Entries}
2169 \label{chap:dynamictypeentries}
2170 \textit{Some languages such as 
2171 \addtoindex{Fortran 90}, provide types whose values
2172 may be dynamically allocated or associated with a variable
2173 under explicit program control. However, unlike the
2174 pointer type in \addtoindex{C} or 
2175 \addtoindex{C++}, the indirection involved in accessing
2176 the value of the variable is generally implicit, that is, not
2177 indicated as part of the program source.}
2178
2179 A dynamic type entry is used to declare a dynamic type that is 
2180 \doublequote{just like} another non-dynamic type without needing to
2181 replicate the full description of that other type.
2182
2183 A dynamic type is represented by a debugging information entry
2184 with the tag \DWTAGdynamictypeTARG. If a name has been given to the
2185 dynamic type, then the dynamic type has a \DWATname{} attribute 
2186 whose value is a null-terminated string containing the dynamic
2187 type name as it appears in the source.
2188         
2189 A dynamic type entry has a \DWATtype{} attribute whose value is a
2190 reference to the type of the entities that are dynamically allocated.
2191         
2192 A dynamic type entry also has a \DWATdatalocation, and may also
2193 have \DWATallocated{} and/or \DWATassociated{} attributes as 
2194 described in Section \refersec{chap:dynamicpropertiesoftypes}. 
2195 A \DWATdatalocation, \DWATallocated{} or \DWATassociated{} attribute 
2196 may not occur on a dynamic type entry if the same kind of attribute 
2197 already occurs on the type referenced by the \DWATtype{} attribute.
2198
2199
2200 \needlines{6}
2201 \section{Template Alias Entries}
2202 \label{chap:templatealiasentries}
2203
2204 \textit{In \addtoindex{C++}, a template alias is a form of typedef that has template
2205 parameters.  DWARF does not represent the template alias definition
2206 but does represent instantiations of the alias.}
2207
2208 A type named using a template alias is represented
2209 by a debugging information entry 
2210 \addtoindexx{template alias entry}
2211 with the tag
2212 \DWTAGtemplatealiasTARG. 
2213 The template alias entry has a
2214 \DWATname{} attribute 
2215 \addtoindexx{name attribute}
2216 whose value is a null\dash terminated string
2217 containing the name of the template alias as it appears in
2218 the source program.
2219 The template alias entry has child entries describing the template
2220 actual parameters (see Section \refersec{chap:templateparameters}).
2221
2222
2223 \section{Dynamic Properties of Types}
2224 \label{chap:dynamicpropertiesoftypes}
2225 \textit{The \DWATdatalocation, \DWATallocated{} and \DWATassociated{}
2226 attributes described in this section are motivated for use with
2227 \DWTAGdynamictype{} entries but can be used for any other type as well.}
2228
2229 \needlines{6}
2230 \subsection{Data Location}
2231 \label{chap:datalocation}
2232
2233 \textit{Some languages may represent objects using descriptors to hold
2234 information, including a location and/or run\dash time parameters,
2235 about the data that represents the value for that object.}
2236
2237 \hypertarget{chap:DWATdatalocationindirectiontoactualdata}{}
2238 The \DWATdatalocationDEFN{} attribute 
2239 \addtoindexx{data (indirect) location attribute}
2240 may be used with any type that provides one or more levels of 
2241 \addtoindexx{hidden indirection|see{data location attribute}}
2242 hidden indirection
2243 and/or run-time parameters in its representation. Its value
2244 is a \addtoindex{location description}. 
2245 The result of evaluating this
2246 description yields the location of the data for an object.
2247 When this attribute is omitted, the address of the data is
2248 the same as the address of the object.
2249
2250 \needlines{5}
2251 \textit{This location description will typically begin with
2252 \DWOPpushobjectaddress{} 
2253 which loads the address of the
2254 object which can then serve as a descriptor in subsequent
2255 calculation. For an example using 
2256 \DWATdatalocation{} 
2257 for a \addtoindex{Fortran 90 array}, see 
2258 Appendix \refersec{app:fortranarrayexample}.}
2259
2260 \subsection{Allocation and Association Status}
2261 \label{chap:allocationandassociationstatus}
2262
2263 \textit{Some languages, such as \addtoindex{Fortran 90},
2264 provide types whose values
2265 may be dynamically allocated or associated with a variable
2266 under explicit program control.}
2267
2268 \hypertarget{chap:DWATallocatedallocationstatusoftypes}{}
2269 The \DWATallocatedDEFN{} attribute\addtoindexx{allocated attribute}
2270 may be used with any
2271 type for which objects of the type can be explicitly allocated
2272 and deallocated. The presence of the attribute indicates that
2273 objects of the type are allocatable and deallocatable. The
2274 integer value of the attribute (see below) specifies whether
2275 an object of the type is 
2276 currently allocated or not.
2277
2278 \needlines{4}
2279 \hypertarget{chap:DWATassociatedassociationstatusoftypes}{}
2280 The 
2281 \DWATassociatedDEFN{} attribute 
2282 may 
2283 \addtoindexx{associated attribute}
2284 optionally be used with
2285 any type for which objects of the type can be dynamically
2286 associated with other objects. The presence of the attribute
2287 indicates that objects of the type can be associated. The
2288 integer value of the attribute (see below) indicates whether
2289 an object of the type is currently associated or not.
2290
2291 The value of these attributes is determined as described in
2292 Section \refersec{chap:staticanddynamicvaluesofattributes}.
2293
2294 A non\dash zero value is interpreted as allocated or associated,
2295 and zero is interpreted as not allocated or not associated.
2296
2297 \textit{For \addtoindex{Fortran 90}, 
2298 if the \DWATassociated{} 
2299 attribute is present,
2300 the type has the POINTER property where either the parent
2301 variable is never associated with a dynamic object or the
2302 implementation does not track whether the associated object
2303 is static or dynamic. If the \DWATallocated{} attribute is
2304 present and the \DWATassociated{} attribute is not, the type
2305 has the ALLOCATABLE property. If both attributes are present,
2306 then the type should be assumed to have the POINTER property
2307 (and not ALLOCATABLE); the \DWATallocated{} attribute may then
2308 be used to indicate that the association status of the object
2309 resulted from execution of an ALLOCATE statement rather than
2310 pointer assignment.}
2311
2312 \textit{For examples using 
2313 \DWATallocated{} for \addtoindex{Ada} and 
2314 \addtoindex{Fortran 90}
2315 arrays, 
2316 see Appendix \refersec{app:aggregateexamples}.}
2317
2318 \subsection{Array Rank}
2319 \label{chap:DWATrank}
2320 \addtoindexx{array!assumed-rank}
2321 \addtoindexx{assumed-rank array|see{array, assumed-rank}}
2322 \textit{The Fortran language supports \doublequote{assumed-rank arrays}. The
2323   rank (the number of dimensions) of an assumed-rank array is unknown
2324   at compile time. The Fortran runtime stores the rank in an array
2325   descriptor.}
2326
2327 The presence of the
2328 \hypertarget{chap:DWATrankofdynamicarray}{\DWATrankINDX}
2329 attribute indicates that an array's rank
2330 (number of dimensions) is dynamic, and therefore unknown at compile
2331 time. The value of the \DWATrankDEFN{} attribute is either an integer constant
2332 or a DWARF expression whose evaluation yields the dynamic rank.
2333
2334 The bounds of an array with dynamic rank are described using a
2335 \DWTAGgenericsubrange{} entry, which  
2336 is the dynamic rank array equivalent of
2337 \DWTAGsubrangetype. The
2338 difference is that a \DWTAGgenericsubrange{} entry contains generic
2339 lower/upper bound and stride expressions that need to be evaluated for
2340 each dimension. Before any expression contained in a
2341 \DWTAGgenericsubrange{} can be evaluated, the dimension for which the
2342 expression is to be evaluated needs to be pushed onto the stack. The
2343 expression will use it to find the offset of the respective field in
2344 the array descriptor metadata.
2345
2346 \textit{A producer is free to choose any layout for the
2347   array descriptor. In particular, the upper and lower bounds and
2348   stride values do not need to be bundled into a structure or record,
2349   but could be laid end to end in the containing descriptor, pointed
2350   to by the descriptor, or even allocated independently of the
2351   descriptor.}
2352
2353 Dimensions are enumerated $0$ to $\mathit{rank}-1$ in source program
2354 order.
2355
2356 \textit{For an example in Fortran 2008, see
2357   Section~\refersec{app:assumedrankexample}.}
2358