f139d885d577f14b47479f8cf8a1328925e85a5a
[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 
1397 \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility}
1398 attribute 
1399 \addtoindexx{accessibility attribute!encoding}
1400 are given in 
1401 Table \refersec{tab:accessibilityencodings}.
1402
1403 \begin{centering}
1404 \setlength{\extrarowheight}{0.1cm}
1405 \begin{longtable}{l|c}
1406   \caption{Accessibility encodings} \label{tab:accessibilityencodings}\\
1407   \hline \\ \bfseries Accessibility code name&\bfseries Value \\ \hline
1408 \endfirsthead
1409   \bfseries Accessibility code name&\bfseries Value\\ \hline
1410 \endhead
1411   \hline \emph{Continued on next page}
1412 \endfoot
1413   \hline
1414 \endlastfoot
1415
1416 \livelink{chap:DWACCESSpublic}{DW\-\_ACCESS\-\_public}&0x01  \\
1417 \livelink{chap:DWACCESSprotected}{DW\-\_ACCESS\-\_protected}&0x02 \\
1418 \livelink{chap:DWACCESSprivate}{DW\-\_ACCESS\-\_private}&0x03 \\
1419
1420 \end{longtable}
1421 \end{centering}
1422
1423
1424 \section{Visibility Codes}
1425 \label{datarep:visibilitycodes}
1426 The encodings of the constants used in the 
1427 \livelink{chap:DWATvisibility}{DW\-\_AT\-\_visibility} attribute are given in 
1428 Table \refersec{tab:visibilityencodings}. 
1429
1430 \begin{centering}
1431 \setlength{\extrarowheight}{0.1cm}
1432 \begin{longtable}{l|c}
1433   \caption{Visibility encodings} \label{tab:visibilityencodings}\\
1434   \hline \\ \bfseries Visiibility code name&\bfseries Value \\ \hline
1435 \endfirsthead
1436   \bfseries Visibility code name&\bfseries Value\\ \hline
1437 \endhead
1438   \hline \emph{Continued on next page}
1439 \endfoot
1440   \hline
1441 \endlastfoot
1442
1443 \livelink{chap:DWVISlocal}{DW\-\_VIS\-\_local}&0x01 \\
1444 \livelink{chap:DWVISexported}{DW\-\_VIS\-\_exported}&0x02 \\
1445 \livelink{chap:DWVISqualified}{DW\-\_VIS\-\_qualified}&0x03 \\
1446
1447 \end{longtable}
1448 \end{centering}
1449
1450 \section{Virtuality Codes}
1451 \label{datarep:vitualitycodes}
1452
1453 The encodings of the constants used in the 
1454 \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality} attribute are given in 
1455 Table \refersec{tab:virtualityencodings}.
1456
1457 \begin{centering}
1458 \setlength{\extrarowheight}{0.1cm}
1459 \begin{longtable}{l|c}
1460   \caption{Virtuality encodings} \label{tab:virtualityencodings}\\
1461   \hline \\ \bfseries Virtuality code name&\bfseries Value \\ \hline
1462 \endfirsthead
1463   \bfseries Virtuality code name&\bfseries Value\\ \hline
1464 \endhead
1465   \hline \emph{Continued on next page}
1466 \endfoot
1467   \hline
1468 \endlastfoot
1469
1470 \livelink{chap:DWVIRTUALITYnone}{DW\-\_VIRTUALITY\-\_none}&0x00 \\
1471 \livelink{chap:DWVIRTUALITYvirtual}{DW\-\_VIRTUALITY\-\_virtual}&0x01 \\
1472 \livelink{chap:DWVIRTUALITYpurevirtual}{DW\-\_VIRTUALITY\-\_pure\-\_virtual}&0x02 \\
1473
1474
1475
1476 \end{longtable}
1477 \end{centering}
1478
1479 The value 
1480 \livelink{chap:DWVIRTUALITYnone}{DW\-\_VIRTUALITY\-\_none} is equivalent to the absence of the 
1481 \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality}
1482 attribute.
1483
1484 \section{Source Languages}
1485 \label{datarep:sourcelanguages}
1486
1487 The encodings of the constants used in the \livelink{chap:DWATlanguage}{DW\-\_AT\-\_language}
1488 attribute are given in 
1489 Table \refersec{tab:languageencodings}.
1490 Names marked with
1491 % If we don't force a following space it looks odd
1492 \dag \  
1493 and their associated values are reserved, but the
1494 languages they represent are not well supported. 
1495 Table \refersec{tab:languageencodings}
1496 also shows the default lower bound, if any, assumed for
1497 an omitted \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound} attribute in the context of a
1498 \livelink{chap:DWTAGsubrangetype}{DW\-\_TAG\-\_subrange\-\_type} debugging information entry for each
1499 defined language.
1500
1501 \begin{centering}
1502 \setlength{\extrarowheight}{0.1cm}
1503 \begin{longtable}{l|c|c}
1504   \caption{Language encodings} \label{tab:languageencodings}\\
1505   \hline \\ \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound \\ \hline
1506 \endfirsthead
1507   \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound\\ \hline
1508 \endhead
1509   \hline \emph{Continued on next page}
1510 \endfoot
1511   \hline
1512 \endlastfoot
1513
1514 \livelink{chap:DWLANGC89}{DW\-\_LANG\-\_C89}&0x0001&0       \\
1515 \livelink{chap:DWLANGC}{DW\-\_LANG\-\_C}&0x0002&0  \\
1516 \livelink{chap:DWLANGAda83}{DW\-\_LANG\-\_Ada83} \dag &0x0003&1  \addtoindexx{Ada}     \\
1517 \livelink{chap:DWLANGCplusplus}{DW\-\_LANG\-\_C\-\_plus\-\_plus} &0x0004&0       \\
1518 \livelink{chap:DWLANGCobol74}{DW\-\_LANG\-\_Cobol74} \dag &0x0005&1       \\
1519 \livelink{chap:DWLANGCobol85}{DW\-\_LANG\-\_Cobol85} \dag &0x0006&1       \\
1520 \livelink{chap:DWLANGFortran77}{DW\-\_LANG\-\_Fortran77}&0x0007&1       \\
1521 \livelink{chap:DWLANGFortran90}{DW\-\_LANG\-\_Fortran90}&0x0008&1       \\
1522 \livelink{chap:DWLANGPascal83}{DW\-\_LANG\-\_Pascal83}&0x0009&1       \\
1523 \livelink{chap:DWLANGModula2}{DW\-\_LANG\-\_Modula2}&0x000a&1       \\
1524 \livelink{chap:DWLANGJava}{DW\-\_LANG\-\_Java}&0x000b&0       \\
1525 \livelink{chap:DWLANGC99}{DW\-\_LANG\-\_C99}&0x000c&0       \\
1526 \livelink{chap:DWLANGAda95}{DW\-\_LANG\-\_Ada95} \dag &0x000d&1 \addtoindexx{Ada}      \\
1527 \livelink{chap:DWLANGFortran95}{DW\-\_LANG\-\_Fortran95} &0x000e&1       \\
1528 \livelink{chap:DWLANGPLI}{DW\-\_LANG\-\_PLI} \dag &0x000f&1 \\
1529 \livelink{chap:DWLANGObjC}{DW\-\_LANG\-\_ObjC}&0x0010&0 \\
1530 \livelink{chap:DWLANGObjCplusplus}{DW\-\_LANG\-\_ObjC\-\_plus\-\_plus}&0x0011&0 \\
1531 \livelink{chap:DWLANGUPC}{DW\-\_LANG\-\_UPC}&0x0012&0 \\
1532 \livelink{chap:DWLANGD}{DW\-\_LANG\-\_D}&0x0013&0 \\
1533 \livelink{chap:DWLANGPython}{DW\-\_LANG\-\_Python} \dag &0x0014&0 \\
1534 \livetarg{chap:DWLANGlouser}{DW\-\_LANG\-\_lo\-\_user}&0x8000 & \\
1535 \livetarg{chap:DWLANGhiuser}{DW\-\_LANG\-\_hi\-\_user}&0xffff & \\
1536
1537 \end{longtable}
1538 \dag See text
1539 \end{centering}
1540
1541 \section{Address Class Encodings}
1542 \label{datarep:addressclassencodings}
1543
1544 The value of the common 
1545 \addtoindexi{address}{address class!attribute encoding}
1546 class encoding 
1547 \livelink{chap:DWADDRnone}{DW\-\_ADDR\-\_none} is 0.
1548
1549
1550 \section{Identifier Case}
1551 \label{datarep:identifiercase}
1552
1553 The encodings of the constants used in the 
1554 \livelink{chap:DWATidentifiercase}{DW\-\_AT\-\_identifier\-\_case} attribute are given in 
1555 Table \refersec{tab:identifiercaseencodings}.
1556
1557 \begin{centering}
1558 \setlength{\extrarowheight}{0.1cm}
1559 \begin{longtable}{l|c}
1560   \caption{Identifier case encodings} \label{tab:identifiercaseencodings}\\
1561   \hline \\ \bfseries Identifier case name&\bfseries Value \\ \hline
1562 \endfirsthead
1563   \bfseries Identifier case name&\bfseries Value\\ \hline
1564 \endhead
1565   \hline \emph{Continued on next page}
1566 \endfoot
1567   \hline
1568 \endlastfoot
1569 \livelink{chap:DWIDcasesensitive}{DW\-\_ID\-\_case\-\_sensitive}&0x00     \\
1570 \livelink{chap:DWIDupcase}{DW\-\_ID\-\_up\-\_case}&0x01     \\
1571 \livelink{chap:DWIDdowncase}{DW\-\_ID\-\_down\-\_case}&0x02     \\
1572 \livelink{chap:DWIDcaseinsensitive}{DW\-\_ID\-\_case\-\_insensitive}&0x03     \\
1573 \end{longtable}
1574 \end{centering}
1575
1576 \section{Calling Convention Encodings}
1577 \label{datarep:callingconventionencodings}
1578 The encodings of the constants used in the 
1579 \livelink{chap:DWATcallingconvention}{DW\-\_AT\-\_calling\-\_convention} attribute are given in
1580 Table \refersec{tab:callingconventionencodings}.
1581
1582 \begin{centering}
1583 \setlength{\extrarowheight}{0.1cm}
1584 \begin{longtable}{l|c}
1585   \caption{Calling convention encodings} \label{tab:callingconventionencodings}\\
1586   \hline \\ \bfseries Calling Convention name&\bfseries Value \\ \hline
1587 \endfirsthead
1588   \bfseries Calling Convention name&\bfseries Value\\ \hline
1589 \endhead
1590   \hline \emph{Continued on next page}
1591 \endfoot
1592   \hline
1593 \endlastfoot
1594
1595 \livelink{chap:DWCCnormal}{DW\-\_CC\-\_normal}&0x01     \\
1596 \livelink{chap:DWCCprogram}{DW\-\_CC\-\_program}&0x02     \\
1597 \livelink{chap:DWCCnocall}{DW\-\_CC\-\_nocall}&0x03     \\
1598 \livetarg{chap:DWCClouser}{DW\-\_CC\-\_lo\-\_user}&0x40     \\
1599 \livetarg{chap:DWCChiuser}{DW\-\_CC\-\_hi\-\_user}&0xff     \\
1600
1601 \end{longtable}
1602 \end{centering}
1603
1604 \section{Inline Codes}
1605 \label{datarep:inlinecodes}
1606
1607 The encodings of the constants used in the 
1608 \livelink{chap:DWATinline}{DW\-\_AT\-\_inline} attribute are given in 
1609 Table \refersec{tab:inlineencodings}.
1610
1611 \begin{centering}
1612 \setlength{\extrarowheight}{0.1cm}
1613 \begin{longtable}{l|c}
1614   \caption{Inline encodings} \label{tab:inlineencodings}\\
1615   \hline \\ \bfseries Iline Code name&\bfseries Value \\ \hline
1616 \endfirsthead
1617   \bfseries Iline Code name&\bfseries Value\\ \hline
1618 \endhead
1619   \hline \emph{Continued on next page}
1620 \endfoot
1621   \hline
1622 \endlastfoot
1623
1624 \livelink{chap:DWINLnotinlined}{DW\-\_INL\-\_not\-\_inlined}&0x00      \\
1625 \livelink{chap:DWINLinlined}{DW\-\_INL\-\_inlined}&0x01      \\
1626 \livelink{chap:DWINLdeclarednotinlined}{DW\-\_INL\-\_declared\-\_not\-\_inlined}&0x02      \\
1627 \livelink{chap:DWINLdeclaredinlined}{DW\-\_INL\-\_declared\-\_inlined}&0x03      \\
1628
1629 \end{longtable}
1630 \end{centering}
1631
1632 % this clearpage is ugly, but the following table came
1633 % out oddly without it.
1634 \clearpage
1635 \section{Array Ordering}
1636 \label{datarep:arrayordering}
1637
1638 The encodings of the constants used in the 
1639 \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering} attribute are given in 
1640 Table \refersec{tab:orderingencodings}.
1641
1642 \begin{centering}
1643 \setlength{\extrarowheight}{0.1cm}
1644 \begin{longtable}{l|c}
1645   \caption{Ordering encodings} \label{tab:orderingencodings}\\
1646   \hline \\ \bfseries Ordering name&\bfseries Value \\ \hline
1647 \endfirsthead
1648   \bfseries Ordering name&\bfseries Value\\ \hline
1649 \endhead
1650   \hline \emph{Continued on next page}
1651 \endfoot
1652   \hline
1653 \endlastfoot
1654
1655 \livelink{chap:DWORDrowmajor}{DW\-\_ORD\-\_row\-\_major}&0x00  \\
1656 \livelink{chap:DWORDcolmajor}{DW\-\_ORD\-\_col\-\_major}&0x01  \\
1657
1658 \end{longtable}
1659 \end{centering}
1660
1661
1662 \section{Discriminant Lists}
1663 \label{datarep:discriminantlists}
1664
1665 The descriptors used in the 
1666 \livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list} attribute are 
1667 encoded as 1\dash byte constants. The
1668 defined values are given in 
1669 Table \refersec{tab:discriminantdescriptorencodings}.
1670
1671 % Odd that the 'Name' field captalized here, it is not caps elsewhere.
1672 \begin{centering}
1673 \setlength{\extrarowheight}{0.1cm}
1674 \begin{longtable}{l|c}
1675   \caption{Discriminant descriptor encodings} \label{tab:discriminantdescriptorencodings}\\
1676   \hline \\ \bfseries Descriptor Name&\bfseries Value \\ \hline
1677 \endfirsthead
1678   \bfseries Descriptor Name&\bfseries Value\\ \hline
1679 \endhead
1680   \hline \emph{Continued on next page}
1681 \endfoot
1682   \hline
1683 \endlastfoot
1684
1685 \livetarg{chap:DWDSClabel}{DW\-\_DSC\-\_label}&0x00 \\
1686 \livetarg{chap:DWDSCrange}{DW\-\_DSC\-\_range}&0x01 \\
1687
1688 \end{longtable}
1689 \end{centering}
1690
1691 \section{Name Lookup Tables}
1692 \label{datarep:namelookuptables}
1693
1694 Each set of entries in the table of global names contained
1695 in the \addtoindex{.debug\_pubnames} and 
1696 \addtoindex{.debug\_pubtypes} sections begins
1697 with a header consisting of:
1698
1699
1700 \begin{enumerate}[1.]
1701 \item unit\_length (initial length) \\
1702 A 4\dash byte or 12\dash byte unsigned integer representing the length
1703 of the \addtoindex{.debug\_info}
1704 contribution for that compilation unit,
1705 not including the length field itself. In the 32\dash bit DWARF
1706 format, this is a 4\dash byte unsigned integer (which must be less
1707 than 0xfffffff0); in the 64\dash bit DWARF format, this consists
1708 of the 4\dash byte value 0xffffffff followed by an 8\dash byte unsigned
1709 integer that gives the actual length
1710 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1711
1712 \item  version (uhalf)
1713 A 2\dash byte unsigned integer representing the version of the
1714 DWARF information for the compilation unit
1715 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
1716 The value in this field is 4.
1717
1718 % Some say unsigned offset this just says offset: FIXME
1719 \item debug\_info\_offset (section offset) \\
1720 A 4\dash byte or 8\dash byte offset into the 
1721 \addtoindex{.debug\_info}
1722 section of the compilation unit header.
1723 In
1724 the 32\dash bit DWARF format, this is a 4\dash byte unsigned offset;
1725 in the 64\dash bit DWARF format, this is an 8\dash byte unsigned offsets
1726 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1727
1728 \item  debug\_info\_length (section length) \\
1729 A 4\dash byte or 8\dash byte length containing the size in bytes of the
1730 contents of the \addtoindex{.debug\_info}
1731 section generated to represent
1732 this compilation unit. In the 32\dash bit DWARF format, this is
1733 a 4\dash byte unsigned length; in the 64\dash bit DWARF format, this
1734 is an 8-byte unsigned length 
1735 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1736
1737
1738 \end{enumerate}
1739
1740 This header is followed by a series of tuples. Each tuple
1741 consists of a 4\dash byte or 8\dash byte offset followed by a string
1742 of non\dash null bytes terminated by one null byte. 
1743 In the 32\dash bit
1744 DWARF format, this is a 4\dash byte offset; in the 64\dash bit DWARF
1745 format, it is an 8\dash byte offset. 
1746 Each set is terminated by an
1747 offset containing the value 0.
1748
1749
1750 \section{Address Range Table}
1751 \label{datarep:addrssrangetable}
1752
1753 Each set of entries in the table of address ranges contained
1754 in the \addtoindex{.debug\_aranges}
1755 section begins with a header containing:
1756
1757 \begin{enumerate}[1.]
1758 % FIXME The unit length text is not fully consistent across
1759 % these tables.
1760
1761 \item unit\_length (initial length) \\
1762 A 4-byte or 12-byte length containing the length of the
1763 set of entries for this compilation unit, not including the
1764 length field itself. In the 32-bit DWARF format, this is a
1765 4-byte unsigned integer (which must be less than 0xfffffff0);
1766 in the 64-bit DWARF format, this consists of the 4-byte value
1767 0xffffffff followed by an 8-byte unsigned integer that gives
1768 the actual length 
1769 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1770
1771 \item version (uhalf) \\
1772 A 2\dash byte version identifier containing the value 2 
1773 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1774
1775 \item debug\_info\_offset (section offset) \\
1776 A 4\dash byte or 8\dash byte offset into the 
1777 \addtoindex{.debug\_info} section of
1778 the compilation unit header. In the 32\dash bit DWARF format,
1779 this is a 4\dash byte unsigned offset; in the 64\dash bit DWARF format,
1780 this is an 8\dash byte unsigned offset 
1781 (see Section \refersec{datarep:32bitand64bitdwarfformats}).
1782
1783 \item address\_size (ubyte) \\
1784 A 1\dash byte unsigned integer containing the size in bytes of an
1785 \addtoindexx{address\_size}
1786 address (or the offset portion of an address for segmented
1787 \addtoindexx{address space!segmented}
1788 addressing) on the target system.
1789
1790 \item segment\_size (ubyte) \\
1791 A 1\dash byte unsigned integer containing the size in bytes of a
1792 segment selector on the target system.
1793
1794 \end{enumerate}
1795
1796 This header is followed by a series of tuples. Each tuple
1797 consists of a segment, an address and a length. 
1798 The segment
1799 size is given by the segment\_size field of the header; the
1800 address and length size are each given by the address\_size
1801 field of the header. 
1802 The first tuple following the header in
1803 each set begins at an offset that is a multiple of the size
1804 of a single tuple (that is, the size of a segment selector
1805 plus twice the size of an address). 
1806 The header is padded, if
1807 necessary, to that boundary. Each set of tuples is terminated
1808 by a 0 for the segment, a 0 for the address and 0 for the
1809 length. If the segment\_size field in the header is zero,
1810 the segment selectors are omitted from all tuples, including
1811 the terminating tuple.
1812
1813
1814 \section{Line Number Information}
1815 \label{datarep:linenumberinformation}
1816
1817 The version number in the line number program header is 4
1818 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1819
1820 The boolean values ``true'' and ``false'' 
1821 used by the line number information program are encoded
1822 as a single byte containing the value 0 
1823 for ``false,'' and a non-zero value for ``true.''
1824
1825 The encodings for the standard opcodes are given in 
1826 Table \refersec{tab:linenumberstandardopcodeencodings}.
1827
1828 % Odd that the 'Name' field captalized here, it is not caps elsewhere.
1829 \begin{centering}
1830 \setlength{\extrarowheight}{0.1cm}
1831 \begin{longtable}{l|c}
1832   \caption{Line Number Standard Opcode encodings} \label{tab:linenumberstandardopcodeencodings}\\
1833   \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
1834 \endfirsthead
1835   \bfseries Opcode Name&\bfseries Value\\ \hline
1836 \endhead
1837   \hline \emph{Continued on next page}
1838 \endfoot
1839   \hline
1840 \endlastfoot
1841
1842 \livelink{chap:DWLNScopy}{DW\-\_LNS\-\_copy}&0x01 \\
1843 \livelink{chap:DWLNSadvancepc}{DW\-\_LNS\-\_advance\-\_pc}&0x02 \\
1844 \livelink{chap:DWLNSadvanceline}{DW\-\_LNS\-\_advance\-\_line}&0x03 \\
1845 \livelink{chap:DWLNSsetfile}{DW\-\_LNS\-\_set\-\_file}&0x04 \\
1846 \livelink{chap:DWLNSsetcolumn}{DW\-\_LNS\-\_set\-\_column}&0x05 \\
1847 \livelink{chap:DWLNSnegatestmt}{DW\-\_LNS\-\_negate\-\_stmt}&0x06 \\
1848 \livelink{chap:DWLNSsetbasicblock}{DW\-\_LNS\-\_set\-\_basic\-\_block}&0x07 \\
1849 \livelink{chap:DWLNSconstaddpc}{DW\-\_LNS\-\_const\-\_add\-\_pc}*0x08 \\
1850 \livelink{chap:DWLNSfixedadvancepc}{DW\-\_LNS\-\_fixed\-\_advance\-\_pc}&0x09 \\
1851 \livelink{chap:DWLNSsetprologueend}{DW\-\_LNS\-\_set\-\_prologue\-\_end}&0x0a \\
1852 \livelink{chap:DWLNSsetepiloguebegin}{DW\-\_LNS\-\_set\-\_epilogue\-\_begin}&0x0b \\
1853 \livelink{chap:DWLNSsetisa}{DW\-\_LNS\-\_set\-\_isa}&0x0c \\
1854
1855 \end{longtable}
1856 \end{centering}
1857
1858
1859 The encodings for the extended opcodes are given in 
1860 Table \refersec{tab:linenumberextendedopcodeencodings}.
1861
1862 \begin{centering}
1863 \setlength{\extrarowheight}{0.1cm}
1864 \begin{longtable}{l|c}
1865   \caption{Line Number Extended Opcode encodings} \label{tab:linenumberextendedopcodeencodings}\\
1866   \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
1867 \endfirsthead
1868   \bfseries Opcode Name&\bfseries Value\\ \hline
1869 \endhead
1870   \hline \emph{Continued on next page}
1871 \endfoot
1872   \hline
1873 \endlastfoot
1874
1875 \livelink{chap:DWLNEendsequence}{DW\-\_LNE\-\_end\-\_sequence}&0x01    \\
1876 \livelink{chap:DWLNEsetaddress}{DW\-\_LNE\-\_set\-\_address}&0x02\\
1877 \livelink{chap:DWLNEdefinefile}{DW\-\_LNE\-\_define\-\_file}&0x03\\
1878 \livelink{chap:DWLNEsetdiscriminator}{DW\-\_LNE\-\_set\-\_discriminator} \ddag &0x04   \\
1879 \livetarg{chap:DWLNElouser}{DW\-\_LNE\-\_lo\-\_user}&0x80   \\
1880 \livetarg{chap:DWLNEhiuser}{DW\-\_LNE\-\_hi\-\_user}&0xff   \\
1881
1882 \end{longtable}
1883 \ddag Extended opcode new in DWARF Version 4.
1884 \end{centering}
1885
1886 \section{Macro Information}
1887 \label{datarep:macroinformation}
1888
1889 The source line numbers and source file indices encoded in the
1890 macro information section are represented as unsigned LEB128
1891 numbers as are the constants in a \livelink{chap:DWMACINFOvendorext}{DW\-\_MACINFO\-\_vendor\-\_ext} entry.
1892
1893 The macinfo type is encoded as a single byte. 
1894 The encodings are given in 
1895 Table \refersec{tab:macinfotypeencodings}.
1896
1897
1898 \begin{centering}
1899 \setlength{\extrarowheight}{0.1cm}
1900 \begin{longtable}{l|c}
1901   \caption{Macinfo Type Encodings} \label{tab:macinfotypeencodings}\\
1902   \hline \\ \bfseries Macinfo Type Name&\bfseries Value \\ \hline
1903 \endfirsthead
1904   \bfseries Macinfo Type Name&\bfseries Value\\ \hline
1905 \endhead
1906   \hline \emph{Continued on next page}
1907 \endfoot
1908   \hline
1909 \endlastfoot
1910
1911 \livelink{chap:DWMACINFOdefine}{DW\-\_MACINFO\-\_define}&0x01 \\
1912 \livelink{chap:DWMACINFOundef}{DW\-\_MACINFO\-\_undef}&0x02 \\
1913 \livelink{chap:DWMACINFOstartfile}{DW\-\_MACINFO\-\_start\-\_file}&0x03 \\
1914 \livelink{chap:DWMACINFOendfile}{DW\-\_MACINFO\-\_end\-\_file}&0x04 \\
1915 \livelink{chap:DWMACINFOvendorext}{DW\-\_MACINFO\-\_vendor\-\_ext}&0xff \\
1916
1917 \end{longtable}
1918 \end{centering}
1919
1920 \section{Call Frame Information}
1921 \label{datarep:callframeinformation}
1922
1923 In the 32\dash bit DWARF format, the value of the CIE id in the
1924 CIE header is 0xffffffff; in the 64\dash bit DWARF format, the
1925 value is 0xffffffffffffffff.
1926
1927 The value of the CIE version number is 4 
1928 (see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
1929
1930 Call frame instructions are encoded in one or more bytes. The
1931 primary opcode is encoded in the high order two bits of
1932 the first byte (that is, opcode = byte >> 6). An operand
1933 or extended opcode may be encoded in the low order 6
1934 bits. Additional operands are encoded in subsequent bytes.
1935 The instructions and their encodings are presented in
1936 Table \refersec{tab:callframeinstructionencodings}.
1937
1938 \begin{centering}
1939 \setlength{\extrarowheight}{0.1cm}
1940 \begin{longtable}{l|c|c|l|l}
1941   \caption{Call frame instruction encodings} \label{tab:callframeinstructionencodings} \\
1942   \hline \\ &\bfseries High 2 &\bfseries Low 6 &  & \\
1943   \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
1944 \endfirsthead
1945    & \bfseries High 2 &\bfseries Low 6 &  &\\
1946   \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
1947 \endhead
1948   \hline \emph{Continued on next page}
1949 \endfoot
1950   \hline
1951 \endlastfoot
1952
1953 \livelink{chap:DWCFAadvanceloc}{DW\-\_CFA\-\_advance\-\_loc}&0x1&delta & \\
1954 \livelink{chap:DWCFAoffset}{DW\-\_CFA\-\_offset}&0x2&register&ULEB128 offset \\
1955 \livelink{chap:DWCFArestore}{DW\-\_CFA\-\_restore}&0x3&register & & \\
1956 \livelink{chap:DWCFAnop}{DW\-\_CFA\-\_nop}&0&0 & & \\
1957 \livelink{chap:DWCFAsetloc}{DW\-\_CFA\-\_set\-\_loc}&0&0x01&address & \\
1958 \livelink{chap:DWCFAadvanceloc1}{DW\-\_CFA\-\_advance\-\_loc1}&0&0x02&1\dash byte delta & \\
1959 \livelink{chap:DWCFAadvanceloc2}{DW\-\_CFA\-\_advance\-\_loc2}&0&0x03&2\dash byte delta & \\
1960 \livelink{chap:DWCFAadvanceloc4}{DW\-\_CFA\-\_advance\-\_loc4}&0&0x04&4\dash byte delta & \\
1961 \livelink{chap:DWCFAoffsetextended}{DW\-\_CFA\-\_offset\-\_extended}&0&0x05&ULEB128 register&ULEB128 offset \\
1962 \livelink{chap:DWCFArestoreextended}{DW\-\_CFA\-\_restore\-\_extended}&0&0x06&ULEB128 register & \\
1963 \livelink{chap:DWCFAundefined}{DW\-\_CFA\-\_undefined}&0&0x07&ULEB128 register & \\
1964 \livelink{chap:DWCFAsamevalue}{DW\-\_CFA\-\_same\-\_value}&0&0x08 &ULEB128 register & \\
1965 \livelink{chap:DWCFAregister}{DW\-\_CFA\-\_register}&0&0x09&ULEB128 register &ULEB128 offset \\
1966 \livelink{chap:DWCFArememberstate}{DW\-\_CFA\-\_remember\-\_state}&0&0x0a & & \\
1967 \livelink{chap:DWCFArestorestate}{DW\-\_CFA\-\_restore\-\_state}&0&0x0b & & \\
1968 \livelink{chap:DWCFAdefcfa}{DW\-\_CFA\-\_def\-\_cfa}&0&0x0c &ULEB128 register&ULEB128 offset \\
1969 \livelink{chap:DWCFAdefcfaregister}{DW\-\_CFA\-\_def\-\_cfa\-\_register}&0&0x0d&ULEB128 register & \\
1970 \livelink{chap:DWCFAdefcfaoffset}{DW\-\_CFA\-\_def\-\_cfa\-\_offset}&0&0x0e &ULEB128 offset & \\
1971 \livelink{chap:DWCFAdefcfaexpression}{DW\-\_CFA\-\_def\-\_cfa\-\_expression}&0&0x0f &BLOCK  \\
1972 \livelink{chap:DWCFAexpression}{DW\-\_CFA\-\_expression}&0&0x10&ULEB128 register & BLOCK \\
1973
1974 \livelink{chap:DWCFAoffsetextendedsf}{DW\-\_CFA\-\_offset\-\_extended\-\_sf}&0&0x11&ULEB128 register&SLEB128 offset \\
1975 \livelink{chap:DWCFAdefcfasf}{DW\-\_CFA\-\_def\-\_cfa\-\_sf}&0&0x12&ULEB128 register&SLEB128 offset \\
1976 \livelink{chap:DWCFAdefcfaoffsetsf}{DW\-\_CFA\-\_def\-\_cfa\-\_offset\-\_sf}&0&0x13&SLEB128 offset & \\
1977 \livelink{chap:DWCFAvaloffset}{DW\-\_CFA\-\_val\-\_offset}&0&0x14&ULEB128&ULEB128 \\
1978 \livelink{chap:DWCFAvaloffsetsf}{DW\-\_CFA\-\_val\-\_offset\-\_sf}&0&0x15&ULEB128&SLEB128 \\
1979 \livelink{chap:DWCFAvalexpression}{DW\-\_CFA\-\_val\-\_expression}&0&0x16&ULEB128&BLOCK  \\
1980 \livetarg{chap:DWCFAlouser}{DW\-\_CFA\-\_lo\-\_user}&0&0x1c   & & \\
1981 \livetarg{chap:DWCFAhiuser}{DW\-\_CFA\-\_hi\-\_user}&0&0x3f & & \\
1982 \end{longtable}
1983 \end{centering}
1984
1985 \section{Non-continguous Address Ranges}
1986 \label{datarep:noncontiguousaddressranges}
1987
1988 Each entry in a range list 
1989 (see Section \refersec{chap:noncontiguousaddressranges})
1990 is either a
1991 range list entry, a base address selection entry, or an end
1992 of list entry.
1993
1994 A range list entry consists of two relative addresses. The
1995 addresses are the same size as addresses on the target machine.
1996
1997 A base address selection entry and an end of list entry each
1998 consist of two (constant or relocated) addresses. The two
1999 addresses are the same size as addresses on the target machine.
2000
2001 For a range list to be specified, the base address of the
2002 corresponding compilation unit must be defined 
2003 (see Section \refersec{chap:normalandpartialcompilationunitentries}).
2004
2005
2006 \section{Dependencies and Constraints}
2007 \label{datarep:dependenciesandconstraints}
2008
2009 The debugging information in this format is intended to
2010 exist in 
2011 the \addtoindex{.debug\_abbrev}, 
2012 \addtoindex{.debug\_aranges}, 
2013 \addtoindex{.debug\_frame},
2014 \addtoindex{.debug\_info}, 
2015 \addtoindex{.debug\_line}, 
2016 \addtoindex{.debug\_loc}, 
2017 \addtoindex{.debug\_macinfo},
2018 \addtoindex{.debug\_pubnames}, 
2019 \addtoindex{.debug\_pubtypes}, 
2020 \addtoindex{.debug\_ranges}, 
2021 \addtoindex{.debug\_str}
2022 and 
2023 \addtoindex{.debug\_types}
2024 sections of an object file, or equivalent
2025 separate file or database. The information is not 
2026 word\dash aligned. Consequently: •
2027
2028 \begin{itemize}
2029 \item For the 32\dash bit DWARF format and a target architecture with
2030 32\dash bit addresses, an assembler or compiler must provide a way
2031 to produce 2\dash byte and 4\dash byte quantities without alignment
2032 restrictions, and the linker must be able to relocate a
2033 4\dash byte address or section offset that occurs at an arbitrary
2034 alignment.
2035
2036 \item For the 32\dash bit DWARF format and a target architecture with
2037 64\dash bit addresses, an assembler or compiler must provide a
2038 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2039 alignment restrictions, and the linker must be able to relocate
2040 an 8\dash byte address or 4\dash byte section offset that occurs at an
2041 arbitrary alignment.
2042
2043 \item For the 64\dash bit DWARF format and a target architecture with
2044 32\dash bit addresses, an assembler or compiler must provide a
2045 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2046 alignment restrictions, and the linker must be able to relocate
2047 a 4\dash byte address or 8\dash byte section offset that occurs at an
2048 arbitrary alignment.
2049
2050 \textit{It is expected that this will be required only for very large
2051 32\dash bit programs or by those architectures which support
2052 a mix of 32\dash bit and 64\dash bit code and data within the same
2053 executable object.}
2054
2055 \item For the 64\dash bit DWARF format and a target architecture with
2056 64\dash bit addresses, an assembler or compiler must provide a
2057 way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
2058 alignment restrictions, and the linker must be able to
2059 relocate an 8\dash byte address or section offset that occurs at
2060 an arbitrary alignment.
2061 \end{itemize}
2062
2063 \section{Integer Representation Names}
2064 \label{datarep:integerrepresentationnames}
2065
2066 The sizes of the integers used in the lookup by name, lookup
2067 by address, line number and call frame information sections
2068 are given in
2069 Table 41 \refersec{tab:integerrepresentationnames}.
2070
2071 \begin{centering}
2072 \setlength{\extrarowheight}{0.1cm}
2073 \begin{longtable}{c|l}
2074   \caption{Integer Representation Names} \label{tab:integerrepresentationnames}\\
2075   \hline \\ \bfseries Representation Name&\bfseries Representation \\ \hline
2076 \endfirsthead
2077   \bfseries Representation Name&\bfseries Representation\\ \hline
2078 \endhead
2079   \hline \emph{Continued on next page}
2080 \endfoot
2081   \hline
2082 \endlastfoot
2083
2084 sbyte&  signed, 1\dash byte integer \\
2085 ubyte&unsigned, 1\dash byte integer \\
2086 uhalf&unsigned, 2\dash byte integer \\
2087 uword&unsigned, 4\dash byte integer \\
2088
2089 \end{longtable}
2090 \end{centering}
2091
2092 \section{Type Signature Computation}
2093 \label{datarep:typesignaturecomputation}
2094
2095 A type signature is computed only by the DWARF producer;
2096 it is used by a DWARF consumer to resolve type references to
2097 the type definitions that are contained in type units.
2098
2099 The type signature for a type T0 is formed from the MD5
2100 hash of a flattened description of the type. The flattened
2101 description of the type is a byte sequence derived from the
2102 DWARF encoding of the type as follows:
2103
2104 \begin{enumerate}[1.]
2105
2106 \item Start with an empty sequence S and a list V of visited
2107 types, where V is initialized to a list containing the type
2108 T0 as its single element. Elements in V are indexed from 1,
2109 so that V[1] is T0.
2110
2111 \item If the debugging information entry represents a type that
2112 is nested inside another type or a namespace, append to S
2113 the type’s context as follows: For each surrounding type
2114 or namespace, beginning with the outermost such construct,
2115 append the letter 'C', the DWARF tag of the construct, and
2116 the name (taken from the \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute) of the type
2117 or namespace (including its trailing null byte).
2118
2119 \item  Append to S the letter 'D', followed by the DWARF tag of
2120 the debugging information entry.
2121
2122 \item For each of the following attributes that are present in
2123 the debugging information entry, in the order listed below,
2124 append to S a marker letter (see below), the DWARF attribute
2125 code, and the attribute value.
2126
2127 \begin{itemize}
2128 \item \livelink{chap:DWATname}{DW\-\_AT\-\_name}
2129 \item \livelink{chap:DWATaccessibility}{DW\-\_AT\-\_accessibility}
2130 \item \livelink{chap:DWATaddressclass}{DW\-\_AT\-\_address\-\_class}
2131 \item \livelink{chap:DWATallocated}{DW\-\_AT\-\_allocated}
2132 \item \livelink{chap:DWATartificial}{DW\-\_AT\-\_artificial}
2133 \item \livelink{chap:DWATassociated}{DW\-\_AT\-\_associated}
2134 \item \livelink{chap:DWATbinaryscale}{DW\-\_AT\-\_binary\-\_scale}
2135 \item \livelink{chap:DWATbitoffset}{DW\-\_AT\-\_bit\-\_offset}
2136 \item \livelink{chap:DWATbitsize}{DW\-\_AT\-\_bit\-\_size}
2137 \item \livelink{chap:DWATbitstride}{DW\-\_AT\-\_bit\-\_stride}
2138 \item \livelink{chap:DWATbytesize}{DW\-\_AT\-\_byte\-\_size}
2139 \item \livelink{chap:DWATbytestride}{DW\-\_AT\-\_byte\-\_stride}
2140 \item \livelink{chap:DWATconstexpr}{DW\-\_AT\-\_const\-\_expr}
2141 \item \livelink{chap:DWATconstvalue}{DW\-\_AT\-\_const\-\_value}
2142 \item \livelink{chap:DWATcontainingtype}{DW\-\_AT\-\_containing\-\_type}
2143 \item \livelink{chap:DWATcount}{DW\-\_AT\-\_count}
2144 \item \livelink{chap:DWATdatabitoffset}{DW\-\_AT\-\_data\-\_bit\-\_offset}
2145 \item \livelink{chap:DWATdatalocation}{DW\-\_AT\-\_data\-\_location}
2146 \item \livelink{chap:DWATdatamemberlocation}{DW\-\_AT\-\_data\-\_member\-\_location}
2147 \item \livelink{chap:DWATdecimalscale}{DW\-\_AT\-\_decimal\-\_scale}
2148 \item \livelink{chap:DWATdecimalsign}{DW\-\_AT\-\_decimal\-\_sign}
2149 \item \livelink{chap:DWATdefaultvalue}{DW\-\_AT\-\_default\-\_value}
2150 \item \livelink{chap:DWATdigitcount}{DW\-\_AT\-\_digit\-\_count}
2151 \item \livelink{chap:DWATdiscr}{DW\-\_AT\-\_discr}
2152 \item \livelink{chap:DWATdiscrlist}{DW\-\_AT\-\_discr\-\_list}
2153 \item \livelink{chap:DWATdiscrvalue}{DW\-\_AT\-\_discr\-\_value}
2154 \item \livelink{chap:DWATencoding}{DW\-\_AT\-\_encoding}
2155 \item \livelink{chap:DWATenumclass}{DW\-\_AT\-\_enum\-\_class}
2156 \item \livelink{chap:DWATendianity}{DW\-\_AT\-\_endianity}
2157 \item \livelink{chap:DWATexplicit}{DW\-\_AT\-\_explicit}
2158 \item \livelink{chap:DWATisoptional}{DW\-\_AT\-\_is\-\_optional}
2159 \item \livelink{chap:DWATlocation}{DW\-\_AT\-\_location}
2160 \item \livelink{chap:DWATlowerbound}{DW\-\_AT\-\_lower\-\_bound}
2161 \item \livelink{chap:DWATmutable}{DW\-\_AT\-\_mutable}
2162 \item \livelink{chap:DWATordering}{DW\-\_AT\-\_ordering}
2163 \item \livelink{chap:DWATpicturestring}{DW\-\_AT\-\_picture\-\_string}
2164 \item \livelink{chap:DWATprototyped}{DW\-\_AT\-\_prototyped}
2165 \item \livelink{chap:DWATsmall}{DW\-\_AT\-\_small}
2166 \item \livelink{chap:DWATsegment}{DW\-\_AT\-\_segment}
2167 \item \livelink{chap:DWATstringlength}{DW\-\_AT\-\_string\-\_length}
2168 \item \livelink{chap:DWATthreadsscaled}{DW\-\_AT\-\_threads\-\_scaled}
2169 \item \livelink{chap:DWATupperbound}{DW\-\_AT\-\_upper\-\_bound}
2170 \item \livelink{chap:DWATuselocation}{DW\-\_AT\-\_use\-\_location}
2171 \item \livelink{chap:DWATuseUTF8}{DW\-\_AT\-\_use\-\_UTF8}
2172 \item \livelink{chap:DWATvariableparameter}{DW\-\_AT\-\_variable\-\_parameter}
2173 \item \livelink{chap:DWATvirtuality}{DW\-\_AT\-\_virtuality}
2174 \item \livelink{chap:DWATvisibility}{DW\-\_AT\-\_visibility}
2175 \item \livelink{chap:DWATvtableelemlocation}{DW\-\_AT\-\_vtable\-\_elem\-\_location}
2176 \end{itemize}
2177
2178 Note that except for the initial \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute,
2179 attributes are appended in order according to the alphabetical
2180 spelling of their identifier.
2181
2182 If an implementation defines any vendor-specific attributes,
2183 any such attributes that are essential to the definition of
2184 the type should also be included at the end of the above list,
2185 in their own alphabetical suborder.
2186
2187 An attribute that refers to another type entry T is processed
2188 as follows: (a) If T is in the list V at some V[x], use the
2189 letter 'R' as the marker and use the unsigned LEB128 encoding
2190 of x as the attribute value; otherwise, (b) use the letter 'T'
2191 as the marker, process the type T recursively by performing
2192 Steps 2 through 7, and use the result as the attribute value.
2193
2194 Other attribute values use the letter 'A' as the marker, and
2195 the value consists of the form code (encoded as an unsigned
2196 LEB128 value) followed by the encoding of the value according
2197 to the form code. To ensure reproducibility of the signature,
2198 the set of forms used in the signature computation is limited
2199 to the following: \livelink{chap:DWFORMsdata}{DW\-\_FORM\-\_sdata}, 
2200 \livelink{chap:DWFORMflag}{DW\-\_FORM\-\_flag}, 
2201 \livelink{chap:DWFORMstring}{DW\-\_FORM\-\_string},
2202 and \livelink{chap:DWFORMblock}{DW\-\_FORM\-\_block}.
2203
2204 \item If the tag in Step 3 is one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
2205 \livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type}, 
2206 \livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
2207 \livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}, 
2208 or \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, and the referenced
2209 type (via the \livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2210 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend} attribute) has a
2211 \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, append to S the letter 'N', the DWARF
2212 attribute code (\livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2213 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend}), the context of
2214 the type (according to the method in Step 2), the letter 'E',
2215 and the name of the type. For \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, if the referenced
2216 entry is a \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}, the context is omitted and the
2217 name to be used is the ABI-specific name of the subprogram
2218 (e.g., the mangled linker name).
2219
2220
2221 \item 6.If the tag in Step 3 is not one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
2222 \livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type}, 
2223 \livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
2224 \livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}, or 
2225 \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, but has
2226 a \livelink{chap:DWATtype}{DW\-\_AT\-\_type} attribute, or if the referenced type (via
2227 the \livelink{chap:DWATtype}{DW\-\_AT\-\_type} or 
2228 \livelink{chap:DWATfriend}{DW\-\_AT\-\_friend} attribute) does not have a
2229 \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, the attribute is processed according to
2230 the method in Step 4 for an attribute that refers to another
2231 type entry.
2232
2233
2234 \item Visit each child C of the debugging information
2235 entry as follows: If C is a nested type entry or a member
2236 function entry, and has a \livelink{chap:DWATname}{DW\-\_AT\-\_name} attribute, append to
2237 S the letter 'S', the tag of C, and its name; otherwise,
2238 process C recursively by performing Steps 3 through 7,
2239 appending the result to S. Following the last child (or if
2240 there are no children), append a zero byte.
2241 \end{enumerate}
2242
2243
2244
2245 For the purposes of this algorithm, if a debugging information
2246 entry S has a 
2247 \livelink{chap:DWATspecification}{DW\-\_AT\-\_specification} 
2248 attribute that refers to
2249 another entry D (which has a 
2250 \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration} 
2251 attribute),
2252 then S inherits the attributes and children of D, and S is
2253 processed as if those attributes and children were present in
2254 the entry S. Exception: if a particular attribute is found in
2255 both S and D, the attribute in S is used and the corresponding
2256 one in D is ignored.
2257
2258 DWARF tag and attribute codes are appended to the sequence
2259 as unsigned LEB128 values, using the values defined earlier
2260 in this chapter.
2261
2262 \textit{A grammar describing this computation may be found in
2263 Appendix \refersec{app:typesignaturecomputationgrammar}.
2264 }
2265
2266 \textit{An attribute that refers to another type entry should
2267 be recursively processed or replaced with the name of the
2268 referent (in Step 4, 5 or 6). If neither treatment applies to
2269 an attribute that references another type entry, the entry
2270 that contains that attribute should not be considered for a
2271 separate type unit.}
2272
2273 \textit{If a debugging information entry contains an attribute from
2274 the list above that would require an unsupported form, that
2275 entry should not be considered for a separate type unit.}
2276
2277 \textit{A type should be considered for a separate type unit only
2278 if all of the type entries that it contains or refers to in
2279 Steps 6 and 7 can themselves each be considered for a separate
2280 type unit.}
2281
2282 Where the DWARF producer may reasonably choose two or more
2283 different forms for a given attribute, it should choose
2284 the simplest possible form in computing the signature. (For
2285 example, a constant value should be preferred to a location
2286 expression when possible.)
2287
2288 Once the string S has been formed from the DWARF encoding,
2289 an MD5 hash is computed for the string and the lower 64 bits
2290 are taken as the type signature.
2291
2292 \textit{The string S is intended to be a flattened representation of
2293 the type that uniquely identifies that type (i.e., a different
2294 type is highly unlikely to produce the same string).}
2295
2296 \textit{A debugging information entry should not be placed in a
2297 separate type unit if any of the following apply:}
2298
2299 \begin{itemize}
2300
2301 \item \textit{The entry has an attribute whose value is a location
2302 expression, and the location expression contains a reference to
2303 another debugging information entry (e.g., a \livelink{chap:DWOPcallref}{DW\-\_OP\-\_call\-\_ref}
2304 operator), as it is unlikely that the entry will remain
2305 identical across compilation units.}
2306
2307 \item \textit{The entry has an attribute whose value refers
2308 to a code location or a location list.}
2309
2310 \item \textit{The entry has an attribute whose value refers
2311 to another debugging information entry that does not represent
2312 a type.}
2313 \end{itemize}
2314
2315
2316 \textit{Certain attributes are not included in the type signature:}
2317
2318 \begin{itemize}
2319 \item \textit{The \livelink{chap:DWATdeclaration}{DW\-\_AT\-\_declaration} attribute is not included because it
2320 indicates that the debugging information entry represents an
2321 incomplete declaration, and incomplete declarations should
2322 not be placed in separate type units.}
2323
2324 \item \textit{The \livelink{chap:DWATdescription}{DW\-\_AT\-\_description} attribute is not included because
2325 it does not provide any information unique to the defining
2326 declaration of the type.}
2327
2328 \item \textit{The \livelink{chap:DWATdeclfile}{DW\-\_AT\-\_decl\-\_file}, \livelink{chap:DWATdeclline}{DW\-\_AT\-\_decl\-\_line}, and
2329 \livelink{chap:DWATdeclcolumn}{DW\-\_AT\-\_decl\-\_column} attributes are not included because they
2330 may vary from one source file to the next, and would prevent
2331 two otherwise identical type declarations from producing the
2332 same hash.}
2333
2334 \end{itemize}