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