symfile.c revision 1.1.1.10 1 1.1 christos /* Generic symbol file reading for the GNU debugger, GDB.
2 1.1 christos
3 1.1.1.9 christos Copyright (C) 1990-2024 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos Contributed by Cygnus Support, using pieces from other GDB modules.
6 1.1 christos
7 1.1 christos This file is part of GDB.
8 1.1 christos
9 1.1 christos This program is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3 of the License, or
12 1.1 christos (at your option) any later version.
13 1.1 christos
14 1.1 christos This program is distributed in the hope that it will be useful,
15 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
16 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 1.1 christos GNU General Public License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License
20 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 1.1 christos
22 1.1 christos #include "arch-utils.h"
23 1.1.1.10 christos #include "cli/cli-cmds.h"
24 1.1.1.9 christos #include "extract-store-integer.h"
25 1.1.1.10 christos #include "gdbsupport/gdb_vecs.h"
26 1.1 christos #include "symtab.h"
27 1.1 christos #include "gdbcore.h"
28 1.1 christos #include "frame.h"
29 1.1 christos #include "target.h"
30 1.1 christos #include "value.h"
31 1.1 christos #include "symfile.h"
32 1.1 christos #include "objfiles.h"
33 1.1 christos #include "source.h"
34 1.1 christos #include "breakpoint.h"
35 1.1 christos #include "language.h"
36 1.1 christos #include "complaints.h"
37 1.1 christos #include "inferior.h"
38 1.1 christos #include "regcache.h"
39 1.1.1.9 christos #include "filenames.h"
40 1.1.1.8 christos #include "gdbsupport/gdb_obstack.h"
41 1.1 christos #include "completer.h"
42 1.1.1.7 christos #include "readline/tilde.h"
43 1.1 christos #include "block.h"
44 1.1.1.6 christos #include "observable.h"
45 1.1 christos #include "exec.h"
46 1.1 christos #include "varobj.h"
47 1.1 christos #include "solib.h"
48 1.1 christos #include "stack.h"
49 1.1 christos #include "gdb_bfd.h"
50 1.1 christos #include "cli/cli-utils.h"
51 1.1.1.7 christos #include "gdbsupport/byte-vector.h"
52 1.1.1.7 christos #include "gdbsupport/pathstuff.h"
53 1.1.1.7 christos #include "gdbsupport/selftest.h"
54 1.1.1.6 christos #include "cli/cli-style.h"
55 1.1.1.7 christos #include "gdbsupport/forward-scope-exit.h"
56 1.1.1.8 christos #include "gdbsupport/buildargv.h"
57 1.1 christos
58 1.1 christos #include <sys/types.h>
59 1.1 christos #include <fcntl.h>
60 1.1 christos #include <sys/stat.h>
61 1.1 christos #include <ctype.h>
62 1.1.1.5 christos #include <chrono>
63 1.1.1.6 christos #include <algorithm>
64 1.1 christos
65 1.1 christos int (*deprecated_ui_load_progress_hook) (const char *section,
66 1.1 christos unsigned long num);
67 1.1 christos void (*deprecated_show_load_progress) (const char *section,
68 1.1 christos unsigned long section_sent,
69 1.1 christos unsigned long section_size,
70 1.1 christos unsigned long total_sent,
71 1.1 christos unsigned long total_size);
72 1.1 christos void (*deprecated_pre_add_symbol_hook) (const char *);
73 1.1 christos void (*deprecated_post_add_symbol_hook) (void);
74 1.1 christos
75 1.1.1.6 christos using clear_symtab_users_cleanup
76 1.1.1.6 christos = FORWARD_SCOPE_EXIT (clear_symtab_users);
77 1.1 christos
78 1.1 christos /* Global variables owned by this file. */
79 1.1.1.8 christos
80 1.1.1.8 christos /* See symfile.h. */
81 1.1.1.8 christos
82 1.1.1.8 christos int readnow_symbol_files;
83 1.1.1.8 christos
84 1.1.1.8 christos /* See symfile.h. */
85 1.1.1.8 christos
86 1.1.1.8 christos int readnever_symbol_files;
87 1.1 christos
88 1.1 christos /* Functions this file defines. */
89 1.1 christos
90 1.1.1.5 christos static void symbol_file_add_main_1 (const char *args, symfile_add_flags add_flags,
91 1.1.1.6 christos objfile_flags flags, CORE_ADDR reloff);
92 1.1 christos
93 1.1 christos static const struct sym_fns *find_sym_fns (bfd *);
94 1.1 christos
95 1.1 christos static void simple_free_overlay_table (void);
96 1.1 christos
97 1.1 christos static void read_target_long_array (CORE_ADDR, unsigned int *, int, int,
98 1.1 christos enum bfd_endian);
99 1.1 christos
100 1.1 christos static int simple_read_overlay_table (void);
101 1.1 christos
102 1.1 christos static int simple_overlay_update_1 (struct obj_section *);
103 1.1 christos
104 1.1 christos static void symfile_find_segment_sections (struct objfile *objfile);
105 1.1 christos
106 1.1 christos /* List of all available sym_fns. On gdb startup, each object file reader
107 1.1 christos calls add_symtab_fns() to register information on each format it is
108 1.1 christos prepared to read. */
109 1.1 christos
110 1.1.1.6 christos struct registered_sym_fns
111 1.1 christos {
112 1.1.1.6 christos registered_sym_fns (bfd_flavour sym_flavour_, const struct sym_fns *sym_fns_)
113 1.1.1.6 christos : sym_flavour (sym_flavour_), sym_fns (sym_fns_)
114 1.1.1.6 christos {}
115 1.1.1.6 christos
116 1.1 christos /* BFD flavour that we handle. */
117 1.1 christos enum bfd_flavour sym_flavour;
118 1.1 christos
119 1.1 christos /* The "vtable" of symbol functions. */
120 1.1 christos const struct sym_fns *sym_fns;
121 1.1.1.6 christos };
122 1.1 christos
123 1.1.1.6 christos static std::vector<registered_sym_fns> symtab_fns;
124 1.1 christos
125 1.1.1.2 christos /* Values for "set print symbol-loading". */
126 1.1.1.2 christos
127 1.1.1.2 christos const char print_symbol_loading_off[] = "off";
128 1.1.1.2 christos const char print_symbol_loading_brief[] = "brief";
129 1.1.1.2 christos const char print_symbol_loading_full[] = "full";
130 1.1.1.2 christos static const char *print_symbol_loading_enums[] =
131 1.1.1.2 christos {
132 1.1.1.2 christos print_symbol_loading_off,
133 1.1.1.2 christos print_symbol_loading_brief,
134 1.1.1.2 christos print_symbol_loading_full,
135 1.1.1.2 christos NULL
136 1.1.1.2 christos };
137 1.1.1.2 christos static const char *print_symbol_loading = print_symbol_loading_full;
138 1.1.1.2 christos
139 1.1.1.7 christos /* See symfile.h. */
140 1.1 christos
141 1.1.1.7 christos bool auto_solib_add = true;
142 1.1 christos
143 1.1 christos
145 1.1.1.2 christos /* Return non-zero if symbol-loading messages should be printed.
146 1.1.1.2 christos FROM_TTY is the standard from_tty argument to gdb commands.
147 1.1.1.2 christos If EXEC is non-zero the messages are for the executable.
148 1.1.1.2 christos Otherwise, messages are for shared libraries.
149 1.1.1.2 christos If FULL is non-zero then the caller is printing a detailed message.
150 1.1.1.2 christos E.g., the message includes the shared library name.
151 1.1.1.2 christos Otherwise, the caller is printing a brief "summary" message. */
152 1.1.1.2 christos
153 1.1.1.2 christos int
154 1.1.1.2 christos print_symbol_loading_p (int from_tty, int exec, int full)
155 1.1.1.2 christos {
156 1.1.1.2 christos if (!from_tty && !info_verbose)
157 1.1.1.2 christos return 0;
158 1.1.1.2 christos
159 1.1.1.2 christos if (exec)
160 1.1.1.2 christos {
161 1.1.1.2 christos /* We don't check FULL for executables, there are few such
162 1.1.1.2 christos messages, therefore brief == full. */
163 1.1.1.2 christos return print_symbol_loading != print_symbol_loading_off;
164 1.1.1.2 christos }
165 1.1.1.2 christos if (full)
166 1.1.1.2 christos return print_symbol_loading == print_symbol_loading_full;
167 1.1.1.2 christos return print_symbol_loading == print_symbol_loading_brief;
168 1.1.1.2 christos }
169 1.1 christos
170 1.1 christos /* True if we are reading a symbol table. */
171 1.1 christos
172 1.1 christos int currently_reading_symtab = 0;
173 1.1 christos
174 1.1 christos /* Increment currently_reading_symtab and return a cleanup that can be
175 1.1 christos used to decrement it. */
176 1.1.1.5 christos
177 1.1 christos scoped_restore_tmpl<int>
178 1.1 christos increment_reading_symtab (void)
179 1.1.1.5 christos {
180 1.1.1.5 christos gdb_assert (currently_reading_symtab >= 0);
181 1.1.1.5 christos return make_scoped_restore (¤tly_reading_symtab,
182 1.1 christos currently_reading_symtab + 1);
183 1.1 christos }
184 1.1 christos
185 1.1 christos /* Remember the lowest-addressed loadable section we've seen.
186 1.1 christos
187 1.1 christos In case of equal vmas, the section with the largest size becomes the
188 1.1 christos lowest-addressed loadable section.
189 1.1 christos
190 1.1 christos If the vmas and sizes are equal, the last section is considered the
191 1.1 christos lowest-addressed loadable section. */
192 1.1.1.8 christos
193 1.1.1.8 christos static void
194 1.1 christos find_lowest_section (asection *sect, asection **lowest)
195 1.1.1.7 christos {
196 1.1 christos if (0 == (bfd_section_flags (sect) & (SEC_ALLOC | SEC_LOAD)))
197 1.1 christos return;
198 1.1 christos if (!*lowest)
199 1.1.1.7 christos *lowest = sect; /* First loadable section */
200 1.1 christos else if (bfd_section_vma (*lowest) > bfd_section_vma (sect))
201 1.1.1.7 christos *lowest = sect; /* A lower loadable section */
202 1.1.1.7 christos else if (bfd_section_vma (*lowest) == bfd_section_vma (sect)
203 1.1 christos && (bfd_section_size (*lowest) <= bfd_section_size (sect)))
204 1.1 christos *lowest = sect;
205 1.1 christos }
206 1.1 christos
207 1.1 christos /* Build (allocate and populate) a section_addr_info struct from
208 1.1 christos an existing section table. */
209 1.1.1.6 christos
210 1.1.1.9 christos section_addr_info
211 1.1 christos build_section_addr_info_from_section_table (const std::vector<target_section> &table)
212 1.1.1.6 christos {
213 1.1 christos section_addr_info sap;
214 1.1.1.8 christos
215 1.1 christos for (const target_section &stp : table)
216 1.1.1.8 christos {
217 1.1 christos struct bfd_section *asect = stp.the_bfd_section;
218 1.1 christos bfd *abfd = asect->owner;
219 1.1.1.7 christos
220 1.1.1.8 christos if (bfd_section_flags (asect) & (SEC_ALLOC | SEC_LOAD)
221 1.1.1.8 christos && sap.size () < table.size ())
222 1.1.1.7 christos sap.emplace_back (stp.addr,
223 1.1.1.6 christos bfd_section_name (asect),
224 1.1 christos gdb_bfd_section_index (abfd, asect));
225 1.1 christos }
226 1.1 christos
227 1.1 christos return sap;
228 1.1 christos }
229 1.1 christos
230 1.1 christos /* Create a section_addr_info from section offsets in ABFD. */
231 1.1.1.6 christos
232 1.1 christos static section_addr_info
233 1.1 christos build_section_addr_info_from_bfd (bfd *abfd)
234 1.1 christos {
235 1.1 christos struct bfd_section *sec;
236 1.1.1.6 christos
237 1.1.1.6 christos section_addr_info sap;
238 1.1.1.7 christos for (sec = abfd->sections; sec != NULL; sec = sec->next)
239 1.1.1.7 christos if (bfd_section_flags (sec) & (SEC_ALLOC | SEC_LOAD))
240 1.1.1.7 christos sap.emplace_back (bfd_section_vma (sec),
241 1.1.1.6 christos bfd_section_name (sec),
242 1.1 christos gdb_bfd_section_index (abfd, sec));
243 1.1 christos
244 1.1 christos return sap;
245 1.1 christos }
246 1.1 christos
247 1.1 christos /* Create a section_addr_info from section offsets in OBJFILE. */
248 1.1.1.6 christos
249 1.1 christos section_addr_info
250 1.1 christos build_section_addr_info_from_objfile (const struct objfile *objfile)
251 1.1 christos {
252 1.1 christos int i;
253 1.1 christos
254 1.1 christos /* Before reread_symbols gets rewritten it is not safe to call:
255 1.1 christos gdb_assert (objfile->num_sections == bfd_count_sections (objfile->obfd));
256 1.1.1.8 christos */
257 1.1.1.8 christos section_addr_info sap
258 1.1.1.6 christos = build_section_addr_info_from_bfd (objfile->obfd.get ());
259 1.1 christos for (i = 0; i < sap.size (); i++)
260 1.1.1.6 christos {
261 1.1 christos int sectindex = sap[i].sectindex;
262 1.1.1.7 christos
263 1.1 christos sap[i].addr += objfile->section_offsets[sectindex];
264 1.1 christos }
265 1.1 christos return sap;
266 1.1 christos }
267 1.1 christos
268 1.1 christos /* Initialize OBJFILE's sect_index_* members. */
269 1.1 christos
270 1.1 christos static void
271 1.1 christos init_objfile_sect_indices (struct objfile *objfile)
272 1.1 christos {
273 1.1 christos asection *sect;
274 1.1 christos int i;
275 1.1.1.8 christos
276 1.1 christos sect = bfd_get_section_by_name (objfile->obfd.get (), ".text");
277 1.1 christos if (sect)
278 1.1 christos objfile->sect_index_text = sect->index;
279 1.1.1.8 christos
280 1.1 christos sect = bfd_get_section_by_name (objfile->obfd.get (), ".data");
281 1.1 christos if (sect)
282 1.1 christos objfile->sect_index_data = sect->index;
283 1.1.1.8 christos
284 1.1 christos sect = bfd_get_section_by_name (objfile->obfd.get (), ".bss");
285 1.1 christos if (sect)
286 1.1 christos objfile->sect_index_bss = sect->index;
287 1.1.1.8 christos
288 1.1 christos sect = bfd_get_section_by_name (objfile->obfd.get (), ".rodata");
289 1.1 christos if (sect)
290 1.1 christos objfile->sect_index_rodata = sect->index;
291 1.1 christos
292 1.1 christos /* This is where things get really weird... We MUST have valid
293 1.1 christos indices for the various sect_index_* members or gdb will abort.
294 1.1.1.9 christos So if for example, there is no ".text" section, we have to
295 1.1 christos accommodate that. First, check for a file with the standard
296 1.1 christos one or two segments. */
297 1.1 christos
298 1.1 christos symfile_find_segment_sections (objfile);
299 1.1 christos
300 1.1 christos /* Except when explicitly adding symbol files at some address,
301 1.1 christos section_offsets contains nothing but zeros, so it doesn't matter
302 1.1 christos which slot in section_offsets the individual sect_index_* members
303 1.1 christos index into. So if they are all zero, it is safe to just point
304 1.1 christos all the currently uninitialized indices to the first slot. But
305 1.1 christos beware: if this is the main executable, it may be relocated
306 1.1 christos later, e.g. by the remote qOffsets packet, and then this will
307 1.1 christos be wrong! That's why we try segments first. */
308 1.1.1.7 christos
309 1.1 christos for (i = 0; i < objfile->section_offsets.size (); i++)
310 1.1.1.7 christos {
311 1.1 christos if (objfile->section_offsets[i] != 0)
312 1.1 christos {
313 1.1 christos break;
314 1.1 christos }
315 1.1.1.7 christos }
316 1.1 christos if (i == objfile->section_offsets.size ())
317 1.1 christos {
318 1.1 christos if (objfile->sect_index_text == -1)
319 1.1 christos objfile->sect_index_text = 0;
320 1.1 christos if (objfile->sect_index_data == -1)
321 1.1 christos objfile->sect_index_data = 0;
322 1.1 christos if (objfile->sect_index_bss == -1)
323 1.1 christos objfile->sect_index_bss = 0;
324 1.1 christos if (objfile->sect_index_rodata == -1)
325 1.1 christos objfile->sect_index_rodata = 0;
326 1.1 christos }
327 1.1 christos }
328 1.1 christos
329 1.1 christos /* Find a unique offset to use for loadable section SECT if
330 1.1 christos the user did not provide an offset. */
331 1.1 christos
332 1.1.1.8 christos static void
333 1.1.1.8 christos place_section (bfd *abfd, asection *sect, section_offsets &offsets,
334 1.1 christos CORE_ADDR &lowest)
335 1.1.1.7 christos {
336 1.1 christos CORE_ADDR start_addr;
337 1.1.1.7 christos int done;
338 1.1 christos ULONGEST align = ((ULONGEST) 1) << bfd_section_alignment (sect);
339 1.1 christos
340 1.1.1.7 christos /* We are only interested in allocated sections. */
341 1.1 christos if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
342 1.1 christos return;
343 1.1 christos
344 1.1 christos /* If the user specified an offset, honor it. */
345 1.1 christos if (offsets[gdb_bfd_section_index (abfd, sect)] != 0)
346 1.1 christos return;
347 1.1 christos
348 1.1.1.8 christos /* Otherwise, let's try to find a place for the section. */
349 1.1 christos start_addr = (lowest + align - 1) & -align;
350 1.1 christos
351 1.1 christos do {
352 1.1 christos asection *cur_sec;
353 1.1 christos
354 1.1 christos done = 1;
355 1.1 christos
356 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
357 1.1 christos {
358 1.1 christos int indx = cur_sec->index;
359 1.1 christos
360 1.1 christos /* We don't need to compare against ourself. */
361 1.1 christos if (cur_sec == sect)
362 1.1 christos continue;
363 1.1 christos
364 1.1.1.7 christos /* We can only conflict with allocated sections. */
365 1.1 christos if ((bfd_section_flags (cur_sec) & SEC_ALLOC) == 0)
366 1.1 christos continue;
367 1.1 christos
368 1.1 christos /* If the section offset is 0, either the section has not been placed
369 1.1 christos yet, or it was the lowest section placed (in which case LOWEST
370 1.1 christos will be past its end). */
371 1.1 christos if (offsets[indx] == 0)
372 1.1 christos continue;
373 1.1 christos
374 1.1.1.7 christos /* If this section would overlap us, then we must move up. */
375 1.1.1.7 christos if (start_addr + bfd_section_size (sect) > offsets[indx]
376 1.1 christos && start_addr < offsets[indx] + bfd_section_size (cur_sec))
377 1.1.1.7 christos {
378 1.1 christos start_addr = offsets[indx] + bfd_section_size (cur_sec);
379 1.1 christos start_addr = (start_addr + align - 1) & -align;
380 1.1 christos done = 0;
381 1.1 christos break;
382 1.1 christos }
383 1.1 christos
384 1.1 christos /* Otherwise, we appear to be OK. So far. */
385 1.1 christos }
386 1.1 christos }
387 1.1 christos while (!done);
388 1.1 christos
389 1.1.1.8 christos offsets[gdb_bfd_section_index (abfd, sect)] = start_addr;
390 1.1 christos lowest = start_addr + bfd_section_size (sect);
391 1.1 christos }
392 1.1.1.6 christos
393 1.1.1.7 christos /* Store section_addr_info as prepared (made relative and with SECTINDEX
394 1.1 christos filled-in) by addr_info_make_relative into SECTION_OFFSETS. */
395 1.1 christos
396 1.1.1.7 christos void
397 1.1.1.6 christos relative_addr_info_to_section_offsets (section_offsets §ion_offsets,
398 1.1 christos const section_addr_info &addrs)
399 1.1 christos {
400 1.1 christos int i;
401 1.1.1.7 christos
402 1.1 christos section_offsets.assign (section_offsets.size (), 0);
403 1.1 christos
404 1.1.1.6 christos /* Now calculate offsets for section that were specified by the caller. */
405 1.1 christos for (i = 0; i < addrs.size (); i++)
406 1.1 christos {
407 1.1 christos const struct other_sections *osp;
408 1.1.1.6 christos
409 1.1 christos osp = &addrs[i];
410 1.1.1.8 christos if (osp->sectindex == -1)
411 1.1 christos continue;
412 1.1 christos
413 1.1 christos /* Record all sections in offsets. */
414 1.1.1.8 christos /* The section_offsets in the objfile are here filled in using
415 1.1.1.7 christos the BFD index. */
416 1.1 christos section_offsets[osp->sectindex] = osp->addr;
417 1.1 christos }
418 1.1 christos }
419 1.1 christos
420 1.1 christos /* Transform section name S for a name comparison. prelink can split section
421 1.1 christos `.bss' into two sections `.dynbss' and `.bss' (in this order). Similarly
422 1.1 christos prelink can split `.sbss' into `.sdynbss' and `.sbss'. Use virtual address
423 1.1 christos of the new `.dynbss' (`.sdynbss') section as the adjacent new `.bss'
424 1.1 christos (`.sbss') section has invalid (increased) virtual address. */
425 1.1 christos
426 1.1 christos static const char *
427 1.1 christos addr_section_name (const char *s)
428 1.1 christos {
429 1.1 christos if (strcmp (s, ".dynbss") == 0)
430 1.1 christos return ".bss";
431 1.1 christos if (strcmp (s, ".sdynbss") == 0)
432 1.1 christos return ".sbss";
433 1.1 christos
434 1.1 christos return s;
435 1.1 christos }
436 1.1.1.6 christos
437 1.1.1.6 christos /* std::sort comparator for addrs_section_sort. Sort entries in
438 1.1.1.6 christos ascending order by their (name, sectindex) pair. sectindex makes
439 1.1.1.6 christos the sort by name stable. */
440 1.1.1.6 christos
441 1.1.1.6 christos static bool
442 1.1.1.6 christos addrs_section_compar (const struct other_sections *a,
443 1.1 christos const struct other_sections *b)
444 1.1 christos {
445 1.1 christos int retval;
446 1.1.1.6 christos
447 1.1.1.6 christos retval = strcmp (addr_section_name (a->name.c_str ()),
448 1.1.1.6 christos addr_section_name (b->name.c_str ()));
449 1.1.1.6 christos if (retval != 0)
450 1.1 christos return retval < 0;
451 1.1.1.6 christos
452 1.1 christos return a->sectindex < b->sectindex;
453 1.1 christos }
454 1.1.1.6 christos
455 1.1 christos /* Provide sorted array of pointers to sections of ADDRS. */
456 1.1.1.6 christos
457 1.1.1.6 christos static std::vector<const struct other_sections *>
458 1.1 christos addrs_section_sort (const section_addr_info &addrs)
459 1.1 christos {
460 1.1 christos int i;
461 1.1.1.6 christos
462 1.1.1.6 christos std::vector<const struct other_sections *> array (addrs.size ());
463 1.1.1.6 christos for (i = 0; i < addrs.size (); i++)
464 1.1 christos array[i] = &addrs[i];
465 1.1.1.6 christos
466 1.1 christos std::sort (array.begin (), array.end (), addrs_section_compar);
467 1.1 christos
468 1.1 christos return array;
469 1.1 christos }
470 1.1 christos
471 1.1 christos /* Relativize absolute addresses in ADDRS into offsets based on ABFD. Fill-in
472 1.1 christos also SECTINDEXes specific to ABFD there. This function can be used to
473 1.1 christos rebase ADDRS to start referencing different BFD than before. */
474 1.1 christos
475 1.1.1.6 christos void
476 1.1 christos addr_info_make_relative (section_addr_info *addrs, bfd *abfd)
477 1.1 christos {
478 1.1 christos asection *lower_sect;
479 1.1 christos CORE_ADDR lower_offset;
480 1.1 christos int i;
481 1.1 christos
482 1.1.1.7 christos /* Find lowest loadable section to be used as starting point for
483 1.1 christos contiguous sections. */
484 1.1.1.8 christos lower_sect = NULL;
485 1.1.1.8 christos for (asection *iter : gdb_bfd_sections (abfd))
486 1.1 christos find_lowest_section (iter, &lower_sect);
487 1.1 christos if (lower_sect == NULL)
488 1.1 christos {
489 1.1 christos warning (_("no loadable sections found in added symbol-file %s"),
490 1.1 christos bfd_get_filename (abfd));
491 1.1 christos lower_offset = 0;
492 1.1 christos }
493 1.1.1.7 christos else
494 1.1 christos lower_offset = bfd_section_vma (lower_sect);
495 1.1 christos
496 1.1 christos /* Create ADDRS_TO_ABFD_ADDRS array to map the sections in ADDRS to sections
497 1.1 christos in ABFD. Section names are not unique - there can be multiple sections of
498 1.1 christos the same name. Also the sections of the same name do not have to be
499 1.1 christos adjacent to each other. Some sections may be present only in one of the
500 1.1 christos files. Even sections present in both files do not have to be in the same
501 1.1 christos order.
502 1.1 christos
503 1.1 christos Use stable sort by name for the sections in both files. Then linearly
504 1.1 christos scan both lists matching as most of the entries as possible. */
505 1.1.1.6 christos
506 1.1.1.6 christos std::vector<const struct other_sections *> addrs_sorted
507 1.1 christos = addrs_section_sort (*addrs);
508 1.1.1.6 christos
509 1.1.1.6 christos section_addr_info abfd_addrs = build_section_addr_info_from_bfd (abfd);
510 1.1.1.6 christos std::vector<const struct other_sections *> abfd_addrs_sorted
511 1.1 christos = addrs_section_sort (abfd_addrs);
512 1.1 christos
513 1.1 christos /* Now create ADDRS_TO_ABFD_ADDRS from ADDRS_SORTED and
514 1.1 christos ABFD_ADDRS_SORTED. */
515 1.1.1.6 christos
516 1.1.1.6 christos std::vector<const struct other_sections *>
517 1.1 christos addrs_to_abfd_addrs (addrs->size (), nullptr);
518 1.1.1.6 christos
519 1.1.1.6 christos std::vector<const struct other_sections *>::iterator abfd_sorted_iter
520 1.1.1.6 christos = abfd_addrs_sorted.begin ();
521 1.1 christos for (const other_sections *sect : addrs_sorted)
522 1.1.1.6 christos {
523 1.1 christos const char *sect_name = addr_section_name (sect->name.c_str ());
524 1.1.1.6 christos
525 1.1.1.6 christos while (abfd_sorted_iter != abfd_addrs_sorted.end ()
526 1.1 christos && strcmp (addr_section_name ((*abfd_sorted_iter)->name.c_str ()),
527 1.1.1.6 christos sect_name) < 0)
528 1.1 christos abfd_sorted_iter++;
529 1.1.1.6 christos
530 1.1.1.6 christos if (abfd_sorted_iter != abfd_addrs_sorted.end ()
531 1.1 christos && strcmp (addr_section_name ((*abfd_sorted_iter)->name.c_str ()),
532 1.1 christos sect_name) == 0)
533 1.1 christos {
534 1.1 christos int index_in_addrs;
535 1.1 christos
536 1.1.1.6 christos /* Make the found item directly addressable from ADDRS. */
537 1.1 christos index_in_addrs = sect - addrs->data ();
538 1.1.1.6 christos gdb_assert (addrs_to_abfd_addrs[index_in_addrs] == NULL);
539 1.1 christos addrs_to_abfd_addrs[index_in_addrs] = *abfd_sorted_iter;
540 1.1 christos
541 1.1.1.6 christos /* Never use the same ABFD entry twice. */
542 1.1 christos abfd_sorted_iter++;
543 1.1 christos }
544 1.1 christos }
545 1.1 christos
546 1.1 christos /* Calculate offsets for the loadable sections.
547 1.1 christos FIXME! Sections must be in order of increasing loadable section
548 1.1 christos so that contiguous sections can use the lower-offset!!!
549 1.1 christos
550 1.1 christos Adjust offsets if the segments are not contiguous.
551 1.1 christos If the section is contiguous, its offset should be set to
552 1.1 christos the offset of the highest loadable section lower than it
553 1.1 christos (the loadable section directly below it in memory).
554 1.1 christos this_offset = lower_offset = lower_addr - lower_orig_addr */
555 1.1.1.6 christos
556 1.1 christos for (i = 0; i < addrs->size (); i++)
557 1.1.1.6 christos {
558 1.1 christos const struct other_sections *sect = addrs_to_abfd_addrs[i];
559 1.1 christos
560 1.1 christos if (sect)
561 1.1 christos {
562 1.1.1.6 christos /* This is the index used by BFD. */
563 1.1 christos (*addrs)[i].sectindex = sect->sectindex;
564 1.1.1.6 christos
565 1.1 christos if ((*addrs)[i].addr != 0)
566 1.1.1.6 christos {
567 1.1.1.6 christos (*addrs)[i].addr -= sect->addr;
568 1.1 christos lower_offset = (*addrs)[i].addr;
569 1.1 christos }
570 1.1.1.6 christos else
571 1.1 christos (*addrs)[i].addr = lower_offset;
572 1.1 christos }
573 1.1 christos else
574 1.1 christos {
575 1.1.1.6 christos /* addr_section_name transformation is not used for SECT_NAME. */
576 1.1 christos const std::string §_name = (*addrs)[i].name;
577 1.1 christos
578 1.1 christos /* This section does not exist in ABFD, which is normally
579 1.1 christos unexpected and we want to issue a warning.
580 1.1 christos
581 1.1 christos However, the ELF prelinker does create a few sections which are
582 1.1 christos marked in the main executable as loadable (they are loaded in
583 1.1 christos memory from the DYNAMIC segment) and yet are not present in
584 1.1 christos separate debug info files. This is fine, and should not cause
585 1.1 christos a warning. Shared libraries contain just the section
586 1.1 christos ".gnu.liblist" but it is not marked as loadable there. There is
587 1.1 christos no other way to identify them than by their name as the sections
588 1.1 christos created by prelink have no special flags.
589 1.1 christos
590 1.1 christos For the sections `.bss' and `.sbss' see addr_section_name. */
591 1.1.1.6 christos
592 1.1.1.6 christos if (!(sect_name == ".gnu.liblist"
593 1.1.1.6 christos || sect_name == ".gnu.conflict"
594 1.1 christos || (sect_name == ".bss"
595 1.1.1.6 christos && i > 0
596 1.1 christos && (*addrs)[i - 1].name == ".dynbss"
597 1.1.1.6 christos && addrs_to_abfd_addrs[i - 1] != NULL)
598 1.1 christos || (sect_name == ".sbss"
599 1.1.1.6 christos && i > 0
600 1.1 christos && (*addrs)[i - 1].name == ".sdynbss"
601 1.1.1.6 christos && addrs_to_abfd_addrs[i - 1] != NULL)))
602 1.1 christos warning (_("section %s not found in %s"), sect_name.c_str (),
603 1.1 christos bfd_get_filename (abfd));
604 1.1.1.6 christos
605 1.1.1.6 christos (*addrs)[i].addr = 0;
606 1.1 christos (*addrs)[i].sectindex = -1;
607 1.1 christos }
608 1.1 christos }
609 1.1 christos }
610 1.1 christos
611 1.1 christos /* Parse the user's idea of an offset for dynamic linking, into our idea
612 1.1 christos of how to represent it for fast symbol reading. This is the default
613 1.1 christos version of the sym_fns.sym_offsets function for symbol readers that
614 1.1 christos don't need to do anything special. It allocates a section_offsets table
615 1.1 christos for the objectfile OBJFILE and stuffs ADDR into all of the offsets. */
616 1.1 christos
617 1.1 christos void
618 1.1.1.6 christos default_symfile_offsets (struct objfile *objfile,
619 1.1 christos const section_addr_info &addrs)
620 1.1.1.8 christos {
621 1.1.1.7 christos objfile->section_offsets.resize (gdb_bfd_count_sections (objfile->obfd.get ()));
622 1.1 christos relative_addr_info_to_section_offsets (objfile->section_offsets, addrs);
623 1.1 christos
624 1.1 christos /* For relocatable files, all loadable sections will start at zero.
625 1.1 christos The zero is meaningless, so try to pick arbitrary addresses such
626 1.1 christos that no loadable sections overlap. This algorithm is quadratic,
627 1.1 christos but the number of sections in a single object file is generally
628 1.1.1.8 christos small. */
629 1.1 christos if ((bfd_get_file_flags (objfile->obfd.get ()) & (EXEC_P | DYNAMIC)) == 0)
630 1.1.1.8 christos {
631 1.1 christos bfd *abfd = objfile->obfd.get ();
632 1.1 christos asection *cur_sec;
633 1.1 christos
634 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
635 1.1 christos /* We do not expect this to happen; just skip this step if the
636 1.1.1.7 christos relocatable file has a section with an assigned VMA. */
637 1.1 christos if (bfd_section_vma (cur_sec) != 0)
638 1.1 christos break;
639 1.1 christos
640 1.1 christos if (cur_sec == NULL)
641 1.1.1.7 christos {
642 1.1 christos section_offsets &offsets = objfile->section_offsets;
643 1.1 christos
644 1.1 christos /* Pick non-overlapping offsets for sections the user did not
645 1.1.1.8 christos place explicitly. */
646 1.1.1.8 christos CORE_ADDR lowest = 0;
647 1.1.1.8 christos for (asection *sect : gdb_bfd_sections (objfile->obfd.get ()))
648 1.1.1.8 christos place_section (objfile->obfd.get (), sect, objfile->section_offsets,
649 1.1 christos lowest);
650 1.1 christos
651 1.1 christos /* Correctly filling in the section offsets is not quite
652 1.1 christos enough. Relocatable files have two properties that
653 1.1 christos (most) shared objects do not:
654 1.1 christos
655 1.1 christos - Their debug information will contain relocations. Some
656 1.1 christos shared libraries do also, but many do not, so this can not
657 1.1 christos be assumed.
658 1.1 christos
659 1.1 christos - If there are multiple code sections they will be loaded
660 1.1 christos at different relative addresses in memory than they are
661 1.1 christos in the objfile, since all sections in the file will start
662 1.1 christos at address zero.
663 1.1 christos
664 1.1 christos Because GDB has very limited ability to map from an
665 1.1 christos address in debug info to the correct code section,
666 1.1 christos it relies on adding SECT_OFF_TEXT to things which might be
667 1.1 christos code. If we clear all the section offsets, and set the
668 1.1 christos section VMAs instead, then symfile_relocate_debug_section
669 1.1 christos will return meaningful debug information pointing at the
670 1.1 christos correct sections.
671 1.1 christos
672 1.1 christos GDB has too many different data structures for section
673 1.1 christos addresses - a bfd, objfile, and so_list all have section
674 1.1 christos tables, as does exec_ops. Some of these could probably
675 1.1 christos be eliminated. */
676 1.1 christos
677 1.1 christos for (cur_sec = abfd->sections; cur_sec != NULL;
678 1.1 christos cur_sec = cur_sec->next)
679 1.1.1.7 christos {
680 1.1 christos if ((bfd_section_flags (cur_sec) & SEC_ALLOC) == 0)
681 1.1 christos continue;
682 1.1.1.7 christos
683 1.1 christos bfd_set_section_vma (cur_sec, offsets[cur_sec->index]);
684 1.1 christos exec_set_section_address (bfd_get_filename (abfd),
685 1.1 christos cur_sec->index,
686 1.1 christos offsets[cur_sec->index]);
687 1.1 christos offsets[cur_sec->index] = 0;
688 1.1 christos }
689 1.1 christos }
690 1.1 christos }
691 1.1 christos
692 1.1 christos /* Remember the bfd indexes for the .text, .data, .bss and
693 1.1 christos .rodata sections. */
694 1.1 christos init_objfile_sect_indices (objfile);
695 1.1 christos }
696 1.1 christos
697 1.1 christos /* Divide the file into segments, which are individual relocatable units.
698 1.1 christos This is the default version of the sym_fns.sym_segments function for
699 1.1 christos symbol readers that do not have an explicit representation of segments.
700 1.1 christos It assumes that object files do not have segments, and fully linked
701 1.1 christos files have a single segment. */
702 1.1.1.7 christos
703 1.1 christos symfile_segment_data_up
704 1.1 christos default_symfile_segments (bfd *abfd)
705 1.1 christos {
706 1.1 christos int num_sections, i;
707 1.1 christos asection *sect;
708 1.1 christos CORE_ADDR low, high;
709 1.1 christos
710 1.1 christos /* Relocatable files contain enough information to position each
711 1.1 christos loadable section independently; they should not be relocated
712 1.1 christos in segments. */
713 1.1 christos if ((bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC)) == 0)
714 1.1 christos return NULL;
715 1.1 christos
716 1.1 christos /* Make sure there is at least one loadable section in the file. */
717 1.1 christos for (sect = abfd->sections; sect != NULL; sect = sect->next)
718 1.1.1.7 christos {
719 1.1 christos if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
720 1.1 christos continue;
721 1.1 christos
722 1.1 christos break;
723 1.1 christos }
724 1.1 christos if (sect == NULL)
725 1.1 christos return NULL;
726 1.1.1.7 christos
727 1.1.1.7 christos low = bfd_section_vma (sect);
728 1.1 christos high = low + bfd_section_size (sect);
729 1.1.1.7 christos
730 1.1 christos symfile_segment_data_up data (new symfile_segment_data);
731 1.1 christos
732 1.1.1.7 christos num_sections = bfd_count_sections (abfd);
733 1.1.1.7 christos
734 1.1.1.7 christos /* All elements are initialized to 0 (map to no segment). */
735 1.1 christos data->segment_info.resize (num_sections);
736 1.1 christos
737 1.1 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
738 1.1 christos {
739 1.1 christos CORE_ADDR vma;
740 1.1.1.7 christos
741 1.1 christos if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
742 1.1 christos continue;
743 1.1.1.7 christos
744 1.1 christos vma = bfd_section_vma (sect);
745 1.1 christos if (vma < low)
746 1.1.1.7 christos low = vma;
747 1.1.1.7 christos if (vma + bfd_section_size (sect) > high)
748 1.1 christos high = vma + bfd_section_size (sect);
749 1.1 christos
750 1.1 christos data->segment_info[i] = 1;
751 1.1 christos }
752 1.1.1.7 christos
753 1.1 christos data->segments.emplace_back (low, high - low);
754 1.1 christos
755 1.1 christos return data;
756 1.1 christos }
757 1.1 christos
758 1.1 christos /* This is a convenience function to call sym_read for OBJFILE and
759 1.1 christos possibly force the partial symbols to be read. */
760 1.1 christos
761 1.1.1.5 christos static void
762 1.1 christos read_symbols (struct objfile *objfile, symfile_add_flags add_flags)
763 1.1 christos {
764 1.1.1.6 christos (*objfile->sf->sym_read) (objfile, add_flags);
765 1.1 christos objfile->per_bfd->minsyms_read = true;
766 1.1 christos
767 1.1 christos /* find_separate_debug_file_in_section should be called only if there is
768 1.1.1.8 christos single binary with no existing separate debug info file. */
769 1.1 christos if (!objfile->has_partial_symbols ()
770 1.1 christos && objfile->separate_debug_objfile == NULL
771 1.1 christos && objfile->separate_debug_objfile_backlink == NULL)
772 1.1.1.5 christos {
773 1.1 christos gdb_bfd_ref_ptr abfd (find_separate_debug_file_in_section (objfile));
774 1.1 christos
775 1.1 christos if (abfd != NULL)
776 1.1 christos {
777 1.1 christos /* find_separate_debug_file_in_section uses the same filename for the
778 1.1 christos virtual section-as-bfd like the bfd filename containing the
779 1.1 christos section. Therefore use also non-canonical name form for the same
780 1.1.1.8 christos file containing the section. */
781 1.1.1.6 christos symbol_file_add_separate (abfd, bfd_get_filename (abfd.get ()),
782 1.1 christos add_flags | SYMFILE_NOT_FILENAME, objfile);
783 1.1 christos }
784 1.1 christos }
785 1.1 christos }
786 1.1 christos
787 1.1 christos /* Initialize entry point information for this objfile. */
788 1.1 christos
789 1.1 christos static void
790 1.1 christos init_entry_point_info (struct objfile *objfile)
791 1.1.1.2 christos {
792 1.1.1.2 christos struct entry_info *ei = &objfile->per_bfd->ei;
793 1.1.1.2 christos
794 1.1.1.2 christos if (ei->initialized)
795 1.1.1.2 christos return;
796 1.1.1.2 christos ei->initialized = 1;
797 1.1 christos
798 1.1 christos /* Save startup file's range of PC addresses to help blockframe.c
799 1.1 christos decide where the bottom of the stack is. */
800 1.1.1.8 christos
801 1.1 christos if (bfd_get_file_flags (objfile->obfd.get ()) & EXEC_P)
802 1.1 christos {
803 1.1.1.8 christos /* Executable file -- record its entry point so we'll recognize
804 1.1.1.8 christos the startup file because it contains the entry point. */
805 1.1.1.2 christos ei->entry_point = bfd_get_start_address (objfile->obfd.get ());
806 1.1 christos ei->entry_point_p = 1;
807 1.1.1.8 christos }
808 1.1.1.8 christos else if (bfd_get_file_flags (objfile->obfd.get ()) & DYNAMIC
809 1.1 christos && bfd_get_start_address (objfile->obfd.get ()) != 0)
810 1.1 christos {
811 1.1 christos /* Some shared libraries may have entry points set and be
812 1.1 christos runnable. There's no clear way to indicate this, so just check
813 1.1.1.8 christos for values other than zero. */
814 1.1.1.2 christos ei->entry_point = bfd_get_start_address (objfile->obfd.get ());
815 1.1 christos ei->entry_point_p = 1;
816 1.1 christos }
817 1.1 christos else
818 1.1 christos {
819 1.1.1.2 christos /* Examination of non-executable.o files. Short-circuit this stuff. */
820 1.1 christos ei->entry_point_p = 0;
821 1.1 christos }
822 1.1.1.2 christos
823 1.1 christos if (ei->entry_point_p)
824 1.1.1.2 christos {
825 1.1.1.2 christos CORE_ADDR entry_point = ei->entry_point;
826 1.1 christos int found;
827 1.1 christos
828 1.1 christos /* Make certain that the address points at real code, and not a
829 1.1.1.8 christos function descriptor. */
830 1.1.1.8 christos entry_point = gdbarch_convert_from_func_ptr_addr
831 1.1 christos (objfile->arch (), entry_point, current_inferior ()->top_target ());
832 1.1 christos
833 1.1 christos /* Remove any ISA markers, so that this matches entries in the
834 1.1.1.2 christos symbol table. */
835 1.1.1.7 christos ei->entry_point
836 1.1.1.2 christos = gdbarch_addr_bits_remove (objfile->arch (), entry_point);
837 1.1.1.2 christos
838 1.1.1.9 christos found = 0;
839 1.1.1.2 christos for (obj_section *osect : objfile->sections ())
840 1.1.1.2 christos {
841 1.1.1.2 christos struct bfd_section *sect = osect->the_bfd_section;
842 1.1.1.7 christos
843 1.1.1.7 christos if (entry_point >= bfd_section_vma (sect)
844 1.1.1.7 christos && entry_point < (bfd_section_vma (sect)
845 1.1.1.2 christos + bfd_section_size (sect)))
846 1.1.1.2 christos {
847 1.1.1.8 christos ei->the_bfd_section_index
848 1.1.1.2 christos = gdb_bfd_section_index (objfile->obfd.get (), sect);
849 1.1.1.2 christos found = 1;
850 1.1.1.2 christos break;
851 1.1.1.2 christos }
852 1.1.1.2 christos }
853 1.1.1.2 christos
854 1.1.1.2 christos if (!found)
855 1.1 christos ei->the_bfd_section_index = SECT_OFF_TEXT (objfile);
856 1.1 christos }
857 1.1 christos }
858 1.1 christos
859 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
860 1.1 christos loaded file.
861 1.1 christos
862 1.1 christos This function does not set the OBJFILE's entry-point info.
863 1.1 christos
864 1.1 christos OBJFILE is where the symbols are to be read from.
865 1.1 christos
866 1.1 christos ADDRS is the list of section load addresses. If the user has given
867 1.1 christos an 'add-symbol-file' command, then this is the list of offsets and
868 1.1 christos addresses he or she provided as arguments to the command; or, if
869 1.1 christos we're handling a shared library, these are the actual addresses the
870 1.1 christos sections are loaded at, according to the inferior's dynamic linker
871 1.1 christos (as gleaned by GDB's shared library code). We convert each address
872 1.1 christos into an offset from the section VMA's as it appears in the object
873 1.1.1.7 christos file, and then call the file's sym_offsets function to convert this
874 1.1.1.6 christos into a format-specific offset table --- a `section_offsets'.
875 1.1.1.6 christos The sectindex field is used to control the ordering of sections
876 1.1.1.7 christos with the same name. Upon return, it is updated to contain the
877 1.1 christos corresponding BFD section index, or -1 if the section was not found.
878 1.1 christos
879 1.1.1.7 christos ADD_FLAGS encodes verbosity level, whether this is main symbol or
880 1.1 christos an extra symbol file such as dynamically loaded code, and whether
881 1.1 christos breakpoint reset should be deferred. */
882 1.1 christos
883 1.1 christos static void
884 1.1.1.6 christos syms_from_objfile_1 (struct objfile *objfile,
885 1.1.1.5 christos section_addr_info *addrs,
886 1.1 christos symfile_add_flags add_flags)
887 1.1.1.6 christos {
888 1.1 christos section_addr_info local_addr;
889 1.1 christos const int mainline = add_flags & SYMFILE_MAINLINE;
890 1.1.1.10 christos
891 1.1.1.10 christos /* If we can't find a sym_fns struct to read the objfile, we'll error
892 1.1.1.10 christos out, and should unlink the objfile from the program space. So this
893 1.1.1.10 christos should be declared before a find_sym_fns call. */
894 1.1.1.10 christos scoped_objfile_unlinker objfile_holder (objfile);
895 1.1.1.8 christos
896 1.1.1.8 christos objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd.get ()));
897 1.1 christos objfile->qf.clear ();
898 1.1 christos
899 1.1 christos if (objfile->sf == NULL)
900 1.1 christos {
901 1.1 christos /* No symbols to load, but we still need to make sure
902 1.1.1.8 christos that the section_offsets table is allocated. */
903 1.1 christos int num_sections = gdb_bfd_count_sections (objfile->obfd.get ());
904 1.1.1.7 christos
905 1.1.1.10 christos objfile->section_offsets.assign (num_sections, 0);
906 1.1.1.10 christos
907 1.1.1.10 christos /* Release the objfile unique pointer, since nothing went wrong
908 1.1.1.10 christos in reading it. */
909 1.1 christos objfile_holder.release ();
910 1.1 christos return;
911 1.1 christos }
912 1.1 christos
913 1.1 christos /* Make sure that partially constructed symbol tables will be cleaned up
914 1.1.1.9 christos if an error occurs during symbol reading. */
915 1.1.1.6 christos std::optional<clear_symtab_users_cleanup> defer_clear_users;
916 1.1 christos
917 1.1 christos /* If ADDRS is NULL, put together a dummy address list.
918 1.1 christos We now establish the convention that an addr of zero means
919 1.1 christos no load address was specified. */
920 1.1.1.6 christos if (! addrs)
921 1.1 christos addrs = &local_addr;
922 1.1 christos
923 1.1 christos if (mainline)
924 1.1 christos {
925 1.1.1.8 christos /* We will modify the main symbol table, make sure that all its users
926 1.1.1.6 christos will be cleaned up if an error occurs during symbol reading. */
927 1.1 christos defer_clear_users.emplace ((symfile_add_flag) 0);
928 1.1 christos
929 1.1 christos /* Since no error yet, throw away the old symbol table. */
930 1.1.1.8 christos
931 1.1 christos if (current_program_space->symfile_object_file != NULL)
932 1.1.1.8 christos {
933 1.1.1.8 christos current_program_space->symfile_object_file->unlink ();
934 1.1 christos gdb_assert (current_program_space->symfile_object_file == NULL);
935 1.1 christos }
936 1.1 christos
937 1.1.1.8 christos /* Currently we keep symbols from the add-symbol-file command.
938 1.1.1.8 christos If the user wants to get rid of them, they should do "symbol-file"
939 1.1.1.8 christos without arguments first. Not sure this is the best behavior
940 1.1 christos (PR 2207). */
941 1.1 christos
942 1.1 christos (*objfile->sf->sym_new_init) (objfile);
943 1.1 christos }
944 1.1 christos
945 1.1 christos /* Convert addr into an offset rather than an absolute address.
946 1.1 christos We find the lowest address of a loaded segment in the objfile,
947 1.1 christos and assume that <addr> is where that got loaded.
948 1.1 christos
949 1.1 christos We no longer warn if the lowest section is not a text segment (as
950 1.1.1.6 christos happens for the PA64 port. */
951 1.1.1.8 christos if (addrs->size () > 0)
952 1.1 christos addr_info_make_relative (addrs, objfile->obfd.get ());
953 1.1 christos
954 1.1 christos /* Initialize symbol reading routines for this objfile, allow complaints to
955 1.1 christos appear for this new file, and record how verbose to be, then do the
956 1.1 christos initial symbol reading for this file. */
957 1.1 christos
958 1.1.1.6 christos (*objfile->sf->sym_init) (objfile);
959 1.1 christos clear_complaints ();
960 1.1.1.6 christos
961 1.1 christos (*objfile->sf->sym_offsets) (objfile, *addrs);
962 1.1 christos
963 1.1 christos read_symbols (objfile, add_flags);
964 1.1 christos
965 1.1 christos /* Discard cleanups as symbol reading was successful. */
966 1.1.1.6 christos
967 1.1.1.6 christos objfile_holder.release ();
968 1.1.1.6 christos if (defer_clear_users)
969 1.1 christos defer_clear_users->release ();
970 1.1 christos }
971 1.1 christos
972 1.1 christos /* Same as syms_from_objfile_1, but also initializes the objfile
973 1.1 christos entry-point info. */
974 1.1 christos
975 1.1 christos static void
976 1.1.1.6 christos syms_from_objfile (struct objfile *objfile,
977 1.1.1.5 christos section_addr_info *addrs,
978 1.1 christos symfile_add_flags add_flags)
979 1.1 christos {
980 1.1 christos syms_from_objfile_1 (objfile, addrs, add_flags);
981 1.1 christos init_entry_point_info (objfile);
982 1.1 christos }
983 1.1 christos
984 1.1 christos /* Perform required actions after either reading in the initial
985 1.1 christos symbols for a new objfile, or mapping in the symbols from a reusable
986 1.1 christos objfile. ADD_FLAGS is a bitmask of enum symfile_add_flags. */
987 1.1.1.3 christos
988 1.1.1.5 christos static void
989 1.1 christos finish_new_objfile (struct objfile *objfile, symfile_add_flags add_flags)
990 1.1 christos {
991 1.1 christos /* If this is the main symbol file we have to clean up all users of the
992 1.1 christos old main symbol file. Otherwise it is sufficient to fixup all the
993 1.1 christos breakpoints that may have been redefined by this symbol file. */
994 1.1 christos if (add_flags & SYMFILE_MAINLINE)
995 1.1 christos {
996 1.1.1.8 christos /* OK, make it the "real" symbol file. */
997 1.1 christos current_program_space->symfile_object_file = objfile;
998 1.1 christos
999 1.1 christos clear_symtab_users (add_flags);
1000 1.1 christos }
1001 1.1 christos else if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
1002 1.1 christos {
1003 1.1 christos breakpoint_re_set ();
1004 1.1 christos }
1005 1.1 christos
1006 1.1.1.6 christos /* We're done reading the symbol file; finish off complaints. */
1007 1.1 christos clear_complaints ();
1008 1.1 christos }
1009 1.1 christos
1010 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
1011 1.1 christos loaded file.
1012 1.1 christos
1013 1.1 christos ABFD is a BFD already open on the file, as from symfile_bfd_open.
1014 1.1 christos A new reference is acquired by this function.
1015 1.1.1.6 christos
1016 1.1 christos For NAME description see the objfile constructor.
1017 1.1 christos
1018 1.1.1.7 christos ADD_FLAGS encodes verbosity, whether this is main symbol file or
1019 1.1 christos extra, such as dynamically loaded code, and what to do with breakpoints.
1020 1.1 christos
1021 1.1 christos ADDRS is as described for syms_from_objfile_1, above.
1022 1.1 christos ADDRS is ignored when SYMFILE_MAINLINE bit is set in ADD_FLAGS.
1023 1.1 christos
1024 1.1 christos PARENT is the original objfile if ABFD is a separate debug info file.
1025 1.1 christos Otherwise PARENT is NULL.
1026 1.1 christos
1027 1.1 christos Upon success, returns a pointer to the objfile that was added.
1028 1.1 christos Upon failure, jumps back to command level (never returns). */
1029 1.1 christos
1030 1.1.1.8 christos static struct objfile *
1031 1.1.1.5 christos symbol_file_add_with_addrs (const gdb_bfd_ref_ptr &abfd, const char *name,
1032 1.1.1.6 christos symfile_add_flags add_flags,
1033 1.1.1.5 christos section_addr_info *addrs,
1034 1.1 christos objfile_flags flags, struct objfile *parent)
1035 1.1 christos {
1036 1.1 christos const int from_tty = add_flags & SYMFILE_VERBOSE;
1037 1.1.1.7 christos const int mainline = add_flags & SYMFILE_MAINLINE;
1038 1.1.1.2 christos const int always_confirm = add_flags & SYMFILE_ALWAYS_CONFIRM;
1039 1.1 christos const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
1040 1.1 christos && (readnow_symbol_files
1041 1.1 christos || (add_flags & SYMFILE_NO_READ) == 0));
1042 1.1 christos
1043 1.1 christos if (readnow_symbol_files)
1044 1.1 christos {
1045 1.1 christos flags |= OBJF_READNOW;
1046 1.1 christos add_flags &= ~SYMFILE_NO_READ;
1047 1.1.1.6 christos }
1048 1.1.1.6 christos else if (readnever_symbol_files
1049 1.1.1.6 christos || (parent != NULL && (parent->flags & OBJF_READNEVER)))
1050 1.1.1.6 christos {
1051 1.1.1.6 christos flags |= OBJF_READNEVER;
1052 1.1.1.6 christos add_flags |= SYMFILE_NO_READ;
1053 1.1.1.6 christos }
1054 1.1.1.6 christos if ((add_flags & SYMFILE_NOT_FILENAME) != 0)
1055 1.1 christos flags |= OBJF_NOT_FILENAME;
1056 1.1.1.7 christos
1057 1.1 christos /* Give user a chance to burp if ALWAYS_CONFIRM or we'd be
1058 1.1 christos interactively wiping out any existing symbols. */
1059 1.1.1.7 christos
1060 1.1.1.7 christos if (from_tty
1061 1.1.1.10 christos && (always_confirm
1062 1.1.1.10 christos || ((have_full_symbols (current_program_space)
1063 1.1.1.7 christos || have_partial_symbols (current_program_space))
1064 1.1.1.10 christos && mainline))
1065 1.1 christos && !query (_ ("Load new symbol table from \"%s\"? "), name))
1066 1.1 christos error (_("Not confirmed."));
1067 1.1.1.5 christos
1068 1.1.1.5 christos if (mainline)
1069 1.1.1.10 christos flags |= OBJF_MAINLINE;
1070 1.1.1.10 christos
1071 1.1.1.10 christos objfile *objfile
1072 1.1 christos = objfile::make (abfd, current_program_space, name, flags, parent);
1073 1.1 christos
1074 1.1 christos /* We either created a new mapped symbol table, mapped an existing
1075 1.1 christos symbol table file which has not had initial symbol reading
1076 1.1 christos performed, or need to read an unmapped symbol table. */
1077 1.1 christos if (should_print)
1078 1.1 christos {
1079 1.1 christos if (deprecated_pre_add_symbol_hook)
1080 1.1 christos deprecated_pre_add_symbol_hook (name);
1081 1.1.1.8 christos else
1082 1.1.1.8 christos gdb_printf (_("Reading symbols from %ps...\n"),
1083 1.1 christos styled_string (file_name_style.style (), name));
1084 1.1 christos }
1085 1.1 christos syms_from_objfile (objfile, addrs, add_flags);
1086 1.1 christos
1087 1.1 christos /* We now have at least a partial symbol table. Check to see if the
1088 1.1 christos user requested that all symbols be read on initial access via either
1089 1.1 christos the gdb startup command line or on a per symbol file basis. Expand
1090 1.1 christos all partial symbol tables for this objfile if so. */
1091 1.1 christos
1092 1.1 christos if ((flags & OBJF_READNOW))
1093 1.1 christos {
1094 1.1.1.8 christos if (should_print)
1095 1.1.1.8 christos gdb_printf (_("Expanding full symbols from %ps...\n"),
1096 1.1 christos styled_string (file_name_style.style (), name));
1097 1.1.1.8 christos
1098 1.1 christos objfile->expand_all_symtabs ();
1099 1.1 christos }
1100 1.1.1.6 christos
1101 1.1.1.6 christos /* Note that we only print a message if we have no symbols and have
1102 1.1.1.6 christos no separate debug file. If there is a separate debug file which
1103 1.1.1.6 christos does not have symbols, we'll have emitted this message for that
1104 1.1.1.6 christos file, and so printing it twice is just redundant. */
1105 1.1.1.6 christos if (should_print && !objfile_has_symbols (objfile)
1106 1.1.1.8 christos && objfile->separate_debug_objfile == nullptr)
1107 1.1.1.8 christos gdb_printf (_("(No debugging symbols found in %ps)\n"),
1108 1.1 christos styled_string (file_name_style.style (), name));
1109 1.1 christos
1110 1.1 christos if (should_print)
1111 1.1 christos {
1112 1.1 christos if (deprecated_post_add_symbol_hook)
1113 1.1 christos deprecated_post_add_symbol_hook ();
1114 1.1 christos }
1115 1.1 christos
1116 1.1 christos /* We print some messages regardless of whether 'from_tty ||
1117 1.1 christos info_verbose' is true, so make sure they go out at the right
1118 1.1 christos time. */
1119 1.1 christos gdb_flush (gdb_stdout);
1120 1.1.1.9 christos
1121 1.1.1.9 christos if (objfile->sf != nullptr)
1122 1.1 christos finish_new_objfile (objfile, add_flags);
1123 1.1.1.6 christos
1124 1.1 christos gdb::observers::new_objfile.notify (objfile);
1125 1.1.1.9 christos
1126 1.1 christos return objfile;
1127 1.1 christos }
1128 1.1 christos
1129 1.1.1.6 christos /* Add BFD as a separate debug file for OBJFILE. For NAME description
1130 1.1 christos see the objfile constructor. */
1131 1.1 christos
1132 1.1.1.8 christos void
1133 1.1.1.5 christos symbol_file_add_separate (const gdb_bfd_ref_ptr &bfd, const char *name,
1134 1.1 christos symfile_add_flags symfile_flags,
1135 1.1 christos struct objfile *objfile)
1136 1.1 christos {
1137 1.1 christos /* Create section_addr_info. We can't directly use offsets from OBJFILE
1138 1.1 christos because sections of BFD may not match sections of OBJFILE and because
1139 1.1.1.6 christos vma may have been modified by tools such as prelink. */
1140 1.1 christos section_addr_info sap = build_section_addr_info_from_objfile (objfile);
1141 1.1.1.4 christos
1142 1.1.1.6 christos symbol_file_add_with_addrs
1143 1.1.1.9 christos (bfd, name, symfile_flags, &sap,
1144 1.1.1.7 christos objfile->flags & (OBJF_SHARED | OBJF_READNOW
1145 1.1 christos | OBJF_USERLOADED | OBJF_MAINLINE),
1146 1.1 christos objfile);
1147 1.1 christos }
1148 1.1 christos
1149 1.1 christos /* Process the symbol file ABFD, as either the main file or as a
1150 1.1 christos dynamically loaded file.
1151 1.1 christos See symbol_file_add_with_addrs's comments for details. */
1152 1.1 christos
1153 1.1.1.8 christos struct objfile *
1154 1.1.1.5 christos symbol_file_add_from_bfd (const gdb_bfd_ref_ptr &abfd, const char *name,
1155 1.1.1.6 christos symfile_add_flags add_flags,
1156 1.1.1.8 christos section_addr_info *addrs,
1157 1.1 christos objfile_flags flags, struct objfile *parent)
1158 1.1 christos {
1159 1.1 christos return symbol_file_add_with_addrs (abfd, name, add_flags, addrs, flags,
1160 1.1 christos parent);
1161 1.1 christos }
1162 1.1 christos
1163 1.1 christos /* Process a symbol file, as either the main file or as a dynamically
1164 1.1 christos loaded file. See symbol_file_add_with_addrs's comments for details. */
1165 1.1 christos
1166 1.1.1.5 christos struct objfile *
1167 1.1.1.6 christos symbol_file_add (const char *name, symfile_add_flags add_flags,
1168 1.1 christos section_addr_info *addrs, objfile_flags flags)
1169 1.1.1.5 christos {
1170 1.1 christos gdb_bfd_ref_ptr bfd (symfile_bfd_open (name));
1171 1.1.1.8 christos
1172 1.1.1.5 christos return symbol_file_add_from_bfd (bfd, name, add_flags, addrs,
1173 1.1 christos flags, NULL);
1174 1.1 christos }
1175 1.1 christos
1176 1.1 christos /* Call symbol_file_add() with default values and update whatever is
1177 1.1 christos affected by the loading of a new main().
1178 1.1 christos Used when the file is supplied in the gdb command line
1179 1.1 christos and by some targets with special loading requirements.
1180 1.1 christos The auxiliary function, symbol_file_add_main_1(), has the flags
1181 1.1 christos argument for the switches that can only be specified in the symbol_file
1182 1.1 christos command itself. */
1183 1.1 christos
1184 1.1.1.5 christos void
1185 1.1 christos symbol_file_add_main (const char *args, symfile_add_flags add_flags)
1186 1.1.1.6 christos {
1187 1.1 christos symbol_file_add_main_1 (args, add_flags, 0, 0);
1188 1.1 christos }
1189 1.1 christos
1190 1.1.1.5 christos static void
1191 1.1.1.6 christos symbol_file_add_main_1 (const char *args, symfile_add_flags add_flags,
1192 1.1 christos objfile_flags flags, CORE_ADDR reloff)
1193 1.1.1.5 christos {
1194 1.1 christos add_flags |= current_inferior ()->symfile_flags | SYMFILE_MAINLINE;
1195 1.1.1.6 christos
1196 1.1.1.6 christos struct objfile *objfile = symbol_file_add (args, add_flags, NULL, flags);
1197 1.1.1.6 christos if (reloff != 0)
1198 1.1 christos objfile_rebase (objfile, reloff);
1199 1.1 christos
1200 1.1 christos /* Getting new symbols may change our opinion about
1201 1.1 christos what is frameless. */
1202 1.1 christos reinit_frame_cache ();
1203 1.1.1.5 christos
1204 1.1 christos if ((add_flags & SYMFILE_NO_READ) == 0)
1205 1.1 christos set_initial_language ();
1206 1.1 christos }
1207 1.1 christos
1208 1.1 christos void
1209 1.1 christos symbol_file_clear (int from_tty)
1210 1.1.1.10 christos {
1211 1.1.1.10 christos if ((have_full_symbols (current_program_space)
1212 1.1 christos || have_partial_symbols (current_program_space))
1213 1.1.1.8 christos && from_tty
1214 1.1 christos && (current_program_space->symfile_object_file
1215 1.1.1.8 christos ? !query (_("Discard symbol table from `%s'? "),
1216 1.1 christos objfile_name (current_program_space->symfile_object_file))
1217 1.1 christos : !query (_("Discard symbol table? "))))
1218 1.1 christos error (_("Not confirmed."));
1219 1.1 christos
1220 1.1 christos /* solib descriptors may have handles to objfiles. Wipe them before their
1221 1.1.1.10 christos objfiles get stale by free_all_objfiles. */
1222 1.1 christos no_shared_libraries (current_program_space);
1223 1.1.1.7 christos
1224 1.1.1.7 christos current_program_space->free_all_objfiles ();
1225 1.1.1.7 christos
1226 1.1 christos clear_symtab_users (0);
1227 1.1.1.8 christos
1228 1.1 christos gdb_assert (current_program_space->symfile_object_file == NULL);
1229 1.1.1.8 christos if (from_tty)
1230 1.1 christos gdb_printf (_("No symbol file now.\n"));
1231 1.1 christos }
1232 1.1.1.6 christos
1233 1.1.1.6 christos /* See symfile.h. */
1234 1.1.1.7 christos
1235 1.1.1.6 christos bool separate_debug_file_debug = false;
1236 1.1 christos
1237 1.1.1.6 christos static int
1238 1.1.1.9 christos separate_debug_file_exists (const std::string &name, unsigned long crc,
1239 1.1.1.9 christos struct objfile *parent_objfile,
1240 1.1 christos deferred_warnings *warnings)
1241 1.1.1.10 christos {
1242 1.1.1.10 christos SEPARATE_DEBUG_FILE_SCOPED_DEBUG_ENTER_EXIT;
1243 1.1 christos
1244 1.1 christos unsigned long file_crc;
1245 1.1 christos int file_crc_p;
1246 1.1 christos struct stat parent_stat, abfd_stat;
1247 1.1 christos int verified_as_different;
1248 1.1 christos
1249 1.1 christos /* Find a separate debug info file as if symbols would be present in
1250 1.1 christos PARENT_OBJFILE itself this function would not be called. .gnu_debuglink
1251 1.1 christos section can contain just the basename of PARENT_OBJFILE without any
1252 1.1 christos ".debug" suffix as "/usr/lib/debug/path/to/file" is a separate tree where
1253 1.1 christos the separate debug infos with the same basename can exist. */
1254 1.1.1.6 christos
1255 1.1 christos if (filename_cmp (name.c_str (), objfile_name (parent_objfile)) == 0)
1256 1.1 christos return 0;
1257 1.1.1.10 christos
1258 1.1.1.6 christos separate_debug_file_debug_printf ("Trying %s...", name.c_str ());
1259 1.1.1.7 christos
1260 1.1 christos gdb_bfd_ref_ptr abfd (gdb_bfd_open (name.c_str (), gnutarget));
1261 1.1.1.5 christos
1262 1.1.1.6 christos if (abfd == NULL)
1263 1.1.1.10 christos {
1264 1.1.1.6 christos separate_debug_file_debug_printf ("unable to open file");
1265 1.1.1.6 christos return 0;
1266 1.1 christos }
1267 1.1 christos
1268 1.1 christos /* Verify symlinks were not the cause of filename_cmp name difference above.
1269 1.1 christos
1270 1.1 christos Some operating systems, e.g. Windows, do not provide a meaningful
1271 1.1.1.3 christos st_ino; they always set it to zero. (Windows does provide a
1272 1.1.1.3 christos meaningful st_dev.) Files accessed from gdbservers that do not
1273 1.1.1.3 christos support the vFile:fstat packet will also have st_ino set to zero.
1274 1.1.1.3 christos Do not indicate a duplicate library in either case. While there
1275 1.1.1.3 christos is no guarantee that a system that provides meaningful inode
1276 1.1.1.3 christos numbers will never set st_ino to zero, this is merely an
1277 1.1 christos optimization, so we do not need to worry about false negatives. */
1278 1.1.1.10 christos
1279 1.1 christos if (gdb_bfd_stat (abfd.get (), &abfd_stat) == 0
1280 1.1.1.10 christos && abfd_stat.st_ino != 0
1281 1.1 christos && gdb_bfd_stat (parent_objfile->obfd.get (), &parent_stat) == 0)
1282 1.1 christos {
1283 1.1 christos if (abfd_stat.st_dev == parent_stat.st_dev
1284 1.1.1.6 christos && abfd_stat.st_ino == parent_stat.st_ino)
1285 1.1.1.10 christos {
1286 1.1.1.6 christos separate_debug_file_debug_printf ("same file as the objfile");
1287 1.1.1.6 christos return 0;
1288 1.1 christos }
1289 1.1 christos verified_as_different = 1;
1290 1.1 christos }
1291 1.1 christos else
1292 1.1 christos verified_as_different = 0;
1293 1.1.1.5 christos
1294 1.1 christos file_crc_p = gdb_bfd_crc (abfd.get (), &file_crc);
1295 1.1 christos
1296 1.1.1.6 christos if (!file_crc_p)
1297 1.1.1.10 christos {
1298 1.1.1.6 christos separate_debug_file_debug_printf ("error computing CRC");
1299 1.1.1.6 christos return 0;
1300 1.1 christos }
1301 1.1 christos
1302 1.1 christos if (crc != file_crc)
1303 1.1 christos {
1304 1.1 christos unsigned long parent_crc;
1305 1.1.1.3 christos
1306 1.1.1.3 christos /* If the files could not be verified as different with
1307 1.1.1.3 christos bfd_stat then we need to calculate the parent's CRC
1308 1.1 christos to verify whether the files are different or not. */
1309 1.1 christos
1310 1.1 christos if (!verified_as_different)
1311 1.1.1.8 christos {
1312 1.1.1.6 christos if (!gdb_bfd_crc (parent_objfile->obfd.get (), &parent_crc))
1313 1.1.1.10 christos {
1314 1.1.1.6 christos separate_debug_file_debug_printf ("error computing CRC");
1315 1.1.1.6 christos return 0;
1316 1.1 christos }
1317 1.1 christos }
1318 1.1 christos
1319 1.1.1.9 christos if (verified_as_different || parent_crc != file_crc)
1320 1.1.1.10 christos {
1321 1.1.1.10 christos separate_debug_file_debug_printf
1322 1.1.1.10 christos ("the debug information found in \"%s\" does not match "
1323 1.1.1.10 christos "\"%s\" (CRC mismatch).", name.c_str (),
1324 1.1.1.10 christos objfile_name (parent_objfile));
1325 1.1.1.9 christos
1326 1.1.1.9 christos warnings->warn (_("the debug information found in \"%ps\""
1327 1.1.1.9 christos " does not match \"%ps\" (CRC mismatch)."),
1328 1.1.1.9 christos styled_string (file_name_style.style (),
1329 1.1.1.9 christos name.c_str ()),
1330 1.1.1.9 christos styled_string (file_name_style.style (),
1331 1.1.1.9 christos objfile_name (parent_objfile)));
1332 1.1 christos }
1333 1.1 christos
1334 1.1 christos return 0;
1335 1.1 christos }
1336 1.1.1.10 christos
1337 1.1.1.6 christos separate_debug_file_debug_printf ("found a match");
1338 1.1 christos
1339 1.1 christos return 1;
1340 1.1 christos }
1341 1.1.1.8 christos
1342 1.1 christos std::string debug_file_directory;
1343 1.1 christos static void
1344 1.1 christos show_debug_file_directory (struct ui_file *file, int from_tty,
1345 1.1 christos struct cmd_list_element *c, const char *value)
1346 1.1.1.8 christos {
1347 1.1.1.8 christos gdb_printf (file,
1348 1.1.1.8 christos _("The directory where separate debug "
1349 1.1.1.8 christos "symbols are searched for is \"%s\".\n"),
1350 1.1 christos value);
1351 1.1 christos }
1352 1.1 christos
1353 1.1 christos #if ! defined (DEBUG_SUBDIRECTORY)
1354 1.1 christos #define DEBUG_SUBDIRECTORY ".debug"
1355 1.1 christos #endif
1356 1.1 christos
1357 1.1 christos /* Find a separate debuginfo file for OBJFILE, using DIR as the directory
1358 1.1 christos where the original file resides (may not be the same as
1359 1.1 christos dirname(objfile->name) due to symlinks), and DEBUGLINK as the file we are
1360 1.1 christos looking for. CANON_DIR is the "realpath" form of DIR.
1361 1.1.1.6 christos DIR must contain a trailing '/'.
1362 1.1.1.9 christos Returns the path of the file with separate debug info, or an empty
1363 1.1.1.9 christos string.
1364 1.1.1.9 christos
1365 1.1.1.9 christos Any warnings generated as part of the lookup process are added to
1366 1.1.1.9 christos WARNINGS. If some other mechanism can be used to lookup the debug
1367 1.1.1.9 christos information then the warning will not be shown, however, if GDB fails to
1368 1.1.1.9 christos find suitable debug information using any approach, then any warnings
1369 1.1 christos will be printed. */
1370 1.1.1.6 christos
1371 1.1 christos static std::string
1372 1.1 christos find_separate_debug_file (const char *dir,
1373 1.1 christos const char *canon_dir,
1374 1.1.1.9 christos const char *debuglink,
1375 1.1.1.9 christos unsigned long crc32, struct objfile *objfile,
1376 1.1 christos deferred_warnings *warnings)
1377 1.1.1.10 christos {
1378 1.1.1.10 christos SEPARATE_DEBUG_FILE_SCOPED_DEBUG_START_END
1379 1.1.1.10 christos ("looking for separate debug info (debug link) for %s",
1380 1.1 christos objfile_name (objfile));
1381 1.1 christos
1382 1.1.1.10 christos /* First try in the same directory as the original file. */
1383 1.1 christos std::string debugfile = path_join (dir, debuglink);
1384 1.1.1.9 christos
1385 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile, warnings))
1386 1.1 christos return debugfile;
1387 1.1 christos
1388 1.1.1.10 christos /* Then try in the subdirectory named DEBUG_SUBDIRECTORY. */
1389 1.1 christos debugfile = path_join (dir, DEBUG_SUBDIRECTORY, debuglink);
1390 1.1.1.9 christos
1391 1.1 christos if (separate_debug_file_exists (debugfile, crc32, objfile, warnings))
1392 1.1 christos return debugfile;
1393 1.1 christos
1394 1.1 christos /* Then try in the global debugfile directories.
1395 1.1 christos
1396 1.1 christos Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
1397 1.1 christos cause "/..." lookups. */
1398 1.1.1.9 christos
1399 1.1.1.9 christos bool target_prefix = is_target_filename (dir);
1400 1.1.1.9 christos const char *dir_notarget
1401 1.1.1.10 christos = target_prefix ? dir + strlen (TARGET_SYSROOT_PREFIX) : dir;
1402 1.1.1.6 christos const char *target_prefix_str = target_prefix ? TARGET_SYSROOT_PREFIX : "";
1403 1.1.1.8 christos std::vector<gdb::unique_xmalloc_ptr<char>> debugdir_vec
1404 1.1.1.10 christos = dirnames_to_char_ptr_vec (debug_file_directory.c_str ());
1405 1.1.1.10 christos const char *sysroot_str = gdb_sysroot.c_str ();
1406 1.1.1.10 christos if (is_target_filename (sysroot_str) && target_filesystem_is_local ())
1407 1.1.1.10 christos sysroot_str += strlen (TARGET_SYSROOT_PREFIX);
1408 1.1.1.6 christos gdb::unique_xmalloc_ptr<char> canon_sysroot = gdb_realpath (sysroot_str);
1409 1.1.1.6 christos
1410 1.1.1.6 christos /* MS-Windows/MS-DOS don't allow colons in file names; we must
1411 1.1.1.6 christos convert the drive letter into a one-letter directory, so that the
1412 1.1.1.6 christos file name resulting from splicing below will be valid.
1413 1.1.1.6 christos
1414 1.1.1.6 christos FIXME: The below only works when GDB runs on MS-Windows/MS-DOS.
1415 1.1.1.6 christos There are various remote-debugging scenarios where such a
1416 1.1.1.6 christos transformation of the drive letter might be required when GDB runs
1417 1.1.1.6 christos on a Posix host, see
1418 1.1.1.6 christos
1419 1.1.1.6 christos https://sourceware.org/ml/gdb-patches/2019-04/msg00605.html
1420 1.1.1.7 christos
1421 1.1.1.6 christos If some of those scenarios need to be supported, we will need to
1422 1.1.1.6 christos use a different condition for HAS_DRIVE_SPEC and a different macro
1423 1.1.1.6 christos instead of STRIP_DRIVE_SPEC, which work on Posix systems as well. */
1424 1.1.1.6 christos std::string drive;
1425 1.1.1.6 christos if (HAS_DRIVE_SPEC (dir_notarget))
1426 1.1.1.6 christos {
1427 1.1.1.6 christos drive = dir_notarget[0];
1428 1.1.1.6 christos dir_notarget = STRIP_DRIVE_SPEC (dir_notarget);
1429 1.1.1.6 christos }
1430 1.1.1.6 christos
1431 1.1.1.6 christos for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec)
1432 1.1.1.10 christos {
1433 1.1.1.10 christos debugfile = path_join (target_prefix_str, debugdir.get (),
1434 1.1 christos drive.c_str (), dir_notarget, debuglink);
1435 1.1.1.9 christos
1436 1.1.1.6 christos if (separate_debug_file_exists (debugfile, crc32, objfile, warnings))
1437 1.1.1.6 christos return debugfile;
1438 1.1.1.6 christos
1439 1.1.1.6 christos const char *base_path = NULL;
1440 1.1 christos if (canon_dir != NULL)
1441 1.1.1.6 christos {
1442 1.1.1.6 christos if (canon_sysroot.get () != NULL)
1443 1.1.1.6 christos base_path = child_path (canon_sysroot.get (), canon_dir);
1444 1.1.1.8 christos else
1445 1.1 christos base_path = child_path (gdb_sysroot.c_str (), canon_dir);
1446 1.1.1.6 christos }
1447 1.1.1.6 christos if (base_path != NULL)
1448 1.1.1.6 christos {
1449 1.1.1.6 christos /* If the file is in the sysroot, try using its base path in
1450 1.1.1.10 christos the global debugfile directory. */
1451 1.1.1.10 christos debugfile = path_join (target_prefix_str, debugdir.get (),
1452 1.1 christos base_path, debuglink);
1453 1.1.1.9 christos
1454 1.1.1.6 christos if (separate_debug_file_exists (debugfile, crc32, objfile, warnings))
1455 1.1.1.6 christos return debugfile;
1456 1.1.1.6 christos
1457 1.1.1.10 christos /* If the file is in the sysroot, try using its base path in
1458 1.1.1.9 christos the sysroot's global debugfile directory. */
1459 1.1.1.9 christos if (gdb_sysroot != TARGET_SYSROOT_PREFIX)
1460 1.1.1.10 christos {
1461 1.1.1.10 christos debugfile = path_join (gdb_sysroot.c_str (), debugdir.get (),
1462 1.1.1.9 christos base_path, debuglink);
1463 1.1.1.9 christos
1464 1.1.1.9 christos if (separate_debug_file_exists (debugfile, crc32, objfile,
1465 1.1.1.9 christos warnings))
1466 1.1.1.9 christos return debugfile;
1467 1.1 christos }
1468 1.1 christos }
1469 1.1 christos }
1470 1.1.1.6 christos
1471 1.1 christos return std::string ();
1472 1.1 christos }
1473 1.1 christos
1474 1.1 christos /* Modify PATH to contain only "[/]directory/" part of PATH.
1475 1.1 christos If there were no directory separators in PATH, PATH will be empty
1476 1.1 christos string on return. */
1477 1.1 christos
1478 1.1 christos static void
1479 1.1 christos terminate_after_last_dir_separator (char *path)
1480 1.1 christos {
1481 1.1 christos int i;
1482 1.1 christos
1483 1.1 christos /* Strip off the final filename part, leaving the directory name,
1484 1.1 christos followed by a slash. The directory can be relative or absolute. */
1485 1.1 christos for (i = strlen(path) - 1; i >= 0; i--)
1486 1.1 christos if (IS_DIR_SEPARATOR (path[i]))
1487 1.1 christos break;
1488 1.1 christos
1489 1.1 christos /* If I is -1 then no directory is present there and DIR will be "". */
1490 1.1 christos path[i + 1] = '\0';
1491 1.1 christos }
1492 1.1.1.9 christos
1493 1.1 christos /* See symtab.h. */
1494 1.1.1.6 christos
1495 1.1.1.9 christos std::string
1496 1.1.1.9 christos find_separate_debug_file_by_debuglink
1497 1.1 christos (struct objfile *objfile, deferred_warnings *warnings)
1498 1.1.1.9 christos {
1499 1.1 christos uint32_t crc32;
1500 1.1.1.6 christos
1501 1.1.1.8 christos gdb::unique_xmalloc_ptr<char> debuglink
1502 1.1 christos (bfd_get_debug_link_info (objfile->obfd.get (), &crc32));
1503 1.1 christos
1504 1.1 christos if (debuglink == NULL)
1505 1.1 christos {
1506 1.1 christos /* There's no separate debug info, hence there's no way we could
1507 1.1.1.6 christos load it => no warning. */
1508 1.1 christos return std::string ();
1509 1.1 christos }
1510 1.1.1.6 christos
1511 1.1.1.6 christos std::string dir = objfile_name (objfile);
1512 1.1.1.6 christos terminate_after_last_dir_separator (&dir[0]);
1513 1.1 christos gdb::unique_xmalloc_ptr<char> canon_dir (lrealpath (dir.c_str ()));
1514 1.1.1.6 christos
1515 1.1.1.6 christos std::string debugfile
1516 1.1.1.9 christos = find_separate_debug_file (dir.c_str (), canon_dir.get (),
1517 1.1.1.9 christos debuglink.get (), crc32, objfile,
1518 1.1 christos warnings);
1519 1.1.1.6 christos
1520 1.1 christos if (debugfile.empty ())
1521 1.1 christos {
1522 1.1 christos /* For PR gdb/9538, try again with realpath (if different from the
1523 1.1 christos original). */
1524 1.1 christos
1525 1.1 christos struct stat st_buf;
1526 1.1 christos
1527 1.1 christos if (lstat (objfile_name (objfile), &st_buf) == 0
1528 1.1 christos && S_ISLNK (st_buf.st_mode))
1529 1.1.1.6 christos {
1530 1.1.1.6 christos gdb::unique_xmalloc_ptr<char> symlink_dir
1531 1.1 christos (lrealpath (objfile_name (objfile)));
1532 1.1 christos if (symlink_dir != NULL)
1533 1.1.1.6 christos {
1534 1.1.1.6 christos terminate_after_last_dir_separator (symlink_dir.get ());
1535 1.1 christos if (dir != symlink_dir.get ())
1536 1.1 christos {
1537 1.1.1.6 christos /* Different directory, so try using it. */
1538 1.1.1.6 christos debugfile = find_separate_debug_file (symlink_dir.get (),
1539 1.1.1.6 christos symlink_dir.get (),
1540 1.1 christos debuglink.get (),
1541 1.1.1.9 christos crc32,
1542 1.1.1.9 christos objfile,
1543 1.1 christos warnings);
1544 1.1 christos }
1545 1.1 christos }
1546 1.1 christos }
1547 1.1 christos }
1548 1.1 christos
1549 1.1 christos return debugfile;
1550 1.1 christos }
1551 1.1.1.6 christos
1552 1.1.1.6 christos /* Make sure that OBJF_{READNOW,READNEVER} are not set
1553 1.1.1.6 christos simultaneously. */
1554 1.1.1.6 christos
1555 1.1.1.6 christos static void
1556 1.1.1.6 christos validate_readnow_readnever (objfile_flags flags)
1557 1.1.1.6 christos {
1558 1.1.1.6 christos if ((flags & OBJF_READNOW) && (flags & OBJF_READNEVER))
1559 1.1.1.6 christos error (_("-readnow and -readnever cannot be used simultaneously"));
1560 1.1.1.6 christos }
1561 1.1.1.9 christos
1562 1.1 christos /* See symfile.h. */
1563 1.1 christos
1564 1.1.1.6 christos void
1565 1.1 christos symbol_file_command (const char *args, int from_tty)
1566 1.1 christos {
1567 1.1 christos dont_repeat ();
1568 1.1 christos
1569 1.1 christos if (args == NULL)
1570 1.1 christos {
1571 1.1 christos symbol_file_clear (from_tty);
1572 1.1 christos }
1573 1.1 christos else
1574 1.1.1.5 christos {
1575 1.1.1.5 christos objfile_flags flags = OBJF_USERLOADED;
1576 1.1 christos symfile_add_flags add_flags = 0;
1577 1.1.1.6 christos char *name = NULL;
1578 1.1.1.6 christos bool stop_processing_options = false;
1579 1.1.1.6 christos CORE_ADDR offset = 0;
1580 1.1.1.6 christos int idx;
1581 1.1 christos char *arg;
1582 1.1.1.5 christos
1583 1.1.1.5 christos if (from_tty)
1584 1.1.1.5 christos add_flags |= SYMFILE_VERBOSE;
1585 1.1.1.6 christos
1586 1.1.1.6 christos gdb_argv built_argv (args);
1587 1.1 christos for (arg = built_argv[0], idx = 0; arg != NULL; arg = built_argv[++idx])
1588 1.1.1.6 christos {
1589 1.1 christos if (stop_processing_options || *arg != '-')
1590 1.1.1.6 christos {
1591 1.1.1.6 christos if (name == NULL)
1592 1.1.1.6 christos name = arg;
1593 1.1.1.6 christos else
1594 1.1 christos error (_("Unrecognized argument \"%s\""), arg);
1595 1.1.1.6 christos }
1596 1.1.1.6 christos else if (strcmp (arg, "-readnow") == 0)
1597 1.1.1.6 christos flags |= OBJF_READNOW;
1598 1.1.1.6 christos else if (strcmp (arg, "-readnever") == 0)
1599 1.1.1.6 christos flags |= OBJF_READNEVER;
1600 1.1.1.6 christos else if (strcmp (arg, "-o") == 0)
1601 1.1.1.6 christos {
1602 1.1.1.6 christos arg = built_argv[++idx];
1603 1.1.1.6 christos if (arg == NULL)
1604 1.1 christos error (_("Missing argument to -o"));
1605 1.1.1.6 christos
1606 1.1.1.6 christos offset = parse_and_eval_address (arg);
1607 1.1.1.6 christos }
1608 1.1.1.6 christos else if (strcmp (arg, "--") == 0)
1609 1.1.1.6 christos stop_processing_options = true;
1610 1.1.1.6 christos else
1611 1.1 christos error (_("Unrecognized argument \"%s\""), arg);
1612 1.1 christos }
1613 1.1 christos
1614 1.1 christos if (name == NULL)
1615 1.1 christos error (_("no symbol file name was specified"));
1616 1.1.1.6 christos
1617 1.1.1.6 christos validate_readnow_readnever (flags);
1618 1.1.1.7 christos
1619 1.1.1.7 christos /* Set SYMFILE_DEFER_BP_RESET because the proper displacement for a PIE
1620 1.1.1.7 christos (Position Independent Executable) main symbol file will only be
1621 1.1.1.7 christos computed by the solib_create_inferior_hook below. Without it,
1622 1.1.1.7 christos breakpoint_re_set would fail to insert the breakpoints with the zero
1623 1.1.1.7 christos displacement. */
1624 1.1.1.7 christos add_flags |= SYMFILE_DEFER_BP_RESET;
1625 1.1.1.6 christos
1626 1.1.1.7 christos symbol_file_add_main_1 (name, add_flags, flags, offset);
1627 1.1.1.7 christos
1628 1.1.1.7 christos solib_create_inferior_hook (from_tty);
1629 1.1.1.7 christos
1630 1.1.1.7 christos /* Now it's safe to re-add the breakpoints. */
1631 1.1.1.8 christos breakpoint_re_set ();
1632 1.1.1.8 christos
1633 1.1.1.8 christos /* Also, it's safe to re-add varobjs. */
1634 1.1 christos varobj_re_set ();
1635 1.1 christos }
1636 1.1 christos }
1637 1.1.1.9 christos
1638 1.1 christos /* Lazily set the initial language. */
1639 1.1.1.9 christos
1640 1.1.1.9 christos static void
1641 1.1 christos set_initial_language_callback ()
1642 1.1.1.2 christos {
1643 1.1.1.7 christos enum language lang = main_language ();
1644 1.1.1.7 christos /* Make C the default language. */
1645 1.1 christos enum language default_lang = language_c;
1646 1.1.1.2 christos
1647 1.1 christos if (lang == language_unknown)
1648 1.1.1.7 christos {
1649 1.1.1.7 christos const char *name = main_name ();
1650 1.1.1.9 christos struct symbol *sym
1651 1.1.1.9 christos = lookup_symbol_in_language (name, nullptr, SEARCH_FUNCTION_DOMAIN,
1652 1.1 christos default_lang, nullptr).symbol;
1653 1.1 christos
1654 1.1.1.7 christos if (sym != NULL)
1655 1.1 christos lang = sym->language ();
1656 1.1 christos }
1657 1.1 christos
1658 1.1 christos if (lang == language_unknown)
1659 1.1.1.7 christos {
1660 1.1 christos lang = default_lang;
1661 1.1 christos }
1662 1.1 christos
1663 1.1 christos set_language (lang);
1664 1.1 christos expected_language = current_language; /* Don't warn the user. */
1665 1.1 christos }
1666 1.1.1.9 christos
1667 1.1.1.9 christos /* Set the initial language. */
1668 1.1.1.9 christos
1669 1.1.1.9 christos void
1670 1.1.1.9 christos set_initial_language (void)
1671 1.1.1.9 christos {
1672 1.1.1.9 christos if (language_mode == language_mode_manual)
1673 1.1.1.9 christos return;
1674 1.1.1.9 christos lazily_set_language (set_initial_language_callback);
1675 1.1.1.9 christos }
1676 1.1 christos
1677 1.1 christos /* Open the file specified by NAME and hand it off to BFD for
1678 1.1 christos preliminary analysis. Return a newly initialized bfd *, which
1679 1.1 christos includes a newly malloc'd` copy of NAME (tilde-expanded and made
1680 1.1 christos absolute). In case of trouble, error() is called. */
1681 1.1.1.5 christos
1682 1.1.1.3 christos gdb_bfd_ref_ptr
1683 1.1 christos symfile_bfd_open (const char *name)
1684 1.1.1.3 christos {
1685 1.1 christos int desc = -1;
1686 1.1.1.6 christos
1687 1.1.1.3 christos gdb::unique_xmalloc_ptr<char> absolute_name;
1688 1.1 christos if (!is_target_filename (name))
1689 1.1.1.6 christos {
1690 1.1 christos gdb::unique_xmalloc_ptr<char> expanded_name (tilde_expand (name));
1691 1.1.1.3 christos
1692 1.1.1.3 christos /* Look down path for it, allocate 2nd new malloc'd copy. */
1693 1.1.1.3 christos desc = openp (getenv ("PATH"),
1694 1.1.1.6 christos OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
1695 1.1 christos expanded_name.get (), O_RDONLY | O_BINARY, &absolute_name);
1696 1.1.1.3 christos #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
1697 1.1.1.3 christos if (desc < 0)
1698 1.1.1.6 christos {
1699 1.1 christos char *exename = (char *) alloca (strlen (expanded_name.get ()) + 5);
1700 1.1.1.6 christos
1701 1.1.1.3 christos strcat (strcpy (exename, expanded_name.get ()), ".exe");
1702 1.1.1.3 christos desc = openp (getenv ("PATH"),
1703 1.1.1.3 christos OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
1704 1.1.1.3 christos exename, O_RDONLY | O_BINARY, &absolute_name);
1705 1.1 christos }
1706 1.1.1.3 christos #endif
1707 1.1.1.6 christos if (desc < 0)
1708 1.1 christos perror_with_name (expanded_name.get ());
1709 1.1.1.6 christos
1710 1.1.1.3 christos name = absolute_name.get ();
1711 1.1 christos }
1712 1.1.1.5 christos
1713 1.1.1.5 christos gdb_bfd_ref_ptr sym_bfd (gdb_bfd_open (name, gnutarget, desc));
1714 1.1 christos if (sym_bfd == NULL)
1715 1.1 christos error (_("`%s': can't open to read symbols: %s."), name,
1716 1.1.1.3 christos bfd_errmsg (bfd_get_error ()));
1717 1.1.1.5 christos
1718 1.1.1.5 christos if (!bfd_check_format (sym_bfd.get (), bfd_object))
1719 1.1.1.5 christos error (_("`%s': can't read symbols: %s."), name,
1720 1.1 christos bfd_errmsg (bfd_get_error ()));
1721 1.1 christos
1722 1.1 christos return sym_bfd;
1723 1.1 christos }
1724 1.1.1.9 christos
1725 1.1.1.9 christos /* See symfile.h. */
1726 1.1.1.9 christos
1727 1.1.1.9 christos gdb_bfd_ref_ptr
1728 1.1.1.9 christos symfile_bfd_open_no_error (const char *name) noexcept
1729 1.1.1.9 christos {
1730 1.1.1.9 christos try
1731 1.1.1.9 christos {
1732 1.1.1.9 christos return symfile_bfd_open (name);
1733 1.1.1.9 christos }
1734 1.1.1.9 christos catch (const gdb_exception_error &err)
1735 1.1.1.9 christos {
1736 1.1.1.9 christos warning ("%s", err.what ());
1737 1.1.1.9 christos }
1738 1.1.1.9 christos
1739 1.1.1.9 christos return nullptr;
1740 1.1.1.9 christos }
1741 1.1 christos
1742 1.1 christos /* Return the section index for SECTION_NAME on OBJFILE. Return -1 if
1743 1.1 christos the section was not found. */
1744 1.1 christos
1745 1.1.1.5 christos int
1746 1.1 christos get_section_index (struct objfile *objfile, const char *section_name)
1747 1.1.1.8 christos {
1748 1.1 christos asection *sect = bfd_get_section_by_name (objfile->obfd.get (), section_name);
1749 1.1 christos
1750 1.1 christos if (sect)
1751 1.1 christos return sect->index;
1752 1.1 christos else
1753 1.1 christos return -1;
1754 1.1 christos }
1755 1.1 christos
1756 1.1 christos /* Link SF into the global symtab_fns list.
1757 1.1 christos FLAVOUR is the file format that SF handles.
1758 1.1 christos Called on startup by the _initialize routine in each object file format
1759 1.1 christos reader, to register information about each format the reader is prepared
1760 1.1 christos to handle. */
1761 1.1 christos
1762 1.1 christos void
1763 1.1 christos add_symtab_fns (enum bfd_flavour flavour, const struct sym_fns *sf)
1764 1.1.1.6 christos {
1765 1.1 christos symtab_fns.emplace_back (flavour, sf);
1766 1.1 christos }
1767 1.1 christos
1768 1.1 christos /* Initialize OBJFILE to read symbols from its associated BFD. It
1769 1.1 christos either returns or calls error(). The result is an initialized
1770 1.1 christos struct sym_fns in the objfile structure, that contains cached
1771 1.1 christos information about the symbol file. */
1772 1.1 christos
1773 1.1 christos static const struct sym_fns *
1774 1.1 christos find_sym_fns (bfd *abfd)
1775 1.1 christos {
1776 1.1 christos enum bfd_flavour our_flavour = bfd_get_flavour (abfd);
1777 1.1 christos
1778 1.1 christos if (our_flavour == bfd_target_srec_flavour
1779 1.1 christos || our_flavour == bfd_target_ihex_flavour
1780 1.1 christos || our_flavour == bfd_target_tekhex_flavour)
1781 1.1 christos return NULL; /* No symbols. */
1782 1.1.1.6 christos
1783 1.1.1.6 christos for (const registered_sym_fns &rsf : symtab_fns)
1784 1.1.1.6 christos if (our_flavour == rsf.sym_flavour)
1785 1.1 christos return rsf.sym_fns;
1786 1.1.1.10 christos
1787 1.1.1.10 christos error (_("Object file %s could not be read. Symbol format `%s' unknown."),
1788 1.1 christos abfd->filename, bfd_get_target (abfd));
1789 1.1 christos }
1790 1.1 christos
1791 1.1 christos
1793 1.1 christos /* This function runs the load command of our current target. */
1794 1.1.1.6 christos
1795 1.1 christos static void
1796 1.1 christos load_command (const char *arg, int from_tty)
1797 1.1 christos {
1798 1.1 christos dont_repeat ();
1799 1.1 christos
1800 1.1 christos /* The user might be reloading because the binary has changed. Take
1801 1.1.1.8 christos this opportunity to check. */
1802 1.1 christos reopen_exec_file ();
1803 1.1.1.6 christos reread_symbols (from_tty);
1804 1.1 christos
1805 1.1 christos std::string temp;
1806 1.1.1.6 christos if (arg == NULL)
1807 1.1 christos {
1808 1.1.1.10 christos const char *parg, *prev;
1809 1.1.1.10 christos
1810 1.1.1.10 christos arg = current_program_space->exec_filename ();
1811 1.1 christos if (arg == nullptr)
1812 1.1.1.6 christos no_executable_specified_error ();
1813 1.1.1.6 christos
1814 1.1.1.6 christos /* We may need to quote this string so buildargv can pull it
1815 1.1 christos apart. */
1816 1.1 christos prev = parg = arg;
1817 1.1.1.6 christos while ((parg = strpbrk (parg, "\\\"'\t ")))
1818 1.1.1.6 christos {
1819 1.1.1.6 christos temp.append (prev, parg - prev);
1820 1.1.1.6 christos prev = parg++;
1821 1.1.1.6 christos temp.push_back ('\\');
1822 1.1.1.6 christos }
1823 1.1.1.6 christos /* If we have not copied anything yet, then we didn't see a
1824 1.1 christos character to quote, and we can just leave ARG unchanged. */
1825 1.1.1.6 christos if (!temp.empty ())
1826 1.1.1.6 christos {
1827 1.1 christos temp.append (prev);
1828 1.1 christos arg = temp.c_str ();
1829 1.1 christos }
1830 1.1 christos }
1831 1.1 christos
1832 1.1 christos target_load (arg, from_tty);
1833 1.1 christos
1834 1.1 christos /* After re-loading the executable, we don't really know which
1835 1.1 christos overlays are mapped any more. */
1836 1.1 christos overlay_cache_invalid = 1;
1837 1.1 christos }
1838 1.1 christos
1839 1.1 christos /* This version of "load" should be usable for any target. Currently
1840 1.1 christos it is just used for remote targets, not inftarg.c or core files,
1841 1.1 christos on the theory that only in that case is it useful.
1842 1.1 christos
1843 1.1 christos Avoiding xmodem and the like seems like a win (a) because we don't have
1844 1.1 christos to worry about finding it, and (b) On VMS, fork() is very slow and so
1845 1.1 christos we don't want to run a subprocess. On the other hand, I'm not sure how
1846 1.1 christos performance compares. */
1847 1.1 christos
1848 1.1 christos static int validate_download = 0;
1849 1.1.1.6 christos
1850 1.1.1.6 christos /* Opaque data for load_progress. */
1851 1.1 christos struct load_progress_data
1852 1.1.1.6 christos {
1853 1.1.1.6 christos /* Cumulative data. */
1854 1.1.1.6 christos unsigned long write_count = 0;
1855 1.1 christos unsigned long data_count = 0;
1856 1.1 christos bfd_size_type total_size = 0;
1857 1.1 christos };
1858 1.1.1.6 christos
1859 1.1.1.6 christos /* Opaque data for load_progress for a single section. */
1860 1.1.1.6 christos struct load_progress_section_data
1861 1.1.1.6 christos {
1862 1.1.1.6 christos load_progress_section_data (load_progress_data *cumulative_,
1863 1.1.1.6 christos const char *section_name_, ULONGEST section_size_,
1864 1.1.1.6 christos CORE_ADDR lma_, gdb_byte *buffer_)
1865 1.1.1.6 christos : cumulative (cumulative_), section_name (section_name_),
1866 1.1.1.6 christos section_size (section_size_), lma (lma_), buffer (buffer_)
1867 1.1 christos {}
1868 1.1 christos
1869 1.1 christos struct load_progress_data *cumulative;
1870 1.1 christos
1871 1.1.1.6 christos /* Per-section data. */
1872 1.1 christos const char *section_name;
1873 1.1 christos ULONGEST section_sent = 0;
1874 1.1 christos ULONGEST section_size;
1875 1.1 christos CORE_ADDR lma;
1876 1.1 christos gdb_byte *buffer;
1877 1.1.1.6 christos };
1878 1.1.1.6 christos
1879 1.1.1.6 christos /* Opaque data for load_section_callback. */
1880 1.1.1.6 christos struct load_section_data
1881 1.1.1.6 christos {
1882 1.1.1.6 christos load_section_data (load_progress_data *progress_data_)
1883 1.1.1.6 christos : progress_data (progress_data_)
1884 1.1.1.6 christos {}
1885 1.1.1.6 christos
1886 1.1.1.6 christos ~load_section_data ()
1887 1.1.1.6 christos {
1888 1.1.1.6 christos for (auto &&request : requests)
1889 1.1.1.6 christos {
1890 1.1.1.6 christos xfree (request.data);
1891 1.1.1.6 christos delete ((load_progress_section_data *) request.baton);
1892 1.1.1.6 christos }
1893 1.1.1.6 christos }
1894 1.1.1.6 christos
1895 1.1.1.6 christos CORE_ADDR load_offset = 0;
1896 1.1.1.6 christos struct load_progress_data *progress_data;
1897 1.1.1.6 christos std::vector<struct memory_write_request> requests;
1898 1.1 christos };
1899 1.1 christos
1900 1.1 christos /* Target write callback routine for progress reporting. */
1901 1.1 christos
1902 1.1 christos static void
1903 1.1.1.4 christos load_progress (ULONGEST bytes, void *untyped_arg)
1904 1.1.1.4 christos {
1905 1.1 christos struct load_progress_section_data *args
1906 1.1 christos = (struct load_progress_section_data *) untyped_arg;
1907 1.1 christos struct load_progress_data *totals;
1908 1.1 christos
1909 1.1 christos if (args == NULL)
1910 1.1 christos /* Writing padding data. No easy way to get at the cumulative
1911 1.1 christos stats, so just ignore this. */
1912 1.1 christos return;
1913 1.1 christos
1914 1.1 christos totals = args->cumulative;
1915 1.1 christos
1916 1.1 christos if (bytes == 0 && args->section_sent == 0)
1917 1.1 christos {
1918 1.1.1.5 christos /* The write is just starting. Let the user know we've started
1919 1.1.1.5 christos this section. */
1920 1.1.1.5 christos current_uiout->message ("Loading section %s, size %s lma %s\n",
1921 1.1.1.9 christos args->section_name,
1922 1.1.1.9 christos hex_string (args->section_size),
1923 1.1 christos paddress (current_inferior ()->arch (),
1924 1.1 christos args->lma));
1925 1.1 christos return;
1926 1.1 christos }
1927 1.1 christos
1928 1.1 christos if (validate_download)
1929 1.1 christos {
1930 1.1 christos /* Broken memories and broken monitors manifest themselves here
1931 1.1 christos when bring new computers to life. This doubles already slow
1932 1.1 christos downloads. */
1933 1.1 christos /* NOTE: cagney/1999-10-18: A more efficient implementation
1934 1.1 christos might add a verify_memory() method to the target vector and
1935 1.1.1.6 christos then use that. remote.c could implement that method using
1936 1.1 christos the ``qCRC'' packet. */
1937 1.1.1.6 christos gdb::byte_vector check (bytes);
1938 1.1 christos
1939 1.1.1.9 christos if (target_read_memory (args->lma, check.data (), bytes) != 0)
1940 1.1.1.6 christos error (_("Download verify read failed at %s"),
1941 1.1 christos paddress (current_inferior ()->arch (), args->lma));
1942 1.1.1.9 christos if (memcmp (args->buffer, check.data (), bytes) != 0)
1943 1.1 christos error (_("Download verify compare failed at %s"),
1944 1.1 christos paddress (current_inferior ()->arch (), args->lma));
1945 1.1 christos }
1946 1.1 christos totals->data_count += bytes;
1947 1.1 christos args->lma += bytes;
1948 1.1 christos args->buffer += bytes;
1949 1.1 christos totals->write_count += 1;
1950 1.1 christos args->section_sent += bytes;
1951 1.1 christos if (check_quit_flag ()
1952 1.1 christos || (deprecated_ui_load_progress_hook != NULL
1953 1.1 christos && deprecated_ui_load_progress_hook (args->section_name,
1954 1.1 christos args->section_sent)))
1955 1.1 christos error (_("Canceled the download"));
1956 1.1 christos
1957 1.1 christos if (deprecated_show_load_progress != NULL)
1958 1.1 christos deprecated_show_load_progress (args->section_name,
1959 1.1 christos args->section_sent,
1960 1.1 christos args->section_size,
1961 1.1 christos totals->data_count,
1962 1.1 christos totals->total_size);
1963 1.1.1.8 christos }
1964 1.1 christos
1965 1.1 christos /* Service function for generic_load. */
1966 1.1.1.8 christos
1967 1.1.1.8 christos static void
1968 1.1 christos load_one_section (bfd *abfd, asection *asec,
1969 1.1.1.7 christos struct load_section_data *args)
1970 1.1.1.7 christos {
1971 1.1 christos bfd_size_type size = bfd_section_size (asec);
1972 1.1.1.7 christos const char *sect_name = bfd_section_name (asec);
1973 1.1 christos
1974 1.1 christos if ((bfd_section_flags (asec) & SEC_LOAD) == 0)
1975 1.1 christos return;
1976 1.1 christos
1977 1.1 christos if (size == 0)
1978 1.1.1.7 christos return;
1979 1.1.1.6 christos
1980 1.1.1.6 christos ULONGEST begin = bfd_section_lma (asec) + args->load_offset;
1981 1.1 christos ULONGEST end = begin + size;
1982 1.1 christos gdb_byte *buffer = (gdb_byte *) xmalloc (size);
1983 1.1.1.6 christos bfd_get_section_contents (abfd, asec, buffer, 0, size);
1984 1.1.1.6 christos
1985 1.1.1.6 christos load_progress_section_data *section_data
1986 1.1 christos = new load_progress_section_data (args->progress_data, sect_name, size,
1987 1.1.1.6 christos begin, buffer);
1988 1.1 christos
1989 1.1 christos args->requests.emplace_back (begin, end, buffer, section_data);
1990 1.1.1.5 christos }
1991 1.1.1.5 christos
1992 1.1.1.5 christos static void print_transfer_performance (struct ui_file *stream,
1993 1.1.1.8 christos unsigned long data_count,
1994 1.1.1.5 christos unsigned long write_count,
1995 1.1.1.7 christos std::chrono::steady_clock::duration d);
1996 1.1.1.7 christos
1997 1.1 christos /* See symfile.h. */
1998 1.1.1.2 christos
1999 1.1 christos void
2000 1.1 christos generic_load (const char *args, int from_tty)
2001 1.1.1.6 christos {
2002 1.1 christos struct load_progress_data total_progress;
2003 1.1 christos struct load_section_data cbdata (&total_progress);
2004 1.1 christos struct ui_out *uiout = current_uiout;
2005 1.1 christos
2006 1.1 christos if (args == NULL)
2007 1.1.1.6 christos error_no_arg (_("file to load"));
2008 1.1 christos
2009 1.1.1.6 christos gdb_argv argv (args);
2010 1.1 christos
2011 1.1 christos gdb::unique_xmalloc_ptr<char> filename (tilde_expand (argv[0]));
2012 1.1 christos
2013 1.1 christos if (argv[1] != NULL)
2014 1.1 christos {
2015 1.1 christos const char *endptr;
2016 1.1 christos
2017 1.1 christos cbdata.load_offset = strtoulst (argv[1], &endptr, 0);
2018 1.1.1.8 christos
2019 1.1 christos /* If the last word was not a valid number then
2020 1.1.1.8 christos treat it as a file name with spaces in. */
2021 1.1 christos if (argv[1] == endptr)
2022 1.1 christos error (_("Invalid download offset:%s."), argv[1]);
2023 1.1 christos
2024 1.1 christos if (argv[2] != NULL)
2025 1.1 christos error (_("Too many parameters."));
2026 1.1 christos }
2027 1.1.1.7 christos
2028 1.1 christos /* Open the file for loading. */
2029 1.1.1.6 christos gdb_bfd_ref_ptr loadfile_bfd (gdb_bfd_open (filename.get (), gnutarget));
2030 1.1 christos if (loadfile_bfd == NULL)
2031 1.1.1.5 christos perror_with_name (filename.get ());
2032 1.1 christos
2033 1.1.1.6 christos if (!bfd_check_format (loadfile_bfd.get (), bfd_object))
2034 1.1 christos {
2035 1.1 christos error (_("\"%s\" is not an object file: %s"), filename.get (),
2036 1.1 christos bfd_errmsg (bfd_get_error ()));
2037 1.1.1.8 christos }
2038 1.1.1.8 christos
2039 1.1 christos for (asection *asec : gdb_bfd_sections (loadfile_bfd))
2040 1.1.1.8 christos total_progress.total_size += bfd_section_size (asec);
2041 1.1.1.8 christos
2042 1.1 christos for (asection *asec : gdb_bfd_sections (loadfile_bfd))
2043 1.1.1.5 christos load_one_section (loadfile_bfd.get (), asec, &cbdata);
2044 1.1.1.5 christos
2045 1.1.1.5 christos using namespace std::chrono;
2046 1.1 christos
2047 1.1 christos steady_clock::time_point start_time = steady_clock::now ();
2048 1.1 christos
2049 1.1 christos if (target_write_memory_blocks (cbdata.requests, flash_discard,
2050 1.1 christos load_progress) != 0)
2051 1.1.1.5 christos error (_("Load failed"));
2052 1.1 christos
2053 1.1.1.6 christos steady_clock::time_point end_time = steady_clock::now ();
2054 1.1.1.9 christos
2055 1.1.1.5 christos CORE_ADDR entry = bfd_get_start_address (loadfile_bfd.get ());
2056 1.1.1.9 christos entry = gdbarch_addr_bits_remove (current_inferior ()->arch (), entry);
2057 1.1.1.5 christos uiout->text ("Start address ");
2058 1.1.1.7 christos uiout->field_core_addr ("address", current_inferior ()->arch (), entry);
2059 1.1.1.5 christos uiout->text (", load size ");
2060 1.1.1.9 christos uiout->field_unsigned ("load-size", total_progress.data_count);
2061 1.1 christos uiout->text ("\n");
2062 1.1 christos regcache_write_pc (get_thread_regcache (inferior_thread ()), entry);
2063 1.1 christos
2064 1.1 christos /* Reset breakpoints, now that we have changed the load image. For
2065 1.1 christos instance, breakpoints may have been set (or reset, by
2066 1.1 christos post_create_inferior) while connected to the target but before we
2067 1.1 christos loaded the program. In that case, the prologue analyzer could
2068 1.1 christos have read instructions from the target to find the right
2069 1.1 christos breakpoint locations. Loading has changed the contents of that
2070 1.1 christos memory. */
2071 1.1 christos
2072 1.1 christos breakpoint_re_set ();
2073 1.1 christos
2074 1.1.1.5 christos print_transfer_performance (gdb_stdout, total_progress.data_count,
2075 1.1 christos total_progress.write_count,
2076 1.1 christos end_time - start_time);
2077 1.1.1.5 christos }
2078 1.1.1.5 christos
2079 1.1.1.5 christos /* Report on STREAM the performance of a memory transfer operation,
2080 1.1.1.5 christos such as 'load'. DATA_COUNT is the number of bytes transferred.
2081 1.1.1.5 christos WRITE_COUNT is the number of separate write operations, or 0, if
2082 1.1 christos that information is not available. TIME is how long the operation
2083 1.1.1.5 christos lasted. */
2084 1.1 christos
2085 1.1 christos static void
2086 1.1 christos print_transfer_performance (struct ui_file *stream,
2087 1.1.1.5 christos unsigned long data_count,
2088 1.1 christos unsigned long write_count,
2089 1.1.1.5 christos std::chrono::steady_clock::duration time)
2090 1.1 christos {
2091 1.1 christos using namespace std::chrono;
2092 1.1.1.5 christos struct ui_out *uiout = current_uiout;
2093 1.1 christos
2094 1.1.1.5 christos milliseconds ms = duration_cast<milliseconds> (time);
2095 1.1.1.5 christos
2096 1.1 christos uiout->text ("Transfer rate: ");
2097 1.1.1.5 christos if (ms.count () > 0)
2098 1.1 christos {
2099 1.1.1.5 christos unsigned long rate = ((ULONGEST) data_count * 1000) / ms.count ();
2100 1.1 christos
2101 1.1.1.7 christos if (uiout->is_mi_like_p ())
2102 1.1.1.5 christos {
2103 1.1 christos uiout->field_unsigned ("transfer-rate", rate * 8);
2104 1.1 christos uiout->text (" bits/sec");
2105 1.1 christos }
2106 1.1.1.7 christos else if (rate < 1024)
2107 1.1.1.5 christos {
2108 1.1 christos uiout->field_unsigned ("transfer-rate", rate);
2109 1.1 christos uiout->text (" bytes/sec");
2110 1.1 christos }
2111 1.1.1.7 christos else
2112 1.1.1.5 christos {
2113 1.1 christos uiout->field_unsigned ("transfer-rate", rate / 1024);
2114 1.1 christos uiout->text (" KB/sec");
2115 1.1 christos }
2116 1.1 christos }
2117 1.1.1.7 christos else
2118 1.1.1.5 christos {
2119 1.1 christos uiout->field_unsigned ("transferred-bits", (data_count * 8));
2120 1.1 christos uiout->text (" bits in <1 sec");
2121 1.1 christos }
2122 1.1.1.5 christos if (write_count > 0)
2123 1.1.1.7 christos {
2124 1.1.1.5 christos uiout->text (", ");
2125 1.1 christos uiout->field_unsigned ("write-rate", data_count / write_count);
2126 1.1.1.5 christos uiout->text (" bytes/write");
2127 1.1 christos }
2128 1.1 christos uiout->text (".\n");
2129 1.1.1.6 christos }
2130 1.1.1.6 christos
2131 1.1.1.6 christos /* Add an OFFSET to the start address of each section in OBJF, except
2132 1.1.1.6 christos sections that were specified in ADDRS. */
2133 1.1.1.6 christos
2134 1.1.1.6 christos static void
2135 1.1.1.6 christos set_objfile_default_section_offset (struct objfile *objf,
2136 1.1.1.6 christos const section_addr_info &addrs,
2137 1.1.1.6 christos CORE_ADDR offset)
2138 1.1.1.7 christos {
2139 1.1.1.6 christos /* Add OFFSET to all sections by default. */
2140 1.1.1.6 christos section_offsets offsets (objf->section_offsets.size (), offset);
2141 1.1.1.6 christos
2142 1.1.1.6 christos /* Create sorted lists of all sections in ADDRS as well as all
2143 1.1.1.6 christos sections in OBJF. */
2144 1.1.1.6 christos
2145 1.1.1.6 christos std::vector<const struct other_sections *> addrs_sorted
2146 1.1.1.6 christos = addrs_section_sort (addrs);
2147 1.1.1.6 christos
2148 1.1.1.6 christos section_addr_info objf_addrs
2149 1.1.1.6 christos = build_section_addr_info_from_objfile (objf);
2150 1.1.1.6 christos std::vector<const struct other_sections *> objf_addrs_sorted
2151 1.1.1.6 christos = addrs_section_sort (objf_addrs);
2152 1.1.1.6 christos
2153 1.1.1.6 christos /* Walk the BFD section list, and if a matching section is found in
2154 1.1.1.6 christos ADDRS_SORTED_LIST, set its offset to zero to keep its address
2155 1.1.1.6 christos unchanged.
2156 1.1.1.6 christos
2157 1.1.1.6 christos Note that both lists may contain multiple sections with the same
2158 1.1.1.6 christos name, and then the sections from ADDRS are matched in BFD order
2159 1.1.1.6 christos (thanks to sectindex). */
2160 1.1.1.6 christos
2161 1.1.1.6 christos std::vector<const struct other_sections *>::iterator addrs_sorted_iter
2162 1.1.1.6 christos = addrs_sorted.begin ();
2163 1.1.1.6 christos for (const other_sections *objf_sect : objf_addrs_sorted)
2164 1.1.1.6 christos {
2165 1.1.1.6 christos const char *objf_name = addr_section_name (objf_sect->name.c_str ());
2166 1.1.1.6 christos int cmp = -1;
2167 1.1.1.6 christos
2168 1.1.1.6 christos while (cmp < 0 && addrs_sorted_iter != addrs_sorted.end ())
2169 1.1.1.6 christos {
2170 1.1.1.6 christos const struct other_sections *sect = *addrs_sorted_iter;
2171 1.1.1.6 christos const char *sect_name = addr_section_name (sect->name.c_str ());
2172 1.1.1.6 christos cmp = strcmp (sect_name, objf_name);
2173 1.1.1.6 christos if (cmp <= 0)
2174 1.1.1.6 christos ++addrs_sorted_iter;
2175 1.1.1.6 christos }
2176 1.1.1.7 christos
2177 1.1.1.6 christos if (cmp == 0)
2178 1.1.1.6 christos offsets[objf_sect->sectindex] = 0;
2179 1.1.1.6 christos }
2180 1.1.1.7 christos
2181 1.1.1.6 christos /* Apply the new section offsets. */
2182 1.1.1.6 christos objfile_relocate (objf, offsets);
2183 1.1 christos }
2184 1.1 christos
2185 1.1 christos /* This function allows the addition of incrementally linked object files.
2186 1.1 christos It does not modify any state in the target, only in the debugger. */
2187 1.1.1.6 christos
2188 1.1 christos static void
2189 1.1 christos add_symbol_file_command (const char *args, int from_tty)
2190 1.1.1.6 christos {
2191 1.1 christos struct gdbarch *gdbarch = get_current_arch ();
2192 1.1 christos gdb::unique_xmalloc_ptr<char> filename;
2193 1.1 christos char *arg;
2194 1.1.1.5 christos int argcnt = 0;
2195 1.1.1.5 christos struct objfile *objf;
2196 1.1.1.5 christos objfile_flags flags = OBJF_USERLOADED | OBJF_SHARED;
2197 1.1.1.5 christos symfile_add_flags add_flags = 0;
2198 1.1.1.5 christos
2199 1.1 christos if (from_tty)
2200 1.1 christos add_flags |= SYMFILE_VERBOSE;
2201 1.1 christos
2202 1.1.1.5 christos struct sect_opt
2203 1.1.1.5 christos {
2204 1.1 christos const char *name;
2205 1.1 christos const char *value;
2206 1.1.1.6 christos };
2207 1.1.1.6 christos
2208 1.1.1.6 christos std::vector<sect_opt> sect_opts = { { ".text", NULL } };
2209 1.1 christos bool stop_processing_options = false;
2210 1.1 christos CORE_ADDR offset = 0;
2211 1.1 christos
2212 1.1 christos dont_repeat ();
2213 1.1 christos
2214 1.1 christos if (args == NULL)
2215 1.1.1.6 christos error (_("add-symbol-file takes a file name and an address"));
2216 1.1.1.6 christos
2217 1.1.1.6 christos bool seen_addr = false;
2218 1.1 christos bool seen_offset = false;
2219 1.1 christos gdb_argv argv (args);
2220 1.1 christos
2221 1.1.1.6 christos for (arg = argv[0], argcnt = 0; arg != NULL; arg = argv[++argcnt])
2222 1.1 christos {
2223 1.1.1.6 christos if (stop_processing_options || *arg != '-')
2224 1.1 christos {
2225 1.1.1.6 christos if (filename == NULL)
2226 1.1.1.6 christos {
2227 1.1 christos /* First non-option argument is always the filename. */
2228 1.1.1.6 christos filename.reset (tilde_expand (arg));
2229 1.1 christos }
2230 1.1.1.6 christos else if (!seen_addr)
2231 1.1.1.6 christos {
2232 1.1.1.6 christos /* The second non-option argument is always the text
2233 1.1.1.6 christos address at which to load the program. */
2234 1.1 christos sect_opts[0].value = arg;
2235 1.1 christos seen_addr = true;
2236 1.1.1.6 christos }
2237 1.1.1.6 christos else
2238 1.1.1.6 christos error (_("Unrecognized argument \"%s\""), arg);
2239 1.1.1.6 christos }
2240 1.1.1.6 christos else if (strcmp (arg, "-readnow") == 0)
2241 1.1.1.6 christos flags |= OBJF_READNOW;
2242 1.1.1.6 christos else if (strcmp (arg, "-readnever") == 0)
2243 1.1.1.6 christos flags |= OBJF_READNEVER;
2244 1.1.1.6 christos else if (strcmp (arg, "-s") == 0)
2245 1.1.1.6 christos {
2246 1.1.1.6 christos if (argv[argcnt + 1] == NULL)
2247 1.1.1.6 christos error (_("Missing section name after \"-s\""));
2248 1.1.1.6 christos else if (argv[argcnt + 2] == NULL)
2249 1.1.1.6 christos error (_("Missing section address after \"-s\""));
2250 1.1.1.6 christos
2251 1.1.1.6 christos sect_opt sect = { argv[argcnt + 1], argv[argcnt + 2] };
2252 1.1.1.6 christos
2253 1.1.1.6 christos sect_opts.push_back (sect);
2254 1.1.1.6 christos argcnt += 2;
2255 1.1.1.6 christos }
2256 1.1.1.6 christos else if (strcmp (arg, "-o") == 0)
2257 1.1.1.6 christos {
2258 1.1.1.6 christos arg = argv[++argcnt];
2259 1.1.1.6 christos if (arg == NULL)
2260 1.1.1.6 christos error (_("Missing argument to -o"));
2261 1.1.1.6 christos
2262 1.1 christos offset = parse_and_eval_address (arg);
2263 1.1.1.6 christos seen_offset = true;
2264 1.1.1.6 christos }
2265 1.1.1.6 christos else if (strcmp (arg, "--") == 0)
2266 1.1.1.6 christos stop_processing_options = true;
2267 1.1 christos else
2268 1.1 christos error (_("Unrecognized argument \"%s\""), arg);
2269 1.1.1.6 christos }
2270 1.1.1.6 christos
2271 1.1.1.6 christos if (filename == NULL)
2272 1.1.1.6 christos error (_("You must provide a filename to be loaded."));
2273 1.1 christos
2274 1.1 christos validate_readnow_readnever (flags);
2275 1.1 christos
2276 1.1 christos /* Print the prompt for the query below. And save the arguments into
2277 1.1 christos a sect_addr_info structure to be passed around to other
2278 1.1 christos functions. We have to split this up into separate print
2279 1.1 christos statements because hex_string returns a local static
2280 1.1.1.9 christos string. */
2281 1.1.1.9 christos
2282 1.1.1.6 christos gdb_printf (_("add symbol table from file \"%ps\""),
2283 1.1.1.6 christos styled_string (file_name_style.style (), filename.get ()));
2284 1.1.1.6 christos section_addr_info section_addrs;
2285 1.1.1.6 christos std::vector<sect_opt>::const_iterator it = sect_opts.begin ();
2286 1.1.1.6 christos if (!seen_addr)
2287 1.1 christos ++it;
2288 1.1 christos for (; it != sect_opts.end (); ++it)
2289 1.1.1.6 christos {
2290 1.1.1.6 christos CORE_ADDR addr;
2291 1.1 christos const char *val = it->value;
2292 1.1.1.6 christos const char *sec = it->name;
2293 1.1.1.8 christos
2294 1.1 christos if (section_addrs.empty ())
2295 1.1 christos gdb_printf (_(" at\n"));
2296 1.1 christos addr = parse_and_eval_address (val);
2297 1.1.1.8 christos
2298 1.1.1.8 christos /* Here we store the section offsets in the order they were
2299 1.1.1.8 christos entered on the command line. Every array element is
2300 1.1.1.8 christos assigned an ascending section index to preserve the above
2301 1.1.1.6 christos order over an unstable sorting algorithm. This dummy
2302 1.1.1.6 christos index is not used for any other purpose.
2303 1.1.1.8 christos */
2304 1.1.1.8 christos section_addrs.emplace_back (addr, sec, section_addrs.size ());
2305 1.1 christos gdb_printf ("\t%s_addr = %s\n", sec,
2306 1.1 christos paddress (gdbarch, addr));
2307 1.1 christos
2308 1.1 christos /* The object's sections are initialized when a
2309 1.1 christos call is made to build_objfile_section_table (objfile).
2310 1.1 christos This happens in reread_symbols.
2311 1.1 christos At this point, we don't know what file type this is,
2312 1.1.1.6 christos so we can't determine what section names are valid. */
2313 1.1.1.8 christos }
2314 1.1.1.8 christos if (seen_offset)
2315 1.1.1.8 christos gdb_printf (_("%s offset by %s\n"),
2316 1.1.1.8 christos (section_addrs.empty ()
2317 1.1.1.8 christos ? _(" with all sections")
2318 1.1.1.6 christos : _("with other sections")),
2319 1.1.1.8 christos paddress (gdbarch, offset));
2320 1.1 christos else if (section_addrs.empty ())
2321 1.1 christos gdb_printf ("\n");
2322 1.1 christos
2323 1.1 christos if (from_tty && (!query ("%s", "")))
2324 1.1.1.6 christos error (_("Not confirmed."));
2325 1.1.1.6 christos
2326 1.1.1.7 christos objf = symbol_file_add (filename.get (), add_flags, §ion_addrs,
2327 1.1.1.9 christos flags);
2328 1.1.1.9 christos if (!objfile_has_symbols (objf) && objf->per_bfd->minimal_symbol_count <= 0)
2329 1.1.1.6 christos warning (_("newly-added symbol file \"%ps\" does not provide any symbols"),
2330 1.1.1.6 christos styled_string (file_name_style.style (), filename.get ()));
2331 1.1.1.6 christos
2332 1.1 christos if (seen_offset)
2333 1.1.1.8 christos set_objfile_default_section_offset (objf, section_addrs, offset);
2334 1.1 christos
2335 1.1 christos current_program_space->add_target_sections (objf);
2336 1.1 christos
2337 1.1 christos /* Getting new symbols may change our opinion about what is
2338 1.1 christos frameless. */
2339 1.1 christos reinit_frame_cache ();
2340 1.1 christos }
2341 1.1.1.10 christos
2342 1.1.1.10 christos
2344 1.1.1.10 christos /* Option support for 'remove-symbol-file' command. */
2345 1.1.1.10 christos
2346 1.1.1.10 christos struct remove_symbol_file_options
2347 1.1.1.10 christos {
2348 1.1.1.10 christos /* True when the '-a' flag was passed. */
2349 1.1.1.10 christos bool address_flag = false;
2350 1.1.1.10 christos };
2351 1.1.1.10 christos
2352 1.1.1.10 christos using remove_symbol_file_options_opt_def
2353 1.1.1.10 christos = gdb::option::flag_option_def<remove_symbol_file_options>;
2354 1.1.1.10 christos
2355 1.1.1.10 christos static const gdb::option::option_def remove_symbol_file_opt_defs[] = {
2356 1.1.1.10 christos remove_symbol_file_options_opt_def {
2357 1.1.1.10 christos "a",
2358 1.1.1.10 christos [] (remove_symbol_file_options *opt) { return &opt->address_flag; },
2359 1.1.1.10 christos N_("Select a symbol file containing ADDRESS.")
2360 1.1.1.10 christos },
2361 1.1.1.10 christos };
2362 1.1.1.10 christos
2363 1.1.1.10 christos static inline gdb::option::option_def_group
2364 1.1.1.10 christos make_remove_symbol_file_def_group (remove_symbol_file_options *opts)
2365 1.1.1.10 christos {
2366 1.1.1.10 christos return {{remove_symbol_file_opt_defs}, opts};
2367 1.1.1.10 christos }
2368 1.1.1.10 christos
2369 1.1.1.10 christos /* Completion function for 'remove-symbol-file' command. */
2370 1.1.1.10 christos
2371 1.1.1.10 christos static void
2372 1.1.1.10 christos remove_symbol_file_command_completer (struct cmd_list_element *ignore,
2373 1.1.1.10 christos completion_tracker &tracker,
2374 1.1.1.10 christos const char *text, const char * /* word */)
2375 1.1.1.10 christos {
2376 1.1.1.10 christos /* Unlike many command completion functions we do gather the option
2377 1.1.1.10 christos values here. How we complete the rest of the command depends on
2378 1.1.1.10 christos whether the '-a' flag has been given or not. */
2379 1.1.1.10 christos remove_symbol_file_options opts;
2380 1.1.1.10 christos auto grp = make_remove_symbol_file_def_group (&opts);
2381 1.1.1.10 christos if (gdb::option::complete_options
2382 1.1.1.10 christos (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp))
2383 1.1.1.10 christos return;
2384 1.1.1.10 christos
2385 1.1.1.10 christos /* Complete the rest of the command line as either a filename or an
2386 1.1.1.10 christos expression (which will evaluate to an address) if the '-a' flag was
2387 1.1.1.10 christos given. */
2388 1.1.1.10 christos if (!opts.address_flag)
2389 1.1.1.10 christos {
2390 1.1.1.10 christos const char *word
2391 1.1.1.10 christos = advance_to_filename_maybe_quoted_complete_word_point (tracker, text);
2392 1.1.1.10 christos filename_maybe_quoted_completer (ignore, tracker, text, word);
2393 1.1.1.10 christos }
2394 1.1.1.10 christos else
2395 1.1.1.10 christos {
2396 1.1.1.10 christos const char *word
2397 1.1.1.10 christos = advance_to_expression_complete_word_point (tracker, text);
2398 1.1.1.10 christos symbol_completer (ignore, tracker, text, word);
2399 1.1 christos }
2400 1.1 christos }
2401 1.1 christos
2402 1.1.1.6 christos /* This function removes a symbol file that was added via add-symbol-file. */
2403 1.1 christos
2404 1.1 christos static void
2405 1.1 christos remove_symbol_file_command (const char *args, int from_tty)
2406 1.1.1.10 christos {
2407 1.1.1.10 christos dont_repeat ();
2408 1.1.1.10 christos
2409 1.1.1.10 christos remove_symbol_file_options opts;
2410 1.1 christos auto grp = make_remove_symbol_file_def_group (&opts);
2411 1.1.1.10 christos gdb::option::process_options
2412 1.1 christos (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp);
2413 1.1.1.10 christos
2414 1.1 christos struct objfile *objf = nullptr;
2415 1.1.1.10 christos
2416 1.1.1.10 christos if (opts.address_flag)
2417 1.1 christos {
2418 1.1.1.10 christos if (args == nullptr || *args == '\0')
2419 1.1 christos error (_("remove-symbol-file: no address provided"));
2420 1.1.1.6 christos
2421 1.1 christos CORE_ADDR addr = parse_and_eval_address (args);
2422 1.1.1.6 christos
2423 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
2424 1.1.1.10 christos {
2425 1.1.1.6 christos if ((objfile->flags & OBJF_USERLOADED) != 0
2426 1.1.1.6 christos && (objfile->flags & OBJF_SHARED) != 0
2427 1.1.1.6 christos && objfile->pspace () == current_program_space
2428 1.1.1.6 christos && is_addr_in_objfile (addr, objfile))
2429 1.1.1.6 christos {
2430 1.1 christos objf = objfile;
2431 1.1 christos break;
2432 1.1.1.10 christos }
2433 1.1 christos }
2434 1.1.1.10 christos }
2435 1.1.1.10 christos else
2436 1.1.1.10 christos {
2437 1.1 christos std::string filename = extract_single_filename_arg (args);
2438 1.1.1.6 christos if (filename.empty ())
2439 1.1 christos error (_("remove-symbol-file: no symbol file provided"));
2440 1.1.1.6 christos
2441 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
2442 1.1.1.10 christos {
2443 1.1.1.10 christos if ((objfile->flags & OBJF_USERLOADED) != 0
2444 1.1.1.6 christos && (objfile->flags & OBJF_SHARED) != 0
2445 1.1.1.6 christos && objfile->pspace () == current_program_space
2446 1.1.1.6 christos && filename_cmp (filename.c_str (), objfile_name (objfile)) == 0)
2447 1.1.1.6 christos {
2448 1.1 christos objf = objfile;
2449 1.1 christos break;
2450 1.1 christos }
2451 1.1 christos }
2452 1.1 christos }
2453 1.1 christos
2454 1.1 christos if (objf == NULL)
2455 1.1 christos error (_("No symbol file found"));
2456 1.1 christos
2457 1.1 christos if (from_tty
2458 1.1 christos && !query (_("Remove symbol table from file \"%s\"? "),
2459 1.1.1.7 christos objfile_name (objf)))
2460 1.1 christos error (_("Not confirmed."));
2461 1.1 christos
2462 1.1 christos objf->unlink ();
2463 1.1 christos clear_symtab_users (0);
2464 1.1 christos }
2465 1.1 christos
2466 1.1.1.8 christos /* Re-read symbols if a symbol-file has changed. */
2467 1.1 christos
2468 1.1.1.5 christos void
2469 1.1 christos reread_symbols (int from_tty)
2470 1.1.1.9 christos {
2471 1.1.1.9 christos std::vector<struct objfile *> new_objfiles;
2472 1.1.1.9 christos
2473 1.1.1.9 christos /* Check to see if the executable has changed, and if so reopen it. The
2474 1.1.1.9 christos executable might not be in the list of objfiles (if the user set
2475 1.1.1.9 christos different values for 'exec-file' and 'symbol-file'), and even if it
2476 1.1.1.9 christos is, then we use a separate timestamp (within the program_space) to
2477 1.1.1.7 christos indicate when the executable was last reloaded. */
2478 1.1 christos reopen_exec_file ();
2479 1.1.1.8 christos
2480 1.1 christos for (objfile *objfile : current_program_space->objfiles ())
2481 1.1 christos {
2482 1.1 christos if (objfile->obfd.get () == NULL)
2483 1.1 christos continue;
2484 1.1 christos
2485 1.1 christos /* Separate debug objfiles are handled in the main objfile. */
2486 1.1.1.9 christos if (objfile->separate_debug_objfile_backlink)
2487 1.1.1.9 christos continue;
2488 1.1.1.9 christos
2489 1.1.1.9 christos /* When a in-memory BFD is initially created, it's mtime (as
2490 1.1.1.9 christos returned by bfd_get_mtime) is the creation time of the BFD.
2491 1.1.1.9 christos However, we call bfd_stat here as we want to see if the
2492 1.1.1.9 christos underlying file has changed, and in this case an in-memory BFD
2493 1.1.1.9 christos will return an st_mtime of zero, so it appears that the in-memory
2494 1.1.1.9 christos file has changed, which isn't what we want here -- this code is
2495 1.1.1.9 christos about reloading BFDs that changed on disk.
2496 1.1.1.9 christos
2497 1.1.1.9 christos Just skip any in-memory BFD. */
2498 1.1.1.9 christos if (objfile->obfd.get ()->flags & BFD_IN_MEMORY)
2499 1.1.1.10 christos continue;
2500 1.1 christos
2501 1.1 christos struct stat new_statbuf;
2502 1.1.1.9 christos int res = gdb_bfd_stat (objfile->obfd.get (), &new_statbuf);
2503 1.1.1.9 christos if (res != 0)
2504 1.1.1.9 christos {
2505 1.1.1.9 christos /* If this object is from an archive (what you usually create
2506 1.1.1.9 christos with `ar', often called a `static library' on most systems,
2507 1.1.1.9 christos though a `shared library' on AIX is also an archive), then you
2508 1.1.1.9 christos should stat on the archive name, not member name. */
2509 1.1.1.9 christos const char *filename;
2510 1.1.1.9 christos if (objfile->obfd->my_archive)
2511 1.1.1.9 christos filename = bfd_get_filename (objfile->obfd->my_archive);
2512 1.1.1.9 christos else
2513 1.1.1.9 christos filename = objfile_name (objfile);
2514 1.1 christos
2515 1.1 christos warning (_("`%ps' has disappeared; keeping its symbols."),
2516 1.1.1.9 christos styled_string (file_name_style.style (), filename));
2517 1.1 christos continue;
2518 1.1 christos }
2519 1.1.1.9 christos time_t new_modtime = new_statbuf.st_mtime;
2520 1.1.1.9 christos if (new_modtime != objfile->mtime)
2521 1.1.1.9 christos {
2522 1.1 christos gdb_printf (_("`%ps' has changed; re-reading symbols.\n"),
2523 1.1 christos styled_string (file_name_style.style (),
2524 1.1 christos objfile_name (objfile)));
2525 1.1 christos
2526 1.1 christos /* There are various functions like symbol_file_add,
2527 1.1 christos symfile_bfd_open, syms_from_objfile, etc., which might
2528 1.1 christos appear to do what we want. But they have various other
2529 1.1 christos effects which we *don't* want. So we just do stuff
2530 1.1 christos ourselves. We don't worry about mapped files (for one thing,
2531 1.1 christos any mapped file will be out of date). */
2532 1.1 christos
2533 1.1.1.10 christos /* If we get an error, blow away this objfile (not sure if
2534 1.1.1.6 christos that is the correct response for things like shared
2535 1.1 christos libraries). */
2536 1.1.1.6 christos scoped_objfile_unlinker objfile_holder (objfile);
2537 1.1 christos
2538 1.1 christos /* We need to do this whenever any symbols go away. */
2539 1.1 christos clear_symtab_users_cleanup defer_clear_users (0);
2540 1.1 christos
2541 1.1 christos /* Keep the calls order approx. the same as in free_objfile. */
2542 1.1 christos
2543 1.1 christos /* Free the separate debug objfiles. It will be
2544 1.1.1.7 christos automatically recreated by sym_read. */
2545 1.1.1.7 christos free_objfile_separate_debug (objfile);
2546 1.1.1.7 christos
2547 1.1 christos /* Clear the stale source cache. */
2548 1.1 christos forget_cached_source_info ();
2549 1.1 christos
2550 1.1 christos /* Remove any references to this objfile in the global
2551 1.1 christos value lists. */
2552 1.1 christos preserve_values (objfile);
2553 1.1 christos
2554 1.1 christos /* Nuke all the state that we will re-read. Much of the following
2555 1.1 christos code which sets things to NULL really is necessary to tell
2556 1.1 christos other parts of GDB that there is nothing currently there.
2557 1.1 christos
2558 1.1 christos Try to keep the freeing order compatible with free_objfile. */
2559 1.1 christos
2560 1.1 christos if (objfile->sf != NULL)
2561 1.1 christos {
2562 1.1.1.8 christos (*objfile->sf->sym_finish) (objfile);
2563 1.1 christos }
2564 1.1 christos
2565 1.1 christos objfile->registry_fields.clear_registry ();
2566 1.1.1.8 christos
2567 1.1.1.7 christos /* Clean up any state BFD has sitting around. */
2568 1.1 christos {
2569 1.1.1.8 christos gdb_bfd_ref_ptr obfd = objfile->obfd;
2570 1.1 christos const char *obfd_filename;
2571 1.1 christos
2572 1.1.1.7 christos obfd_filename = bfd_get_filename (objfile->obfd.get ());
2573 1.1.1.8 christos /* Open the new BFD before freeing the old one, so that
2574 1.1 christos the filename remains live. */
2575 1.1.1.5 christos gdb_bfd_ref_ptr temp (gdb_bfd_open (obfd_filename, gnutarget));
2576 1.1 christos objfile->obfd = std::move (temp);
2577 1.1 christos if (objfile->obfd == NULL)
2578 1.1.1.6 christos error (_("Can't open %s to read symbols."), obfd_filename);
2579 1.1 christos }
2580 1.1 christos
2581 1.1.1.8 christos std::string original_name = objfile->original_name;
2582 1.1 christos
2583 1.1 christos /* bfd_openr sets cacheable to true, which is what we want. */
2584 1.1 christos if (!bfd_check_format (objfile->obfd.get (), bfd_object))
2585 1.1.1.6 christos error (_("Can't read symbols from %s: %s."), objfile_name (objfile),
2586 1.1.1.6 christos bfd_errmsg (bfd_get_error ()));
2587 1.1 christos
2588 1.1.1.9 christos /* NB: after this call to obstack_free, objfiles_changed
2589 1.1.1.7 christos will need to be called (see discussion below). */
2590 1.1.1.7 christos obstack_free (&objfile->objfile_obstack, 0);
2591 1.1.1.7 christos objfile->sections_start = NULL;
2592 1.1.1.7 christos objfile->section_offsets.clear ();
2593 1.1.1.7 christos objfile->sect_index_bss = -1;
2594 1.1.1.2 christos objfile->sect_index_data = -1;
2595 1.1 christos objfile->sect_index_rodata = -1;
2596 1.1.1.10 christos objfile->sect_index_text = -1;
2597 1.1 christos objfile->compunit_symtabs = NULL;
2598 1.1 christos objfile->template_symbols = NULL;
2599 1.1 christos objfile->static_links.clear ();
2600 1.1 christos
2601 1.1 christos /* obstack_init also initializes the obstack so it is
2602 1.1 christos empty. We could use obstack_specify_allocation but
2603 1.1 christos gdb_obstack.h specifies the alloc/dealloc functions. */
2604 1.1 christos obstack_init (&objfile->objfile_obstack);
2605 1.1 christos
2606 1.1 christos /* set_objfile_per_bfd potentially allocates the per-bfd
2607 1.1 christos data on the objfile's obstack (if sharing data across
2608 1.1 christos multiple users is not possible), so it's important to
2609 1.1.1.4 christos do it *after* the obstack has been initialized. */
2610 1.1.1.7 christos set_objfile_per_bfd (objfile);
2611 1.1 christos
2612 1.1 christos objfile->original_name
2613 1.1 christos = obstack_strdup (&objfile->objfile_obstack, original_name);
2614 1.1 christos
2615 1.1.1.8 christos /* Reset the sym_fns pointer. The ELF reader can change it
2616 1.1.1.8 christos based on whether .gdb_index is present, and we need it to
2617 1.1 christos start over. PR symtab/15885 */
2618 1.1 christos objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd.get ()));
2619 1.1 christos objfile->qf.clear ();
2620 1.1 christos
2621 1.1 christos build_objfile_section_table (objfile);
2622 1.1 christos
2623 1.1.1.8 christos /* What the hell is sym_new_init for, anyway? The concept of
2624 1.1 christos distinguishing between the main file and additional files
2625 1.1 christos in this way seems rather dubious. */
2626 1.1 christos if (objfile == current_program_space->symfile_object_file)
2627 1.1 christos {
2628 1.1 christos (*objfile->sf->sym_new_init) (objfile);
2629 1.1.1.6 christos }
2630 1.1 christos
2631 1.1.1.6 christos (*objfile->sf->sym_init) (objfile);
2632 1.1.1.6 christos clear_complaints ();
2633 1.1.1.6 christos
2634 1.1.1.6 christos /* We are about to read new symbols and potentially also
2635 1.1.1.6 christos DWARF information. Some targets may want to pass addresses
2636 1.1.1.6 christos read from DWARF DIE's through an adjustment function before
2637 1.1.1.6 christos saving them, like MIPS, which may call into
2638 1.1.1.6 christos "find_pc_section". When called, that function will make
2639 1.1.1.6 christos use of per-objfile program space data.
2640 1.1.1.6 christos
2641 1.1.1.6 christos Since we discarded our section information above, we have
2642 1.1.1.6 christos dangling pointers in the per-objfile program space data
2643 1.1.1.6 christos structure. Force GDB to update the section mapping
2644 1.1.1.6 christos information by letting it know the objfile has changed,
2645 1.1.1.10 christos making the dangling pointers point to correct data
2646 1.1.1.6 christos again. */
2647 1.1.1.7 christos
2648 1.1.1.7 christos objfiles_changed (current_program_space);
2649 1.1.1.7 christos
2650 1.1 christos /* Recompute section offsets and section indices. */
2651 1.1 christos objfile->sf->sym_offsets (objfile, {});
2652 1.1.1.8 christos
2653 1.1.1.8 christos read_symbols (objfile, 0);
2654 1.1.1.8 christos
2655 1.1.1.8 christos if ((objfile->flags & OBJF_READNOW))
2656 1.1.1.8 christos {
2657 1.1.1.8 christos const int mainline = objfile->flags & OBJF_MAINLINE;
2658 1.1.1.8 christos const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
2659 1.1.1.8 christos && readnow_symbol_files);
2660 1.1.1.8 christos if (should_print)
2661 1.1.1.8 christos gdb_printf (_("Expanding full symbols from %ps...\n"),
2662 1.1.1.8 christos styled_string (file_name_style.style (),
2663 1.1.1.8 christos objfile_name (objfile)));
2664 1.1.1.8 christos
2665 1.1 christos objfile->expand_all_symtabs ();
2666 1.1 christos }
2667 1.1.1.8 christos
2668 1.1.1.8 christos if (!objfile_has_symbols (objfile))
2669 1.1.1.8 christos {
2670 1.1 christos gdb_stdout->wrap_here (0);
2671 1.1 christos gdb_printf (_("(no debugging symbols found)\n"));
2672 1.1 christos gdb_stdout->wrap_here (0);
2673 1.1.1.6 christos }
2674 1.1 christos
2675 1.1 christos /* We're done reading the symbol file; finish off complaints. */
2676 1.1 christos clear_complaints ();
2677 1.1 christos
2678 1.1 christos /* Getting new symbols may change our opinion about what is
2679 1.1 christos frameless. */
2680 1.1 christos
2681 1.1.1.6 christos reinit_frame_cache ();
2682 1.1.1.6 christos
2683 1.1 christos /* Discard cleanups as symbol reading was successful. */
2684 1.1 christos objfile_holder.release ();
2685 1.1 christos defer_clear_users.release ();
2686 1.1 christos
2687 1.1 christos /* If the mtime has changed between the time we set new_modtime
2688 1.1 christos and now, we *want* this to be out of date, so don't call stat
2689 1.1 christos again now. */
2690 1.1.1.5 christos objfile->mtime = new_modtime;
2691 1.1 christos init_entry_point_info (objfile);
2692 1.1 christos
2693 1.1 christos new_objfiles.push_back (objfile);
2694 1.1.1.5 christos }
2695 1.1 christos }
2696 1.1 christos
2697 1.1 christos if (!new_objfiles.empty ())
2698 1.1.1.8 christos {
2699 1.1.1.6 christos clear_symtab_users (0);
2700 1.1 christos
2701 1.1.1.5 christos /* The registry for each objfile was cleared and
2702 1.1.1.6 christos gdb::observers::new_objfile.notify (NULL) has been called by
2703 1.1 christos clear_symtab_users above. Notify the new files now. */
2704 1.1 christos for (auto iter : new_objfiles)
2705 1.1 christos gdb::observers::new_objfile.notify (iter);
2706 1.1 christos }
2707 1.1.1.6 christos }
2708 1.1 christos
2709 1.1.1.6 christos
2711 1.1.1.6 christos struct filename_language
2712 1.1 christos {
2713 1.1.1.6 christos filename_language (const std::string &ext_, enum language lang_)
2714 1.1.1.6 christos : ext (ext_), lang (lang_)
2715 1.1.1.6 christos {}
2716 1.1 christos
2717 1.1.1.6 christos std::string ext;
2718 1.1.1.4 christos enum language lang;
2719 1.1.1.4 christos };
2720 1.1.1.4 christos
2721 1.1.1.4 christos static std::vector<filename_language> filename_language_table;
2722 1.1.1.4 christos
2723 1.1 christos /* See symfile.h. */
2724 1.1.1.8 christos
2725 1.1.1.6 christos void
2726 1.1 christos add_filename_language (const char *ext, enum language lang)
2727 1.1 christos {
2728 1.1.1.8 christos gdb_assert (ext != nullptr);
2729 1.1 christos filename_language_table.emplace_back (ext, lang);
2730 1.1 christos }
2731 1.1 christos
2732 1.1 christos static std::string ext_args;
2733 1.1.1.8 christos static void
2734 1.1.1.8 christos show_ext_args (struct ui_file *file, int from_tty,
2735 1.1.1.8 christos struct cmd_list_element *c, const char *value)
2736 1.1.1.8 christos {
2737 1.1 christos gdb_printf (file,
2738 1.1 christos _("Mapping between filename extension "
2739 1.1 christos "and source language is \"%s\".\n"),
2740 1.1.1.6 christos value);
2741 1.1.1.6 christos }
2742 1.1 christos
2743 1.1.1.8 christos static void
2744 1.1.1.8 christos set_ext_lang_command (const char *args,
2745 1.1 christos int from_tty, struct cmd_list_element *e)
2746 1.1 christos {
2747 1.1.1.8 christos const char *begin = ext_args.c_str ();
2748 1.1.1.8 christos const char *end = ext_args.c_str ();
2749 1.1 christos
2750 1.1 christos /* First arg is filename extension, starting with '.' */
2751 1.1.1.9 christos if (*end != '.')
2752 1.1.1.8 christos error (_("'%s': Filename extension must begin with '.'"), ext_args.c_str ());
2753 1.1 christos
2754 1.1.1.8 christos /* Find end of first arg. */
2755 1.1 christos while (*end != '\0' && !isspace ((unsigned char)*end))
2756 1.1 christos end++;
2757 1.1.1.8 christos
2758 1.1 christos if (*end == '\0')
2759 1.1.1.8 christos error (_("'%s': two arguments required -- "
2760 1.1.1.8 christos "filename extension and language"),
2761 1.1 christos ext_args.c_str ());
2762 1.1 christos
2763 1.1.1.8 christos /* Extract first arg, the extension. */
2764 1.1 christos std::string extension = ext_args.substr (0, end - begin);
2765 1.1.1.8 christos
2766 1.1 christos /* Find beginning of second arg, which should be a source language. */
2767 1.1 christos begin = skip_spaces (end);
2768 1.1.1.8 christos
2769 1.1 christos if (*begin == '\0')
2770 1.1 christos error (_("'%s': two arguments required -- "
2771 1.1.1.8 christos "filename extension and language"),
2772 1.1 christos ext_args.c_str ());
2773 1.1.1.6 christos
2774 1.1 christos /* Lookup the language from among those we know. */
2775 1.1.1.6 christos language lang = language_enum (begin);
2776 1.1.1.4 christos
2777 1.1.1.8 christos auto it = filename_language_table.begin ();
2778 1.1.1.4 christos /* Now lookup the filename extension: do we already know it? */
2779 1.1.1.4 christos for (; it != filename_language_table.end (); it++)
2780 1.1 christos {
2781 1.1.1.6 christos if (it->ext == extension)
2782 1.1 christos break;
2783 1.1 christos }
2784 1.1.1.8 christos
2785 1.1 christos if (it == filename_language_table.end ())
2786 1.1 christos {
2787 1.1 christos /* New file extension. */
2788 1.1 christos add_filename_language (extension.data (), lang);
2789 1.1 christos }
2790 1.1 christos else
2791 1.1 christos {
2792 1.1 christos /* Redefining a previously known filename extension. */
2793 1.1 christos
2794 1.1.1.6 christos /* if (from_tty) */
2795 1.1 christos /* query ("Really make files of type %s '%s'?", */
2796 1.1 christos /* ext_args, language_str (lang)); */
2797 1.1 christos
2798 1.1 christos it->lang = lang;
2799 1.1.1.6 christos }
2800 1.1 christos }
2801 1.1.1.8 christos
2802 1.1.1.8 christos static void
2803 1.1.1.6 christos info_ext_lang_command (const char *args, int from_tty)
2804 1.1.1.8 christos {
2805 1.1.1.8 christos gdb_printf (_("Filename extensions and the languages they represent:"));
2806 1.1 christos gdb_printf ("\n\n");
2807 1.1 christos for (const filename_language &entry : filename_language_table)
2808 1.1 christos gdb_printf ("\t%s\t- %s\n", entry.ext.c_str (),
2809 1.1 christos language_str (entry.lang));
2810 1.1 christos }
2811 1.1.1.4 christos
2812 1.1 christos enum language
2813 1.1 christos deduce_language_from_filename (const char *filename)
2814 1.1 christos {
2815 1.1.1.4 christos const char *cp;
2816 1.1.1.6 christos
2817 1.1.1.6 christos if (filename != NULL)
2818 1.1.1.6 christos if ((cp = strrchr (filename, '.')) != NULL)
2819 1.1.1.4 christos {
2820 1.1 christos for (const filename_language &entry : filename_language_table)
2821 1.1 christos if (entry.ext == cp)
2822 1.1 christos return entry.lang;
2823 1.1 christos }
2824 1.1.1.2 christos
2825 1.1.1.2 christos return language_unknown;
2826 1.1 christos }
2827 1.1 christos
2828 1.1.1.8 christos /* Allocate and initialize a new symbol table.
2830 1.1 christos CUST is from the result of allocate_compunit_symtab. */
2831 1.1.1.8 christos
2832 1.1.1.2 christos struct symtab *
2833 1.1.1.2 christos allocate_symtab (struct compunit_symtab *cust, const char *filename,
2834 1.1 christos const char *filename_for_id)
2835 1.1.1.7 christos {
2836 1.1.1.8 christos struct objfile *objfile = cust->objfile ();
2837 1.1.1.8 christos struct symtab *symtab
2838 1.1 christos = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symtab);
2839 1.1 christos
2840 1.1 christos symtab->filename = objfile->intern (filename);
2841 1.1 christos symtab->filename_for_id = objfile->intern (filename_for_id);
2842 1.1 christos symtab->set_language (deduce_language_from_filename (filename));
2843 1.1 christos
2844 1.1 christos /* This can be very verbose with lots of headers.
2845 1.1.1.8 christos Only print at higher debug levels. */
2846 1.1.1.8 christos if (symtab_create_debug >= 2)
2847 1.1 christos {
2848 1.1.1.8 christos /* Be a bit clever with debugging messages, and don't print objfile
2849 1.1 christos every time, only when it changes. */
2850 1.1.1.8 christos static std::string last_objfile_name;
2851 1.1.1.8 christos const char *this_objfile_name = objfile_name (objfile);
2852 1.1.1.8 christos
2853 1.1.1.8 christos if (last_objfile_name.empty () || last_objfile_name != this_objfile_name)
2854 1.1.1.8 christos {
2855 1.1.1.8 christos last_objfile_name = this_objfile_name;
2856 1.1.1.8 christos
2857 1.1.1.8 christos symtab_create_debug_printf_v
2858 1.1 christos ("creating one or more symtabs for objfile %s", this_objfile_name);
2859 1.1 christos }
2860 1.1.1.2 christos
2861 1.1.1.8 christos symtab_create_debug_printf_v ("created symtab %s for module %s",
2862 1.1.1.2 christos host_address_to_string (symtab), filename);
2863 1.1.1.2 christos }
2864 1.1.1.8 christos
2865 1.1.1.2 christos /* Add it to CUST's list of symtabs. */
2866 1.1.1.2 christos cust->add_filetab (symtab);
2867 1.1.1.2 christos
2868 1.1.1.2 christos /* Backlink to the containing compunit symtab. */
2869 1.1.1.2 christos symtab->set_compunit (cust);
2870 1.1.1.2 christos
2871 1.1.1.2 christos return symtab;
2872 1.1.1.2 christos }
2873 1.1.1.2 christos
2874 1.1.1.2 christos /* Allocate and initialize a new compunit.
2875 1.1.1.2 christos NAME is the name of the main source file, if there is one, or some
2876 1.1.1.2 christos descriptive text if there are no source files. */
2877 1.1.1.2 christos
2878 1.1.1.2 christos struct compunit_symtab *
2879 1.1.1.2 christos allocate_compunit_symtab (struct objfile *objfile, const char *name)
2880 1.1.1.8 christos {
2881 1.1.1.2 christos struct compunit_symtab *cu = OBSTACK_ZALLOC (&objfile->objfile_obstack,
2882 1.1.1.2 christos struct compunit_symtab);
2883 1.1.1.2 christos const char *saved_name;
2884 1.1.1.2 christos
2885 1.1.1.2 christos cu->set_objfile (objfile);
2886 1.1.1.7 christos
2887 1.1.1.2 christos /* The name we record here is only for display/debugging purposes.
2888 1.1.1.8 christos Just save the basename to avoid path issues (too long for display,
2889 1.1.1.2 christos relative vs absolute, etc.). */
2890 1.1.1.8 christos saved_name = lbasename (name);
2891 1.1.1.8 christos cu->name = obstack_strdup (&objfile->objfile_obstack, saved_name);
2892 1.1.1.8 christos
2893 1.1.1.2 christos cu->set_debugformat ("unknown");
2894 1.1.1.2 christos
2895 1.1.1.2 christos symtab_create_debug_printf_v ("created compunit symtab %s for %s",
2896 1.1.1.2 christos host_address_to_string (cu),
2897 1.1.1.2 christos cu->name);
2898 1.1.1.2 christos
2899 1.1.1.2 christos return cu;
2900 1.1.1.2 christos }
2901 1.1.1.2 christos
2902 1.1.1.8 christos /* Hook CU to the objfile it comes from. */
2903 1.1.1.8 christos
2904 1.1 christos void
2905 1.1 christos add_compunit_symtab_to_objfile (struct compunit_symtab *cu)
2906 1.1 christos {
2907 1.1.1.5 christos cu->next = cu->objfile ()->compunit_symtabs;
2908 1.1.1.5 christos cu->objfile ()->compunit_symtabs = cu;
2909 1.1 christos }
2910 1.1 christos
2911 1.1.1.5 christos
2913 1.1 christos /* Reset all data structures in gdb which may contain references to
2914 1.1 christos symbol table data. */
2915 1.1 christos
2916 1.1 christos void
2917 1.1 christos clear_symtab_users (symfile_add_flags add_flags)
2918 1.1.1.10 christos {
2919 1.1 christos /* Someday, we should do better than this, by only blowing away
2920 1.1 christos the things that really need to be blown. */
2921 1.1 christos
2922 1.1 christos /* Clear the "current" symtab first, because it is no longer valid.
2923 1.1.1.9 christos breakpoint_re_set may try to access the current symtab. */
2924 1.1 christos clear_current_source_symtab_and_line (current_program_space);
2925 1.1.1.2 christos
2926 1.1.1.2 christos clear_displays ();
2927 1.1.1.2 christos clear_last_displayed_sal ();
2928 1.1.1.2 christos clear_pc_function_cache ();
2929 1.1 christos gdb::observers::all_objfiles_removed.notify (current_program_space);
2930 1.1 christos
2931 1.1 christos /* Now that the various caches have been cleared, we can re_set
2932 1.1 christos our breakpoints without risking it using stale data. */
2933 1.1 christos if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
2934 1.1 christos breakpoint_re_set ();
2935 1.1 christos }
2936 1.1 christos
2937 1.1 christos /* OVERLAYS:
2939 1.1 christos The following code implements an abstraction for debugging overlay sections.
2940 1.1 christos
2941 1.1 christos The target model is as follows:
2942 1.1 christos 1) The gnu linker will permit multiple sections to be mapped into the
2943 1.1 christos same VMA, each with its own unique LMA (or load address).
2944 1.1 christos 2) It is assumed that some runtime mechanism exists for mapping the
2945 1.1 christos sections, one by one, from the load address into the VMA address.
2946 1.1 christos 3) This code provides a mechanism for gdb to keep track of which
2947 1.1 christos sections should be considered to be mapped from the VMA to the LMA.
2948 1.1 christos This information is used for symbol lookup, and memory read/write.
2949 1.1 christos For instance, if a section has been mapped then its contents
2950 1.1 christos should be read from the VMA, otherwise from the LMA.
2951 1.1 christos
2952 1.1 christos Two levels of debugger support for overlays are available. One is
2953 1.1 christos "manual", in which the debugger relies on the user to tell it which
2954 1.1 christos overlays are currently mapped. This level of support is
2955 1.1 christos implemented entirely in the core debugger, and the information about
2956 1.1 christos whether a section is mapped is kept in the objfile->obj_section table.
2957 1.1 christos
2958 1.1 christos The second level of support is "automatic", and is only available if
2959 1.1 christos the target-specific code provides functionality to read the target's
2960 1.1 christos overlay mapping table, and translate its contents for the debugger
2961 1.1 christos (by updating the mapped state information in the obj_section tables).
2962 1.1 christos
2963 1.1 christos The interface is as follows:
2964 1.1 christos User commands:
2965 1.1 christos overlay map <name> -- tell gdb to consider this section mapped
2966 1.1 christos overlay unmap <name> -- tell gdb to consider this section unmapped
2967 1.1 christos overlay list -- list the sections that GDB thinks are mapped
2968 1.1 christos overlay read-target -- get the target's state of what's mapped
2969 1.1 christos overlay off/manual/auto -- set overlay debugging state
2970 1.1 christos Functional interface:
2971 1.1 christos find_pc_mapped_section(pc): if the pc is in the range of a mapped
2972 1.1 christos section, return that section.
2973 1.1 christos find_pc_overlay(pc): find any overlay section that contains
2974 1.1 christos the pc, either in its VMA or its LMA
2975 1.1 christos section_is_mapped(sect): true if overlay is marked as mapped
2976 1.1 christos section_is_overlay(sect): true if section's VMA != LMA
2977 1.1 christos pc_in_mapped_range(pc,sec): true if pc belongs to section's VMA
2978 1.1 christos pc_in_unmapped_range(...): true if pc belongs to section's LMA
2979 1.1 christos sections_overlap(sec1, sec2): true if mapped sec1 and sec2 ranges overlap
2980 1.1 christos overlay_mapped_address(...): map an address from section's LMA to VMA
2981 1.1 christos overlay_unmapped_address(...): map an address from section's VMA to LMA
2982 1.1 christos symbol_overlayed_address(...): Return a "current" address for symbol:
2983 1.1 christos either in VMA or LMA depending on whether
2984 1.1 christos the symbol's section is currently mapped. */
2985 1.1 christos
2986 1.1 christos /* Overlay debugging state: */
2987 1.1 christos
2988 1.1 christos enum overlay_debugging_state overlay_debugging = ovly_off;
2989 1.1 christos int overlay_cache_invalid = 0; /* True if need to refresh mapped state. */
2990 1.1 christos
2991 1.1 christos /* Function: section_is_overlay (SECTION)
2992 1.1 christos Returns true if SECTION has VMA not equal to LMA, ie.
2993 1.1 christos SECTION is loaded at an address different from where it will "run". */
2994 1.1 christos
2995 1.1.1.7 christos int
2996 1.1.1.7 christos section_is_overlay (struct obj_section *section)
2997 1.1 christos {
2998 1.1 christos if (overlay_debugging && section)
2999 1.1 christos {
3000 1.1 christos asection *bfd_section = section->the_bfd_section;
3001 1.1 christos
3002 1.1 christos if (bfd_section_lma (bfd_section) != 0
3003 1.1.1.10 christos && bfd_section_lma (bfd_section) != bfd_section_vma (bfd_section))
3004 1.1.1.10 christos return 1;
3005 1.1 christos }
3006 1.1 christos
3007 1.1.1.10 christos return 0;
3008 1.1 christos }
3009 1.1.1.10 christos
3010 1.1.1.9 christos /* Invalidate the mapped state of all overlay sections (mark it as stale) in
3011 1.1.1.6 christos PSPACE. */
3012 1.1.1.6 christos
3013 1.1 christos static void
3014 1.1 christos overlay_invalidate_all (program_space *pspace)
3015 1.1 christos {
3016 1.1 christos for (objfile *objfile : pspace->objfiles ())
3017 1.1 christos for (obj_section *sect : objfile->sections ())
3018 1.1 christos if (section_is_overlay (sect))
3019 1.1 christos sect->ovly_mapped = -1;
3020 1.1 christos }
3021 1.1 christos
3022 1.1 christos /* Function: section_is_mapped (SECTION)
3023 1.1 christos Returns true if section is an overlay, and is currently mapped.
3024 1.1 christos
3025 1.1 christos Access to the ovly_mapped flag is restricted to this function, so
3026 1.1 christos that we can do automatic update. If the global flag
3027 1.1 christos OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
3028 1.1 christos overlay_invalidate_all. If the mapped state of the particular
3029 1.1 christos section is stale, then call TARGET_OVERLAY_UPDATE to refresh it. */
3030 1.1 christos
3031 1.1 christos int
3032 1.1 christos section_is_mapped (struct obj_section *osect)
3033 1.1 christos {
3034 1.1 christos struct gdbarch *gdbarch;
3035 1.1 christos
3036 1.1 christos if (osect == 0 || !section_is_overlay (osect))
3037 1.1 christos return 0;
3038 1.1 christos
3039 1.1.1.8 christos switch (overlay_debugging)
3040 1.1.1.7 christos {
3041 1.1 christos default:
3042 1.1 christos case ovly_off:
3043 1.1 christos return 0; /* overlay debugging off */
3044 1.1 christos case ovly_auto: /* overlay debugging automatic */
3045 1.1.1.10 christos /* Unles there is a gdbarch_overlay_update function,
3046 1.1 christos there's really nothing useful to do here (can't really go auto). */
3047 1.1 christos gdbarch = osect->objfile->arch ();
3048 1.1 christos if (gdbarch_overlay_update_p (gdbarch))
3049 1.1 christos {
3050 1.1 christos if (overlay_cache_invalid)
3051 1.1.1.9 christos {
3052 1.1 christos overlay_invalidate_all (current_program_space);
3053 1.1 christos overlay_cache_invalid = 0;
3054 1.1 christos }
3055 1.1 christos if (osect->ovly_mapped == -1)
3056 1.1 christos gdbarch_overlay_update (gdbarch, osect);
3057 1.1 christos }
3058 1.1 christos [[fallthrough]];
3059 1.1 christos case ovly_on: /* overlay debugging manual */
3060 1.1.1.9 christos return osect->ovly_mapped == 1;
3061 1.1 christos }
3062 1.1 christos }
3063 1.1 christos
3064 1.1 christos /* Function: pc_in_unmapped_range
3065 1.1 christos If PC falls into the lma range of SECTION, return true, else false. */
3066 1.1 christos
3067 1.1 christos bool
3068 1.1.1.7 christos pc_in_unmapped_range (CORE_ADDR pc, struct obj_section *section)
3069 1.1.1.8 christos {
3070 1.1 christos if (section_is_overlay (section))
3071 1.1.1.7 christos {
3072 1.1.1.7 christos asection *bfd_section = section->the_bfd_section;
3073 1.1.1.9 christos
3074 1.1 christos /* We assume the LMA is relocated by the same offset as the VMA. */
3075 1.1 christos bfd_vma size = bfd_section_size (bfd_section);
3076 1.1.1.9 christos CORE_ADDR offset = section->offset ();
3077 1.1 christos
3078 1.1 christos if (bfd_section_lma (bfd_section) + offset <= pc
3079 1.1 christos && pc < bfd_section_lma (bfd_section) + offset + size)
3080 1.1 christos return true;
3081 1.1 christos }
3082 1.1.1.9 christos
3083 1.1 christos return false;
3084 1.1 christos }
3085 1.1 christos
3086 1.1 christos /* Function: pc_in_mapped_range
3087 1.1.1.9 christos If PC falls into the vma range of SECTION, return true, else false. */
3088 1.1.1.9 christos
3089 1.1 christos bool
3090 1.1 christos pc_in_mapped_range (CORE_ADDR pc, struct obj_section *section)
3091 1.1.1.9 christos {
3092 1.1 christos if (section_is_overlay (section))
3093 1.1 christos {
3094 1.1 christos if (section->contains (pc))
3095 1.1 christos return true;
3096 1.1 christos }
3097 1.1 christos
3098 1.1 christos return false;
3099 1.1 christos }
3100 1.1.1.8 christos
3101 1.1.1.8 christos /* Return true if the mapped ranges of sections A and B overlap, false
3102 1.1.1.8 christos otherwise. */
3103 1.1.1.8 christos
3104 1.1 christos static int
3105 1.1 christos sections_overlap (struct obj_section *a, struct obj_section *b)
3106 1.1 christos {
3107 1.1 christos CORE_ADDR a_start = a->addr ();
3108 1.1 christos CORE_ADDR a_end = a->endaddr ();
3109 1.1 christos CORE_ADDR b_start = b->addr ();
3110 1.1 christos CORE_ADDR b_end = b->endaddr ();
3111 1.1 christos
3112 1.1 christos return (a_start < b_end && b_start < a_end);
3113 1.1 christos }
3114 1.1 christos
3115 1.1 christos /* Function: overlay_unmapped_address (PC, SECTION)
3116 1.1 christos Returns the address corresponding to PC in the unmapped (load) range.
3117 1.1 christos May be the same as PC. */
3118 1.1 christos
3119 1.1.1.7 christos CORE_ADDR
3120 1.1.1.7 christos overlay_unmapped_address (CORE_ADDR pc, struct obj_section *section)
3121 1.1 christos {
3122 1.1 christos if (section_is_overlay (section) && pc_in_mapped_range (pc, section))
3123 1.1 christos {
3124 1.1 christos asection *bfd_section = section->the_bfd_section;
3125 1.1 christos
3126 1.1 christos return (pc + bfd_section_lma (bfd_section)
3127 1.1 christos - bfd_section_vma (bfd_section));
3128 1.1 christos }
3129 1.1 christos
3130 1.1 christos return pc;
3131 1.1 christos }
3132 1.1 christos
3133 1.1 christos /* Function: overlay_mapped_address (PC, SECTION)
3134 1.1 christos Returns the address corresponding to PC in the mapped (runtime) range.
3135 1.1 christos May be the same as PC. */
3136 1.1 christos
3137 1.1.1.7 christos CORE_ADDR
3138 1.1.1.7 christos overlay_mapped_address (CORE_ADDR pc, struct obj_section *section)
3139 1.1 christos {
3140 1.1 christos if (section_is_overlay (section) && pc_in_unmapped_range (pc, section))
3141 1.1 christos {
3142 1.1 christos asection *bfd_section = section->the_bfd_section;
3143 1.1 christos
3144 1.1 christos return (pc + bfd_section_vma (bfd_section)
3145 1.1 christos - bfd_section_lma (bfd_section));
3146 1.1 christos }
3147 1.1 christos
3148 1.1 christos return pc;
3149 1.1 christos }
3150 1.1 christos
3151 1.1 christos /* Function: symbol_overlayed_address
3152 1.1 christos Return one of two addresses (relative to the VMA or to the LMA),
3153 1.1 christos depending on whether the section is mapped or not. */
3154 1.1 christos
3155 1.1 christos CORE_ADDR
3156 1.1 christos symbol_overlayed_address (CORE_ADDR address, struct obj_section *section)
3157 1.1 christos {
3158 1.1 christos if (overlay_debugging)
3159 1.1 christos {
3160 1.1 christos /* If the symbol has no section, just return its regular address. */
3161 1.1 christos if (section == 0)
3162 1.1 christos return address;
3163 1.1 christos /* If the symbol's section is not an overlay, just return its
3164 1.1 christos address. */
3165 1.1 christos if (!section_is_overlay (section))
3166 1.1 christos return address;
3167 1.1 christos /* If the symbol's section is mapped, just return its address. */
3168 1.1 christos if (section_is_mapped (section))
3169 1.1 christos return address;
3170 1.1 christos /*
3171 1.1 christos * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3172 1.1 christos * then return its LOADED address rather than its vma address!!
3173 1.1 christos */
3174 1.1 christos return overlay_unmapped_address (address, section);
3175 1.1 christos }
3176 1.1 christos return address;
3177 1.1 christos }
3178 1.1 christos
3179 1.1 christos /* Function: find_pc_overlay (PC)
3180 1.1 christos Return the best-match overlay section for PC:
3181 1.1.1.9 christos If PC matches a mapped overlay section's VMA, return that section.
3182 1.1 christos Else if PC matches an unmapped section's VMA, return that section.
3183 1.1 christos Else if PC matches an unmapped section's LMA, return that section. */
3184 1.1.1.4 christos
3185 1.1.1.6 christos struct obj_section *
3186 1.1.1.9 christos find_pc_overlay (CORE_ADDR pc)
3187 1.1.1.6 christos {
3188 1.1.1.6 christos struct obj_section *best_match = NULL;
3189 1.1.1.6 christos
3190 1.1.1.6 christos if (overlay_debugging)
3191 1.1.1.6 christos {
3192 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
3193 1.1.1.6 christos for (obj_section *osect : objfile->sections ())
3194 1.1.1.6 christos if (section_is_overlay (osect))
3195 1.1.1.6 christos {
3196 1.1.1.6 christos if (pc_in_mapped_range (pc, osect))
3197 1.1.1.6 christos {
3198 1.1.1.6 christos if (section_is_mapped (osect))
3199 1.1.1.4 christos return osect;
3200 1.1 christos else
3201 1.1 christos best_match = osect;
3202 1.1 christos }
3203 1.1 christos else if (pc_in_unmapped_range (pc, osect))
3204 1.1 christos best_match = osect;
3205 1.1 christos }
3206 1.1 christos }
3207 1.1 christos return best_match;
3208 1.1 christos }
3209 1.1 christos
3210 1.1 christos /* Function: find_pc_mapped_section (PC)
3211 1.1.1.4 christos If PC falls into the VMA address range of an overlay section that is
3212 1.1.1.6 christos currently marked as MAPPED, return that section. Else return NULL. */
3213 1.1.1.9 christos
3214 1.1.1.6 christos struct obj_section *
3215 1.1.1.6 christos find_pc_mapped_section (CORE_ADDR pc)
3216 1.1.1.4 christos {
3217 1.1 christos if (overlay_debugging)
3218 1.1 christos {
3219 1.1 christos for (objfile *objfile : current_program_space->objfiles ())
3220 1.1 christos for (obj_section *osect : objfile->sections ())
3221 1.1 christos if (pc_in_mapped_range (pc, osect) && section_is_mapped (osect))
3222 1.1 christos return osect;
3223 1.1 christos }
3224 1.1 christos
3225 1.1.1.6 christos return NULL;
3226 1.1 christos }
3227 1.1 christos
3228 1.1 christos /* Function: list_overlays_command
3229 1.1 christos Print a list of mapped sections and their PC ranges. */
3230 1.1.1.4 christos
3231 1.1.1.6 christos static void
3232 1.1.1.9 christos list_overlays_command (const char *args, int from_tty)
3233 1.1.1.6 christos {
3234 1.1.1.6 christos int nmapped = 0;
3235 1.1.1.7 christos
3236 1.1.1.6 christos if (overlay_debugging)
3237 1.1.1.6 christos {
3238 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
3239 1.1.1.6 christos for (obj_section *osect : objfile->sections ())
3240 1.1.1.7 christos if (section_is_mapped (osect))
3241 1.1.1.7 christos {
3242 1.1.1.7 christos struct gdbarch *gdbarch = objfile->arch ();
3243 1.1.1.7 christos const char *name;
3244 1.1.1.6 christos bfd_vma lma, vma;
3245 1.1.1.8 christos int size;
3246 1.1.1.8 christos
3247 1.1.1.8 christos vma = bfd_section_vma (osect->the_bfd_section);
3248 1.1.1.8 christos lma = bfd_section_lma (osect->the_bfd_section);
3249 1.1.1.8 christos size = bfd_section_size (osect->the_bfd_section);
3250 1.1.1.8 christos name = bfd_section_name (osect->the_bfd_section);
3251 1.1.1.8 christos
3252 1.1.1.8 christos gdb_printf ("Section %s, loaded at ", name);
3253 1.1.1.8 christos gdb_puts (paddress (gdbarch, lma));
3254 1.1 christos gdb_puts (" - ");
3255 1.1.1.6 christos gdb_puts (paddress (gdbarch, lma + size));
3256 1.1.1.6 christos gdb_printf (", mapped at ");
3257 1.1.1.4 christos gdb_puts (paddress (gdbarch, vma));
3258 1.1 christos gdb_puts (" - ");
3259 1.1.1.8 christos gdb_puts (paddress (gdbarch, vma + size));
3260 1.1 christos gdb_puts ("\n");
3261 1.1 christos
3262 1.1 christos nmapped++;
3263 1.1 christos }
3264 1.1 christos }
3265 1.1 christos if (nmapped == 0)
3266 1.1.1.6 christos gdb_printf (_("No sections are mapped.\n"));
3267 1.1 christos }
3268 1.1 christos
3269 1.1 christos /* Function: map_overlay_command
3270 1.1 christos Mark the named section as mapped (ie. residing at its VMA address). */
3271 1.1 christos
3272 1.1 christos static void
3273 1.1 christos map_overlay_command (const char *args, int from_tty)
3274 1.1 christos {
3275 1.1 christos if (!overlay_debugging)
3276 1.1 christos error (_("Overlay debugging not enabled. Use "
3277 1.1.1.6 christos "either the 'overlay auto' or\n"
3278 1.1.1.9 christos "the 'overlay manual' command."));
3279 1.1.1.7 christos
3280 1.1.1.6 christos if (args == 0 || *args == 0)
3281 1.1.1.6 christos error (_("Argument required: name of an overlay section"));
3282 1.1.1.6 christos
3283 1.1.1.6 christos /* First, find a section matching the user supplied argument. */
3284 1.1.1.6 christos for (objfile *obj_file : current_program_space->objfiles ())
3285 1.1.1.6 christos for (obj_section *sec : obj_file->sections ())
3286 1.1.1.6 christos if (!strcmp (bfd_section_name (sec->the_bfd_section), args))
3287 1.1.1.6 christos {
3288 1.1.1.6 christos /* Now, check to see if the section is an overlay. */
3289 1.1.1.6 christos if (!section_is_overlay (sec))
3290 1.1.1.6 christos continue; /* not an overlay section */
3291 1.1.1.9 christos
3292 1.1.1.6 christos /* Mark the overlay as "mapped". */
3293 1.1.1.6 christos sec->ovly_mapped = 1;
3294 1.1.1.6 christos
3295 1.1.1.6 christos /* Next, make a pass and unmap any sections that are
3296 1.1.1.8 christos overlapped by this new section: */
3297 1.1.1.8 christos for (objfile *objfile2 : current_program_space->objfiles ())
3298 1.1.1.6 christos for (obj_section *sec2 : objfile2->sections ())
3299 1.1.1.6 christos if (sec2->ovly_mapped && sec != sec2 && sections_overlap (sec,
3300 1.1.1.6 christos sec2))
3301 1.1 christos {
3302 1.1 christos if (info_verbose)
3303 1.1 christos gdb_printf (_("Note: section %s unmapped by overlap\n"),
3304 1.1 christos bfd_section_name (sec2->the_bfd_section));
3305 1.1 christos sec2->ovly_mapped = 0; /* sec2 overlaps sec: unmap sec2. */
3306 1.1 christos }
3307 1.1 christos return;
3308 1.1 christos }
3309 1.1 christos error (_("No overlay section called %s"), args);
3310 1.1.1.6 christos }
3311 1.1 christos
3312 1.1 christos /* Function: unmap_overlay_command
3313 1.1 christos Mark the overlay section as unmapped
3314 1.1 christos (ie. resident in its LMA address range, rather than the VMA range). */
3315 1.1 christos
3316 1.1 christos static void
3317 1.1 christos unmap_overlay_command (const char *args, int from_tty)
3318 1.1 christos {
3319 1.1 christos if (!overlay_debugging)
3320 1.1 christos error (_("Overlay debugging not enabled. "
3321 1.1.1.6 christos "Use either the 'overlay auto' or\n"
3322 1.1.1.9 christos "the 'overlay manual' command."));
3323 1.1.1.7 christos
3324 1.1.1.6 christos if (args == 0 || *args == 0)
3325 1.1.1.6 christos error (_("Argument required: name of an overlay section"));
3326 1.1.1.6 christos
3327 1.1.1.6 christos /* First, find a section matching the user supplied argument. */
3328 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
3329 1.1.1.6 christos for (obj_section *sec : objfile->sections ())
3330 1.1 christos if (!strcmp (bfd_section_name (sec->the_bfd_section), args))
3331 1.1 christos {
3332 1.1 christos if (!sec->ovly_mapped)
3333 1.1 christos error (_("Section %s is not mapped"), args);
3334 1.1 christos sec->ovly_mapped = 0;
3335 1.1 christos return;
3336 1.1 christos }
3337 1.1 christos error (_("No overlay section called %s"), args);
3338 1.1.1.6 christos }
3339 1.1 christos
3340 1.1 christos /* Function: overlay_auto_command
3341 1.1 christos A utility command to turn on overlay debugging.
3342 1.1 christos Possibly this should be done via a set/show command. */
3343 1.1.1.8 christos
3344 1.1 christos static void
3345 1.1 christos overlay_auto_command (const char *args, int from_tty)
3346 1.1 christos {
3347 1.1 christos overlay_debugging = ovly_auto;
3348 1.1 christos enable_overlay_breakpoints ();
3349 1.1 christos if (info_verbose)
3350 1.1 christos gdb_printf (_("Automatic overlay debugging enabled."));
3351 1.1.1.6 christos }
3352 1.1 christos
3353 1.1 christos /* Function: overlay_manual_command
3354 1.1 christos A utility command to turn on overlay debugging.
3355 1.1 christos Possibly this should be done via a set/show command. */
3356 1.1.1.8 christos
3357 1.1 christos static void
3358 1.1 christos overlay_manual_command (const char *args, int from_tty)
3359 1.1 christos {
3360 1.1 christos overlay_debugging = ovly_on;
3361 1.1 christos disable_overlay_breakpoints ();
3362 1.1 christos if (info_verbose)
3363 1.1 christos gdb_printf (_("Overlay debugging enabled."));
3364 1.1.1.6 christos }
3365 1.1 christos
3366 1.1 christos /* Function: overlay_off_command
3367 1.1 christos A utility command to turn on overlay debugging.
3368 1.1 christos Possibly this should be done via a set/show command. */
3369 1.1.1.8 christos
3370 1.1 christos static void
3371 1.1 christos overlay_off_command (const char *args, int from_tty)
3372 1.1 christos {
3373 1.1.1.6 christos overlay_debugging = ovly_off;
3374 1.1 christos disable_overlay_breakpoints ();
3375 1.1 christos if (info_verbose)
3376 1.1 christos gdb_printf (_("Overlay debugging disabled."));
3377 1.1 christos }
3378 1.1 christos
3379 1.1 christos static void
3380 1.1 christos overlay_load_command (const char *args, int from_tty)
3381 1.1 christos {
3382 1.1 christos struct gdbarch *gdbarch = get_current_arch ();
3383 1.1 christos
3384 1.1 christos if (gdbarch_overlay_update_p (gdbarch))
3385 1.1 christos gdbarch_overlay_update (gdbarch, NULL);
3386 1.1 christos else
3387 1.1 christos error (_("This target does not know how to read its overlay state."));
3388 1.1 christos }
3389 1.1 christos
3390 1.1 christos /* Command list chain containing all defined "overlay" subcommands. */
3391 1.1 christos static struct cmd_list_element *overlaylist;
3392 1.1 christos
3393 1.1 christos /* Target Overlays for the "Simplest" overlay manager:
3394 1.1 christos
3395 1.1 christos This is GDB's default target overlay layer. It works with the
3396 1.1 christos minimal overlay manager supplied as an example by Cygnus. The
3397 1.1 christos entry point is via a function pointer "gdbarch_overlay_update",
3398 1.1 christos so targets that use a different runtime overlay manager can
3399 1.1 christos substitute their own overlay_update function and take over the
3400 1.1 christos function pointer.
3401 1.1 christos
3402 1.1.1.4 christos The overlay_update function pokes around in the target's data structures
3403 1.1 christos to see what overlays are mapped, and updates GDB's overlay mapping with
3404 1.1 christos this information.
3405 1.1 christos
3406 1.1 christos In this simple implementation, the target data structures are as follows:
3407 1.1.1.4 christos unsigned _novlys; /# number of overlay sections #/
3408 1.1 christos unsigned _ovly_table[_novlys][4] = {
3409 1.1 christos {VMA, OSIZE, LMA, MAPPED}, /# one entry per overlay section #/
3410 1.1 christos {..., ..., ..., ...},
3411 1.1 christos }
3412 1.1 christos unsigned _novly_regions; /# number of overlay regions #/
3413 1.1 christos unsigned _ovly_region_table[_novly_regions][3] = {
3414 1.1 christos {VMA, OSIZE, MAPPED_TO_LMA}, /# one entry per overlay region #/
3415 1.1 christos {..., ..., ...},
3416 1.1 christos }
3417 1.1 christos These functions will attempt to update GDB's mappedness state in the
3418 1.1 christos symbol section table, based on the target's mappedness state.
3419 1.1 christos
3420 1.1 christos To do this, we keep a cached copy of the target's _ovly_table, and
3421 1.1 christos attempt to detect when the cached copy is invalidated. The main
3422 1.1 christos entry point is "simple_overlay_update(SECT), which looks up SECT in
3423 1.1 christos the cached table and re-reads only the entry for that section from
3424 1.1 christos the target (whenever possible). */
3425 1.1.1.4 christos
3426 1.1 christos /* Cached, dynamically allocated copies of the target data structures: */
3427 1.1 christos static unsigned (*cache_ovly_table)[4] = 0;
3428 1.1 christos static unsigned cache_novlys = 0;
3429 1.1 christos static CORE_ADDR cache_ovly_table_base = 0;
3430 1.1 christos enum ovly_index
3431 1.1 christos {
3432 1.1 christos VMA, OSIZE, LMA, MAPPED
3433 1.1.1.7 christos };
3434 1.1 christos
3435 1.1 christos /* Throw away the cached copy of _ovly_table. */
3436 1.1 christos
3437 1.1 christos static void
3438 1.1 christos simple_free_overlay_table (void)
3439 1.1 christos {
3440 1.1 christos xfree (cache_ovly_table);
3441 1.1 christos cache_novlys = 0;
3442 1.1 christos cache_ovly_table = NULL;
3443 1.1 christos cache_ovly_table_base = 0;
3444 1.1 christos }
3445 1.1 christos
3446 1.1 christos /* Read an array of ints of size SIZE from the target into a local buffer.
3447 1.1.1.4 christos Convert to host order. int LEN is number of ints. */
3448 1.1 christos
3449 1.1 christos static void
3450 1.1 christos read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
3451 1.1 christos int len, int size, enum bfd_endian byte_order)
3452 1.1 christos {
3453 1.1 christos /* FIXME (alloca): Not safe if array is very large. */
3454 1.1 christos gdb_byte *buf = (gdb_byte *) alloca (len * size);
3455 1.1 christos int i;
3456 1.1 christos
3457 1.1 christos read_memory (memaddr, buf, len * size);
3458 1.1 christos for (i = 0; i < len; i++)
3459 1.1 christos myaddr[i] = extract_unsigned_integer (size * i + buf, size, byte_order);
3460 1.1 christos }
3461 1.1 christos
3462 1.1 christos /* Find and grab a copy of the target _ovly_table
3463 1.1 christos (and _novlys, which is needed for the table's size). */
3464 1.1 christos
3465 1.1 christos static int
3466 1.1.1.10 christos simple_read_overlay_table (void)
3467 1.1.1.10 christos {
3468 1.1.1.2 christos struct gdbarch *gdbarch;
3469 1.1 christos int word_size;
3470 1.1 christos enum bfd_endian byte_order;
3471 1.1.1.8 christos
3472 1.1.1.8 christos simple_free_overlay_table ();
3473 1.1 christos bound_minimal_symbol novlys_msym
3474 1.1 christos = lookup_minimal_symbol (current_program_space, "_novlys");
3475 1.1 christos if (! novlys_msym.minsym)
3476 1.1.1.10 christos {
3477 1.1.1.10 christos error (_("Error reading inferior's overlay table: "
3478 1.1 christos "couldn't find `_novlys' variable\n"
3479 1.1 christos "in inferior. Use `overlay manual' mode."));
3480 1.1 christos return 0;
3481 1.1.1.8 christos }
3482 1.1.1.8 christos
3483 1.1 christos bound_minimal_symbol ovly_table_msym
3484 1.1 christos = lookup_minimal_symbol (current_program_space, "_ovly_table");
3485 1.1 christos if (! ovly_table_msym.minsym)
3486 1.1.1.7 christos {
3487 1.1 christos error (_("Error reading inferior's overlay table: couldn't find "
3488 1.1 christos "`_ovly_table' array\n"
3489 1.1 christos "in inferior. Use `overlay manual' mode."));
3490 1.1.1.8 christos return 0;
3491 1.1 christos }
3492 1.1 christos
3493 1.1.1.4 christos gdbarch = ovly_table_msym.objfile->arch ();
3494 1.1.1.8 christos word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
3495 1.1 christos byte_order = gdbarch_byte_order (gdbarch);
3496 1.1.1.8 christos
3497 1.1.1.8 christos cache_novlys = read_memory_integer (novlys_msym.value_address (),
3498 1.1 christos 4, byte_order);
3499 1.1 christos cache_ovly_table
3500 1.1 christos = (unsigned int (*)[4]) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3501 1.1 christos cache_ovly_table_base = ovly_table_msym.value_address ();
3502 1.1 christos read_target_long_array (cache_ovly_table_base,
3503 1.1 christos (unsigned int *) cache_ovly_table,
3504 1.1 christos cache_novlys * 4, word_size, byte_order);
3505 1.1 christos
3506 1.1 christos return 1; /* SUCCESS */
3507 1.1 christos }
3508 1.1 christos
3509 1.1 christos /* Function: simple_overlay_update_1
3510 1.1 christos A helper function for simple_overlay_update. Assuming a cached copy
3511 1.1 christos of _ovly_table exists, look through it to find an entry whose vma,
3512 1.1 christos lma and size match those of OSECT. Re-read the entry and make sure
3513 1.1.1.4 christos it still matches OSECT (else the table may no longer be valid).
3514 1.1 christos Set OSECT's mapped state to match the entry. Return: 1 for
3515 1.1.1.7 christos success, 0 for failure. */
3516 1.1 christos
3517 1.1 christos static int
3518 1.1 christos simple_overlay_update_1 (struct obj_section *osect)
3519 1.1 christos {
3520 1.1.1.7 christos int i;
3521 1.1.1.7 christos asection *bsect = osect->the_bfd_section;
3522 1.1 christos struct gdbarch *gdbarch = osect->objfile->arch ();
3523 1.1 christos int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
3524 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3525 1.1 christos
3526 1.1.1.7 christos for (i = 0; i < cache_novlys; i++)
3527 1.1.1.7 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (bsect)
3528 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (bsect))
3529 1.1 christos {
3530 1.1 christos read_target_long_array (cache_ovly_table_base + i * word_size,
3531 1.1 christos (unsigned int *) cache_ovly_table[i],
3532 1.1 christos 4, word_size, byte_order);
3533 1.1 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (bsect)
3534 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (bsect))
3535 1.1 christos {
3536 1.1 christos osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3537 1.1 christos return 1;
3538 1.1 christos }
3539 1.1 christos else /* Warning! Warning! Target's ovly table has changed! */
3540 1.1 christos return 0;
3541 1.1 christos }
3542 1.1 christos return 0;
3543 1.1 christos }
3544 1.1 christos
3545 1.1 christos /* Function: simple_overlay_update
3546 1.1 christos If OSECT is NULL, then update all sections' mapped state
3547 1.1 christos (after re-reading the entire target _ovly_table).
3548 1.1 christos If OSECT is non-NULL, then try to find a matching entry in the
3549 1.1 christos cached ovly_table and update only OSECT's mapped state.
3550 1.1 christos If a cached entry can't be found or the cache isn't valid, then
3551 1.1 christos re-read the entire cache, and go ahead and update all sections. */
3552 1.1 christos
3553 1.1 christos void
3554 1.1 christos simple_overlay_update (struct obj_section *osect)
3555 1.1 christos {
3556 1.1.1.10 christos /* Were we given an osect to look up? NULL means do all of them. */
3557 1.1.1.10 christos if (osect)
3558 1.1 christos /* Have we got a cached copy of the target's overlay table? */
3559 1.1.1.2 christos if (cache_ovly_table != NULL)
3560 1.1 christos {
3561 1.1 christos /* Does its cached location match what's currently in the
3562 1.1 christos symtab? */
3563 1.1 christos bound_minimal_symbol minsym
3564 1.1.1.8 christos = lookup_minimal_symbol (current_program_space, "_ovly_table");
3565 1.1 christos
3566 1.1 christos if (minsym.minsym == NULL)
3567 1.1 christos error (_("Error reading inferior's overlay table: couldn't "
3568 1.1 christos "find `_ovly_table' array\n"
3569 1.1 christos "in inferior. Use `overlay manual' mode."));
3570 1.1 christos
3571 1.1 christos if (cache_ovly_table_base == minsym.value_address ())
3572 1.1 christos /* Then go ahead and try to look up this single section in
3573 1.1 christos the cache. */
3574 1.1 christos if (simple_overlay_update_1 (osect))
3575 1.1 christos /* Found it! We're done. */
3576 1.1 christos return;
3577 1.1 christos }
3578 1.1 christos
3579 1.1 christos /* Cached table no good: need to read the entire table anew.
3580 1.1.1.6 christos Or else we want all the sections, in which case it's actually
3581 1.1.1.9 christos more efficient to read the whole table in one block anyway. */
3582 1.1.1.9 christos
3583 1.1.1.6 christos if (! simple_read_overlay_table ())
3584 1.1.1.6 christos return;
3585 1.1.1.9 christos
3586 1.1.1.6 christos /* Now may as well update all sections, even if only one was requested. */
3587 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
3588 1.1.1.7 christos for (obj_section *sect : objfile->sections ())
3589 1.1.1.7 christos if (section_is_overlay (sect))
3590 1.1.1.6 christos {
3591 1.1.1.9 christos int i;
3592 1.1.1.6 christos asection *bsect = sect->the_bfd_section;
3593 1.1.1.6 christos
3594 1.1.1.6 christos for (i = 0; i < cache_novlys; i++)
3595 1.1 christos if (cache_ovly_table[i][VMA] == bfd_section_vma (bsect)
3596 1.1 christos && cache_ovly_table[i][LMA] == bfd_section_lma (bsect))
3597 1.1 christos { /* obj_section matches i'th entry in ovly_table. */
3598 1.1 christos sect->ovly_mapped = cache_ovly_table[i][MAPPED];
3599 1.1 christos break; /* finished with inner for loop: break out. */
3600 1.1 christos }
3601 1.1.1.8 christos }
3602 1.1 christos }
3603 1.1 christos
3604 1.1 christos /* Default implementation for sym_relocate. */
3605 1.1 christos
3606 1.1 christos bfd_byte *
3607 1.1 christos default_symfile_relocate (struct objfile *objfile, asection *sectp,
3608 1.1 christos bfd_byte *buf)
3609 1.1 christos {
3610 1.1 christos /* Use sectp->owner instead of objfile->obfd. sectp may point to a
3611 1.1 christos DWO file. */
3612 1.1 christos bfd *abfd = sectp->owner;
3613 1.1 christos
3614 1.1.1.8 christos /* We're only interested in sections with relocation
3615 1.1.1.8 christos information. */
3616 1.1.1.8 christos if ((sectp->flags & SEC_RELOC) == 0)
3617 1.1.1.8 christos return NULL;
3618 1.1.1.8 christos
3619 1.1 christos /* We will handle section offsets properly elsewhere, so relocate as if
3620 1.1 christos all sections begin at 0. */
3621 1.1 christos for (asection *sect : gdb_bfd_sections (abfd))
3622 1.1 christos {
3623 1.1 christos sect->output_section = sect;
3624 1.1 christos sect->output_offset = 0;
3625 1.1 christos }
3626 1.1 christos
3627 1.1 christos return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
3628 1.1 christos }
3629 1.1 christos
3630 1.1 christos /* Relocate the contents of a debug section SECTP in ABFD. The
3631 1.1 christos contents are stored in BUF if it is non-NULL, or returned in a
3632 1.1 christos malloc'd buffer otherwise.
3633 1.1 christos
3634 1.1 christos For some platforms and debug info formats, shared libraries contain
3635 1.1 christos relocations against the debug sections (particularly for DWARF-2;
3636 1.1 christos one affected platform is PowerPC GNU/Linux, although it depends on
3637 1.1 christos the version of the linker in use). Also, ELF object files naturally
3638 1.1 christos have unresolved relocations for their debug sections. We need to apply
3639 1.1.1.8 christos the relocations in order to get the locations of symbols correct.
3640 1.1 christos Another example that may require relocation processing, is the
3641 1.1 christos DWARF-2 .eh_frame section in .o files, although it isn't strictly a
3642 1.1 christos debug section. */
3643 1.1 christos
3644 1.1 christos bfd_byte *
3645 1.1 christos symfile_relocate_debug_section (struct objfile *objfile,
3646 1.1.1.7 christos asection *sectp, bfd_byte *buf)
3647 1.1 christos {
3648 1.1 christos gdb_assert (objfile->sf->sym_relocate);
3649 1.1 christos
3650 1.1 christos return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
3651 1.1 christos }
3652 1.1 christos
3653 1.1 christos symfile_segment_data_up
3654 1.1 christos get_symfile_segment_data (bfd *abfd)
3655 1.1 christos {
3656 1.1 christos const struct sym_fns *sf = find_sym_fns (abfd);
3657 1.1 christos
3658 1.1 christos if (sf == NULL)
3659 1.1 christos return NULL;
3660 1.1 christos
3661 1.1 christos return sf->sym_segments (abfd);
3662 1.1 christos }
3663 1.1 christos
3664 1.1 christos /* Given:
3665 1.1 christos - DATA, containing segment addresses from the object file ABFD, and
3666 1.1 christos the mapping from ABFD's sections onto the segments that own them,
3667 1.1 christos and
3668 1.1 christos - SEGMENT_BASES[0 .. NUM_SEGMENT_BASES - 1], holding the actual
3669 1.1 christos segment addresses reported by the target,
3670 1.1 christos store the appropriate offsets for each section in OFFSETS.
3671 1.1 christos
3672 1.1 christos If there are fewer entries in SEGMENT_BASES than there are segments
3673 1.1 christos in DATA, then apply SEGMENT_BASES' last entry to all the segments.
3674 1.1 christos
3675 1.1.1.7 christos If there are more entries, then ignore the extra. The target may
3676 1.1 christos not be able to distinguish between an empty data segment and a
3677 1.1 christos missing data segment; a missing text segment is less plausible. */
3678 1.1 christos
3679 1.1 christos int
3680 1.1 christos symfile_map_offsets_to_segments (bfd *abfd,
3681 1.1 christos const struct symfile_segment_data *data,
3682 1.1 christos section_offsets &offsets,
3683 1.1 christos int num_segment_bases,
3684 1.1 christos const CORE_ADDR *segment_bases)
3685 1.1 christos {
3686 1.1 christos int i;
3687 1.1 christos asection *sect;
3688 1.1 christos
3689 1.1.1.7 christos /* It doesn't make sense to call this function unless you have some
3690 1.1 christos segment base addresses. */
3691 1.1 christos gdb_assert (num_segment_bases > 0);
3692 1.1 christos
3693 1.1 christos /* If we do not have segment mappings for the object file, we
3694 1.1 christos can not relocate it by segments. */
3695 1.1.1.7 christos gdb_assert (data != NULL);
3696 1.1 christos gdb_assert (data->segments.size () > 0);
3697 1.1 christos
3698 1.1.1.8 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
3699 1.1 christos {
3700 1.1.1.8 christos int which = data->segment_info[i];
3701 1.1 christos
3702 1.1 christos gdb_assert (0 <= which && which <= data->segments.size ());
3703 1.1.1.8 christos
3704 1.1 christos /* Don't bother computing offsets for sections that aren't
3705 1.1.1.8 christos loaded as part of any segment. */
3706 1.1 christos if (! which)
3707 1.1.1.7 christos continue;
3708 1.1 christos
3709 1.1 christos /* Use the last SEGMENT_BASES entry as the address of any extra
3710 1.1 christos segments mentioned in DATA->segment_info. */
3711 1.1 christos if (which > num_segment_bases)
3712 1.1 christos which = num_segment_bases;
3713 1.1 christos
3714 1.1 christos offsets[i] = segment_bases[which - 1] - data->segments[which - 1].base;
3715 1.1 christos }
3716 1.1.1.8 christos
3717 1.1 christos return 1;
3718 1.1 christos }
3719 1.1 christos
3720 1.1.1.8 christos static void
3721 1.1 christos symfile_find_segment_sections (struct objfile *objfile)
3722 1.1 christos {
3723 1.1 christos bfd *abfd = objfile->obfd.get ();
3724 1.1.1.7 christos int i;
3725 1.1.1.7 christos asection *sect;
3726 1.1 christos
3727 1.1 christos symfile_segment_data_up data = get_symfile_segment_data (abfd);
3728 1.1 christos if (data == NULL)
3729 1.1 christos return;
3730 1.1 christos
3731 1.1 christos if (data->segments.size () != 1 && data->segments.size () != 2)
3732 1.1 christos return;
3733 1.1 christos
3734 1.1 christos for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
3735 1.1 christos {
3736 1.1 christos int which = data->segment_info[i];
3737 1.1 christos
3738 1.1 christos if (which == 1)
3739 1.1 christos {
3740 1.1 christos if (objfile->sect_index_text == -1)
3741 1.1 christos objfile->sect_index_text = sect->index;
3742 1.1 christos
3743 1.1 christos if (objfile->sect_index_rodata == -1)
3744 1.1 christos objfile->sect_index_rodata = sect->index;
3745 1.1 christos }
3746 1.1 christos else if (which == 2)
3747 1.1 christos {
3748 1.1 christos if (objfile->sect_index_data == -1)
3749 1.1 christos objfile->sect_index_data = sect->index;
3750 1.1 christos
3751 1.1 christos if (objfile->sect_index_bss == -1)
3752 1.1 christos objfile->sect_index_bss = sect->index;
3753 1.1 christos }
3754 1.1 christos }
3755 1.1.1.2 christos }
3756 1.1.1.10 christos
3757 1.1 christos /* Listen for free_objfile events. */
3758 1.1 christos
3759 1.1.1.2 christos static void
3760 1.1.1.2 christos symfile_free_objfile (struct objfile *objfile)
3761 1.1.1.2 christos {
3762 1.1.1.2 christos /* Remove the target sections owned by this objfile. */
3763 1.1.1.8 christos objfile->pspace ()->remove_target_sections (objfile);
3764 1.1.1.5 christos }
3765 1.1.1.5 christos
3766 1.1.1.6 christos /* Wrapper around the quick_symbol_functions expand_symtabs_matching "method".
3767 1.1.1.5 christos Expand all symtabs that match the specified criteria.
3768 1.1.1.5 christos See quick_symbol_functions.expand_symtabs_matching for details. */
3769 1.1.1.8 christos
3770 1.1.1.10 christos bool
3771 1.1.1.10 christos expand_symtabs_matching
3772 1.1.1.2 christos (gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
3773 1.1.1.6 christos const lookup_name_info &lookup_name,
3774 1.1.1.8 christos gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
3775 1.1.1.8 christos gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
3776 1.1.1.8 christos block_search_flags search_flags,
3777 1.1.1.8 christos domain_search_flags domain,
3778 1.1.1.8 christos gdb::function_view<expand_symtabs_lang_matcher_ftype> lang_matcher)
3779 1.1.1.10 christos {
3780 1.1.1.10 christos for (objfile *objfile : current_program_space->objfiles ())
3781 1.1.1.8 christos if (!objfile->expand_symtabs_matching (file_matcher,
3782 1.1.1.8 christos &lookup_name,
3783 1.1.1.2 christos symbol_matcher,
3784 1.1.1.2 christos expansion_notify,
3785 1.1.1.2 christos search_flags,
3786 1.1.1.2 christos domain,
3787 1.1.1.2 christos lang_matcher))
3788 1.1.1.2 christos return false;
3789 1.1.1.2 christos return true;
3790 1.1.1.8 christos }
3791 1.1.1.8 christos
3792 1.1.1.2 christos /* Wrapper around the quick_symbol_functions map_symbol_filenames "method".
3793 1.1.1.6 christos Map function FUN over every file.
3794 1.1.1.8 christos See quick_symbol_functions.map_symbol_filenames for details. */
3795 1.1.1.6 christos
3796 1.1.1.2 christos void
3797 1.1.1.6 christos map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
3798 1.1.1.6 christos bool need_fullname)
3799 1.1.1.6 christos {
3800 1.1.1.6 christos for (objfile *objfile : current_program_space->objfiles ())
3801 1.1.1.6 christos objfile->map_symbol_filenames (fun, need_fullname);
3802 1.1.1.6 christos }
3803 1.1.1.6 christos
3804 1.1.1.6 christos #if GDB_SELF_TEST
3805 1.1.1.6 christos
3806 1.1.1.6 christos namespace selftests {
3807 1.1.1.6 christos namespace filename_language {
3808 1.1.1.6 christos
3809 1.1.1.6 christos static void test_filename_language ()
3810 1.1.1.6 christos {
3811 1.1.1.6 christos /* This test messes up the filename_language_table global. */
3812 1.1.1.6 christos scoped_restore restore_flt = make_scoped_restore (&filename_language_table);
3813 1.1.1.6 christos
3814 1.1.1.6 christos /* Test deducing an unknown extension. */
3815 1.1.1.6 christos language lang = deduce_language_from_filename ("myfile.blah");
3816 1.1.1.6 christos SELF_CHECK (lang == language_unknown);
3817 1.1.1.6 christos
3818 1.1.1.6 christos /* Test deducing a known extension. */
3819 1.1.1.6 christos lang = deduce_language_from_filename ("myfile.c");
3820 1.1.1.6 christos SELF_CHECK (lang == language_c);
3821 1.1.1.6 christos
3822 1.1.1.6 christos /* Test adding a new extension using the internal API. */
3823 1.1.1.6 christos add_filename_language (".blah", language_pascal);
3824 1.1.1.6 christos lang = deduce_language_from_filename ("myfile.blah");
3825 1.1.1.6 christos SELF_CHECK (lang == language_pascal);
3826 1.1.1.6 christos }
3827 1.1.1.6 christos
3828 1.1.1.6 christos static void
3829 1.1.1.6 christos test_set_ext_lang_command ()
3830 1.1.1.6 christos {
3831 1.1.1.6 christos /* This test messes up the filename_language_table global. */
3832 1.1.1.8 christos scoped_restore restore_flt = make_scoped_restore (&filename_language_table);
3833 1.1.1.6 christos
3834 1.1.1.6 christos /* Confirm that the .hello extension is not known. */
3835 1.1.1.6 christos language lang = deduce_language_from_filename ("cake.hello");
3836 1.1.1.6 christos SELF_CHECK (lang == language_unknown);
3837 1.1.1.6 christos
3838 1.1.1.6 christos /* Test adding a new extension using the CLI command. */
3839 1.1.1.6 christos ext_args = ".hello rust";
3840 1.1.1.8 christos set_ext_lang_command (NULL, 1, NULL);
3841 1.1.1.6 christos
3842 1.1.1.6 christos lang = deduce_language_from_filename ("cake.hello");
3843 1.1.1.6 christos SELF_CHECK (lang == language_rust);
3844 1.1.1.6 christos
3845 1.1.1.6 christos /* Test overriding an existing extension using the CLI command. */
3846 1.1.1.6 christos int size_before = filename_language_table.size ();
3847 1.1.1.2 christos ext_args = ".hello pascal";
3848 1.1.1.2 christos set_ext_lang_command (NULL, 1, NULL);
3849 1.1.1.6 christos int size_after = filename_language_table.size ();
3850 1.1.1.6 christos
3851 1.1.1.6 christos lang = deduce_language_from_filename ("cake.hello");
3852 1.1.1.6 christos SELF_CHECK (lang == language_pascal);
3853 1.1.1.6 christos SELF_CHECK (size_before == size_after);
3854 1.1.1.7 christos }
3855 1.1 christos
3856 1.1.1.7 christos } /* namespace filename_language */
3857 1.1 christos } /* namespace selftests */
3858 1.1 christos
3859 1.1 christos #endif /* GDB_SELF_TEST */
3860 1.1.1.8 christos
3861 1.1.1.6 christos void _initialize_symfile ();
3862 1.1.1.6 christos void
3863 1.1.1.6 christos _initialize_symfile ()
3864 1.1.1.6 christos {
3865 1.1.1.6 christos struct cmd_list_element *c;
3866 1.1.1.6 christos
3867 1.1.1.6 christos gdb::observers::free_objfile.attach (symfile_free_objfile, "symfile");
3868 1.1 christos
3869 1.1 christos #define READNOW_READNEVER_HELP \
3870 1.1 christos "The '-readnow' option will cause GDB to read the entire symbol file\n\
3871 1.1.1.6 christos immediately. This makes the command slower, but may make future operations\n\
3872 1.1.1.6 christos faster.\n\
3873 1.1 christos The '-readnever' option will prevent GDB from reading the symbol file's\n\
3874 1.1.1.6 christos symbolic debug information."
3875 1.1.1.10 christos
3876 1.1 christos c = add_cmd ("symbol-file", class_files, symbol_file_command, _("\
3877 1.1 christos Load symbol table from executable file FILE.\n\
3878 1.1 christos Usage: symbol-file [-readnow | -readnever] [-o OFF] FILE\n\
3879 1.1.1.10 christos OFF is an optional offset which is added to each section address.\n\
3880 1.1.1.10 christos The `file' command can also load symbol tables, as well as setting the file\n\
3881 1.1.1.6 christos to execute.\n" READNOW_READNEVER_HELP), &cmdlist);
3882 1.1.1.6 christos set_cmd_completer (c, filename_maybe_quoted_completer);
3883 1.1 christos
3884 1.1.1.6 christos c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command, _("\
3885 1.1.1.6 christos Load symbols from FILE, assuming FILE has been dynamically loaded.\n\
3886 1.1.1.6 christos Usage: add-symbol-file FILE [-readnow|-readnever] [-o OFF] [ADDR]\n\
3887 1.1.1.6 christos [-s SECT-NAME SECT-ADDR]...\n\
3888 1.1 christos ADDR is the starting address of the file's text.\n\
3889 1.1.1.10 christos Each '-s' argument provides a section name and address, and\n\
3890 1.1 christos should be specified if the data and bss segments are not contiguous\n\
3891 1.1.1.10 christos with the text. SECT-NAME is a section name to be loaded at SECT-ADDR.\n\
3892 1.1.1.10 christos OFF is an optional offset which is added to the default load addresses\n\
3893 1.1.1.10 christos of all sections for which no other address was specified.\n"
3894 1.1.1.10 christos READNOW_READNEVER_HELP),
3895 1.1 christos &cmdlist);
3896 1.1 christos set_cmd_completer (c, filename_maybe_quoted_completer);
3897 1.1 christos
3898 1.1 christos const auto remove_symbol_file_opts
3899 1.1.1.10 christos = make_remove_symbol_file_def_group (nullptr);
3900 1.1.1.10 christos static std::string remove_symbol_file_cmd_help
3901 1.1.1.10 christos = gdb::option::build_help (_("\
3902 1.1.1.10 christos Remove a symbol file added via the add-symbol-file command.\n\
3903 1.1.1.10 christos Usage: remove-symbol-file FILENAME\n\
3904 1.1.1.10 christos remove-symbol-file -a ADDRESS\n\
3905 1.1 christos The file to remove can be identified by its filename or by an address\n\
3906 1.1.1.10 christos that lies within the boundaries of this symbol file in memory.\n\
3907 1.1 christos Options:\n\
3908 1.1 christos %OPTIONS%"), remove_symbol_file_opts);
3909 1.1.1.7 christos c = add_cmd ("remove-symbol-file", class_files,
3910 1.1.1.7 christos remove_symbol_file_command,
3911 1.1.1.6 christos remove_symbol_file_cmd_help.c_str (),
3912 1.1.1.5 christos &cmdlist);
3913 1.1.1.5 christos set_cmd_completer_handle_brkchars (c, remove_symbol_file_command_completer);
3914 1.1.1.6 christos
3915 1.1.1.10 christos c = add_cmd ("load", class_files, load_command, _("\
3916 1.1 christos Dynamically load FILE into the running program.\n\
3917 1.1.1.8 christos FILE symbols are recorded for access from GDB.\n\
3918 1.1.1.8 christos Usage: load [FILE] [OFFSET]\n\
3919 1.1.1.8 christos An optional load OFFSET may also be given as a literal address.\n\
3920 1.1.1.8 christos When OFFSET is provided, FILE must also be provided. FILE can be provided\n\
3921 1.1 christos on its own."), &cmdlist);
3922 1.1.1.8 christos set_cmd_completer (c, deprecated_filename_completer);
3923 1.1.1.8 christos
3924 1.1 christos cmd_list_element *overlay_cmd
3925 1.1 christos = add_basic_prefix_cmd ("overlay", class_support,
3926 1.1 christos _("Commands for debugging overlays."), &overlaylist,
3927 1.1 christos 0, &cmdlist);
3928 1.1 christos
3929 1.1 christos add_com_alias ("ovly", overlay_cmd, class_support, 1);
3930 1.1 christos add_com_alias ("ov", overlay_cmd, class_support, 1);
3931 1.1 christos
3932 1.1 christos add_cmd ("map-overlay", class_support, map_overlay_command,
3933 1.1 christos _("Assert that an overlay section is mapped."), &overlaylist);
3934 1.1 christos
3935 1.1 christos add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3936 1.1 christos _("Assert that an overlay section is unmapped."), &overlaylist);
3937 1.1 christos
3938 1.1 christos add_cmd ("list-overlays", class_support, list_overlays_command,
3939 1.1 christos _("List mappings of overlay sections."), &overlaylist);
3940 1.1 christos
3941 1.1 christos add_cmd ("manual", class_support, overlay_manual_command,
3942 1.1 christos _("Enable overlay debugging."), &overlaylist);
3943 1.1 christos add_cmd ("off", class_support, overlay_off_command,
3944 1.1 christos _("Disable overlay debugging."), &overlaylist);
3945 1.1 christos add_cmd ("auto", class_support, overlay_auto_command,
3946 1.1 christos _("Enable automatic overlay debugging."), &overlaylist);
3947 1.1 christos add_cmd ("load-target", class_support, overlay_load_command,
3948 1.1 christos _("Read the overlay mapping state from the target."), &overlaylist);
3949 1.1 christos
3950 1.1 christos /* Filename extension to source language lookup table: */
3951 1.1 christos add_setshow_string_noescape_cmd ("extension-language", class_files,
3952 1.1 christos &ext_args, _("\
3953 1.1 christos Set mapping between filename extension and source language."), _("\
3954 1.1 christos Show mapping between filename extension and source language."), _("\
3955 1.1 christos Usage: set extension-language .foo bar"),
3956 1.1 christos set_ext_lang_command,
3957 1.1 christos show_ext_args,
3958 1.1 christos &setlist, &showlist);
3959 1.1 christos
3960 1.1 christos add_info ("extensions", info_ext_lang_command,
3961 1.1 christos _("All filename extensions associated with a source language."));
3962 1.1 christos
3963 1.1 christos add_setshow_optional_filename_cmd ("debug-file-directory", class_support,
3964 1.1 christos &debug_file_directory, _("\
3965 1.1 christos Set the directories where separate debug symbols are searched for."), _("\
3966 1.1 christos Show the directories where separate debug symbols are searched for."), _("\
3967 1.1.1.2 christos Separate debug symbols are first searched for in the same\n\
3968 1.1.1.2 christos directory as the binary, then in the `" DEBUG_SUBDIRECTORY "' subdirectory,\n\
3969 1.1.1.2 christos and lastly at the path of the directory of the binary with\n\
3970 1.1.1.2 christos each global debug-file-directory component prepended."),
3971 1.1.1.2 christos NULL,
3972 1.1.1.2 christos show_debug_file_directory,
3973 1.1.1.2 christos &setlist, &showlist);
3974 1.1.1.2 christos
3975 1.1.1.8 christos add_setshow_enum_cmd ("symbol-loading", no_class,
3976 1.1.1.2 christos print_symbol_loading_enums, &print_symbol_loading,
3977 1.1.1.8 christos _("\
3978 1.1.1.2 christos Set printing of symbol loading messages."), _("\
3979 1.1.1.2 christos Show printing of symbol loading messages."), _("\
3980 1.1.1.2 christos off == turn all messages off\n\
3981 1.1.1.6 christos brief == print messages for the executable,\n\
3982 1.1.1.6 christos and brief messages for shared libraries\n\
3983 1.1.1.6 christos full == print messages for the executable,\n\
3984 1.1.1.6 christos and messages for each shared library."),
3985 1.1.1.6 christos NULL,
3986 1.1.1.10 christos NULL,
3987 1.1.1.10 christos &setprintlist, &showprintlist);
3988 1.1.1.10 christos
3989 1.1.1.6 christos add_setshow_boolean_cmd ("separate-debug-file", no_class,
3990 1.1.1.6 christos &separate_debug_file_debug, _("\
3991 1.1.1.6 christos Set printing of separate debug info file search debug."), _("\
3992 1.1.1.6 christos Show printing of separate debug info file search debug."), _("\
3993 1.1.1.6 christos When on, GDB prints the searched locations while looking for separate\n\
3994 1.1.1.6 christos debug info files."),
3995 1.1.1.6 christos NULL, NULL, &setdebuglist, &showdebuglist);
3996 1.1.1.6 christos
3997 1.1 christos #if GDB_SELF_TEST
3998 selftests::register_test
3999 ("filename_language", selftests::filename_language::test_filename_language);
4000 selftests::register_test
4001 ("set_ext_lang_command",
4002 selftests::filename_language::test_set_ext_lang_command);
4003 #endif
4004 }
4005