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