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