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