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