e00ba5c406b1ff0463d887a19ccddd7e794ab3e0
[dwarf-doc.git] / dwarf5 / latexdoc / datarepresentation.tex
1 \chapter{Data Representation}
2 \label{datarep:datarepresentation}
3
4 This section describes the binary representation of the
5 debugging information entry itself, of the attribute types
6 and of other fundamental elements described above.
7
8
9 \section{Vendor Extensibility}
10 \label{datarep:vendorextensibility}
11
12 To reserve a portion of the DWARF name space and ranges of
13 enumeration values for use for vendor specific extensions,
14 special labels are reserved for tag names, attribute names,
15 base type encodings, location operations, language names,
16 calling conventions and call frame instructions.
17
18 The labels denoting the beginning and end of the reserved
19 value range for vendor specific extensions consist of the
20 appropriate prefix (DW\-\_TAG, DW\-\_AT, DW\-\_END, DW\-\_ATE, DW\-\_OP,
21 DW\-\_LANG, DW\-\_LNE, DW\-\_CC or DW\-\_CFA respectively) followed by
22 \_lo\_user or \_hi\_user. 
23 \textit{For example, for entry tags, the special
24 labels are \livetarg{chap:DWTAGlouser}{DW\-\_TAG\-\_lo\-\_user} and 
25 \livetarg{chap:DWTAGhiuser}{DW\-\_TAG\-\_hi\-\_user}.}
26 Values in the
27 range between prefix\_lo\_user and prefix\_hi\_user inclusive,
28 are reserved for vendor specific extensions. Vendors may
29 use values in this range without conflicting with current or
30 future system\dash defined values. All other values are reserved
31 for use by the system.
32
33 \textit{There may also be codes for vendor specific extensions
34 between the number of standard line number opcodes and
35 the first special line number opcode. However, since the
36 number of standard opcodes varies with the DWARF version,
37 the range for extensions is also version dependent. Thus,
38 \livetarg{chap:DWLNSlouser}{DW\-\_LNS\-\_lo\-\_user} and 
39 \livetarg{chap:DWLNShiuser}{DW\-\_LNS\-\_hi\-\_user} symbols are not defined.}
40
41 Vendor defined tags, attributes, base type encodings, location
42 atoms, language names, line number actions, calling conventions
43 and call frame instructions, conventionally use the form
44 prefix\_vendor\_id\_name, where vendor\_id is some identifying
45 character sequence chosen so as to avoid conflicts with
46 other vendors.
47
48 To ensure that extensions added by one vendor may be safely
49 ignored by consumers that do not understand those extensions,
50 the following rules should be followed:
51
52 \begin{enumerate}[1.]
53 \item New attributes should be added in such a way that a
54 debugger may recognize the format of a new attribute value
55 without knowing the content of that attribute value.
56
57 \item The semantics of any new attributes should not alter
58 the semantics of previously existing attributes.
59
60 \item The semantics of any new tags should not conflict with
61 the semantics of previously existing tags.
62
63 \item Do not add any new forms of attribute value.
64
65 \end{enumerate}
66
67
68 \section{Reserved Values}
69 \label{datarep:reservedvalues}
70 \subsection{Error Values}
71 \label{datarep:errorvalues}
72
73 As a convenience for consumers of DWARF information, the value
74 0 is reserved in the encodings for attribute names, attribute
75 forms, base type encodings, location operations, languages,
76 line number program opcodes, macro information entries and tag
77 names to represent an error condition or unknown value. DWARF
78 does not specify names for these reserved values, since they
79 do not represent valid encodings for the given type and should
80 not appear in DWARF debugging information.
81
82
83 \subsection{Initial Length Values}
84 \label{datarep:initiallengthvalues}
85
86 An initial length field is one of the length fields that occur
87 at the beginning of those DWARF sections that have a header
88 (\addtoindex{.debug\_aranges}, 
89 \addtoindex{.debug\_info}, 
90 \addtoindex{.debug\_types}, 
91 \addtoindex{.debug\_line},
92 \addtoindex{.debug\_pubnames}, and 
93 \addtoindex{.debug\_pubtypes}) or the length field
94 that occurs at the beginning of the CIE and FDE structures
95 in the \addtoindex{.debug\_frame} section.
96
97 In an initial length field, the values 0xfffffff0 through
98 0xffffffff are reserved by DWARF to indicate some form of
99 extension relative to DWARF Version 2; such values must not
100 be interpreted as a length field. The use of one such value,
101 0xffffffff, is defined below 
102 (see Section \refersec{datarep:32bitand64bitdwarfformats}); 
103 the use of
104 the other values is reserved for possible future extensions.
105
106
107
108 \section{Executable Objects and Shared Objects} 
109 \label{datarep:executableobjectsandsharedobjects}
110
111 The relocated addresses in the debugging information for an
112 executable object are virtual addresses and the relocated
113 addresses in the debugging information for a shared object
114 are offsets relative to the start of the lowest region of
115 memory loaded from that shared object.
116
117 \textit{This requirement makes the debugging information for
118 shared objects position independent.  Virtual addresses in a
119 shared object may be calculated by adding the offset to the
120 base address at which the object was attached. This offset
121 is available in the run\dash time linker’s data structures.}
122
123
124
125 \section{32-Bit and 64-Bit DWARF Formats}
126 \label{datarep:32bitand64bitdwarfformats}
127
128 \addtoindexx{32-bit DWARF format}
129 \addtoindexx{64-bit DWARF format}
130 There are two closely related file formats. In the 32\dash bit DWARF
131 format, all values that represent lengths of DWARF sections
132 and offsets relative to the beginning of DWARF sections are
133 represented using 32\dash bits. In the 64\dash bit DWARF format, all
134 values that represent lengths of DWARF sections and offsets
135 relative to the beginning of DWARF sections are represented
136 using 64\dash bits. A special convention applies to the initial
137 length field of certain DWARF sections, as well as the CIE and
138 FDE structures, so that the 32\dash bit and 64\dash bit DWARF formats
139 can coexist and be distinguished within a single linked object.
140
141 The differences between the 32\dash\   and 64\dash bit 
142 DWARF formats are
143 detailed in the following:
144
145
146 \begin{enumerate}[1.]
147
148 \item  In the 32\dash bit DWARF format, an initial length field
149 (see Section \refersec{datarep:initiallengthvalues}) 
150 is an unsigned 32\dash bit integer (which
151 must be less than 0xfffffff0); in the 64\dash bit DWARF format,
152 an initial length field is 96 bits in size, and has two parts:
153 \begin{itemize}
154 \item The first 32\dash bits have the value 0xffffffff.
155
156 \item  The following 64\dash bits contain the actual length
157 represented as an unsigned 64\dash bit integer.
158 \end{itemize}
159
160 \textit{This representation allows a DWARF consumer to dynamically
161 detect that a DWARF section contribution is using the 64\dash bit
162 format and to adapt its processing accordingly.}
163
164 \item Section offset and section length fields that occur
165 in the headers of DWARF sections (other than initial length
166 fields) are listed following. In the 32\dash bit DWARF format these
167 are 32\dash bit unsigned integer values; in the 64\dash bit DWARF format,
168 they are 64\dash bit unsigned integer values.
169
170 \begin{center}
171 \begin{tabular}{lll}
172 Section &Name & Role  \\ \hline
173 \addtoindex{.debug\_ranges} & debug\_info\_offset & offset in \addtoindex{.debug\_info} \\
174 \addtoindex{.debug\_frame}/CIE & CIE\_id & CIE distinguished value \\
175 \addtoindex{.debug\_frame}/FDE & CIE\_pointer & offset in \addtoindex{.debug\_frame} \\
176 \addtoindex{.debug\_info} & debug\_abbrev\_offset & offset in \addtoindex{.debug\_abbrev} \\
177 \addtoindex{.debug\_line} & header\_length & length of header itself \\
178 \addtoindex{.debug\_pubnames} & debug\_info\_offset & offset in \addtoindex{.debug\_info} \\
179                 & debug\_info\_length & length of \addtoindex{.debug\_info} \\
180                 &                   & contribution \\
181 \addtoindex{.debug\_pubtypes} & debug\_info\_offset & offset in \addtoindex{.debug\_info} \\
182                 & debug\_info\_length & length of \addtoindex{.debug\_info} \\
183                 &                   & contribution \\
184 \addtoindex{.debug\_types} & debug\_abbrev\_offset & offset in \addtoindex{.debug\_info} \\
185                 & type\_offset & offset in of \addtoindex{.debug\_types} \\
186
187 \end{tabular}
188 \end{center}
189
190 \textit{The CIE\_id field in a CIE structure must be 64 bits because
191 it overlays the CIE\_pointer in a FDE structure; this implicit
192 union must be accessed to distinguish whether a CIE or FDE is
193 present, consequently, these two fields must exactly overlay
194 each other (both offset and size).}
195
196 \item Within the body of the \addtoindex{.debug\_info} or \addtoindex{.debug\_types}
197 section, certain forms of attribute value depend on the choice
198 of DWARF format as follows. For the 32\dash bit DWARF format,
199 the value is a 32\dash bit unsigned integer; for the 64\dash bit DWARF
200 format, the value is a 64\dash bit unsigned integer.
201 \begin{center}
202 \begin{tabular}{lll}
203 Form & Role  \\ \hline
204 \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}& offset in \addtoindex{.debug\_info} \\
205 \livetarg{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}& offset in a section other than \addtoindex{.debug\_info} or \addtoindex{.debug\_str} \\
206 \livelink{chap:DWFORMstrp}{DW\-\_FORM\-\_strp}&offset in \addtoindex{.debug\_str} \\
207 \livelink{chap:DWOPcallref}{DW\-\_OP\-\_call\-\_ref}&offset in \addtoindex{.debug\_info} \\
208 \end{tabular}
209 \end{center}
210
211 \item Within the body of the \addtoindex{.debug\_pubnames} and
212 \addtoindex{.debug\_pubtypes} 
213 sections, the representation of the first field
214 of each tuple (which represents an offset in the 
215 \addtoindex{.debug\_info}
216 section) depends on the DWARF format as follows: in the
217 32\dash bit DWARF format, this field is a 32\dash bit unsigned integer;
218 in the 64\dash bit DWARF format, it is a 64\dash bit unsigned integer.
219
220 \end{enumerate}
221
222
223 The 32\dash bit and 64\dash bit DWARF format conventions must not be
224 intermixed within a single compilation unit.
225
226 \textit{Attribute values and section header fields that represent
227 addresses in the target program are not affected by these
228 rules.}
229
230 A DWARF consumer that supports the 64\dash bit DWARF format must
231 support executables in which some compilation units use the
232 32\dash bit format and others use the 64\dash bit format provided that
233 the combination links correctly (that is, provided that there
234 are no link\dash time errors due to truncation or overflow). (An
235 implementation is not required to guarantee detection and
236 reporting of all such errors.)
237
238 \textit{It is expected that DWARF producing compilers will not use
239 the 64\dash bit format by default. In most cases, the division of
240 even very large applications into a number of executable and
241 shared objects will suffice to assure that the DWARF sections
242 within each individual linked object are less than 4 GBytes
243 in size. However, for those cases where needed, the 64\dash bit
244 format allows the unusual case to be handled as well. Even
245 in this case, it is expected that only application supplied
246 objects will need to be compiled using the 64\dash bit format;
247 separate 32\dash bit format versions of system supplied shared
248 executable libraries can still be used.}
249
250
251
252 \section{Format of Debugging Information}
253 \label{datarep:formatofdebugginginformation}
254
255 For each compilation unit compiled with a DWARF producer,
256 a contribution is made to the \addtoindex{.debug\_info} section of
257 the object file. Each such contribution consists of a
258 compilation unit header 
259 (see Section \refersec{datarep:compilationunitheader}) 
260 followed by a
261 single \livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit} or \livelink{chap:DWTAGpartialunit}{DW\-\_TAG\-\_partial\-\_unit} debugging
262 information entry, together with its children.
263
264 For each type defined in a compilation unit, a contribution may
265 be made to the \addtoindex{.debug\_types} 
266 section of the object file. Each
267 such contribution consists of a type unit header 
268 (see Section \refersec{datarep:typeunitheader}) 
269 followed by a \livelink{chap:DWTAGtypeunit}{DW\-\_TAG\-\_type\-\_unit} entry, together with
270 its children.
271
272 Each debugging information entry begins with a code that
273 represents an entry in a separate 
274 \addtoindex{abbreviations table}. This
275 code is followed directly by a series of attribute values.
276
277 The appropriate entry in the 
278 \addtoindex{abbreviations table} guides the
279 interpretation of the information contained directly in the
280 \addtoindex{.debug\_info} or 
281 \addtoindex{.debug\_types} section.
282
283 Multiple debugging information entries may share the same
284 abbreviation table entry. Each compilation unit is associated
285 with a particular abbreviation table, but multiple compilation
286 units may share the same table.
287 \subsection{Unit Headers}
288 \label{datarep:unitheaders}
289
290 \subsubsection{Compilation Unit Header}
291 \label{datarep:compilationunitheader}
292
293 \begin{enumerate}[1.]
294
295 \item unit\_length (initial length) \\
296 A 4\dash byte or 12\dash byte unsigned integer representing the length
297 of the \addtoindex{.debug\_info}
298 contribution for that compilation unit,
299 not including the length field itself. In the 32\dash bit DWARF
300 format, this is a 4\dash byte unsigned integer (which must be less
301 than 0xfffffff0); in the 64\dash bit DWARF format, this consists
302 of the 4\dash byte value 0xffffffff followed by an 8\dash byte unsigned
303 integer that gives the actual length 
304 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
305
306 \item  version (uhalf)
307 A 2\dash byte unsigned integer representing the version of the
308 DWARF information for the compilation unit 
309 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
310 The value in this field is 4.
311
312 \item debug\_abbrev\_offset (section offset) \\
313 A 4\dash byte or 8\dash byte unsigned offset into the 
314 \addtoindex{.debug\_abbrev}
315 section. This offset associates the compilation unit with a
316 particular set of debugging information entry abbreviations. In
317 the 32\dash bit DWARF format, this is a 4\dash byte unsigned length;
318 in the 64\dash bit DWARF format, this is an 8\dash byte unsigned length
319 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
320
321 \item address\_size (ubyte) \\
322 A 1\dash byte unsigned integer representing the size in bytes of
323 \addtoindexx{address\_size}
324 an address on the target architecture. If the system uses
325 \addtoindexx{address space!segmented}
326 segmented addressing, this value represents the size of the
327 offset portion of an address.
328
329
330
331
332 \end{enumerate}
333
334 \subsubsection{Type Unit Header}
335 \label{datarep:typeunitheader}
336
337 The header for the series of debugging information entries
338 contributing to the description of a type that has been
339 placed in its own type unit, within the 
340 \addtoindex{.debug\_types} section,
341 consists of the following information:
342
343 \begin{enumerate}[1.]
344
345 \item unit\_length (initial length) \\
346 A 4\dash byte or 12\dash byte unsigned integer representing the length
347 of the \addtoindex{.debug\_types} contribution for that compilation unit,
348 not including the length field itself. In the 32\dash bit DWARF
349 format, this is a 4\dash byte unsigned integer (which must be
350 less than 0xfffffff0); in the 64\dash bit DWARF format, this
351 consists of the 4\dash byte value 0xffffffff followed by an 
352 8\dash byte unsigned integer that gives the actual length
353 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
354
355 \item  version (uhalf)
356 A 2\dash byte unsigned integer representing the version of the
357 DWARF information for the compilation unit 
358 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
359 The value in this field is 4.
360
361 \item debug\_abbrev\_offset (section offset) \\
362 A 4\dash byte or 8\dash byte unsigned offset into the 
363 \addtoindex{.debug\_abbrev}
364 section. This offset associates the compilation unit with a
365 particular set of debugging information entry abbreviations. In
366 the 32\dash bit DWARF format, this is a 4\dash byte unsigned length;
367 in the 64\dash bit DWARF format, this is an 8\dash byte unsigned length
368 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
369
370 \item address\_size (ubyte) \\
371 A 1\dash byte unsigned integer representing the size in bytes of
372 \addtoindexx{address\_size}
373 an address on the target architecture. If the system uses
374 \addtoindexx{address space!segmented}
375 segmented addressing, this value represents the size of the
376 offset portion of an address.
377
378
379 \item type\_signature (8\dash byte unsigned integer) \\
380 A 64\dash bit unique signature of the type described in this type
381 unit.  
382
383 \textit{An attribute that refers(using \livelink{chap:DWFORMrefsig8}{DW\-\_FORM\-\_ref\-\_sig8}) to
384 the primary type contained in this type unit uses this value.}
385
386
387 \item type\_offset (section offset) \\
388 A 4\dash byte or 8\dash byte unsigned offset relative to the beginning
389 of the type unit header. This offset refers to the debugging
390 information entry that describes the type. Because the type
391 may be nested inside a namespace or other structures, and may
392 contain references to other types that have not been placed in
393 separate type units, it is not necessarily either the first or
394 the only entry in the type unit. In the 32\dash bit DWARF format,
395 this is a 4\dash byte unsigned length; in the 64\dash bit DWARF format,
396 this is an 8\dash byte unsigned length
397 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
398
399 \end{enumerate}
400
401 \subsection{Debugging Information Entry}
402 \label{datarep:debugginginformationentry}
403
404 Each debugging information entry begins with an unsigned LEB128
405 number containing the abbreviation code for the entry. This
406 code represents an entry within the abbreviations table
407 associated with the compilation unit containing this entry. The
408 abbreviation code is followed by a series of attribute values.
409
410 On some architectures, there are alignment constraints on
411 section boundaries. To make it easier to pad debugging
412 information sections to satisfy such constraints, the
413 abbreviation code 0 is reserved. Debugging information entries
414 consisting of only the abbreviation code 0 are considered
415 null entries.
416
417 \subsection{Abbreviations Tables}
418 \label{datarep:abbreviationstables}
419
420 The abbreviations tables for all compilation units
421 are contained in a separate object file section called
422 \addtoindex{.debug\_abbrev}.
423 As mentioned before, multiple compilation
424 units may share the same abbreviations table.
425
426 The abbreviations table for a single compilation unit consists
427 of a series of abbreviation declarations. Each declaration
428 specifies the tag and attributes for a particular form of
429 debugging information entry. Each declaration begins with
430 an unsigned LEB128 number representing the abbreviation
431 code itself. It is this code that appears at the beginning
432 of a debugging information entry in the 
433 \addtoindex{.debug\_info} or
434 \addtoindex{.debug\_types}
435 section. As described above, the abbreviation
436 code 0 is reserved for null debugging information entries. The
437 abbreviation code is followed by another unsigned LEB128
438 number that encodes the entry’s tag. The encodings for the
439 tag names are given in 
440 Table \refersec{tab:tagencodings}.
441
442 Following the tag encoding is a 1\dash byte value that determines
443 whether a debugging information entry using this abbreviation
444 has child entries or not. If the value is 
445 \livetarg{chap:DWCHILDRENyes}{DW\-\_CHILDREN\-\_yes},
446 the next physically succeeding entry of any debugging
447 information entry using this abbreviation is the first
448 child of that entry. If the 1\dash byte value following the
449 abbreviation’s tag encoding is 
450 \livetarg{chap:DWCHILDRENno}{DW\-\_CHILDREN\-\_no}, the next
451 physically succeeding entry of any debugging information entry
452 using this abbreviation is a sibling of that entry. (Either
453 the first child or sibling entries may be null entries). The
454 encodings for the child determination byte are given in 
455 Table \refersec{tab:childdeterminationencodings}
456 (As mentioned in 
457 Section \refersec{chap:relationshipofdebugginginformationentries}, 
458 each chain of
459 sibling entries is terminated by a null entry.)
460
461 Finally, the child encoding is followed by a series of
462 attribute specifications. Each attribute specification
463 consists of two parts. The first part is an unsigned LEB128
464 number representing the attribute’s name. The second part
465 is an unsigned LEB128 number representing the attribute’s
466 form. The series of attribute specifications ends with an
467 entry containing 0 for the name and 0 for the form.
468
469 The attribute form 
470 \livetarg{chap:DWFORMindirect}{DW\-\_FORM\-\_indirect} is a special case. For
471 attributes with this form, the attribute value itself in the
472 \addtoindex{.debug\_info} or 
473 \addtoindex{.debug\_types}
474 section begins with an unsigned
475 LEB128 number that represents its form. This allows producers
476 to choose forms for particular attributes 
477 \addtoindexx{abbreviations table!dynamic forms in}
478 dynamically,
479 without having to add a new entry to the abbreviations table.
480
481 The abbreviations for a given compilation unit end with an
482 entry consisting of a 0 byte for the abbreviation code.
483
484 See 
485 Appendix \refersec{app:compilationunitsandabbreviationstableexample} 
486 for a depiction of the organization of the
487 debugging information.
488
489 \subsection{Attribute Encodings}
490 \label{datarep:attributeencodings}
491
492 The encodings for the attribute names are given in 
493 Table \refersec{tab:attributeencodings}.
494
495 The attribute form governs how the value of the attribute is
496 encoded. There are nine classes of form, listed below. Each
497 class is a set of forms which have related representations
498 and which are given a common interpretation according to the
499 attribute in which the form is used.
500
501 Form \livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset} is a member of more than one class,
502 namely \livelink{chap:lineptr}{lineptr}, \livelink{chap:loclistptr}{loclistptr}, \livelink{chap:macptr}{macptr} or \livelink{chap:rangelistptr}{rangelistptr}; the list
503 of classes allowed by the applicable attribute in 
504 Table \refersec{tab:attributeencodings}
505 determines the class of the form.
506
507 \textit{In DWARF V3 the forms \livelink{chap:DWFORMdata4}{DW\-\_FORM\-\_data4} and \livelink{chap:DWFORMdata8}{DW\-\_FORM\-\_data8} were
508 members of either class constant or one of the classes \livelink{chap:lineptr}{lineptr},
509 \livelink{chap:loclistptr}{loclistptr}, \livelink{chap:macptr}{macptr} or \livelink{chap:rangelistptr}{rangelistptr}, depending on context. In
510 DWARF V4 \livelink{chap:DWFORMdata4}{DW\-\_FORM\-\_data4} and \livelink{chap:DWFORMdata8}{DW\-\_FORM\-\_data8} are members of class
511 constant in all cases. The new \livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset} replaces
512 their usage for the other classes.}
513
514 Each possible form belongs to one or more of the following classes:
515
516 \begin{itemize}
517 \item \livelinki{chap:DWATaddressclass}{address}{address class} \\
518 Represented as an object of appropriate size to hold an
519 address on the target machine 
520 (\livetarg{chap:DWFORMaddr}{DW\-\_FORM\-\_addr}). 
521 The size is
522 encoded in the compilation unit header 
523 (see Section \refersec{datarep:compilationunitheader}).
524 This address is relocatable in a relocatable object file and
525 is relocated in an executable file or shared object.
526
527 \item \livelink{chap:block}{block} \\
528 Blocks come in four forms:
529
530 \begin{myindentpara}{1cm}
531 A 1\dash byte length followed by 0 to 255 contiguous information
532 bytes (\livetarg{chap:DWFORMblock1}{DW\-\_FORM\-\_block1}).
533 \end{myindentpara}
534
535 \begin{myindentpara}{1cm}
536 A 2\dash byte length followed by 0 to 65,535 contiguous information
537 bytes (\livetarg{chap:DWFORMblock2}{DW\-\_FORM\-\_block2}).
538 \end{myindentpara}
539
540
541 \begin{myindentpara}{1cm}
542 A 4\dash byte length followed by 0 to 4,294,967,295 contiguous
543 information bytes (\livetarg{chap:DWFORMblock4}{DW\-\_FORM\-\_block4}).
544 \end{myindentpara}
545
546
547 \begin{myindentpara}{1cm}
548 An unsigned LEB128 length followed by the number of bytes
549 specified by the length (\livetarg{chap:DWFORMblock}{DW\-\_FORM\-\_block}).
550 \end{myindentpara}
551
552 In all forms, the length is the number of information bytes
553 that follow. The information bytes may contain any mixture
554 of relocated (or relocatable) addresses, references to other
555 debugging information entries or data bytes.
556
557 \item constant \\
558 There are six forms of constants. There are fixed length
559 constant data forms for one, two, four and eight byte values
560 (respectively, 
561 \livetarg{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}, 
562 \livetarg{chap:DWFORMdata2}{DW\-\_FORM\-\_data2}, 
563 \livetarg{chap:DWFORMdata4}{DW\-\_FORM\-\_data4},
564 and \livetarg{chap:DWFORMdata8}{DW\-\_FORM\-\_data8}). 
565 There are also variable length constant
566 data forms encoded using LEB128 numbers (see below). Both
567 signed (\livetarg{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata}) and unsigned 
568 (\livetarg{chap:DWFORMudata}{DW\-\_FORM\-\_udata}) variable
569 length constants are available
570
571 The data in \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}, 
572 \livelink{chap:DWFORMdata2}{DW\-\_FORM\-\_data2}, 
573 \livelink{chap:DWFORMdata4}{DW\-\_FORM\-\_data4} and
574 \livelink{chap:DWFORMdata8}{DW\-\_FORM\-\_data8} 
575 can be anything. Depending on context, it may
576 be a signed integer, an unsigned integer, a floating\dash point
577 constant, or anything else. A consumer must use context to
578 know how to interpret the bits, which if they are target
579 machine data (such as an integer or floating point constant)
580 will be in target machine byte\dash order.
581
582 \textit{If one of the \livetarg{chap:DWFORMdata}{DW\-\_FORM\-\_data}<n> forms is used to represent a
583 signed or unsigned integer, it can be hard for a consumer
584 to discover the context necessary to determine which
585 interpretation is intended. Producers are therefore strongly
586 encouraged to use \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata} or 
587 \livelink{chap:DWFORMudata}{DW\-\_FORM\-\_udata} for signed and
588 unsigned integers respectively, rather than 
589 \livelink{chap:DWFORMdata}{DW\-\_FORM\-\_data} \textless n \textgreater.}
590
591
592 \item \livelink{chap:exprloc}{exprloc} \\
593 This is an unsigned LEB128 length followed by the
594 number of information bytes specified by the length
595 (\livetarg{chap:DWFORMexprloc}{DW\-\_FORM\-\_exprloc}). 
596 The information bytes contain a DWARF
597 expression 
598 (see Section \refersec{chap:dwarfexpressions}) 
599 or location description 
600 (see Section \refersec{chap:locationdescriptions}).
601
602 \item \livelink{chap:flag}{flag} \\
603 A flag is represented explicitly as a single byte of data
604 (\livetarg{chap:DWFORMflag}{DW\-\_FORM\-\_flag}) or 
605 implicitly (\livetarg{chap:DWFORMflagpresent}{DW\-\_FORM\-\_flag\-\_present}). 
606 In the
607 first case, if the \nolink{flag} has value zero, it indicates the
608 absence of the attribute; if the \nolink{flag} has a non\dash zero value,
609 it indicates the presence of the attribute. In the second
610 case, the attribute is implicitly indicated as present, and
611 no value is encoded in the debugging information entry itself.
612
613 \item \livelink{chap:lineptr}{lineptr} \\
614 This is an offset into the 
615 \addtoindex{.debug\_line} section
616 (\livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}). It consists of an offset from the
617 beginning of the 
618 \addtoindex{.debug\_line}
619 section to the first byte of
620 the data making up the line number list for the compilation
621 unit. 
622 It is relocatable in a relocatable object file, and
623 relocated in an executable or shared object. In the 32\dash bit
624 DWARF format, this offset is a 4\dash byte unsigned value;
625 in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
626 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
627
628
629 \item \livelink{chap:loclistptr}{loclistptr} \\
630 This is an offset into the 
631 \addtoindex{.debug\_loc}
632 section
633 (\livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}). It consists of an offset from the
634 beginning of the 
635 \addtoindex{.debug\_loc}
636 section to the first byte of
637 the data making up the location list for the compilation
638 unit. 
639 It is relocatable in a relocatable object file, and
640 relocated in an executable or shared object. In the 32\dash bit
641 DWARF format, this offset is a 4\dash byte unsigned value;
642 in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
643 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
644
645
646 \item \livelink{chap:macptr}{macptr} \\
647 This is an offset into the 
648 \addtoindex{.debug\_macinfo} section
649 (\livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}). It consists of an offset from the
650 beginning of the \addtoindex{.debug\_macinfo} 
651 section to the first byte of
652 the data making up the macro information list for the compilation
653 unit. 
654 It is relocatable in a relocatable object file, and
655 relocated in an executable or shared object. In the 32\dash bit
656 DWARF format, this offset is a 4\dash byte unsigned value;
657 in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
658 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
659
660 \item \livelink{chap:rangelistptr}{rangelistptr} \\
661 This is an offset into the \addtoindex{.debug\_ranges} section
662 (\livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset}). 
663 It consists of an
664 offset from the beginning of the 
665 \addtoindex{.debug\_ranges} section
666 to the beginning of the non\dash contiguous address ranges
667 information for the referencing entity.  
668 It is relocatable in
669 a relocatable object file, and relocated in an executable or
670 shared object. In the 32\dash bit DWARF format, this offset
671 is a 4\dash byte unsigned value; in the 64\dash bit DWARF
672 format, it is an 8\dash byte unsigned value (see Section
673 \refersec{datarep:32bitand64bitdwarfformats}).
674 \end{itemize}
675
676 \textit{Because classes \livelink{chap:lineptr}{lineptr}, \livelink{chap:loclistptr}{loclistptr}, \livelink{chap:macptr}{macptr} and \livelink{chap:rangelistptr}{rangelistptr}
677 share a common representation, it is not possible for an
678 attribute to allow more than one of these classes}
679
680
681 \begin{itemize}
682 \item reference \\
683 There are three types of reference.
684
685 The first type of reference can identify any debugging
686 information entry within the containing unit. This type of
687 reference is an offset from the first byte of the compilation
688 header for the compilation unit containing the reference. There
689 are five forms for this type of reference. There are fixed
690 length forms for one, two, four and eight byte offsets
691 (respectively, \livetarg{chap:DWFORMref1}{DW\-\_FORM\-\_ref1}, 
692 \livetarg{chap:DWFORMref2}{DW\-\_FORM\-\_ref2}, 
693 \livetarg{chap:DWFORMref4}{DW\-\_FORM\-\_ref4},
694 and \livetarg{chap:DWFORMref8}{DW\-\_FORM\-\_ref8}). 
695 There is also an unsigned variable
696 length offset encoded form that uses unsigned LEB128 numbers
697 (\livetarg{chap:DWFORMrefudata}{DW\-\_FORM\-\_ref\-\_udata}). 
698 Because this type of reference is within
699 the containing compilation unit no relocation of the value
700 is required.
701
702 The second type of reference can identify any debugging
703 information entry within a 
704 \addtoindex{.debug\_info} section; in particular,
705 it may refer to an entry in a different compilation unit
706 from the unit containing the reference, and may refer to an
707 entry in a different shared object.  This type of reference
708 (\livetarg{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}) is an offset from the beginning of the
709 \addtoindex{.debug\_info} 
710 section of the target executable or shared object;
711 it is relocatable in a relocatable object file and frequently
712 relocated in an executable file or shared object. For
713 references from one shared object or static executable file
714 to another, the relocation and identification of the target
715 object must be performed by the consumer. In the 32\dash bit DWARF
716 format, this offset is a 4\dash byte unsigned value; 
717 in the 64\dash bit DWARF format, it is an 8\dash byte
718 unsigned value 
719 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
720
721 A debugging information entry that may be referenced by
722 another compilation unit using \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr} must have a
723 global symbolic name.
724
725 For a reference from one executable or shared object to
726 another, the reference is resolved by the debugger to identify
727 the shared object or executable and the offset into that
728 object’s \addtoindex{.debug\_info}
729 section in the same fashion as the run
730 time loader, either when the debug information is first read,
731 or when the reference is used.
732
733 The third type of reference can identify any debugging
734 information type entry that has been placed in its own
735 type unit. This type of 
736 reference (\livetarg{chap:DWFORMrefsig8}{DW\-\_FORM\-\_ref\-\_sig8}) is the
737 64\dash bit type signature 
738 (see Section \refersec{datarep:typesignaturecomputation}) 
739 that was computed
740 for the type.
741
742 The use of compilation unit relative references will reduce the
743 number of link\dash time relocations and so speed up linking. The
744 use of the second and third type of reference allows for the
745 sharing of information, such as types, across compilation
746 units.
747
748 A reference to any kind of compilation unit identifies the
749 debugging information entry for that unit, not the preceding
750 header.
751
752 \item string \\
753 A string is a sequence of contiguous non\dash null bytes followed by
754 one null byte. A string may be represented immediately in the
755 debugging information entry itself 
756 (\livetarg{chap:DWFORMstring}{DW\-\_FORM\-\_string}), or may
757 be represented as an offset into a string table contained in
758 the \addtoindex{.debug\_str} section of the object file 
759 (\livetarg{chap:DWFORMstrp}{DW\-\_FORM\-\_strp}). In
760 the 32\dash bit DWARF format, the representation of a 
761 \livelink{chap:DWFORMstrp}{DW\-\_FORM\-\_strp}
762 value is a 4\dash byte unsigned offset; in the 64\dash bit DWARF format,
763 it is an 8\dash byte unsigned offset 
764 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
765
766 If the \livelink{chap:DWATuseUTF8}{DW\-\_AT\-\_use\-\_UTF8} attribute is specified for the
767 compilation unit entry, string values are encoded using the
768 UTF\dash 8 (Unicode Transformation Format\dash 8) from the Universal
769 Character Set standard (ISO/IEC 10646\dash 1:1993). Otherwise,
770 the string representation is unspecified.
771
772 The Unicode Standard Version 3 is fully compatible with
773 ISO/IEC 10646\dash 1:1993. It contains all the same characters
774 and encoding points as ISO/IEC 10646, as well as additional
775 information about the characters and their use.
776
777 Earlier versions of DWARF did not specify the representation
778 of strings; for compatibility, this version also does
779 not. However, the UTF\dash 8 representation is strongly recommended.
780
781 \end{itemize}
782
783 In no case does an attribute use one of the classes \livelink{chap:lineptr}{lineptr},
784 \livelink{chap:loclistptr}{loclistptr}, \livelink{chap:macptr}{macptr} or \livelink{chap:rangelistptr}{rangelistptr} to point into either the
785 \addtoindex{.debug\_info} or \addtoindex{.debug\_str} section.
786
787 The form encodings are listed in 
788 Table \refersec{tab:attributeformencodings}.
789
790 \begin{centering}
791 \setlength{\extrarowheight}{0.1cm}
792 \begin{longtable}{l|l}
793   \caption{Tag encodings} \label{tab:tagencodings} \\
794   \hline \\ \bfseries Tag name&\bfseries Value\\ \hline
795 \endfirsthead
796   \bfseries Tag name&\bfseries Value \\ \hline
797 \endhead
798   \hline \emph{Continued on next page}
799 \endfoot
800   \hline
801 \endlastfoot
802 \livelink{chap:DWTAGarraytype}{DW\-\_TAG\-\_array\-\_type} &0x01 \\
803 \livelink{chap:DWTAGclasstype}{DW\-\_TAG\-\_class\-\_type}&0x02 \\
804 \livelink{chap:DWTAGentrypoint}{DW\-\_TAG\-\_entry\-\_point}&0x03 \\
805 \livelink{chap:DWTAGenumerationtype}{DW\-\_TAG\-\_enumeration\-\_type}&0x04 \\
806 \livelink{chap:DWTAGformalparameter}{DW\-\_TAG\-\_formal\-\_parameter}&0x05 \\
807 \livelink{chap:DWTAGimporteddeclaration}{DW\-\_TAG\-\_imported\-\_declaration}&0x08 \\
808 \livelink{chap:DWTAGlabel}{DW\-\_TAG\-\_label}&0x0a \\
809 \livelink{chap:DWTAGlexicalblock}{DW\-\_TAG\-\_lexical\-\_block}&0x0b \\
810 \livelink{chap:DWTAGmember}{DW\-\_TAG\-\_member}&0x0d \\
811 \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type}&0x0f \\
812 \livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type}&0x10 \\
813 \livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit}&0x11 \\
814 \livelink{chap:DWTAGstringtype}{DW\-\_TAG\-\_string\-\_type}&0x12 \\
815 \livelink{chap:DWTAGstructuretype}{DW\-\_TAG\-\_structure\-\_type}&0x13 \\
816 \livelink{chap:DWTAGsubroutinetype}{DW\-\_TAG\-\_subroutine\-\_type}&0x15 \\
817 \livelink{chap:DWTAGtypedef}{DW\-\_TAG\-\_typedef}&0x16 \\
818 \livelink{chap:DWTAGuniontype}{DW\-\_TAG\-\_union\-\_type}&0x17 \\
819 \livelink{chap:DWTAGunspecifiedparameters}{DW\-\_TAG\-\_unspecified\-\_parameters}&0x18  \\
820 \livelink{chap:DWTAGvariant}{DW\-\_TAG\-\_variant}&0x19  \\
821 \livelink{chap:DWTAGcommonblock}{DW\-\_TAG\-\_common\-\_block}&0x1a  \\
822 \livelink{chap:DWTAGcommoninclusion}{DW\-\_TAG\-\_common\-\_inclusion}&0x1b  \\
823 \livelink{chap:DWTAGinheritance}{DW\-\_TAG\-\_inheritance}&0x1c  \\
824 \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}&0x1d  \\
825 \livelink{chap:DWTAGmodule}{DW\-\_TAG\-\_module}&0x1e  \\
826 \livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}&0x1f  \\
827 \livelink{chap:DWTAGsettype}{DW\-\_TAG\-\_set\-\_type}&0x20  \\
828 \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type}&0x21  \\
829 \livelink{chap:DWTAGwithstmt}{DW\-\_TAG\-\_with\-\_stmt}&0x22  \\
830 \livelink{chap:DWTAGaccessdeclaration}{DW\-\_TAG\-\_access\-\_declaration}&0x23  \\
831 \livelink{chap:DWTAGbasetype}{DW\-\_TAG\-\_base\-\_type}&0x24  \\
832 \livelink{chap:DWTAGcatchblock}{DW\-\_TAG\-\_catch\-\_block}&0x25  \\
833 \livelink{chap:DWTAGconsttype}{DW\-\_TAG\-\_const\-\_type}&0x26  \\
834 \livelink{chap:DWTAGconstant}{DW\-\_TAG\-\_constant}&0x27  \\
835 \livelink{chap:DWTAGenumerator}{DW\-\_TAG\-\_enumerator}&0x28  \\
836 \livelink{chap:DWTAGfiletype}{DW\-\_TAG\-\_file\-\_type}&0x29  \\
837 \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}&0x2a  \\
838 \livelink{chap:DWTAGnamelist}{DW\-\_TAG\-\_namelist}&0x2b    \\
839 \livelink{chap:DWTAGnamelistitem}{DW\-\_TAG\-\_namelist\-\_item}&0x2c    \\
840 \livelink{chap:DWTAGpackedtype}{DW\-\_TAG\-\_packed\-\_type}&0x2d    \\
841 \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}&0x2e    \\
842 \livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}&0x2f    \\
843 \livelink{chap:DWTAGtemplatevalueparameter}{DW\-\_TAG\-\_template\-\_value\-\_parameter}&0x30    \\
844 \livelink{chap:DWTAGthrowntype}{DW\-\_TAG\-\_thrown\-\_type}&0x31    \\
845 \livelink{chap:DWTAGtryblock}{DW\-\_TAG\-\_try\-\_block}&0x32    \\
846 \livelink{chap:DWTAGvariantpart}{DW\-\_TAG\-\_variant\-\_part}&0x33    \\
847 \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}&0x34    \\
848 \livelink{chap:DWTAGvolatiletype}{DW\-\_TAG\-\_volatile\-\_type}&0x35    \\
849 \livelink{chap:DWTAGdwarfprocedure}{DW\-\_TAG\-\_dwarf\-\_procedure}&0x36     \\
850 \livelink{chap:DWTAGrestricttype}{DW\-\_TAG\-\_restrict\-\_type}&0x37      \\
851 \livelink{chap:DWTAGinterfacetype}{DW\-\_TAG\-\_interface\-\_type}&0x38      \\
852 \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}&0x39      \\
853 \livelink{chap:DWTAGimportedmodule}{DW\-\_TAG\-\_imported\-\_module}&0x3a      \\
854 \livelink{chap:DWTAGunspecifiedtype}{DW\-\_TAG\-\_unspecified\-\_type}&0x3b      \\
855 \livelink{chap:DWTAGpartialunit}{DW\-\_TAG\-\_partial\-\_unit}&0x3c      \\
856 \livelink{chap:DWTAGimportedunit}{DW\-\_TAG\-\_imported\-\_unit}&0x3d      \\
857 \livelink{chap:DWTAGcondition}{DW\-\_TAG\-\_condition}&0x3f      \\
858 \livelink{chap:DWTAGsharedtype}{DW\-\_TAG\-\_shared\-\_type}&0x40      \\
859 \livelink{chap:DWTAGtypeunit}{DW\-\_TAG\-\_type\-\_unit} \ddag &0x41      \\
860 \livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type} \ddag &0x42      \\
861 \livelink{chap:DWTAGtemplatealias}{DW\-\_TAG\-\_template\-\_alias} \ddag &0x43      \\
862 \livelink{chap:DWTAGlouser}{DW\-\_TAG\-\_lo\-\_user}&0x4080      \\
863 \livelink{chap:DWTAGhiuser}{DW\-\_TAG\-\_hi\-\_user}&0xffff      \\
864 \end{longtable}
865 \ddag  TAG new in DWARF Version 4 
866 \end{centering}
867
868
869 \begin{figure}[here]
870 \centering
871 \setlength{\extrarowheight}{0.1cm}
872 \caption{Child determination encodings}
873 \label{tab:childdeterminationencodings}
874 \begin{tabular}{l|l} \hline
875 Child determination name& Value\\ \hline
876 \livelink{chap:DWCHILDRENno}{DW\-\_CHILDREN\-\_no}&0x00 \\ 
877 \livelink{chap:DWCHILDRENyes}{DW\-\_CHILDREN\-\_yes}&0x01 \\ \hline
878 \end{tabular}
879 \end{figure}
880
881
882 \begin{centering}
883 \setlength{\extrarowheight}{0.1cm}
884 \begin{longtable}{l|l|l}
885   \caption{Attribute encodings} \label{tab:attributeencodings} \\
886   \hline \\ \bfseries Attribute name&\bfseries Value &\bfseries Classes \\ \hline
887 \endfirsthead
888   \bfseries Attribute name&\bfseries Value &\bfseries Classes\\ \hline
889 \endhead
890   \hline \emph{Continued on next page}
891 \endfoot
892   \hline
893 \endlastfoot
894 \livelink{chap:DWATsibling}{DW\-\_AT\-\_sibling}&0x01&reference \\
895 \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}&0x02&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}   \\
896 \livelink{chap:DWATname}{DW\-\_AT\-\_name}&0x03&string   \\
897 \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering}&0x09&constant   \\
898 \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}&0x0b&constant, \livelink{chap:exprloc}{exprloc}, reference   \\
899 \livelink{chap:DWATbitoffset}{DW\-\_AT\-\_bit\-\_offset}&0x0c&constant, \livelink{chap:exprloc}{exprloc}, reference   \\
900 \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}&0x0d&constant, \livelink{chap:exprloc}{exprloc}, reference   \\
901 \livelink{chap:DWATstmtlist}{DW\-\_AT\-\_stmt\-\_list}&0x10&\livelink{chap:lineptr}{lineptr}   \\
902 \livelink{chap:DWATlowpc}{DW\-\_AT\-\_low\-\_pc}&0x11&address   \\
903 \livelink{chap:DWAThighpc}{DW\-\_AT\-\_high\-\_pc}&0x12&address, constant   \\
904 \livelink{chap:DWATlanguage}{DW\-\_AT\-\_language}&0x13&constant   \\
905 \livelink{chap:DWATdiscr}{DW\-\_AT\-\_discr}&0x15&reference   \\
906 \livelink{chap:DWATdiscrvalue}{DW\-\_AT\-\_discr\-\_value}&0x16&constant   \\
907 \livelink{chap:DWATvisibility}{DW\-\_AT\-\_visibility}&0x17&constant   \\
908 \livelink{chap:DWATimport}{DW\-\_AT\-\_import}&0x18&reference   \\
909 \livelink{chap:DWATstringlength}{DW\-\_AT\-\_string\-\_length}&0x19&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}   \\
910 \livelink{chap:DWATcommonreference}{DW\-\_AT\-\_common\-\_reference}&0x1a&reference   \\
911 \livelink{chap:DWATcompdir}{DW\-\_AT\-\_comp\-\_dir}&0x1b&string   \\
912 \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}&0x1c&\livelink{chap:block}{block}, constant, string   \\
913 \livelink{chap:DWATcontainingtype}{DW\-\_AT\-\_containing\-\_type}&0x1d&reference     \\
914 \livelink{chap:DWATdefaultvalue}{DW\-\_AT\-\_default\-\_value}&0x1e&reference     \\
915 \livelink{chap:DWATinline}{DW\-\_AT\-\_inline}&0x20&constant     \\
916 \livelink{chap:DWATisoptional}{DW\-\_AT\-\_is\-\_optional}&0x21&\livelink{chap:flag}{flag}     \\
917 \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}&0x22&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
918 \livelink{chap:DWATproducer}{DW\-\_AT\-\_producer}&0x25&string     \\
919 \livelink{chap:DWATprototyped}{DW\-\_AT\-\_prototyped}&0x27&\livelink{chap:flag}{flag}     \\
920 \livelink{chap:DWATreturnaddr}{DW\-\_AT\-\_return\-\_addr}&0x2a&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}     \\
921 % FIXME: lower case , not Constant
922 \livelink{chap:DWATstartscope}{DW\-\_AT\-\_start\-\_scope}&0x2c&Constant, \livelink{chap:rangelistptr}{rangelistptr}     \\
923 \livelink{chap:DWATbitstride}{DW\-\_AT\-\_bit\-\_stride}&0x2e&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
924 \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}&0x2f&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
925 \livelink{chap:DWATabstractorigin}{DW\-\_AT\-\_abstract\-\_origin}&0x31&reference     \\
926 \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility}&0x32&constant     \\
927 \livelink{chap:DWATaddressclass}{DW\-\_AT\-\_address\-\_class}&0x33&constant     \\
928 \livelink{chap:DWATartificial}{DW\-\_AT\-\_artificial}&0x34&\livelink{chap:flag}{flag}     \\
929 \livelink{chap:DWATbasetypes}{DW\-\_AT\-\_base\-\_types}&0x35&reference     \\
930 \livelink{chap:DWATcallingconvention}{DW\-\_AT\-\_calling\-\_convention}&0x36&constant     \\
931 \livelink{chap:DWATcount}{DW\-\_AT\-\_count}&0x37&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
932 \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}&0x38&constant, \livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}     \\
933 \livelink{chap:DWATdeclcolumn}{DW\-\_AT\-\_decl\-\_column}&0x39&constant     \\
934 \livelink{chap:DWATdeclfile}{DW\-\_AT\-\_decl\-\_file}&0x3a&constant     \\
935 \livelink{chap:DWATdeclline}{DW\-\_AT\-\_decl\-\_line}&0x3b&constant     \\
936 \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration}&0x3c&\livelink{chap:flag}{flag}     \\
937 \livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list}&0x3d&\livelink{chap:block}{block}     \\
938 \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}&0x3e&constant     \\
939 \livelink{chap:DWATexternal}{DW\-\_AT\-\_external}&0x3f&\livelink{chap:flag}{flag}     \\
940 \livelink{chap:DWATframebase}{DW\-\_AT\-\_frame\-\_base}&0x40&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}     \\
941 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend}&0x41&reference     \\
942 \livelink{chap:DWATidentifiercase}{DW\-\_AT\-\_identifier\-\_case}&0x42&constant    \\
943 \livelink{chap:DWATmacroinfo}{DW\-\_AT\-\_macro\-\_info}&0x43&\livelink{chap:macptr}{macptr}    \\
944 \livelink{chap:DWATnamelistitem}{DW\-\_AT\-\_namelist\-\_item}&0x44&reference    \\
945 \livelink{chap:DWATpriority}{DW\-\_AT\-\_priority}&0x45&reference    \\
946 \livelink{chap:DWATsegment}{DW\-\_AT\-\_segment}&0x46&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}    \\
947 \livelink{chap:DWATspecification}{DW\-\_AT\-\_specification}&0x47&reference    \\
948 \livelink{chap:DWATstaticlink}{DW\-\_AT\-\_static\-\_link}&0x48&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}    \\
949 \livelink{chap:DWATtype}{DW\-\_AT\-\_type}&0x49&reference    \\
950 \livelink{chap:DWATuselocation}{DW\-\_AT\-\_use\-\_location}&0x4a&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}    \\
951 \livelink{chap:DWATvariableparameter}{DW\-\_AT\-\_variable\-\_parameter}&0x4b&\livelink{chap:flag}{flag}    \\
952 \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality}&0x4c&constant    \\
953 \livelink{chap:DWATvtableelemlocation}{DW\-\_AT\-\_vtable\-\_elem\-\_location}&0x4d&\livelink{chap:exprloc}{exprloc}, \livelink{chap:loclistptr}{loclistptr}    \\
954
955
956 \livelink{chap:DWATallocated}{DW\-\_AT\-\_allocated}&0x4e&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
957 \livelink{chap:DWATassociated}{DW\-\_AT\-\_associated}&0x4f&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
958 \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}&0x50&\livelink{chap:exprloc}{exprloc}     \\
959 \livelink{chap:DWATbytestride}{DW\-\_AT\-\_byte\-\_stride}&0x51&constant, \livelink{chap:exprloc}{exprloc}, reference     \\
960 \livelink{chap:DWATentrypc}{DW\-\_AT\-\_entry\-\_pc}&0x52&address     \\
961 \livelink{chap:DWATuseUTF8}{DW\-\_AT\-\_use\-\_UTF8}&0x53&\livelink{chap:flag}{flag}     \\
962 \livelink{chap:DWATextension}{DW\-\_AT\-\_extension}&0x54&reference     \\
963 \livelink{chap:DWATranges}{DW\-\_AT\-\_ranges}&0x55&\livelink{chap:rangelistptr}{rangelistptr}     \\
964 \livelink{chap:DWATtrampoline}{DW\-\_AT\-\_trampoline}&0x56&address, \livelink{chap:flag}{flag}, reference, string     \\
965 \livelink{chap:DWATcallcolumn}{DW\-\_AT\-\_call\-\_column}&0x57&constant     \\
966 \livelink{chap:DWATcallfile}{DW\-\_AT\-\_call\-\_file}&0x58&constant     \\
967 \livelink{chap:DWATcallline}{DW\-\_AT\-\_call\-\_line}&0x59&constant     \\
968 \livelink{chap:DWATdescription}{DW\-\_AT\-\_description}&0x5a&string     \\
969 \livelink{chap:DWATbinaryscale}{DW\-\_AT\-\_binary\-\_scale}&0x5b&constant     \\
970 \livelink{chap:DWATdecimalscale}{DW\-\_AT\-\_decimal\-\_scale}&0x5c&constant     \\
971 \livelink{chap:DWATsmall}{DW\-\_AT\-\_small} &0x5d&reference     \\
972 \livelink{chap:DWATdecimalsign}{DW\-\_AT\-\_decimal\-\_sign}&0x5e&constant     \\
973 \livelink{chap:DWATdigitcount}{DW\-\_AT\-\_digit\-\_count}&0x5f&constant     \\
974 \livelink{chap:DWATpicturestring}{DW\-\_AT\-\_picture\-\_string}&0x60&string      \\
975 \livelink{chap:DWATmutable}{DW\-\_AT\-\_mutable}&0x61&\livelink{chap:flag}{flag}     \\
976
977
978 \livelink{chap:DWATthreadsscaled}{DW\-\_AT\-\_threads\-\_scaled}&0x62&\livelink{chap:flag}{flag}     \\
979 \livelink{chap:DWATexplicit}{DW\-\_AT\-\_explicit}&0x63&\livelink{chap:flag}{flag}     \\
980 \livelink{chap:DWATobjectpointer}{DW\-\_AT\-\_object\-\_pointer}&0x64&reference     \\
981 \livelink{chap:DWATendianity}{DW\-\_AT\-\_endianity}&0x65&constant     \\
982 \livelink{chap:DWATelemental}{DW\-\_AT\-\_elemental}&0x66&\livelink{chap:flag}{flag}     \\
983 \livelink{chap:DWATpure}{DW\-\_AT\-\_pure}&0x67&\livelink{chap:flag}{flag}     \\
984 \livelink{chap:DWATrecursive}{DW\-\_AT\-\_recursive}&0x68&\livelink{chap:flag}{flag}     \\
985 \livelink{chap:DWATsignature}{DW\-\_AT\-\_signature} \ddag &0x69&reference     \\ 
986 \livelink{chap:DWATmainsubprogram}{DW\-\_AT\-\_main\-\_subprogram} \ddag &0x6a&\livelink{chap:flag}{flag}     \\
987 \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset} \ddag &0x6b&constant     \\
988 \livelink{chap:DWATconstexpr}{DW\-\_AT\-\_const\-\_expr} \ddag &0x6c&\livelink{chap:flag}{flag}     \\
989 \livelink{chap:DWATenumclass}{DW\-\_AT\-\_enum\-\_class} \ddag &0x6d&\livelink{chap:flag}{flag}     \\
990 \livelink{chap:DWATlinkagename}{DW\-\_AT\-\_linkage\-\_name} \ddag &0x6e&string     \\
991 \livetarg{chap:DWATlouser}{DW\-\_AT\-\_lo\-\_user}&0x2000 & ---     \\
992 \livetarg{chap:DWAThiuser}{DW\-\_AT\-\_hi\-\_user}&0x3fff& ---     \\
993
994 \end{longtable}
995 \ddag  Attribute new in DWARF Version 4 
996 \end{centering}
997
998 \begin{centering}
999 \setlength{\extrarowheight}{0.1cm}
1000 \begin{longtable}{l|l|l}
1001   \caption{Attribute form encodings} \label{tab:attributeformencodings} \\
1002   \hline \\ \bfseries Form name&\bfseries Value &\bfseries Classes \\ \hline
1003 \endfirsthead
1004   \bfseries Form name&\bfseries Value &\bfseries Classes\\ \hline
1005 \endhead
1006   \hline \emph{Continued on next page}
1007 \endfoot
1008   \hline
1009 \endlastfoot
1010 \livelink{chap:DWFORMaddr}{DW\-\_FORM\-\_addr}&0x01&address  \\
1011 \livelink{chap:DWFORMblock2}{DW\-\_FORM\-\_block2}&0x03&\livelink{chap:block}{block} \\
1012 \livelink{chap:DWFORMblock4}{DW\-\_FORM\-\_block4}&0x04&\livelink{chap:block}{block}  \\
1013 \livelink{chap:DWFORMdata2}{DW\-\_FORM\-\_data2}&0x05&constant \\
1014 \livelink{chap:DWFORMdata4}{DW\-\_FORM\-\_data4}&0x06&constant \\
1015 \livelink{chap:DWFORMdata8}{DW\-\_FORM\-\_data8}&0x07&constant \\
1016 \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string}&0x08&string \\
1017 \livelink{chap:DWFORMblock}{DW\-\_FORM\-\_block}&0x09&\livelink{chap:block}{block} \\
1018 \livelink{chap:DWFORMblock1}{DW\-\_FORM\-\_block1}&0x0a&\livelink{chap:block}{block} \\
1019 \livelink{chap:DWFORMdata1}{DW\-\_FORM\-\_data1}&0x0b&constant \\
1020 \livelink{chap:DWFORMflag}{DW\-\_FORM\-\_flag}&0x0c&\livelink{chap:flag}{flag} \\
1021 \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata}&0x0d&constant    \\
1022 \livelink{chap:DWFORMstrp}{DW\-\_FORM\-\_strp}&0x0e&string         \\
1023 \livelink{chap:DWFORMudata}{DW\-\_FORM\-\_udata}&0x0f&constant         \\
1024 \livelink{chap:DWFORMrefaddr}{DW\-\_FORM\-\_ref\-\_addr}&0x10&reference         \\
1025 \livelink{chap:DWFORMref1}{DW\-\_FORM\-\_ref1}&0x11&reference          \\
1026 \livelink{chap:DWFORMref2}{DW\-\_FORM\-\_ref2}&0x12&reference         \\
1027 \livelink{chap:DWFORMref4}{DW\-\_FORM\-\_ref4}&0x13&reference         \\
1028 \livelink{chap:DWFORMref8}{DW\-\_FORM\-\_ref8}&0x14&reference \\
1029 \livelink{chap:DWFORMrefudata}{DW\-\_FORM\-\_ref\-\_udata}&0x15&reference  \\
1030 \livelink{chap:DWFORMindirect}{DW\-\_FORM\-\_indirect}&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
1031 \livelink{chap:DWFORMsecoffset}{DW\-\_FORM\-\_sec\-\_offset} \ddag &0x17&\livelink{chap:lineptr}{lineptr}, \livelink{chap:loclistptr}{loclistptr}, \livelink{chap:macptr}{macptr}, \livelink{chap:rangelistptr}{rangelistptr} \\
1032 \livelink{chap:DWFORMexprloc}{DW\-\_FORM\-\_exprloc} \ddag &0x18&\livelink{chap:exprloc}{exprloc} \\
1033 \livelink{chap:DWFORMflagpresent}{DW\-\_FORM\-\_flag\-\_present} \ddag &0x19&\livelink{chap:flag}{flag} \\
1034 \livelink{chap:DWFORMrefsig8}{DW\-\_FORM\-\_ref\-\_sig8} \ddag &0x20&reference \\
1035  
1036 \end{longtable}
1037 \ddag  FORM new in DWARF Version 4 
1038 \end{centering}
1039
1040 \section{Variable Length Data}
1041 \label{datarep:variablelengthdata}
1042 Integers may be encoded using ``Little Endian Base 128''
1043 (LEB128) numbers. LEB128 is a scheme for encoding integers
1044 densely that exploits the assumption that most integers are
1045 small in magnitude.
1046
1047 This encoding is equally suitable whether the target machine
1048 architecture represents data in big\dash\  endian or little\dash endian
1049 order. It is ``little\dash endian'' only in the sense that it
1050 avoids using space to represent the ``big'' end of an
1051 unsigned integer, when the big end is all zeroes or sign
1052 extension bits.
1053
1054 Unsigned LEB128 (ULEB128) numbers are encoded as follows:
1055 start at the low order end of an unsigned integer and chop
1056 it into 7\dash bit chunks. Place each chunk into the low order 7
1057 bits of a byte. Typically, several of the high order bytes
1058 will be zero; discard them. Emit the remaining bytes in a
1059 stream, starting with the low order byte; set the high order
1060 bit on each byte except the last emitted byte. The high bit
1061 of zero on the last byte indicates to the decoder that it
1062 has encountered the last byte.
1063
1064 The integer zero is a special case, consisting of a single
1065 zero byte.
1066
1067 Table \refersec{tab:examplesofunsignedleb128encodings}
1068 gives some examples of unsigned LEB128 numbers. The
1069 0x80 in each case is the high order bit of the byte, indicating
1070 that an additional byte follows.
1071
1072
1073 The encoding for signed, two’s complement LEB128 (SLEB128)
1074 numbers is similar, except that the criterion for discarding
1075 high order bytes is not whether they are zero, but whether
1076 they consist entirely of sign extension bits. Consider the
1077 32\dash bit integer -2. The three high level bytes of the number
1078 are sign extension, thus LEB128 would represent it as a single
1079 byte containing the low order 7 bits, with the high order
1080 bit cleared to indicate the end of the byte stream. Note
1081 that there is nothing within the LEB128 representation that
1082 indicates whether an encoded number is signed or unsigned. The
1083 decoder must know what type of number to expect. 
1084 Table \refersec{tab:examplesofunsignedleb128encodings}
1085 gives some examples of unsigned LEB128 numbers and 
1086 Table \refersec{tab:examplesofsignedleb128encodings}
1087 gives some examples of signed LEB128 numbers.
1088
1089 Appendix \refersec{app:variablelengthdataencodingdecodinginformative} 
1090 gives algorithms for encoding and decoding these forms.
1091
1092
1093 \begin{centering}
1094 \setlength{\extrarowheight}{0.1cm}
1095 \begin{longtable}{l|l|l}
1096   \caption{Examples of unsigned LEB32 encodings} \label{tab:examplesofunsignedleb128encodings} \\
1097   \hline \\ \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
1098 \endfirsthead
1099   \bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
1100 \endhead
1101   \hline \emph{Continued on next page}
1102 \endfoot
1103   \hline
1104 \endlastfoot
1105 2&2& --- \\
1106 127&127& ---\\
1107 128& 0 + 0x80 & 1 \\
1108 129& 1 + 0x80 & 1 \\
1109 130& 2 + 0x80 & 1 \\
1110 12857& 57 + 0x80 & 100 \\
1111
1112 \end{longtable}
1113 \end{centering}
1114
1115
1116
1117 \begin{centering}
1118 \setlength{\extrarowheight}{0.1cm}
1119 \begin{longtable}{l|l|l}
1120   \caption{Examples of signed LEB32 encodings} \label{tab:examplesofsignedleb128encodings} \\
1121   \hline \\ \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
1122 \endfirsthead
1123   \bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
1124 \endhead
1125   \hline \emph{Continued on next page}
1126 \endfoot
1127   \hline
1128 \endlastfoot
1129 2&2& --- \\
1130 -2&0x7e& ---\\
1131 127& 127 + 0x80 & 0 \\
1132 -127& 1 + 0x80 & 0x7f \\
1133 128& 0 + 0x80 & 1 \\
1134 -128& 0 + 0x80 & 0x7f \\
1135 129& 1 + 0x80 & 1 \\
1136 -129& -x7f + 0x80 & 0xtc \\
1137
1138 \end{longtable}
1139 \end{centering}
1140
1141
1142
1143 \section{DWARF Expressions and Location Descriptions}
1144 \label{datarep:dwarfexpressionsandlocationdescriptions}
1145 \subsection{DWARF Expressions}
1146 \label{datarep:dwarfexpressions}
1147
1148 A DWARF expression is stored in a \nolink{block} of contiguous
1149 bytes. The bytes form a sequence of operations. Each operation
1150 is a 1\dash byte code that identifies that operation, followed by
1151 zero or more bytes of additional data. The encodings for the
1152 operations are described in 
1153 Table \refersec{tab:dwarfoperationencodings}. 
1154
1155 \begin{centering}
1156 \setlength{\extrarowheight}{0.1cm}
1157 \begin{longtable}{l|l|l|l}
1158   \caption{DWARF operation encodings} \label{tab:dwarfoperationencodings} \\
1159   \hline \\ & &\bfseries No. of  &\\ 
1160   \bfseries Operation&\bfseries Code &\bfseries Operands &\bfseries Notes\\ \hline
1161 \endfirsthead
1162    & &\bfseries No. of &\\ 
1163   \bfseries Operation&\bfseries Code &\bfseries  Operands &\bfseries Notes\\ \hline
1164 \endhead
1165   \hline \emph{Continued on next page}
1166 \endfoot
1167   \hline
1168 \endlastfoot
1169
1170 \livelink{chap:DWOPaddr}{DW\-\_OP\-\_addr}&0x03&1 & constant address  \\ 
1171 & & &(size target specific) \\
1172
1173 \livelink{chap:DWOPderef}{DW\-\_OP\-\_deref}&0x06&0 & \\
1174
1175
1176 \livelink{chap:DWOPconst1u}{DW\-\_OP\-\_const1u}&0x08&1&1\dash byte constant  \\
1177 \livelink{chap:DWOPconst1s}{DW\-\_OP\-\_const1s}&0x09&1&1\dash byte constant   \\
1178 \livelink{chap:DWOPconst2u}{DW\-\_OP\-\_const2u}&0x0a&1&2\dash byte constant   \\
1179 \livelink{chap:DWOPconst2s}{DW\-\_OP\-\_const2s}&0x0b&1&2\dash byte constant   \\
1180 \livelink{chap:DWOPconst4u}{DW\-\_OP\-\_const4u}&0x0c&1&4\dash byte constant    \\
1181 \livelink{chap:DWOPconst4s}{DW\-\_OP\-\_const4s}&0x0d&1&4\dash byte constant   \\
1182 \livelink{chap:DWOPconst8u}{DW\-\_OP\-\_const8u}&0x0e&1&8\dash byte constant   \\
1183 \livelink{chap:DWOPconst8s}{DW\-\_OP\-\_const8s}&0x0f&1&8\dash byte constant   \\
1184 \livelink{chap:DWOPconstu}{DW\-\_OP\-\_constu}&0x10&1&ULEB128 constant   \\
1185 \livelink{chap:DWOPconsts}{DW\-\_OP\-\_consts}&0x11&1&SLEB128 constant   \\
1186 \livelink{chap:DWOPdup}{DW\-\_OP\-\_dup}&0x12&0 &   \\
1187 \livelink{chap:DWOPdrop}{DW\-\_OP\-\_drop}&0x13&0  &   \\
1188 \livelink{chap:DWOPover}{DW\-\_OP\-\_over}&0x14&0 &   \\
1189 \livelink{chap:DWOPpick}{DW\-\_OP\-\_pick}&0x15&1&1\dash byte stack index   \\
1190 \livelink{chap:DWOPswap}{DW\-\_OP\-\_swap}&0x16&0 &   \\
1191 \livelink{chap:DWOProt}{DW\-\_OP\-\_rot}&0x17&0 &   \\
1192 \livelink{chap:DWOPxderef}{DW\-\_OP\-\_xderef}&0x18&0 &   \\
1193 \livelink{chap:DWOPabs}{DW\-\_OP\-\_abs}&0x19&0 &   \\
1194 \livelink{chap:DWOPand}{DW\-\_OP\-\_and}&0x1a&0 &   \\
1195 \livelink{chap:DWOPdiv}{DW\-\_OP\-\_div}&0x1b&0 &   \\
1196
1197
1198
1199 \livelink{chap:DWOPminus}{DW\-\_OP\-\_minus}&0x1c&0 & \\
1200 \livelink{chap:DWOPmod}{DW\-\_OP\-\_mod}&0x1d&0 & \\
1201 \livelink{chap:DWOPmul}{DW\-\_OP\-\_mul}&0x1e&0 & \\
1202 \livelink{chap:DWOPneg}{DW\-\_OP\-\_neg}&0x1f&0 & \\
1203 \livelink{chap:DWOPnot}{DW\-\_OP\-\_not}&0x20&0 & \\
1204 \livelink{chap:DWOPor}{DW\-\_OP\-\_or}&0x21&0 & \\
1205 \livelink{chap:DWOPplus}{DW\-\_OP\-\_plus}&0x22&0 & \\
1206 \livelink{chap:DWOPplusuconst}{DW\-\_OP\-\_plus\-\_uconst}&0x23&1&ULEB128 addend \\
1207 \livelink{chap:DWOPshl}{DW\-\_OP\-\_shl}&0x24&0 & \\
1208 \livelink{chap:DWOPshr}{DW\-\_OP\-\_shr}&0x25&0 & \\
1209 \livelink{chap:DWOPshra}{DW\-\_OP\-\_shra}&0x26&0 & \\
1210 \livelink{chap:DWOPxor}{DW\-\_OP\-\_xor}&0x27&0 & \\
1211 \livelink{chap:DWOPskip}{DW\-\_OP\-\_skip}&0x2f&1&signed 2\dash byte constant \\
1212 \livelink{chap:DWOPbra}{DW\-\_OP\-\_bra}&0x28&1 & signed 2\dash byte constant \\
1213 \livelink{chap:DWOPeq}{DW\-\_OP\-\_eq}&0x29&0 & \\
1214 \livelink{chap:DWOPge}{DW\-\_OP\-\_ge}&0x2a&0 & \\
1215 \livelink{chap:DWOPgt}{DW\-\_OP\-\_gt}&0x2b&0 & \\
1216 \livelink{chap:DWOPle}{DW\-\_OP\-\_le}&0x2c&0 & \\
1217 \livelink{chap:DWOPlt}{DW\-\_OP\-\_lt}&0x2d&0  & \\
1218 \livelink{chap:DWOPne}{DW\-\_OP\-\_ne}&0x2e&0 & \\ \hline
1219
1220
1221
1222 \livelink{chap:DWOPlit0}{DW\-\_OP\-\_lit0}&0x30 & 0 & \\
1223
1224 \livelink{chap:DWOPlit1}{DW\-\_OP\-\_lit1}&0x31 & 0& literals 0 .. 31 = \\
1225 \ldots & & & (\livelink{chap:DWOPlit0}{DW\-\_OP\-\_lit0} + literal) \\
1226 \livelink{chap:DWOPlit31}{DW\-\_OP\-\_lit31}&0x4f & 0 & \\ \hline
1227
1228 \livelink{chap:DWOPreg0}{DW\-\_OP\-\_reg0} & 0x50 & 0 & \\
1229 \livelink{chap:DWOPreg1}{DW\-\_OP\-\_reg1} & 0x51 & 0&reg 0 .. 31 = \\
1230 \ldots & & & (\livelink{chap:DWOPreg0}{DW\-\_OP\-\_reg0} + regnum) \\
1231 \livelink{chap:DWOPreg31}{DW\-\_OP\-\_reg31} & 0x6f & 0 & \\ \hline
1232
1233 \livelink{chap:DWOPbreg0}{DW\-\_OP\-\_breg0} & 0x70 &1 & SLEB128 offset \\
1234 \livelink{chap:DWOPbreg1}{DW\-\_OP\-\_breg1} & 0x71 & 1 &base register 0 .. 31 = \\
1235 ... & &              &(\livelink{chap:DWOPbreg0}{DW\-\_OP\-\_breg0} + regnum) \\
1236 \livelink{chap:DWOPbreg31}{DW\-\_OP\-\_breg31} & 0x8f & 1 & \\ \hline
1237
1238 \livelink{chap:DWOPregx}{DW\-\_OP\-\_regx} & 0x90 &1&ULEB128 register \\
1239 \livelink{chap:DWOPfbreg}{DW\-\_OP\-\_fbreg} & 0x91&1&SLEB128 offset \\
1240 \livelink{chap:DWOPbregx}{DW\-\_OP\-\_bregx} & 0x92&2 &ULEB128 register followed \\
1241 & & & by SLEB128 offset \\
1242 \livelink{chap:DWOPpiece}{DW\-\_OP\-\_piece} & 0x93 &1& ULEB128 size of piece addressed \\
1243 \livelink{chap:DWOPderefsize}{DW\-\_OP\-\_deref\-\_size} & 0x94 &1& 1-byte size of data retrieved \\
1244 \livelink{chap:DWOPxderefsize}{DW\-\_OP\-\_xderef\-\_size} & 0x95&1&1-byte size of data retrieved \\
1245 \livelink{chap:DWOPnop}{DW\-\_OP\-\_nop} & 0x96 &0& \\
1246
1247
1248 \livelink{chap:DWOPpushobjectaddress}{DW\-\_OP\-\_push\-\_object\-\_address}&0x97&0 &  \\
1249 \livelink{chap:DWOPcall2}{DW\-\_OP\-\_call2}&0x98&1& 2\dash byte offset of DIE \\
1250 \livelink{chap:DWOPcall4}{DW\-\_OP\-\_call4}&0x99&1& 4\dash byte offset of DIE \\
1251 \livelink{chap:DWOPcallref}{DW\-\_OP\-\_call\-\_ref}&0x9a&1& 4\dash\  or 8\dash byte\\
1252      &&& offset of DIE \\
1253 \livelink{chap:DWOPformtlsaddress}{DW\-\_OP\-\_form\-\_tls\-\_address}&0x9b &0& \\
1254 \livelink{chap:DWOPcallframecfa}{DW\-\_OP\-\_call\-\_frame\-\_cfa} &0x9c &0& \\
1255 \livelink{chap:DWOPbitpiece}{DW\-\_OP\-\_bit\-\_piece}&0x9d &2&ULEB128 size followed by \\
1256 &&&ULEB128 offset\\
1257 \livelink{chap:DWOPimplicitvalue}{DW\-\_OP\-\_implicit\-\_value}&0x9e &2&ULEB128 size followed by \\
1258 &&&\nolink{block} of that size\\
1259 \livelink{chap:DWOPstackvalue}{DW\-\_OP\-\_stack\-\_value} &0x9f &0& \\
1260 \livetarg{chap:DWOPlouser}{DW\-\_OP\-\_lo\-\_user} &0xe0 && \\
1261 \livetarg{chap:DWOPhiuser}{DW\-\_OP\-\_hi\-\_user} &0xff && \\
1262
1263 \end{longtable}
1264 \end{centering}
1265
1266
1267 \subsection{Location Descriptions}
1268 \label{datarep:locationdescriptions}
1269
1270 A location description is used to compute the 
1271 location of a variable or other entity.
1272
1273 \subsection{Location Lists}
1274 \label{datarep:locationlists}
1275
1276 Each entry in a location list is either a location list entry,
1277 a base address selection entry, or an end of list entry.
1278
1279 A location list entry consists of two address offsets followed
1280 by a 2\dash byte length, followed by a block of contiguous bytes
1281 that contains a DWARF location description. The length
1282 specifies the number of bytes in that block. The two offsets
1283 are the same size as an address on the target machine.
1284
1285 A base address selection entry and an end of list entry each
1286 consist of two (constant or relocated) address offsets. The two
1287 offsets are the same size as an address on the target machine.
1288
1289 For a location list to be specified, the base address of
1290 the corresponding compilation unit must be defined 
1291 (see Section  \refersec{chap:normalandpartialcompilationunitentries}).
1292
1293 \section{Base Type Attribute Encodings}
1294 \label{datarep:basetypeattributeencodings}
1295
1296 The encodings of the 
1297 \hypertarget{chap:DWATencodingencodingofbasetype}
1298 constants used in the 
1299 \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}
1300 attribute are given in 
1301 Table \refersec{tab:basetypeencodingvalues}
1302
1303 \begin{centering}
1304 \setlength{\extrarowheight}{0.1cm}
1305 \begin{longtable}{l|c}
1306   \caption{Base type encoding values} \label{tab:basetypeencodingvalues} \\
1307   \hline \\ \bfseries Base type encoding code name&\bfseries Value \\ \hline
1308 \endfirsthead
1309   \bfseries Base type encoding code name&\bfseries Value\\ \hline
1310 \endhead
1311   \hline \emph{Continued on next page}
1312 \endfoot
1313   \hline
1314 \endlastfoot
1315
1316 \livelink{chap:DWATEaddress}{DW\-\_ATE\-\_address}&0x01 \\
1317 \livelink{chap:DWATEboolean}{DW\-\_ATE\-\_boolean}&0x02 \\
1318 \livelink{chap:DWATEcomplexfloat}{DW\-\_ATE\-\_complex\-\_float}&0x03 \\
1319 \livelink{chap:DWATEfloat}{DW\-\_ATE\-\_float}&0x04 \\
1320 \livelink{chap:DWATEsigned}{DW\-\_ATE\-\_signed}&0x05 \\
1321 \livelink{chap:DWATEsignedchar}{DW\-\_ATE\-\_signed\-\_char}&0x06 \\
1322 \livelink{chap:DWATEunsigned}{DW\-\_ATE\-\_unsigned}&0x07 \\
1323 \livelink{chap:DWATEunsignedchar}{DW\-\_ATE\-\_unsigned\-\_char}&0x08 \\
1324 \livelink{chap:DWATEimaginaryfloat}{DW\-\_ATE\-\_imaginary\-\_float}&0x09 \\
1325 \livelink{chap:DWATEpackeddecimal}{DW\-\_ATE\-\_packed\-\_decimal}&0x0a \\
1326 \livelink{chap:DWATEnumericstring}{DW\-\_ATE\-\_numeric\-\_string}&0x0b \\
1327 \livelink{chap:DWATEedited}{DW\-\_ATE\-\_edited}&0x0c \\
1328 \livelink{chap:DWATEsignedfixed}{DW\-\_ATE\-\_signed\-\_fixed}&0x0d \\
1329 \livelink{chap:DWATEunsignedfixed}{DW\-\_ATE\-\_unsigned\-\_fixed}&0x0e \\
1330 \livelink{chap:DWATEdecimalfloat}{DW\-\_ATE\-\_decimal\-\_float} & 0x0f \\
1331 \livelink{chap:DWATEUTF}{DW\-\_ATE\-\_UTF} \ddag & 0x10 \\
1332 \livetarg{chap:DWATElouser}{DW\-\_ATE\-\_lo\-\_user} & 0x80 \\
1333 \livetarg{chap:DWATEhiuser}{DW\-\_ATE\-\_hi\-\_user} & 0xff \\
1334
1335 \end{longtable}
1336 \ddag  Base type encoding new in DWARF Version 4
1337 \end{centering}
1338
1339
1340 The encodings of the constants used in the 
1341 \livelink{chap:DWATdecimalsign}{DW\-\_AT\-\_decimal\-\_sign} attribute 
1342 are given in 
1343 Table \refersec{tab:decimalsignencodings}.
1344
1345
1346 \begin{centering}
1347 \setlength{\extrarowheight}{0.1cm}
1348 \begin{longtable}{l|c}
1349   \caption{Decimal sign encodings} \label{tab:decimalsignencodings} \\
1350   \hline \\ \bfseries Decimal sign code name&\bfseries Value \\ \hline
1351 \endfirsthead
1352   \bfseries Decimal sign code name&\bfseries Value\\ \hline
1353 \endhead
1354   \hline \emph{Continued on next page}
1355 \endfoot
1356   \hline
1357 \endlastfoot
1358
1359 \livelink{chap:DWDSunsigned}{DW\-\_DS\-\_unsigned} & 0x01  \\
1360 \livelink{chap:DWDSleadingoverpunch}{DW\-\_DS\-\_leading\-\_overpunch} & 0x02  \\
1361 \livelink{chap:DWDStrailingoverpunch}{DW\-\_DS\-\_trailing\-\_overpunch} & 0x03  \\
1362 \livelink{chap:DWDSleadingseparate}{DW\-\_DS\-\_leading\-\_separate} & 0x04  \\
1363 \livelink{chap:DWDStrailingseparate}{DW\-\_DS\-\_trailing\-\_separate} & 0x05  \\
1364
1365 \end{longtable}
1366 \end{centering}
1367
1368 The encodings of the constants used in the 
1369 \livelink{chap:DWATendianity}{DW\-\_AT\-\_endianity} attribute are given in 
1370 Table \refersec{tab:endianityencodings}.
1371
1372 \begin{centering}
1373 \setlength{\extrarowheight}{0.1cm}
1374 \begin{longtable}{l|c}
1375   \caption{Endianity encodings} \label{tab:endianityencodings}\\
1376   \hline \\ \bfseries Endian code name&\bfseries Value \\ \hline
1377 \endfirsthead
1378   \bfseries Endian code name&\bfseries Value\\ \hline
1379 \endhead
1380   \hline \emph{Continued on next page}
1381 \endfoot
1382   \hline
1383 \endlastfoot
1384
1385 \livelink{chap:DWENDdefault}{DW\-\_END\-\_default}  & 0x00 \\
1386 \livelink{chap:DWENDbig}{DW\-\_END\-\_big} & 0x01 \\
1387 \livelink{chap:DWENDlittle}{DW\-\_END\-\_little} & 0x02 \\
1388 \livetarg{chap:DWENDlouser}{DW\-\_END\-\_lo\-\_user} & 0x40 \\
1389 \livetarg{chap:DWENDhiuser}{DW\-\_END\-\_hi\-\_user} & 0xff \\
1390
1391 \end{longtable}
1392 \end{centering}
1393
1394 \section{Accessibility Codes}
1395 \label{datarep:accessibilitycodes}
1396 The encodings of the constants used in the \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility}
1397 attribute are given in 
1398 Table \refersec{tab:accessibilityencodings}.
1399
1400 \begin{centering}
1401 \setlength{\extrarowheight}{0.1cm}
1402 \begin{longtable}{l|c}
1403   \caption{Accessibility encodings} \label{tab:accessibilityencodings}\\
1404   \hline \\ \bfseries Accessibility code name&\bfseries Value \\ \hline
1405 \endfirsthead
1406   \bfseries Accessibility code name&\bfseries Value\\ \hline
1407 \endhead
1408   \hline \emph{Continued on next page}
1409 \endfoot
1410   \hline
1411 \endlastfoot
1412
1413 \livelink{chap:DWACCESSpublic}{DW\-\_ACCESS\-\_public}&0x01  \\
1414 \livelink{chap:DWACCESSprotected}{DW\-\_ACCESS\-\_protected}&0x02 \\
1415 \livelink{chap:DWACCESSprivate}{DW\-\_ACCESS\-\_private}&0x03 \\
1416
1417 \end{longtable}
1418 \end{centering}
1419
1420
1421 \section{Visibility Codes}
1422 \label{datarep:visibilitycodes}
1423 The encodings of the constants used in the 
1424 \livelink{chap:DWATvisibility}{DW\-\_AT\-\_visibility} attribute are given in 
1425 Table \refersec{tab:visibilityencodings}. 
1426
1427 \begin{centering}
1428 \setlength{\extrarowheight}{0.1cm}
1429 \begin{longtable}{l|c}
1430   \caption{Visibility encodings} \label{tab:visibilityencodings}\\
1431   \hline \\ \bfseries Visiibility code name&\bfseries Value \\ \hline
1432 \endfirsthead
1433   \bfseries Visibility code name&\bfseries Value\\ \hline
1434 \endhead
1435   \hline \emph{Continued on next page}
1436 \endfoot
1437   \hline
1438 \endlastfoot
1439
1440 \livelink{chap:DWVISlocal}{DW\-\_VIS\-\_local}&0x01 \\
1441 \livelink{chap:DWVISexported}{DW\-\_VIS\-\_exported}&0x02 \\
1442 \livelink{chap:DWVISqualified}{DW\-\_VIS\-\_qualified}&0x03 \\
1443
1444 \end{longtable}
1445 \end{centering}
1446
1447 \section{Virtuality Codes}
1448 \label{datarep:vitualitycodes}
1449
1450 The encodings of the constants used in the 
1451 \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality} attribute are given in 
1452 Table \refersec{tab:virtualityencodings}.
1453
1454 \begin{centering}
1455 \setlength{\extrarowheight}{0.1cm}
1456 \begin{longtable}{l|c}
1457   \caption{Virtuality encodings} \label{tab:virtualityencodings}\\
1458   \hline \\ \bfseries Virtuality code name&\bfseries Value \\ \hline
1459 \endfirsthead
1460   \bfseries Virtuality code name&\bfseries Value\\ \hline
1461 \endhead
1462   \hline \emph{Continued on next page}
1463 \endfoot
1464   \hline
1465 \endlastfoot
1466
1467 \livelink{chap:DWVIRTUALITYnone}{DW\-\_VIRTUALITY\-\_none}&0x00 \\
1468 \livelink{chap:DWVIRTUALITYvirtual}{DW\-\_VIRTUALITY\-\_virtual}&0x01 \\
1469 \livelink{chap:DWVIRTUALITYpurevirtual}{DW\-\_VIRTUALITY\-\_pure\-\_virtual}&0x02 \\
1470
1471
1472
1473 \end{longtable}
1474 \end{centering}
1475
1476 The value 
1477 \livelink{chap:DWVIRTUALITYnone}{DW\-\_VIRTUALITY\-\_none} is equivalent to the absence of the 
1478 \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality}
1479 attribute.
1480
1481 \section{Source Languages}
1482 \label{datarep:sourcelanguages}
1483
1484 The encodings of the constants used in the \livelink{chap:DWATlanguage}{DW\-\_AT\-\_language}
1485 attribute are given in 
1486 Table \refersec{tab:languageencodings}.
1487 Names marked with
1488 % If we don't force a following space it looks odd
1489 \dag \  
1490 and their associated values are reserved, but the
1491 languages they represent are not well supported. 
1492 Table \refersec{tab:languageencodings}
1493 also shows the default lower bound, if any, assumed for
1494 an omitted \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound} attribute in the context of a
1495 \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type} debugging information entry for each
1496 defined language.
1497
1498 \begin{centering}
1499 \setlength{\extrarowheight}{0.1cm}
1500 \begin{longtable}{l|c|c}
1501   \caption{Language encodings} \label{tab:languageencodings}\\
1502   \hline \\ \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound \\ \hline
1503 \endfirsthead
1504   \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound\\ \hline
1505 \endhead
1506   \hline \emph{Continued on next page}
1507 \endfoot
1508   \hline
1509 \endlastfoot
1510
1511 \livelink{chap:DWLANGC89}{DW\-\_LANG\-\_C89}&0x0001&0       \\
1512 \livelink{chap:DWLANGC}{DW\-\_LANG\-\_C}&0x0002&0       \\
1513 \livelink{chap:DWLANGAda83}{DW\-\_LANG\-\_Ada83} \dag &0x0003&1       \\
1514 \livelink{chap:DWLANGCplusplus}{DW\-\_LANG\-\_C\-\_plus\-\_plus} &0x0004&0       \\
1515 \livelink{chap:DWLANGCobol74}{DW\-\_LANG\-\_Cobol74} \dag &0x0005&1       \\
1516 \livelink{chap:DWLANGCobol85}{DW\-\_LANG\-\_Cobol85} \dag &0x0006&1       \\
1517 \livelink{chap:DWLANGFortran77}{DW\-\_LANG\-\_Fortran77}&0x0007&1       \\
1518 \livelink{chap:DWLANGFortran90}{DW\-\_LANG\-\_Fortran90}&0x0008&1       \\
1519 \livelink{chap:DWLANGPascal83}{DW\-\_LANG\-\_Pascal83}&0x0009&1       \\
1520 \livelink{chap:DWLANGModula2}{DW\-\_LANG\-\_Modula2}&0x000a&1       \\
1521 \livelink{chap:DWLANGJava}{DW\-\_LANG\-\_Java}&0x000b&0       \\
1522 \livelink{chap:DWLANGC99}{DW\-\_LANG\-\_C99}&0x000c&0       \\
1523 \livelink{chap:DWLANGAda95}{DW\-\_LANG\-\_Ada95} \dag &0x000d&1       \\
1524 \livelink{chap:DWLANGFortran95}{DW\-\_LANG\-\_Fortran95} &0x000e&1       \\
1525 \livelink{chap:DWLANGPLI}{DW\-\_LANG\-\_PLI} \dag &0x000f&1 \\
1526 \livelink{chap:DWLANGObjC}{DW\-\_LANG\-\_ObjC}&0x0010&0 \\
1527 \livelink{chap:DWLANGObjCplusplus}{DW\-\_LANG\-\_ObjC\-\_plus\-\_plus}&0x0011&0 \\
1528 \livelink{chap:DWLANGUPC}{DW\-\_LANG\-\_UPC}&0x0012&0 \\
1529 \livelink{chap:DWLANGD}{DW\-\_LANG\-\_D}&0x0013&0 \\
1530 \livelink{chap:DWLANGPython}{DW\-\_LANG\-\_Python} \dag &0x0014&0 \\
1531 \livetarg{chap:DWLANGlouser}{DW\-\_LANG\-\_lo\-\_user}&0x8000 & \\
1532 \livetarg{chap:DWLANGhiuser}{DW\-\_LANG\-\_hi\-\_user}&0xffff & \\
1533
1534 \end{longtable}
1535 \dag See text
1536 \end{centering}
1537
1538 \section{Address Class Encodings}
1539 \label{datarep:addressclassencodings}
1540
1541 The value of the common 
1542 \addtoindexi{address}{address class!attribute encoding}
1543 class encoding 
1544 \livelink{chap:DWADDRnone}{DW\-\_ADDR\-\_none} is 0.
1545
1546
1547 \section{Identifier Case}
1548 \label{datarep:identifiercase}
1549
1550 The encodings of the constants used in the 
1551 \livelink{chap:DWATidentifiercase}{DW\-\_AT\-\_identifier\-\_case} attribute are given in 
1552 Table \refersec{tab:identifiercaseencodings}.
1553
1554 \begin{centering}
1555 \setlength{\extrarowheight}{0.1cm}
1556 \begin{longtable}{l|c}
1557   \caption{Identifier case encodings} \label{tab:identifiercaseencodings}\\
1558   \hline \\ \bfseries Identifier case name&\bfseries Value \\ \hline
1559 \endfirsthead
1560   \bfseries Identifier case name&\bfseries Value\\ \hline
1561 \endhead
1562   \hline \emph{Continued on next page}
1563 \endfoot
1564   \hline
1565 \endlastfoot
1566 \livelink{chap:DWIDcasesensitive}{DW\-\_ID\-\_case\-\_sensitive}&0x00     \\
1567 \livelink{chap:DWIDupcase}{DW\-\_ID\-\_up\-\_case}&0x01     \\
1568 \livelink{chap:DWIDdowncase}{DW\-\_ID\-\_down\-\_case}&0x02     \\
1569 \livelink{chap:DWIDcaseinsensitive}{DW\-\_ID\-\_case\-\_insensitive}&0x03     \\
1570 \end{longtable}
1571 \end{centering}
1572
1573 \section{Calling Convention Encodings}
1574 \label{datarep:callingconventionencodings}
1575 The encodings of the constants used in the 
1576 \livelink{chap:DWATcallingconvention}{DW\-\_AT\-\_calling\-\_convention} attribute are given in
1577 Table \refersec{tab:callingconventionencodings}.
1578
1579 \begin{centering}
1580 \setlength{\extrarowheight}{0.1cm}
1581 \begin{longtable}{l|c}
1582   \caption{Calling convention encodings} \label{tab:callingconventionencodings}\\
1583   \hline \\ \bfseries Calling Convention name&\bfseries Value \\ \hline
1584 \endfirsthead
1585   \bfseries Calling Convention name&\bfseries Value\\ \hline
1586 \endhead
1587   \hline \emph{Continued on next page}
1588 \endfoot
1589   \hline
1590 \endlastfoot
1591
1592 \livelink{chap:DWCCnormal}{DW\-\_CC\-\_normal}&0x01     \\
1593 \livelink{chap:DWCCprogram}{DW\-\_CC\-\_program}&0x02     \\
1594 \livelink{chap:DWCCnocall}{DW\-\_CC\-\_nocall}&0x03     \\
1595 \livetarg{chap:DWCClouser}{DW\-\_CC\-\_lo\-\_user}&0x40     \\
1596 \livetarg{chap:DWCChiuser}{DW\-\_CC\-\_hi\-\_user}&0xff     \\
1597
1598 \end{longtable}
1599 \end{centering}
1600
1601 \section{Inline Codes}
1602 \label{datarep:inlinecodes}
1603
1604 The encodings of the constants used in the 
1605 \livelink{chap:DWATinline}{DW\-\_AT\-\_inline} attribute are given in 
1606 Table \refersec{tab:inlineencodings}.
1607
1608 \begin{centering}
1609 \setlength{\extrarowheight}{0.1cm}
1610 \begin{longtable}{l|c}
1611   \caption{Inline encodings} \label{tab:inlineencodings}\\
1612   \hline \\ \bfseries Iline Code name&\bfseries Value \\ \hline
1613 \endfirsthead
1614   \bfseries Iline Code name&\bfseries Value\\ \hline
1615 \endhead
1616   \hline \emph{Continued on next page}
1617 \endfoot
1618   \hline
1619 \endlastfoot
1620
1621 \livelink{chap:DWINLnotinlined}{DW\-\_INL\-\_not\-\_inlined}&0x00      \\
1622 \livelink{chap:DWINLinlined}{DW\-\_INL\-\_inlined}&0x01      \\
1623 \livelink{chap:DWINLdeclarednotinlined}{DW\-\_INL\-\_declared\-\_not\-\_inlined}&0x02      \\
1624 \livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined}&0x03      \\
1625
1626 \end{longtable}
1627 \end{centering}
1628
1629 % this clearpage is ugly, but the following table came
1630 % out oddly without it.
1631 \clearpage
1632 \section{Array Ordering}
1633 \label{datarep:arrayordering}
1634
1635 The encodings of the constants used in the 
1636 \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering} attribute are given in 
1637 Table \refersec{tab:orderingencodings}.
1638
1639 \begin{centering}
1640 \setlength{\extrarowheight}{0.1cm}
1641 \begin{longtable}{l|c}
1642   \caption{Ordering encodings} \label{tab:orderingencodings}\\
1643   \hline \\ \bfseries Ordering name&\bfseries Value \\ \hline
1644 \endfirsthead
1645   \bfseries Ordering name&\bfseries Value\\ \hline
1646 \endhead
1647   \hline \emph{Continued on next page}
1648 \endfoot
1649   \hline
1650 \endlastfoot
1651
1652 \livelink{chap:DWORDrowmajor}{DW\-\_ORD\-\_row\-\_major}&0x00  \\
1653 \livelink{chap:DWORDcolmajor}{DW\-\_ORD\-\_col\-\_major}&0x01  \\
1654
1655 \end{longtable}
1656 \end{centering}
1657
1658
1659 \section{Discriminant Lists}
1660 \label{datarep:discriminantlists}
1661
1662 The descriptors used in the 
1663 \livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list} attribute are 
1664 encoded as 1\dash byte constants. The
1665 defined values are given in 
1666 Table \refersec{tab:discriminantdescriptorencodings}.
1667
1668 % Odd that the 'Name' field captalized here, it is not caps elsewhere.
1669 \begin{centering}
1670 \setlength{\extrarowheight}{0.1cm}
1671 \begin{longtable}{l|c}
1672   \caption{Discriminant descriptor encodings} \label{tab:discriminantdescriptorencodings}\\
1673   \hline \\ \bfseries Descriptor Name&\bfseries Value \\ \hline
1674 \endfirsthead
1675   \bfseries Descriptor Name&\bfseries Value\\ \hline
1676 \endhead
1677   \hline \emph{Continued on next page}
1678 \endfoot
1679   \hline
1680 \endlastfoot
1681
1682 \livetarg{chap:DWDSClabel}{DW\-\_DSC\-\_label}&0x00 \\
1683 \livetarg{chap:DWDSCrange}{DW\-\_DSC\-\_range}&0x01 \\
1684
1685 \end{longtable}
1686 \end{centering}
1687
1688 \section{Name Lookup Tables}
1689 \label{datarep:namelookuptables}
1690
1691 Each set of entries in the table of global names contained
1692 in the \addtoindex{.debug\_pubnames} and 
1693 \addtoindex{.debug\_pubtypes} sections begins
1694 with a header consisting of:
1695
1696
1697 \begin{enumerate}[1.]
1698 \item unit\_length (initial length) \\
1699 A 4\dash byte or 12\dash byte unsigned integer representing the length
1700 of the \addtoindex{.debug\_info}
1701 contribution for that compilation unit,
1702 not including the length field itself. In the 32\dash bit DWARF
1703 format, this is a 4\dash byte unsigned integer (which must be less
1704 than 0xfffffff0); in the 64\dash bit DWARF format, this consists
1705 of the 4\dash byte value 0xffffffff followed by an 8\dash byte unsigned
1706 integer that gives the actual length
1707 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1708
1709 \item  version (uhalf)
1710 A 2\dash byte unsigned integer representing the version of the
1711 DWARF information for the compilation unit
1712 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
1713 The value in this field is 4.
1714
1715 % Some say unsigned offset this just says offset: FIXME
1716 \item debug\_info\_offset (section offset) \\
1717 A 4\dash byte or 8\dash byte offset into the 
1718 \addtoindex{.debug\_info}
1719 section of the compilation unit header.
1720 In
1721 the 32\dash bit DWARF format, this is a 4\dash byte unsigned offset;
1722 in the 64\dash bit DWARF format, this is an 8\dash byte unsigned offsets
1723 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1724
1725 \item  debug\_info\_length (section length) \\
1726 A 4\dash byte or 8\dash byte length containing the size in bytes of the
1727 contents of the \addtoindex{.debug\_info}
1728 section generated to represent
1729 this compilation unit. In the 32\dash bit DWARF format, this is
1730 a 4\dash byte unsigned length; in the 64\dash bit DWARF format, this
1731 is an 8-byte unsigned length 
1732 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1733
1734
1735 \end{enumerate}
1736
1737 This header is followed by a series of tuples. Each tuple
1738 consists of a 4\dash byte or 8\dash byte offset followed by a string
1739 of non\dash null bytes terminated by one null byte. 
1740 In the 32\dash bit
1741 DWARF format, this is a 4\dash byte offset; in the 64\dash bit DWARF
1742 format, it is an 8\dash byte offset. 
1743 Each set is terminated by an
1744 offset containing the value 0.
1745
1746
1747 \section{Address Range Table}
1748 \label{datarep:addrssrangetable}
1749
1750 Each set of entries in the table of address ranges contained
1751 in the \addtoindex{.debug\_aranges}
1752 section begins with a header containing:
1753
1754 \begin{enumerate}[1.]
1755 % FIXME The unit length text is not fully consistent across
1756 % these tables.
1757
1758 \item unit\_length (initial length) \\
1759 A 4-byte or 12-byte length containing the length of the
1760 set of entries for this compilation unit, not including the
1761 length field itself. In the 32-bit DWARF format, this is a
1762 4-byte unsigned integer (which must be less than 0xfffffff0);
1763 in the 64-bit DWARF format, this consists of the 4-byte value
1764 0xffffffff followed by an 8-byte unsigned integer that gives
1765 the actual length 
1766 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1767
1768 \item version (uhalf) \\
1769 A 2\dash byte version identifier containing the value 2 
1770 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1771
1772 \item debug\_info\_offset (section offset) \\
1773 A 4\dash byte or 8\dash byte offset into the 
1774 \addtoindex{.debug\_info} section of
1775 the compilation unit header. In the 32\dash bit DWARF format,
1776 this is a 4\dash byte unsigned offset; in the 64\dash bit DWARF format,
1777 this is an 8\dash byte unsigned offset 
1778 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1779
1780 \item address\_size (ubyte) \\
1781 A 1\dash byte unsigned integer containing the size in bytes of an
1782 \addtoindexx{address\_size}
1783 address (or the offset portion of an address for segmented
1784 \addtoindexx{address space!segmented}
1785 addressing) on the target system.
1786
1787 \item segment\_size (ubyte) \\
1788 A 1\dash byte unsigned integer containing the size in bytes of a
1789 segment selector on the target system.
1790
1791 \end{enumerate}
1792
1793 This header is followed by a series of tuples. Each tuple
1794 consists of a segment, an address and a length. 
1795 The segment
1796 size is given by the segment\_size field of the header; the
1797 address and length size are each given by the address\_size
1798 field of the header. 
1799 The first tuple following the header in
1800 each set begins at an offset that is a multiple of the size
1801 of a single tuple (that is, the size of a segment selector
1802 plus twice the size of an address). 
1803 The header is padded, if
1804 necessary, to that boundary. Each set of tuples is terminated
1805 by a 0 for the segment, a 0 for the address and 0 for the
1806 length. If the segment\_size field in the header is zero,
1807 the segment selectors are omitted from all tuples, including
1808 the terminating tuple.
1809
1810
1811 \section{Line Number Information}
1812 \label{datarep:linenumberinformation}
1813
1814 The version number in the line number program header is 4
1815 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1816
1817 The boolean values ``true'' and ``false'' 
1818 used by the line number information program are encoded
1819 as a single byte containing the value 0 
1820 for ``false,'' and a non-zero value for ``true.''
1821
1822 The encodings for the standard opcodes are given in 
1823 Table \refersec{tab:linenumberstandardopcodeencodings}.
1824
1825 % Odd that the 'Name' field captalized here, it is not caps elsewhere.
1826 \begin{centering}
1827 \setlength{\extrarowheight}{0.1cm}
1828 \begin{longtable}{l|c}
1829   \caption{Line Number Standard Opcode encodings} \label{tab:linenumberstandardopcodeencodings}\\
1830   \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
1831 \endfirsthead
1832   \bfseries Opcode Name&\bfseries Value\\ \hline
1833 \endhead
1834   \hline \emph{Continued on next page}
1835 \endfoot
1836   \hline
1837 \endlastfoot
1838
1839 \livelink{chap:DWLNScopy}{DW\-\_LNS\-\_copy}&0x01 \\
1840 \livelink{chap:DWLNSadvancepc}{DW\-\_LNS\-\_advance\-\_pc}&0x02 \\
1841 \livelink{chap:DWLNSadvanceline}{DW\-\_LNS\-\_advance\-\_line}&0x03 \\
1842 \livelink{chap:DWLNSsetfile}{DW\-\_LNS\-\_set\-\_file}&0x04 \\
1843 \livelink{chap:DWLNSsetcolumn}{DW\-\_LNS\-\_set\-\_column}&0x05 \\
1844 \livelink{chap:DWLNSnegatestmt}{DW\-\_LNS\-\_negate\-\_stmt}&0x06 \\
1845 \livelink{chap:DWLNSsetbasicblock}{DW\-\_LNS\-\_set\-\_basic\-\_block}&0x07 \\
1846 \livelink{chap:DWLNSconstaddpc}{DW\-\_LNS\-\_const\-\_add\-\_pc}*0x08 \\
1847 \livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x09 \\
1848 \livelink{chap:DWLNSsetprologueend}{DW\-\_LNS\-\_set\-\_prologue\-\_end}&0x0a \\
1849 \livelink{chap:DWLNSsetepiloguebegin}{DW\-\_LNS\-\_set\-\_epilogue\-\_begin}&0x0b \\
1850 \livelink{chap:DWLNSsetisa}{DW\-\_LNS\-\_set\-\_isa}&0x0c \\
1851
1852 \end{longtable}
1853 \end{centering}
1854
1855
1856 The encodings for the extended opcodes are given in 
1857 Table \refersec{tab:linenumberextendedopcodeencodings}.
1858
1859 \begin{centering}
1860 \setlength{\extrarowheight}{0.1cm}
1861 \begin{longtable}{l|c}
1862   \caption{Line Number Extended Opcode encodings} \label{tab:linenumberextendedopcodeencodings}\\
1863   \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
1864 \endfirsthead
1865   \bfseries Opcode Name&\bfseries Value\\ \hline
1866 \endhead
1867   \hline \emph{Continued on next page}
1868 \endfoot
1869   \hline
1870 \endlastfoot
1871
1872 \livelink{chap:DWLNEendsequence}{DW\-\_LNE\-\_end\-\_sequence}&0x01    \\
1873 \livelink{chap:DWLNEsetaddress}{DW\-\_LNE\-\_set\-\_address}&0x02\\
1874 \livelink{chap:DWLNEdefinefile}{DW\-\_LNE\-\_define\-\_file}&0x03\\
1875 \livelink{chap:DWLNEsetdiscriminator}{DW\-\_LNE\-\_set\-\_discriminator} \ddag &0x04   \\
1876 \livetarg{chap:DWLNElouser}{DW\-\_LNE\-\_lo\-\_user}&0x80   \\
1877 \livetarg{chap:DWLNEhiuser}{DW\-\_LNE\-\_hi\-\_user}&0xff   \\
1878
1879 \end{longtable}
1880 \ddag Extended opcode new in DWARF Version 4.
1881 \end{centering}
1882
1883 \section{Macro Information}
1884 \label{datarep:macroinformation}
1885
1886 The source line numbers and source file indices encoded in the
1887 macro information section are represented as unsigned LEB128
1888 numbers as are the constants in a \livelink{chap:DWMACINFOvendorext}{DW\-\_MACINFO\-\_vendor\-\_ext} entry.
1889
1890 The macinfo type is encoded as a single byte. 
1891 The encodings are given in 
1892 Table \refersec{tab:macinfotypeencodings}.
1893
1894
1895 \begin{centering}
1896 \setlength{\extrarowheight}{0.1cm}
1897 \begin{longtable}{l|c}
1898   \caption{Macinfo Type Encodings} \label{tab:macinfotypeencodings}\\
1899   \hline \\ \bfseries Macinfo Type Name&\bfseries Value \\ \hline
1900 \endfirsthead
1901   \bfseries Macinfo Type Name&\bfseries Value\\ \hline
1902 \endhead
1903   \hline \emph{Continued on next page}
1904 \endfoot
1905   \hline
1906 \endlastfoot
1907
1908 \livelink{chap:DWMACINFOdefine}{DW\-\_MACINFO\-\_define}&0x01 \\
1909 \livelink{chap:DWMACINFOundef}{DW\-\_MACINFO\-\_undef}&0x02 \\
1910 \livelink{chap:DWMACINFOstartfile}{DW\-\_MACINFO\-\_start\-\_file}&0x03 \\
1911 \livelink{chap:DWMACINFOendfile}{DW\-\_MACINFO\-\_end\-\_file}&0x04 \\
1912 \livelink{chap:DWMACINFOvendorext}{DW\-\_MACINFO\-\_vendor\-\_ext}&0xff \\
1913
1914 \end{longtable}
1915 \end{centering}
1916
1917 \section{Call Frame Information}
1918 \label{datarep:callframeinformation}
1919
1920 In the 32\dash bit DWARF format, the value of the CIE id in the
1921 CIE header is 0xffffffff; in the 64\dash bit DWARF format, the
1922 value is 0xffffffffffffffff.
1923
1924 The value of the CIE version number is 4 
1925 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1926
1927 Call frame instructions are encoded in one or more bytes. The
1928 primary opcode is encoded in the high order two bits of
1929 the first byte (that is, opcode = byte >> 6). An operand
1930 or extended opcode may be encoded in the low order 6
1931 bits. Additional operands are encoded in subsequent bytes.
1932 The instructions and their encodings are presented in
1933 Table \refersec{tab:callframeinstructionencodings}.
1934
1935 \begin{centering}
1936 \setlength{\extrarowheight}{0.1cm}
1937 \begin{longtable}{l|c|c|l|l}
1938   \caption{Call frame instruction encodings} \label{tab:callframeinstructionencodings} \\
1939   \hline \\ &\bfseries High 2 &\bfseries Low 6 &  & \\
1940   \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
1941 \endfirsthead
1942    & \bfseries High 2 &\bfseries Low 6 &  &\\
1943   \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
1944 \endhead
1945   \hline \emph{Continued on next page}
1946 \endfoot
1947   \hline
1948 \endlastfoot
1949
1950 \livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}&0x1&delta & \\
1951 \livelink{chap:DWCFAoffset}{DW\-\_CFA\-\_offset}&0x2&register&ULEB128 offset \\
1952 \livelink{chap:DWCFArestore}{DW\-\_CFA\-\_restore}&0x3&register & & \\
1953 \livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&0&0 & & \\
1954 \livelink{chap:DWCFAsetloc}{DW\-\_CFA\-\_set\-\_loc}&0&0x01&address & \\
1955 \livelink{chap:DWCFAadvanceloc1}{DW\-\_CFA\-\_advance\-\_loc1}&0&0x02&1\dash byte delta & \\
1956 \livelink{chap:DWCFAadvanceloc2}{DW\-\_CFA\-\_advance\-\_loc2}&0&0x03&2\dash byte delta & \\
1957 \livelink{chap:DWCFAadvanceloc4}{DW\-\_CFA\-\_advance\-\_loc4}&0&0x04&4\dash byte delta & \\
1958 \livelink{chap:DWCFAoffsetextended}{DW\-\_CFA\-\_offset\-\_extended}&0&0x05&ULEB128 register&ULEB128 offset \\
1959 \livelink{chap:DWCFArestoreextended}{DW\-\_CFA\-\_restore\-\_extended}&0&0x06&ULEB128 register & \\
1960 \livelink{chap:DWCFAundefined}{DW\-\_CFA\-\_undefined}&0&0x07&ULEB128 register & \\
1961 \livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value}&0&0x08 &ULEB128 register & \\
1962 \livelink{chap:DWCFAregister}{DW\-\_CFA\-\_register}&0&0x09&ULEB128 register &ULEB128 offset \\
1963 \livelink{chap:DWCFArememberstate}{DW\-\_CFA\-\_remember\-\_state}&0&0x0a & & \\
1964 \livelink{chap:DWCFArestorestate}{DW\-\_CFA\-\_restore\-\_state}&0&0x0b & & \\
1965 \livelink{chap:DWCFAdefcfa}{DW\-\_CFA\-\_def\-\_cfa}&0&0x0c &ULEB128 register&ULEB128 offset \\
1966 \livelink{chap:DWCFAdefcfaregister}{DW\-\_CFA\-\_def\-\_cfa\-\_register}&0&0x0d&ULEB128 register & \\
1967 \livelink{chap:DWCFAdefcfaoffset}{DW\-\_CFA\-\_def\-\_cfa\-\_offset}&0&0x0e &ULEB128 offset & \\
1968 \livelink{chap:DWCFAdefcfaexpression}{DW\-\_CFA\-\_def\-\_cfa\-\_expression}&0&0x0f &BLOCK  \\
1969 \livelink{chap:DWCFAexpression}{DW\-\_CFA\-\_expression}&0&0x10&ULEB128 register & BLOCK \\
1970
1971 \livelink{chap:DWCFAoffsetextendedsf}{DW\-\_CFA\-\_offset\-\_extended\-\_sf}&0&0x11&ULEB128 register&SLEB128 offset \\
1972 \livelink{chap:DWCFAdefcfasf}{DW\-\_CFA\-\_def\-\_cfa\-\_sf}&0&0x12&ULEB128 register&SLEB128 offset \\
1973 \livelink{chap:DWCFAdefcfaoffsetsf}{DW\-\_CFA\-\_def\-\_cfa\-\_offset\-\_sf}&0&0x13&SLEB128 offset & \\
1974 \livelink{chap:DWCFAvaloffset}{DW\-\_CFA\-\_val\-\_offset}&0&0x14&ULEB128&ULEB128 \\
1975 \livelink{chap:DWCFAvaloffsetsf}{DW\-\_CFA\-\_val\-\_offset\-\_sf}&0&0x15&ULEB128&SLEB128 \\
1976 \livelink{chap:DWCFAvalexpression}{DW\-\_CFA\-\_val\-\_expression}&0&0x16&ULEB128&BLOCK  \\
1977 \livetarg{chap:DWCFAlouser}{DW\-\_CFA\-\_lo\-\_user}&0&0x1c   & & \\
1978 \livetarg{chap:DWCFAhiuser}{DW\-\_CFA\-\_hi\-\_user}&0&0x3f & & \\
1979 \end{longtable}
1980 \end{centering}
1981
1982 \section{Non-continguous Address Ranges}
1983 \label{datarep:noncontiguousaddressranges}
1984
1985 Each entry in a range list 
1986 (see Section \refersec{chap:noncontiguousaddressranges})
1987 is either a
1988 range list entry, a base address selection entry, or an end
1989 of list entry.
1990
1991 A range list entry consists of two relative addresses. The
1992 addresses are the same size as addresses on the target machine.
1993
1994 A base address selection entry and an end of list entry each
1995 consist of two (constant or relocated) addresses. The two
1996 addresses are the same size as addresses on the target machine.
1997
1998 For a range list to be specified, the base address of the
1999 corresponding compilation unit must be defined 
2000 (see Section \refersec{chap:normalandpartialcompilationunitentries}).
2001
2002
2003 \section{Dependencies and Constraints}
2004 \label{datarep:dependenciesandconstraints}
2005
2006 The debugging information in this format is intended to
2007 exist in 
2008 the \addtoindex{.debug\_abbrev}, 
2009 \addtoindex{.debug\_aranges}, 
2010 \addtoindex{.debug\_frame},
2011 \addtoindex{.debug\_info}, 
2012 \addtoindex{.debug\_line}, 
2013 \addtoindex{.debug\_loc}, 
2014 \addtoindex{.debug\_macinfo},
2015 \addtoindex{.debug\_pubnames}, 
2016 \addtoindex{.debug\_pubtypes}, 
2017 \addtoindex{.debug\_ranges}, 
2018 \addtoindex{.debug\_str}
2019 and 
2020 \addtoindex{.debug\_types}
2021 sections of an object file, or equivalent
2022 separate file or database. The information is not 
2023 word\dash aligned. Consequently: •
2024
2025 \begin{itemize}
2026 \item For the 32\dash bit DWARF format and a target architecture with
2027 32\dash bit addresses, an assembler or compiler must provide a way
2028 to produce 2\dash byte and 4\dash byte quantities without alignment
2029 restrictions, and the linker must be able to relocate a
2030 4\dash byte address or section offset that occurs at an arbitrary
2031 alignment.
2032
2033 \item For the 32\dash bit DWARF format and a target architecture with
2034 64\dash bit addresses, an assembler or compiler must provide a
2035 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2036 alignment restrictions, and the linker must be able to relocate
2037 an 8\dash byte address or 4\dash byte section offset that occurs at an
2038 arbitrary alignment.
2039
2040 \item For the 64\dash bit DWARF format and a target architecture with
2041 32\dash bit addresses, an assembler or compiler must provide a
2042 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2043 alignment restrictions, and the linker must be able to relocate
2044 a 4\dash byte address or 8\dash byte section offset that occurs at an
2045 arbitrary alignment.
2046
2047 \textit{It is expected that this will be required only for very large
2048 32\dash bit programs or by those architectures which support
2049 a mix of 32\dash bit and 64\dash bit code and data within the same
2050 executable object.}
2051
2052 \item For the 64\dash bit DWARF format and a target architecture with
2053 64\dash bit addresses, an assembler or compiler must provide a
2054 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2055 alignment restrictions, and the linker must be able to
2056 relocate an 8\dash byte address or section offset that occurs at
2057 an arbitrary alignment.
2058 \end{itemize}
2059
2060 \section{Integer Representation Names}
2061 \label{datarep:integerrepresentationnames}
2062
2063 The sizes of the integers used in the lookup by name, lookup
2064 by address, line number and call frame information sections
2065 are given in
2066 Table 41 \refersec{tab:integerrepresentationnames}.
2067
2068 \begin{centering}
2069 \setlength{\extrarowheight}{0.1cm}
2070 \begin{longtable}{c|l}
2071   \caption{Integer Representation Names} \label{tab:integerrepresentationnames}\\
2072   \hline \\ \bfseries Representation Name&\bfseries Representation \\ \hline
2073 \endfirsthead
2074   \bfseries Representation Name&\bfseries Representation\\ \hline
2075 \endhead
2076   \hline \emph{Continued on next page}
2077 \endfoot
2078   \hline
2079 \endlastfoot
2080
2081 sbyte&  signed, 1\dash byte integer \\
2082 ubyte&unsigned, 1\dash byte integer \\
2083 uhalf&unsigned, 2\dash byte integer \\
2084 uword&unsigned, 4\dash byte integer \\
2085
2086 \end{longtable}
2087 \end{centering}
2088
2089 \section{Type Signature Computation}
2090 \label{datarep:typesignaturecomputation}
2091
2092 A type signature is computed only by the DWARF producer;
2093 it is used by a DWARF consumer to resolve type references to
2094 the type definitions that are contained in type units.
2095
2096 The type signature for a type T0 is formed from the MD5
2097 hash of a flattened description of the type. The flattened
2098 description of the type is a byte sequence derived from the
2099 DWARF encoding of the type as follows:
2100
2101 \begin{enumerate}[1.]
2102
2103 \item Start with an empty sequence S and a list V of visited
2104 types, where V is initialized to a list containing the type
2105 T0 as its single element. Elements in V are indexed from 1,
2106 so that V[1] is T0.
2107
2108 \item If the debugging information entry represents a type that
2109 is nested inside another type or a namespace, append to S
2110 the type’s context as follows: For each surrounding type
2111 or namespace, beginning with the outermost such construct,
2112 append the letter 'C', the DWARF tag of the construct, and
2113 the name (taken from the \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute) of the type
2114 or namespace (including its trailing null byte).
2115
2116 \item  Append to S the letter 'D', followed by the DWARF tag of
2117 the debugging information entry.
2118
2119 \item For each of the following attributes that are present in
2120 the debugging information entry, in the order listed below,
2121 append to S a marker letter (see below), the DWARF attribute
2122 code, and the attribute value.
2123
2124 \begin{itemize}
2125 \item \livelink{chap:DWATname}{DW\-\_AT\-\_name}
2126 \item \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility}
2127 \item \livelink{chap:DWATaddressclass}{DW\-\_AT\-\_address\-\_class}
2128 \item \livelink{chap:DWATallocated}{DW\-\_AT\-\_allocated}
2129 \item \livelink{chap:DWATartificial}{DW\-\_AT\-\_artificial}
2130 \item \livelink{chap:DWATassociated}{DW\-\_AT\-\_associated}
2131 \item \livelink{chap:DWATbinaryscale}{DW\-\_AT\-\_binary\-\_scale}
2132 \item \livelink{chap:DWATbitoffset}{DW\-\_AT\-\_bit\-\_offset}
2133 \item \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}
2134 \item \livelink{chap:DWATbitstride}{DW\-\_AT\-\_bit\-\_stride}
2135 \item \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}
2136 \item \livelink{chap:DWATbytestride}{DW\-\_AT\-\_byte\-\_stride}
2137 \item \livelink{chap:DWATconstexpr}{DW\-\_AT\-\_const\-\_expr}
2138 \item \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}
2139 \item \livelink{chap:DWATcontainingtype}{DW\-\_AT\-\_containing\-\_type}
2140 \item \livelink{chap:DWATcount}{DW\-\_AT\-\_count}
2141 \item \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}
2142 \item \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}
2143 \item \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}
2144 \item \livelink{chap:DWATdecimalscale}{DW\-\_AT\-\_decimal\-\_scale}
2145 \item \livelink{chap:DWATdecimalsign}{DW\-\_AT\-\_decimal\-\_sign}
2146 \item \livelink{chap:DWATdefaultvalue}{DW\-\_AT\-\_default\-\_value}
2147 \item \livelink{chap:DWATdigitcount}{DW\-\_AT\-\_digit\-\_count}
2148 \item \livelink{chap:DWATdiscr}{DW\-\_AT\-\_discr}
2149 \item \livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list}
2150 \item \livelink{chap:DWATdiscrvalue}{DW\-\_AT\-\_discr\-\_value}
2151 \item \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}
2152 \item \livelink{chap:DWATenumclass}{DW\-\_AT\-\_enum\-\_class}
2153 \item \livelink{chap:DWATendianity}{DW\-\_AT\-\_endianity}
2154 \item \livelink{chap:DWATexplicit}{DW\-\_AT\-\_explicit}
2155 \item \livelink{chap:DWATisoptional}{DW\-\_AT\-\_is\-\_optional}
2156 \item \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}
2157 \item \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}
2158 \item \livelink{chap:DWATmutable}{DW\-\_AT\-\_mutable}
2159 \item \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering}
2160 \item \livelink{chap:DWATpicturestring}{DW\-\_AT\-\_picture\-\_string}
2161 \item \livelink{chap:DWATprototyped}{DW\-\_AT\-\_prototyped}
2162 \item \livelink{chap:DWATsmall}{DW\-\_AT\-\_small}
2163 \item \livelink{chap:DWATsegment}{DW\-\_AT\-\_segment}
2164 \item \livelink{chap:DWATstringlength}{DW\-\_AT\-\_string\-\_length}
2165 \item \livelink{chap:DWATthreadsscaled}{DW\-\_AT\-\_threads\-\_scaled}
2166 \item \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}
2167 \item \livelink{chap:DWATuselocation}{DW\-\_AT\-\_use\-\_location}
2168 \item \livelink{chap:DWATuseUTF8}{DW\-\_AT\-\_use\-\_UTF8}
2169 \item \livelink{chap:DWATvariableparameter}{DW\-\_AT\-\_variable\-\_parameter}
2170 \item \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality}
2171 \item \livelink{chap:DWATvisibility}{DW\-\_AT\-\_visibility}
2172 \item \livelink{chap:DWATvtableelemlocation}{DW\-\_AT\-\_vtable\-\_elem\-\_location}
2173 \end{itemize}
2174
2175 Note that except for the initial \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute,
2176 attributes are appended in order according to the alphabetical
2177 spelling of their identifier.
2178
2179 If an implementation defines any vendor-specific attributes,
2180 any such attributes that are essential to the definition of
2181 the type should also be included at the end of the above list,
2182 in their own alphabetical suborder.
2183
2184 An attribute that refers to another type entry T is processed
2185 as follows: (a) If T is in the list V at some V[x], use the
2186 letter 'R' as the marker and use the unsigned LEB128 encoding
2187 of x as the attribute value; otherwise, (b) use the letter 'T'
2188 as the marker, process the type T recursively by performing
2189 Steps 2 through 7, and use the result as the attribute value.
2190
2191 Other attribute values use the letter 'A' as the marker, and
2192 the value consists of the form code (encoded as an unsigned
2193 LEB128 value) followed by the encoding of the value according
2194 to the form code. To ensure reproducibility of the signature,
2195 the set of forms used in the signature computation is limited
2196 to the following: \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata}, 
2197 \livelink{chap:DWFORMflag}{DW\-\_FORM\-\_flag}, 
2198 \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string},
2199 and \livelink{chap:DWFORMblock}{DW\-\_FORM\-\_block}.
2200
2201 \item If the tag in Step 3 is one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
2202 \livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type}, 
2203 \livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
2204 \livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}, 
2205 or \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, and the referenced
2206 type (via the \livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2207 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend} attribute) has a
2208 \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, append to S the letter 'N', the DWARF
2209 attribute code (\livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2210 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend}), the context of
2211 the type (according to the method in Step 2), the letter 'E',
2212 and the name of the type. For \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, if the referenced
2213 entry is a \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}, the context is omitted and the
2214 name to be used is the ABI-specific name of the subprogram
2215 (e.g., the mangled linker name).
2216
2217
2218 \item 6.If the tag in Step 3 is not one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
2219 \livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type}, 
2220 \livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
2221 \livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}, or 
2222 \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, but has
2223 a \livelink{chap:DWATtype}{DW\-\_AT\-\_type} attribute, or if the referenced type (via
2224 the \livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2225 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend} attribute) does not have a
2226 \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, the attribute is processed according to
2227 the method in Step 4 for an attribute that refers to another
2228 type entry.
2229
2230
2231 \item Visit each child C of the debugging information
2232 entry as follows: If C is a nested type entry or a member
2233 function entry, and has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, append to
2234 S the letter 'S', the tag of C, and its name; otherwise,
2235 process C recursively by performing Steps 3 through 7,
2236 appending the result to S. Following the last child (or if
2237 there are no children), append a zero byte.
2238 \end{enumerate}
2239
2240
2241
2242 For the purposes of this algorithm, if a debugging information
2243 entry S has a 
2244 \livelink{chap:DWATspecification}{DW\-\_AT\-\_specification} 
2245 attribute that refers to
2246 another entry D (which has a 
2247 \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration} 
2248 attribute),
2249 then S inherits the attributes and children of D, and S is
2250 processed as if those attributes and children were present in
2251 the entry S. Exception: if a particular attribute is found in
2252 both S and D, the attribute in S is used and the corresponding
2253 one in D is ignored.
2254
2255 DWARF tag and attribute codes are appended to the sequence
2256 as unsigned LEB128 values, using the values defined earlier
2257 in this chapter.
2258
2259 \textit{A grammar describing this computation may be found in
2260 Appendix \refersec{app:typesignaturecomputationgrammar}.
2261 }
2262
2263 \textit{An attribute that refers to another type entry should
2264 be recursively processed or replaced with the name of the
2265 referent (in Step 4, 5 or 6). If neither treatment applies to
2266 an attribute that references another type entry, the entry
2267 that contains that attribute should not be considered for a
2268 separate type unit.}
2269
2270 \textit{If a debugging information entry contains an attribute from
2271 the list above that would require an unsupported form, that
2272 entry should not be considered for a separate type unit.}
2273
2274 \textit{A type should be considered for a separate type unit only
2275 if all of the type entries that it contains or refers to in
2276 Steps 6 and 7 can themselves each be considered for a separate
2277 type unit.}
2278
2279 Where the DWARF producer may reasonably choose two or more
2280 different forms for a given attribute, it should choose
2281 the simplest possible form in computing the signature. (For
2282 example, a constant value should be preferred to a location
2283 expression when possible.)
2284
2285 Once the string S has been formed from the DWARF encoding,
2286 an MD5 hash is computed for the string and the lower 64 bits
2287 are taken as the type signature.
2288
2289 \textit{The string S is intended to be a flattened representation of
2290 the type that uniquely identifies that type (i.e., a different
2291 type is highly unlikely to produce the same string).}
2292
2293 \textit{A debugging information entry should not be placed in a
2294 separate type unit if any of the following apply:}
2295
2296 \begin{itemize}
2297
2298 \item \textit{The entry has an attribute whose value is a location
2299 expression, and the location expression contains a reference to
2300 another debugging information entry (e.g., a \livelink{chap:DWOPcallref}{DW\-\_OP\-\_call\-\_ref}
2301 operator), as it is unlikely that the entry will remain
2302 identical across compilation units.}
2303
2304 \item \textit{The entry has an attribute whose value refers
2305 to a code location or a location list.}
2306
2307 \item \textit{The entry has an attribute whose value refers
2308 to another debugging information entry that does not represent
2309 a type.}
2310 \end{itemize}
2311
2312
2313 \textit{Certain attributes are not included in the type signature:}
2314
2315 \begin{itemize}
2316 \item \textit{The \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration} attribute is not included because it
2317 indicates that the debugging information entry represents an
2318 incomplete declaration, and incomplete declarations should
2319 not be placed in separate type units.}
2320
2321 \item \textit{The \livelink{chap:DWATdescription}{DW\-\_AT\-\_description} attribute is not included because
2322 it does not provide any information unique to the defining
2323 declaration of the type.}
2324
2325 \item \textit{The \livelink{chap:DWATdeclfile}{DW\-\_AT\-\_decl\-\_file}, \livelink{chap:DWATdeclline}{DW\-\_AT\-\_decl\-\_line}, and
2326 \livelink{chap:DWATdeclcolumn}{DW\-\_AT\-\_decl\-\_column} attributes are not included because they
2327 may vary from one source file to the next, and would prevent
2328 two otherwise identical type declarations from producing the
2329 same hash.}
2330
2331 \end{itemize}