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 diagram and associated notes on the following pages.
9 \textit{This diagram does not distinguish between the normal
10 and split object section pairs (for example, \dotdebuginfo{}
11 versus \dotdebuginfodwo).}
13 \begin{figure}[H]
14 \begin{tikzpicture}
15     [sect/.style={rectangle, rounded corners=10pt, draw, fill=blue!10, inner sep=.2cm, minimum width=4.5cm},
16          link/.style={rectangle,                       draw,               inner sep=.2cm, minimum width=5.0cm}]
18 % The left column, first sections, then links, from top to bottom
19 %
20 \node(zsectara) at ( 0, 16.) [sect] {\dotdebugaranges};
21 \node(zlinka)   at ( 0, 14.) [link] {To compilation unit (a)};
22 \node(zsectinf) at ( 0, 8.0) [sect] {\begin{tabular}{c}
23                                                                          \dotdebuginfo \\
24                                                                          \dotdebugtypes
25                                                                          \end{tabular}};
26 \node(zlinkb)   at ( 0, 2.0) [link] {To compilation unit (b)};
27 \node(zsectpub) at ( 0, 0.0) [sect] {\begin{tabular}{c}
28                                                                          \dotdebugpubnames \\
29                                                                          \dotdebugpubtypes
30                                                                          \end{tabular}};
32 \draw[thick,-to reversed]               (zlinka) -- (zsectara);
33 \draw[thick,angle 90-]                  (zsectinf) -- (zlinka);
34 \draw[thick,-angle 90]                  (zlinkb) -- (zsectinf);
35 \draw[thick,to reversed-]               (zsectpub) -- (zlinkb);
37 % The middle column, similarly
38 %
39 \node(zsectfra) at (6, 16.)   [sect] {\dotdebugframe};
40 \node(zlinkc)   at (6, 14.5)  [link] {To abbreviations (c)};
41 \node(zlinkd)   at (6, 13.25) [link] {\DWFORMstrp{} (d)};
42 \node(zlinke)   at (6, 11.5)  [link] {\begin{tabular}{c}
43                                                                           \DWATstroffsetsbase, \\
44                                                                           \DWFORMstrx{} (e)
45                                                                           \end{tabular}};
46 \node(zlinkf)   at (6, 9.5)   [link] {\begin{tabular}{c}
47                                                                           \DWOPcallref{} (f) \\
49                                                                           \end{tabular}};
50 \node(zlinkg)   at (6,  8.)   [link] {\DWATlocation{}, etc. (g)};
51 \node(zlinkh)   at (6,  6.5) [link] {\DWATranges{} (h)};
52 \node(zlinki)   at (6,  5.0)  [link] {\DWATmacroinfo{} (i)};
53 \node(zlinkj)   at (6,  3.5)  [link] {\DWATstmtlist{} (j)};
54 \node(zlinkk)   at (6,  1.)   [link] {\begin{tabular}(c)
56                                                                           \DWFORMaddrx, (k) \\
58                                                                           \DWOPconstx
59                                                                           \end{tabular}};
61 % Links between left and center
62 %
63 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkc.west);
64 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkd.west);
65 \draw[thick,to reversed-]                       (zsectinf) -- (zlinke.west);
66 \draw[<->,thick]                                        (zsectinf) -- (zlinkf.west);
67 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkg.west);
68 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkh.west);
69 \draw[thick,to reversed-]                       (zsectinf) -- (zlinki.west);
70 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkj.west);
71 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkk.north west);
73 % The right column
74 %
75 \node(zsectabb) at (12, 16) [sect] {\dotdebugabbrev};
76 \node(zsectstr) at (12, 14) [sect] {\dotdebugstr};
77 \node(zlinkl)   at (12, 12) [link] {To strings (k)};
78 \node(zsectstx) at (12, 10) [sect] {\dotdebugstroffsets};
79 \node(zsectloc) at (12,  8) [sect] {\dotdebugloc};
80 \node(zsectran) at (12,  6) [sect] {\dotdebugranges};
81 \node(zsectmac) at (12,  4) [sect] {\dotdebugmacinfo};
82 \node(zsectlin) at (12,  2) [sect] {\dotdebugline};
83 \node(zsectadx) at (12,  0) [sect] {\dotdebugaddr};
85 \draw[thick,to reversed-]               (zsectstx) -- (zlinkl);
86 \draw[thick,-angle 90]                  (zlinkl) -- (zsectstr);
88 % Links between center and right
89 %
90 \draw[thick,-angle 90]          (zlinkc.east) -- (zsectabb.west);
91 \draw[thick,-angle 90]          (zlinkd.east) -- (zsectstr.west);
92 \draw[thick,-angle 90]          (zlinke.east) -- (zsectstx.west);
93 \draw[thick,-angle 90]          (zlinkg.east) -- (zsectloc.west);
94 \draw[thick,-angle 90]          (zlinkh.east) -- (zsectran.west);
95 \draw[thick,-angle 90]          (zlinki.east) -- (zsectmac.west);
96 \draw[thick,-angle 90]          (zlinkj.east) -- (zsectlin.west);
99 \end{tikzpicture}
100 \vspace{5mm}
101 \caption{Debug section relationships}
102 \label{fig:debugsectionrelationships}
103 \end{figure}
105 \clearpage
106 \begin{center}
107    \textbf{Notes}
108 \end{center}
109 \begin{enumerate}[(a)]
110 \item  \dotdebugaranges{} to \dotdebuginfo \\
111 The \texttt{debug\_info\_offset} value in
112 the header is
113 the offset in the \dotdebuginfo{} section of the
114 corresponding compilation unit header (not the compilation
115 unit entry).
117 %b
118 \item \dotdebugpubnames{} and \dotdebugpubtypes{} to \dotdebuginfo \\
119 The \texttt{debug\_info\_offset} value in the header is the offset in the
120 \dotdebuginfo{} section of the
121 corresponding compilation unit header (not
122 the compilation unit entry). Each pubname/pubtype unit has the offset (within
123 the corresponding compilation unit) of the applicable debugging
124 information entry.
126 %c
127 \item \dotdebuginfo{} and \dotdebugtypes{} to \dotdebugabbrev \\
128 The \texttt{debug\_abbrev\_offset} value in the header is the offset in the
129 \dotdebugabbrev{}
130 section of the abbreviations for that compilation unit.
132 %d
133 \item  \dotdebuginfo{} and \dotdebugtypes{} to \dotdebugstr \\
134 Attribute values of class string may have form
135 \DWFORMstrp, whose
136 value is the offset in the \dotdebugstr{}
137 section of the corresponding string.
139 %e
140 \item \dotdebugstroffsets{} to \dotdebugstroffsets \\
141 The value of the \DWATstroffsetsbase{} attribute in a
142 compilation, partial or type unit DIE is the offset in the
143 \dotdebugstroffsets{} section of the
144 \addtoindex{string offsets table}
145 for that unit.
146 In addition, attribute values of class string may have form
147 \DWFORMstrx, whose value is an index into the
148 string offsets table.
150 %f
151 \item \dotdebuginfo{} to \dotdebuginfo \\
152 The operand of the \DWOPcallref{}
153 DWARF expression operator is the
154 offset of a debugging information entry in the
155 \dotdebuginfo{} section of another compilation.
156 Similarly for attribute operands that have use
159 %g
160 \item \dotdebuginfo{} to \dotdebugloc \\
161 An attribute value of class \livelink{chap:classloclistptr}{loclistptr}
162 (specifically form
163 \DWFORMsecoffset)
164 is an offset within the \dotdebugloc{}
165 section of a
168 %h
169 \item \dotdebuginfo{} to \dotdebugranges \\
170 An attribute value of class \livelink{chap:classrangelistptr}{rangelistptr}
171 (specifically form
172 \DWFORMsecoffset)
173 is an offset within the \dotdebugranges{} section of
174 a range list.
176 %i
177 \needlines{5}
178 \item \dotdebuginfo{} to \dotdebugmacinfo \\
179 An attribute value of class
180 \livelink{chap:classmacptr}{macptr} (specifically form
181 \DWFORMsecoffset) is an
182 offset within the
183 \dotdebugmacinfo{} section
184 of the beginning of the macro information for the referencing unit.
186 %j
187 \item \dotdebuginfo{} to \dotdebugline \\
188 An attribute value of class
189 \livelink{chap:classlineptr}{lineptr} (specifically form
190 \DWFORMsecoffset)
191 is an offset in the
192 \dotdebugline{} section of the
193 beginning of the line number information for the referencing unit.
195 %k
196 \item \dotdebuginfo{} to \dotdebugaddr \\
197 The value of the \DWATaddrbase{} attribute in the
198 \DWTAGcompileunit{} or \DWTAGpartialunit{} DIE is the
199 offset in the \dotdebugaddr{} section of the machine
200 addresses for that compilation unit or type unit.