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                                                                          \dotdebugtypes
25                                                                          \end{tabular}};
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};
43                                                                           \DWATstroffsetsbase, \\
44                                                                           \DWFORMstrx{} (e)
45                                                                           \end{tabular}};
47                                                                           \DWOPcallref{} (f) \\
49                                                                           \end{tabular}};
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);
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};
78 \node(zsectstx) at (12, 10) [sect] {\dotdebugstroffsets};
79 \node(zsectloc) at (12,  8) [sect] {\dotdebugloc{} (m)};
80 \node(zsectran) at (12,  6) [sect] {\dotdebugranges};
81 \node(zsectmac) at (12,  4) [sect] {\dotdebugmacinfo};
82 \node(zsectlin) at (12,  2) [sect] {\dotdebugline};
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
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
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
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
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{}, \DWTAGtypeunit{} or \DWTAGpartialunit{} DIE is the
199 offset in the \dotdebugaddr{} section of the machine
202 indices relative to that offset.
204 %l
205 \item \dotdebugstroffsets{} to \dotdebugstr \\
206 Entries in the string offsets table
207 are offsets to the corresponding string text in the
208 \dotdebugstr{} section.
210 %m
211 \item \dotdebugloc{} to \dotdebugaddr \\
212 \DWOPaddrx{} and \DWOPconstx{} operators that occur in the
213 \dotdebugloc{} section refer indirectly to the
214 \dotdebugaddr{} section by way of the
215 \DWATaddrbase{} attribute in the associated \dotdebuginfo{} or
216 \dotdebugtypes{} section.
217 \end{enumerate}