Merge branch 'HEAD' of dwarfgit@dwarfstd.org:dwarf-doc.git
[dwarf-doc.git] / dwarf5 / latexdoc / debugsectionrelationships.tex
1 \chapter{Debug Section Relationships (Informative)}
2 \label{app:debugsectionrelationshipsinformative}
3 DWARF information is organized into multiple program sections, 
4 each of which holds a particular kind of information. In some 
5 cases, information in one section refers to information in one 
6 or more of the others. These relationships are illustrated by 
7 the diagrams and associated notes on the following pages.
8
9 In the figures, a section is shown as a shaded oval with the
10 name of the section inside. References from one section to
11 another are shown by an arrow. In the first figure, the arrow
12 is annotated with an unshaded box which contains an indication
13 of the construct (such as an attribute or form) that encodes
14 the reference. In the second figure, this box is left out
15 for reasons of space in favor of a label annotation that is
16 explained in the subsequent notes.
17
18 \section{Normal DWARF Section Relationships}
19 Figure \referfol{fig:debugsectionrelationships} illustrates
20 the DWARF section relations without split DWARF object files
21 involved. Similarly, it does not show the 
22 relationships between the main debugging sections of an executable
23 or sharable file and a related \addtoindex{supplementary object file}.
24
25 \section{Split DWARF Section Relationships}
26 Figure \ref{fig:splitdwarfsectionrelationships} illustrates
27 the DWARF section relationships for \splitDWARFobjectfile{s}.
28 However, it does not show the 
29 relationships between the main debugging sections of an executable
30 or shareable file and a related \addtoindex{supplementary object file}.
31
32 \begin{landscape}
33 \begin{figure}
34 \scriptsize
35 \begin{tikzpicture}
36     [sect/.style={rectangle, rounded corners=10pt, draw, fill=blue!15, 
37          inner sep=.2cm, minimum width=4.0cm},
38      link/.style={rectangle,                       draw,
39          inner sep=.2cm, minimum width=4.5cm},
40      circ/.style={circle,                          draw, fill=yellow!25,
41          minimum size=0.5cm}]
42      
43 % The first (leftmost) column, first sections, then links, from top to bottom
44 %
45 \node(zsectara) at ( 0, 15.0) [sect] {\dotdebugaranges};
46 \node(zlinka)   at ( 0, 13.5) [link] {To compilation unit~~(a)};
47 \node(zsectinf) at ( 0,  7.5) [sect] {\begin{tabular}{c}
48                                         ~\\
49                                       \dotdebuginfo\\
50                                         ~
51                                       \end{tabular}};
52 \node(zcircs)   at (-1.8,4.0) [circ] {\textit{A}};
53 \node(zlinkb)   at ( 0,  1.5) [link] {To compilation unit~~(b)};
54 \node(zsectpub) at ( 0,-0.25) [sect] {\begin{tabular}{c} 
55                                       \dotdebugnames  
56                                       \end{tabular}};
57                                       
58 \draw[thin,triangle 45-]            (zcircs) -- (zsectinf);
59 \draw[thin,-to reversed]            (zlinka) -- (zsectara);
60 \draw[thin,triangle 45-]            (zsectinf) -- (zlinka);
61 \draw[thin,-triangle 45]            (zlinkb) -- (zsectinf);
62 \draw[thin,to reversed-]            (zsectpub) -- (zlinkb);
63
64 % The second column, similarly
65 %
66 \node(zsectfra) at (5, 15.0)  [sect] {\dotdebugframe};
67 \node(zlinkc)   at (5, 13.5)  [link] {To abbreviations~~(c)};
68 \node(zlinkd)   at (5, 12.1)  [link] {\DWFORMstrp{}~~(d)};
69 \node(zlinke)   at (5, 10.4)  [link] {\begin{tabular}{c}
70                                       \DWATstroffsetsbase \\
71                                       \DWFORMstrx{}~~~~~~~~~(e) \\
72                                       \end{tabular}};
73 \node(zlinkf)   at (5,  8.4)  [link] {\begin{tabular}{c}
74                                       \DWOPcallref{}~~~~~(f) \\
75                                       \DWFORMrefaddr
76                                       \end{tabular}};
77 \node(zlinki)   at (5,  6.7)  [link] {\DWATmacros{}~~(g)};
78 \node(zlinkj)   at (5,  5.4)  [link] {\DWATstmtlist{}~~(h)};
79 \node(zlinkh)   at (5,  3.9)  [link] {\begin{tabular}{c}
80                                       \DWATranges{}~~~~(i) \\
81                                       \DWATrnglistsbase
82                                       \end{tabular}};
83 \node(zlinkg)   at (5,  2.4)  [link] {\DWATlocation{}, etc.~~(j)};
84 \node(zlinkk)   at (5,  0.5)  [link] {\begin{tabular}(c)
85                                       \DWATaddrbase    \\
86                                       \DWFORMaddrx \\
87                                       \DWOPaddrx \\
88                                       \DWOPconstx
89                                       \end{tabular} (k)};
90
91 % Links between first and second columns
92 %
93 \draw[thin,to reversed-]             (zsectinf) -- (zlinkc.west);
94 \draw[thin,to reversed-]             (zsectinf) -- (zlinkd.west);
95 \draw[thin,to reversed-]             (zsectinf) -- (zlinke.west);
96 \draw[thin, triangle 45-triangle 45] (zsectinf) -- (zlinkf.west);
97 \draw[thin,to reversed-]             (zsectinf) -- (zlinkg.west);
98 \draw[thin,to reversed-]             (zsectinf) -- (zlinkh.west);
99 \draw[thin,to reversed-]             (zsectinf) -- (zlinki.west);
100 \draw[thin,to reversed-]             (zsectinf) -- (zlinkj.west);
101 \draw[thin,to reversed-]             (zsectinf) -- (zlinkk.north west);
102
103 % The third column
104 %
105 \node(zsectabb) at (10, 15.00) [sect] {\dotdebugabbrev};
106 \node(zsectstr) at (10, 13.75) [sect] {\dotdebugstr};
107 \node(zlinkl)   at (10, 12.50) [link] {To strings~~(l)};
108 \node(zsectstx) at (10, 11.25) [sect] {\dotdebugstroffsets};
109 \node(zlinkm)   at (10,  9.50) [link] {\begin{tabular}{c}
110                                       \DWMACROdefinestrx \\
111                                       \DWMACROundefstrx \\
112                                       (m)
113                                       \end{tabular}};
114 \node(zsectmac) at (10,  7.80) [sect] {\dotdebugmacro};
115 \node(zlinkn)   at (10,  6.40) [link] {\begin{tabular}{c}
116                                       macroinfo header~~~~~~(n)\\
117                                       \DWMACROstartfile
118                                       \end{tabular}};
119 \node(zsectlin) at (10,  5.00) [sect] {\dotdebugline};
120 \node(zsectran) at (10,  3.85) [sect] {\dotdebugrnglists};
121 \node(zsectloc) at (10,  2.70) [sect] {\dotdebugloclists{}};
122 \node(zlinko)   at (10,  1.20) [link] {\begin{tabular}{c}
123                                        \DWOPaddrx \\
124                                        \DWOPconstx
125                                        \end{tabular} (o)};
126 \node(zsectadx) at (10,  -0.25) [sect] {\dotdebugaddr{}};
127
128 \draw[thin,to reversed-]       (zsectstx) -- (zlinkl);
129 \draw[thin,-triangle 45]       (zlinkl) -- (zsectstr);
130 \draw[thin,to reversed-]       (zsectmac) -- (zlinkm);
131 \draw[thin,-triangle 45]       (zlinkm) -- (zsectstx);
132 \draw[thin,to reversed-]       (zsectmac) -- (zlinkn);
133 \draw[thin,-triangle 45]       (zlinkn) -- (zsectlin);
134 \draw[thin,to reversed-]       (zsectloc) -- (zlinko);
135 \draw[thin,-triangle 45]       (zlinko) -- (zsectadx);
136
137 % Links between second and third colums
138 %
139 \draw[thin,-triangle 45]        (zlinkc.east) -- (zsectabb.west);
140 \draw[thin,-triangle 45]        (zlinkd.east) -- (zsectstr.west);
141 \draw[thin,-triangle 45]        (zlinke.east) -- (zsectstx.west);
142 \draw[thin,-triangle 45]        (zlinkg.east) -- (zsectloc.west);
143 \draw[thin,-triangle 45]        (zlinkh.east) -- (zsectran.west);
144 \draw[thin,-triangle 45]        (zlinki.east) -- (zsectmac.west);
145 \draw[thin,-triangle 45]        (zlinkj.east) -- (zsectlin.west);
146 \draw[thin,-triangle 45]        (zlinkk.east) -- (zsectadx.west);
147
148 % The fourth column
149 %
150 \node(zlinky)   at (15.6, 10.5) [link] {\begin{tabular}{c}
151                                         \DWMACROdefinestrp \\
152                                         \DWMACROundefstrp \\
153                                         (p)
154                                         \end{tabular}};
155 \node(zlinkz)   at (15.6,  6.4) [link] {\begin{tabular}{c}
156                                         \DWMACROimport \\
157                                         (q)
158                                         \end{tabular}};
159 \node(zcircsp)  at (17.4,  4.0) [circ]  {\textit{A}};
160 \node(zlinkx)   at (15.6,  2.0) [link]  {\DWFORMlinestrp~(r, s)};
161 \node(zsectlns) at (15.6,-0.25) [sect]  {\dotdebuglinestr};
162              
163              
164 \draw[thin,to reversed-]       (zsectmac.east) -- (zlinky);
165 \draw[thin,-triangle 45]       (zlinky) -- (zsectstr.east);
166 \draw[triangle 45-triangle 45] (zsectmac.east) -- (zlinkz);
167 \draw[thin,to reversed-]       (zcircsp) -- (zlinkx);
168 \draw[thin,to reversed-]       (zsectlin.east) -- (zlinkx);
169 \draw[thin,-triangle 45]       (zlinkx) -- (zsectlns);
170
171 \end{tikzpicture}
172 \vspace{5mm}
173 \caption{Debug section relationships}
174 \label{fig:debugsectionrelationships}
175 \end{figure}
176 \end{landscape}
177
178 \clearpage
179 \begin{center}
180    \textbf{Notes for Figure \ref{fig:debugsectionrelationships}}
181 \end{center}
182 \begin{description} 
183 \itembfnl{(a) \dotdebugaranges{} to \dotdebuginfo}
184 The \texttt{debug\_info\_offset} value in
185 the header is
186 the offset in the \dotdebuginfo{} section of the
187 corresponding compilation unit header (not the compilation
188 unit entry).
189
190 %b
191 \itembfnl{(b) \dotdebugnames{} to \dotdebuginfo}
192 The list of compilation units following the header contains the offsets in the
193 \dotdebuginfo{} section of the 
194 corresponding compilation unit headers (not
195 the compilation unit entries). 
196
197 %c
198 \itembfnl{(c) \dotdebuginfo{} to \dotdebugabbrev}
199 The \HFNdebugabbrevoffset{} value in the header is the offset in the
200 \dotdebugabbrev{} 
201 section of the abbreviations for that compilation unit.
202
203 %d
204 \itembfnl{(d) \dotdebuginfo{} to \dotdebugstr}
205 Attribute values of class string may have form 
206 \DWFORMstrp, whose
207 value is the offset in the \dotdebugstr{}
208 section of the corresponding string.
209
210 %e
211 \itembfnl{(e) \dotdebuginfo{} to \dotdebugstroffsets}
212 The value of the \DWATstroffsetsbase{} attribute in a
213 \DWTAGcompileunit{}, \DWTAGtypeunit{} or \DWTAGpartialunit{} 
214 DIE is the offset in the
215 \dotdebugstroffsets{} section of the 
216 \addtoindex{string offsets table}
217 for that unit.
218 In addition, attribute values of class string may have form 
219 \DWFORMstrx, whose value is an index into the
220 string offsets table.
221
222 %f
223 \itembfnl{(f) \dotdebuginfo{} to \dotdebuginfo}
224 The operand of the \DWOPcallref{} 
225 DWARF expression operator is the
226 offset of a debugging information entry in the 
227 \dotdebuginfo{} section of another compilation.
228 Similarly for attribute operands that use
229 \DWFORMrefaddr.
230
231 %g
232 \itembfnl{(g) \dotdebuginfo{} to \dotdebugmacro}
233 An attribute value of class 
234 \livelink{chap:classmacptr}{macptr} (specifically form
235 \DWFORMsecoffset) is an 
236 offset within the 
237 \dotdebugmacro{} section
238 of the beginning of the macro information for the referencing unit.
239
240 %h
241 \itembfnl{(h) \dotdebuginfo{} to \dotdebugline}
242 An attribute value of class 
243 \livelink{chap:classlineptr}{lineptr} (specifically form
244 \DWFORMsecoffset) 
245 is an offset in the 
246 \dotdebugline{} section of the
247 beginning of the line number information for the referencing unit.
248
249 %i
250 \needlines{5}
251 \itembfnl{(i) \dotdebuginfo{} to \dotdebugrnglists}
252 An attribute value of class \CLASSrnglist{} 
253 (specifically form \DWFORMrnglistx{} or \DWFORMsecoffset) 
254 is an index or offset within the \dotdebugrnglists{} 
255 section of a \addtoindex{range list}.
256
257 %j
258 \itembfnl{(j) \dotdebuginfo{} to \dotdebugloclists}
259 An attribute value of class \CLASSloclist{} 
260 (specifically form \DWFORMloclistx{} or \DWFORMsecoffset) 
261 is an index or offset within the \dotdebugloclists{}
262 section of a \addtoindex{location list}.
263
264 %k
265 \itembfnl{(k) \dotdebuginfo{} to \dotdebugaddr}
266 The value of the \DWATaddrbase{} attribute in the
267 \DWTAGcompileunit{} or \DWTAGpartialunit{} DIE is the
268 offset in the \dotdebugaddr{} section of the machine
269 addresses for that unit.
270 \DWFORMaddrx, \DWOPaddrx{} and \DWOPconstx{} contain
271 indices relative to that offset.
272
273 %l
274 \itembfnl{(l) \dotdebugstroffsets{} to \dotdebugstr}
275 Entries in the string offsets table
276 are offsets to the corresponding string text in the 
277 \dotdebugstr{} section.
278
279 %m
280 \itembfnl{(m) \dotdebugmacro{} to \dotdebugstroffsets}
281 The second operand of a 
282 \DWMACROdefinestrx{} or \DWMACROundefstrx{} 
283 macro information entry is an index
284 into the string offset table in the 
285 \dotdebugstroffsets{} section.
286
287 %n
288 \itembfnl{(n) \dotdebugmacro{} to \dotdebugline}
289 The second operand of 
290 \DWMACROstartfile{} refers to a file entry in the 
291 \dotdebugline{} section relative to the start 
292 of that section given in the macro information header.
293
294 %o
295 \itembfnl{(o) \dotdebugloclists{} to \dotdebugaddr}
296 \DWOPaddrx{} and \DWOPconstx{} operators that occur in the 
297 \dotdebugloclists{} section refer indirectly to the 
298 \dotdebugaddr{} section by way of the 
299 \DWATaddrbase{} attribute in the associated \dotdebuginfo{} 
300 section.
301
302 %p
303 \itembfnl{(p) \dotdebugmacro{} to \dotdebugstr}
304 The second operand of a 
305 \DWMACROdefinestrp{} or \DWMACROundefstrp{} macro information
306 entry is an index into the string table in the 
307 \dotdebugstr{} section.
308
309 %q
310 \needlines{4}
311 \itembfnl{(q) \dotdebugmacro{} to \dotdebugmacro}
312 The operand of a 
313 \DWMACROimport{} macro information
314 entry is an offset into another part of the 
315 \dotdebugmacro{} section to the header for the 
316 sequence to be replicated.
317
318 %r
319 \needlines{4}
320 \itembfnl{(r) \dotdebugline{} to \dotdebuglinestr}
321 The value of a \DWFORMlinestrp{} form refers to a
322 string section specific to the line number table.
323 This form can be used in a \dotdebugline{} section
324 (as well as in a \dotdebuginfo{} section).
325
326 %s
327 \itembfnl{(s) \dotdebuginfo{} to \dotdebuglinestr}
328 The value of a \DWFORMlinestrp{} form refers to a
329 string section specific to the line number table.
330 This form can be used in a \dotdebuginfo{} section
331 (as well as in a \dotdebugline{} section).\footnote{ 
332 The circled (s) connects to the circled
333 (s)' via hyperspace (a wormhole).}
334  
335 \end{description}
336
337
338
339 \begin{landscape}
340 \begin{figure}
341 %\scriptsize
342 \begin{tikzpicture}
343     [sect/.style={rectangle, rounded corners=10pt, draw, fill=blue!15, 
344         inner sep=.2cm, minimum width=4.0cm},
345      link/.style={rectangle,                       draw,
346         inner sep=.2cm, minimum width=4.5cm}]
347
348 \fill[yellow!25] (7.5,-1) -- (7.5,14.5) -- (19,14.5) -- (19,-1) -- cycle;
349
350 % First column
351 %
352 \node(ysectabb)    at ( 5, 13.5) [sect] {\dotdebugabbrev};
353 \node(ysectadd)    at ( 2, 12.0) [sect] {\dotdebugaddr};
354 \node(ysectara)    at ( 0, 10.5) [sect] {\dotdebugaranges};
355 \node(ysectfra)    at ( 0,  9.0) [sect] {\dotdebugframe};
356 \node(ysectlin)    at ( 0,  7.5) [sect] {\dotdebugline};
357 \node(ysectlis)    at ( 0,  5.7) [sect] {\dotdebuglinestr};
358 \node(ysectnam)    at ( 0,  4.0) [sect] {\dotdebugnames};
359 \node(ysectstr)    at ( 2,  2.0) [sect] {\dotdebugstr};
360 \node(ysectsto)    at ( 5,  0.0) [sect] {\dotdebugstroffsets};
361
362 \node(ysectinf)    at ( 5,  7)   [sect] {\begin{tabular}{c}
363                                          ~\\
364                                          \dotdebuginfo \\
365                                          (skeleton CU)\\
366                                          ~
367                                          \end{tabular}};
368
369 \node(ysectinfdwo) at (10.5,7)   [sect] {\begin{tabular}{c}
370                                          \dotdebuginfodwo \\
371                                          (one CU, possibly \\
372                                          multiple COMDAT \\
373                                          type units)
374                                          \end{tabular}};
375
376 \node(ysectabbdwo) at (10.5, 13.5) [sect] {\dotdebugabbrevdwo};
377 \node(ysectlocdwo) at (14.0, 11.5) [sect] {\dotdebugloclistsdwo};
378 \node(ysectrandwo) at (15.8,  9.5) [sect] {\dotdebugrnglistsdwo};
379 \node(ysectlindwo) at (16.0,  7.0) [sect] {\dotdebuglinedwo};
380 \node(ysectmacdwo) at (16.0,  4.5) [sect] {\dotdebugmacrodwo};
381 \node(ysectstrdwo) at (13.5,  2.0) [sect] {\dotdebugstrdwo};
382 \node(ysectstodwo) at (10.5,  0.0) [sect] {\dotdebugstroffsetsdwo};
383
384 \draw[thin,-triangle 45]        (ysectinf) -- (ysectabb) node[midway, right] {(c)};
385 \draw[thin,-triangle 45]        (ysectinf) -- (ysectadd) node[midway, right] {(k)};
386 \draw[thin,-triangle 45]        (ysectara.east) -- (ysectinf) node[midway, left] {(a)};
387 \draw[thin,-triangle 45]        (ysectinf) -- (ysectlin.east) node[midway, above] {(h)};
388 \draw[thin,-triangle 45]        (ysectlin) -- (ysectlis) node[midway, right] {(l)};
389 \draw[thin,-triangle 45]        (ysectnam.east) -- (ysectinf) node[midway, left] {(b)};
390 \draw[thin,-triangle 45]        (ysectinf) -- (ysectstr) node[midway, right] {(d)};
391 \draw[thin,-triangle 45]        (ysectinf) -- (ysectsto) node[midway, right] {(e)};
392 \draw[thin,-triangle 45]        (ysectsto) -- (ysectstr) node[midway, right] {(l)};
393
394 \draw[dashed, thick,-triangle 45]  (ysectinf) .. controls (7.5, 11) ..(ysectinfdwo) 
395                                                        node[midway, above] {(did)};
396
397 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectabbdwo) node[midway, left] {(co)};
398 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectlindwo.west) node[midway, above] {(ho)};
399 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectrandwo.west) node[midway, above] {(io)};
400 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectlocdwo.west) node[midway, right] {(jo)};
401 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectmacdwo.west) node[midway, above] {(go)};
402 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectstrdwo) node[midway, right] {(do)};
403 \draw[thin,-triangle 45]  (ysectinfdwo) -- (ysectstodwo) node[midway, left] {(eo)};
404
405 \draw[thin,-triangle 45]  (ysectstodwo) -- (ysectstrdwo) node[near end, below] {(lo)};
406 \draw[thin,-triangle 45]  (ysectmacdwo) -- (ysectstrdwo) node[midway, left] {(po)};
407 \draw[thin,-triangle 45]  (ysectmacdwo) .. controls (16.2, 1) .. (ysectstodwo.east)
408                                                        node[very near start, right] {(mo)};
409 \draw[thin,-triangle 45]  (ysectlindwo.east) .. controls (19,4) and (18, 0) .. (ysectstodwo.east)
410                                                        node[very near start, left] {(lmo)};
411
412 \draw (0,  14) node {\begin{tabular}{l} Skeleton DWARF \\ in executable \end{tabular}};
413 \draw (17, 14) node {\begin{tabular}{r} Split DWARF \\ in separate object \end{tabular}};                                                
414 \end{tikzpicture}
415 \vspace{3mm}
416 \caption{Split DWARF section relationships}
417 \label{fig:splitdwarfsectionrelationships}
418 \end{figure}
419 \end{landscape}
420
421 \clearpage
422 \begin{center}
423    \textbf{Notes for Figure \ref{fig:splitdwarfsectionrelationships}}
424 \end{center}
425 \begin{description}
426 \itembfnl{(a)  \dotdebugaranges{} to \dotdebuginfo}
427 The \texttt{debug\_info\_offset} field in the header is the 
428 offset in the \dotdebuginfo{} section of the corresponding 
429 compilation unit header of the skeleton \dotdebuginfo{} section 
430 (not the compilation unit entry).  The \DWATdwoname{} attribute 
431 in the \dotdebuginfo{} skeleton connects 
432 the ranges to the full compilation unit in \dotdebuginfodwo.
433
434 \itembfnl{(b) \dotdebugnames{} to \dotdebuginfo}
435 The \dotdebugnames{} section  offsets lists provide an offset
436 for the skeleton compilation unit and eight 
437 byte signatures for the type units that appear only in the 
438 \dotdebuginfodwo. The DIE offsets for these 
439 compilation units and type units refer to the DIEs in the 
440 \dotdebuginfodwo{} section for the respective 
441 compilation unit and type units.
442
443 \itembfnl{(c) \dotdebuginfo{} skeleton to \dotdebugabbrev}
444 The \HFNdebugabbrevoffset{} value in the header is 
445 the offset in the \dotdebugabbrev{} section of the 
446 abbreviations for that compilation unit skeleton.
447
448 \itembfnl{(co) \dotdebuginfodwo{} to \dotdebugabbrevdwo}
449 The \HFNdebugabbrevoffset{} value in the header 
450 is the offset in the \dotdebugabbrevdwo{} section of the 
451 abbreviations for that compilation unit.
452
453 \itembfnl{(d) \dotdebuginfo{} to \dotdebugstr}
454 Attribute values of class string may have form \DWFORMstrp, 
455 whose value is an offset in the 
456 \dotdebugstr{} section of the corresponding string.
457
458 \itembfnl{(did) \dotdebuginfo{} to \dotdebuginfodwo}
459 The \DWATdwoname{}
460 attribute in a skeleton unit identifies the file containing 
461 the corresponding \texttt{.dwo} (split) data. 
462
463 \itembfnl{(do) \dotdebuginfodwo{} to \dotdebugstrdwo}
464 Attribute values of class string may have form 
465 \DWFORMstrp, whose value is an offset in the 
466 \dotdebugstrdwo{} section of the corresponding string.
467
468 \itembfnl{(e) \dotdebuginfo{} to \dotdebugstroffsets}
469 Attribute values of class string may have form 
470 \DWFORMstrx, whose value is an index into  the 
471 \dotdebugstroffsets{} section for the corresponding string.
472
473 \needlines{4}
474 \itembfnl{(eo)\dotdebuginfodwo{} to \dotdebugstroffsetsdwo}
475 Attribute values of class string may have form 
476 \DWFORMstrx, whose value is an index into  the 
477 \dotdebugstroffsetsdwo{} section for the corresponding string.
478
479 \itembfnl{(fo) \dotdebuginfodwo{} to \dotdebuginfodwo}
480 The operand of the \DWOPcallref{} DWARF expression 
481 operator is the offset of a debugging 
482 information entry in the \dotdebuginfodwo{} section of 
483 another compilation unit.  Similarly for attribute 
484 operands that use \DWFORMrefaddr. 
485 See Section \refersec{chap:controlflowoperations}.
486
487 \itembfnl{(go) \dotdebuginfodwo{} to \dotdebugmacrodwo}
488 An attribute of class \CLASSmacptr{} (specifically \DWATmacros{} 
489 with form \DWFORMsecoffset{}) is an offset within the 
490 \dotdebugmacrodwo{} section of the beginning of the macro 
491 information for the referencing unit.
492
493 \itembfnl{(h) \dotdebuginfo{} (skeleton) to \dotdebugline}
494 An attribute value of class \CLASSlineptr{} (specifically 
495 \DWATstmtlist{} with form \DWFORMsecoffset) 
496 is an offset within the \dotdebugline{} section of the 
497 beginning of the line number information for the 
498 referencing unit.
499
500 \itembfnl{(ho) \dotdebuginfodwo{}  to \dotdebuglinedwo{} (skeleton)}
501 An attribute value of class \CLASSlineptr{} (specifically  
502 \DWATstmtlist{}  with form \DWFORMsecoffset) 
503 is an offset within the \dotdebuglinedwo{} section of the 
504 beginning of the line number header information 
505 for the referencing unit (the line table details are not in 
506 \dotdebuglinedwo{} but the line header with its list 
507 of file names is present).
508
509 \itembfnl{(io) \dotdebuginfodwo{} to \dotdebugrnglistsdwo}
510 An attribute value of class \CLASSrnglist{} (specifically 
511 \DWATranges{} with form \DWFORMrnglistx{} or \DWFORMsecoffset) 
512 is an index or offset within the \dotdebugrnglistsdwo{}
513 section of a \addtoindex{range list}.
514 The format of \dotdebugrnglistsdwo{} location list entries 
515 is restricted to a subset of those in \dotdebugrnglists.
516 See Section \refersec{chap:noncontiguousaddressranges} for details.
517
518 \itembfnl{(jo) \dotdebuginfodwo{} to \dotdebugloclistsdwo}
519 An attribute value of class 
520 \CLASSloclist{} (specifically with form \DWFORMloclistx{}
521 or \DWFORMsecoffset) 
522 is an index or offset within the \dotdebugloclistsdwo{} 
523 section of a \addtoindex{location list.}
524 The format of \dotdebugloclistsdwo{} location list entries 
525 is restricted to a subset of those in \dotdebugloclists.
526 See Section \refersec{chap:locationlists} for details.
527
528 \needlines{4}
529 \itembfnl{(k) \dotdebuginfo{} to \dotdebugaddr}
530 The value of the \DWATaddrbase{} attribute in the 
531 \DWTAGcompileunit, \DWTAGpartialunit{} or \DWTAGtypeunit{} DIE 
532 is the offset in the \dotdebugaddr{} section of the machine 
533 addresses for that unit.
534 \DWFORMaddrx, \DWOPaddrx{} and \DWOPconstx{} contain indices 
535 relative to that offset.
536
537 \end{description}