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};
22 \node(zsectinf) at ( 0, 8.0) [sect] {\begin{tabular}{c}
23                                                                          \dotdebuginfo
24                                                                          \end{tabular}};
26 \node(zsectpub) at ( 0, 0.0) [sect] {\begin{tabular}{c}
27                                                                          \dotdebugpubnames \\
28                                                                          \dotdebugpubtypes
29                                                                          \end{tabular}};
31 \draw[thick,-to reversed]               (zlinka) -- (zsectara);
32 \draw[thick,angle 90-]                  (zsectinf) -- (zlinka);
33 \draw[thick,-angle 90]                  (zlinkb) -- (zsectinf);
34 \draw[thick,to reversed-]               (zsectpub) -- (zlinkb);
36 % The middle column, similarly
37 %
38 \node(zsectfra) at (6, 16.)   [sect] {\dotdebugframe};
42                                                                           \DWATstroffsetsbase, \\
43                                                                           \DWFORMstrx{} (e)
44                                                                           \end{tabular}};
46                                                                           \DWOPcallref{} (f) \\
48                                                                           \end{tabular}};
57                                                                           \DWOPconstx
58                                                                           \end{tabular}};
60 % Links between left and center
61 %
62 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkc.west);
63 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkd.west);
64 \draw[thick,to reversed-]                       (zsectinf) -- (zlinke.west);
66 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkg.west);
67 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkh.west);
68 \draw[thick,to reversed-]                       (zsectinf) -- (zlinki.west);
69 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkj.west);
70 \draw[thick,to reversed-]                       (zsectinf) -- (zlinkk.north west);
72 % The right column
73 %
74 \node(zsectabb) at (12, 16) [sect] {\dotdebugabbrev};
75 \node(zsectstr) at (12, 14) [sect] {\dotdebugstr};
77 \node(zsectstx) at (12, 10) [sect] {\dotdebugstroffsets};
78 \node(zsectloc) at (12,  8) [sect] {\dotdebugloc{} (m)};
79 \node(zsectran) at (12,  6) [sect] {\dotdebugranges};
80 \node(zsectmac) at (12,  4) [sect] {\dotdebugmacinfo};
81 \node(zsectlin) at (12,  2) [sect] {\dotdebugline};
84 \draw[thick,to reversed-]               (zsectstx) -- (zlinkl);
85 \draw[thick,-angle 90]                  (zlinkl) -- (zsectstr);
87 % Links between center and right
88 %
89 \draw[thick,-angle 90]          (zlinkc.east) -- (zsectabb.west);
90 \draw[thick,-angle 90]          (zlinkd.east) -- (zsectstr.west);
91 \draw[thick,-angle 90]          (zlinke.east) -- (zsectstx.west);
92 \draw[thick,-angle 90]          (zlinkg.east) -- (zsectloc.west);
93 \draw[thick,-angle 90]          (zlinkh.east) -- (zsectran.west);
94 \draw[thick,-angle 90]          (zlinki.east) -- (zsectmac.west);
95 \draw[thick,-angle 90]          (zlinkj.east) -- (zsectlin.west);
98 \end{tikzpicture}
99 \vspace{5mm}
100 \caption{Debug section relationships}
101 \label{fig:debugsectionrelationships}
102 \end{figure}
104 \clearpage
105 \begin{center}
106    \textbf{Notes}
107 \end{center}
108 \begin{enumerate}[(a)]
109 \item  \dotdebugaranges{} to \dotdebuginfo \\
110 The \texttt{debug\_info\_offset} value in
112 the offset in the \dotdebuginfo{} section of the
113 corresponding compilation unit header (not the compilation
114 unit entry).
116 %b
117 \item \dotdebugpubnames{} and \dotdebugpubtypes{} to \dotdebuginfo \\
118 The \texttt{debug\_info\_offset} value in the header is the offset in the
119 \dotdebuginfo{} section of the
120 corresponding compilation unit header (not
121 the compilation unit entry). Each pubname/pubtype unit has the offset (within
122 the corresponding compilation unit) of the applicable debugging
123 information entry.
125 %c
126 \item \dotdebuginfo{} to \dotdebugabbrev \\
127 The \texttt{debug\_abbrev\_offset} value in the header is the offset in the
128 \dotdebugabbrev{}
129 section of the abbreviations for that compilation unit.
131 %d
132 \item  \dotdebuginfo{} to \dotdebugstr \\
133 Attribute values of class string may have form
134 \DWFORMstrp, whose
135 value is the offset in the \dotdebugstr{}
136 section of the corresponding string.
138 %e
139 \item \dotdebugstroffsets{} to \dotdebugstroffsets \\
140 The value of the \DWATstroffsetsbase{} attribute in a
141 compilation, partial or type unit DIE is the offset in the
142 \dotdebugstroffsets{} section of the
144 for that unit.
145 In addition, attribute values of class string may have form
146 \DWFORMstrx, whose value is an index into the
147 string offsets table.
149 %f
150 \item \dotdebuginfo{} to \dotdebuginfo \\
151 The operand of the \DWOPcallref{}
152 DWARF expression operator is the
153 offset of a debugging information entry in the
154 \dotdebuginfo{} section of another compilation.
155 Similarly for attribute operands that have use
158 %g
159 \item \dotdebuginfo{} to \dotdebugloc \\
160 An attribute value of class \livelink{chap:classloclistptr}{loclistptr}
161 (specifically form
162 \DWFORMsecoffset)
163 is an offset within the \dotdebugloc{}
164 section of a
167 %h
168 \item \dotdebuginfo{} to \dotdebugranges \\
169 An attribute value of class \livelink{chap:classrangelistptr}{rangelistptr}
170 (specifically form
171 \DWFORMsecoffset)
172 is an offset within the \dotdebugranges{} section of
173 a range list.
175 %i
176 \needlines{5}
177 \item \dotdebuginfo{} to \dotdebugmacinfo \\
178 An attribute value of class
180 \DWFORMsecoffset) is an
181 offset within the
182 \dotdebugmacinfo{} section
183 of the beginning of the macro information for the referencing unit.
185 %j
186 \item \dotdebuginfo{} to \dotdebugline \\
187 An attribute value of class
189 \DWFORMsecoffset)
190 is an offset in the
191 \dotdebugline{} section of the
192 beginning of the line number information for the referencing unit.
194 %k
195 \item \dotdebuginfo{} to \dotdebugaddr \\
196 The value of the \DWATaddrbase{} attribute in the
197 \DWTAGcompileunit{}, \DWTAGtypeunit{} or \DWTAGpartialunit{} DIE is the
198 offset in the \dotdebugaddr{} section of the machine
201 indices relative to that offset.
203 %l
204 \item \dotdebugstroffsets{} to \dotdebugstr \\
205 Entries in the string offsets table
206 are offsets to the corresponding string text in the
207 \dotdebugstr{} section.
209 %m
210 \item \dotdebugloc{} to \dotdebugaddr \\
211 \DWOPaddrx{} and \DWOPconstx{} operators that occur in the
212 \dotdebugloc{} section refer indirectly to the
213 \dotdebugaddr{} section by way of the
214 \DWATaddrbase{} attribute in the associated \dotdebuginfo{}
215 section.
216 \end{enumerate}