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