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