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