OSDN Git Service

23ca1d24bb5a6d5b91da477adeb777fb9f0a77de
[pf3gnuchains/pf3gnuchains3x.git] / gdb / symfile.c
1 /* Generic symbol file reading for the GNU debugger, GDB.
2
3    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5
6    Contributed by Cygnus Support, using pieces from other GDB modules.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place - Suite 330,
23    Boston, MA 02111-1307, USA.  */
24
25 #include "defs.h"
26 #include "bfdlink.h"
27 #include "symtab.h"
28 #include "gdbtypes.h"
29 #include "gdbcore.h"
30 #include "frame.h"
31 #include "target.h"
32 #include "value.h"
33 #include "symfile.h"
34 #include "objfiles.h"
35 #include "source.h"
36 #include "gdbcmd.h"
37 #include "breakpoint.h"
38 #include "language.h"
39 #include "complaints.h"
40 #include "demangle.h"
41 #include "inferior.h"           /* for write_pc */
42 #include "filenames.h"          /* for DOSish file names */
43 #include "gdb-stabs.h"
44 #include "gdb_obstack.h"
45 #include "completer.h"
46 #include "bcache.h"
47 #include "hashtab.h"
48 #include <readline/readline.h>
49 #include "gdb_assert.h"
50
51 #include <sys/types.h>
52 #include <fcntl.h>
53 #include "gdb_string.h"
54 #include "gdb_stat.h"
55 #include <ctype.h>
56 #include <time.h>
57
58 #ifndef O_BINARY
59 #define O_BINARY 0
60 #endif
61
62 #ifdef HPUXHPPA
63
64 /* Some HP-UX related globals to clear when a new "main"
65    symbol file is loaded. HP-specific.  */
66
67 extern int hp_som_som_object_present;
68 extern int hp_cxx_exception_support_initialized;
69 #define RESET_HP_UX_GLOBALS() do {\
70                                     hp_som_som_object_present = 0;             /* indicates HP-compiled code */        \
71                                     hp_cxx_exception_support_initialized = 0;  /* must reinitialize exception stuff */ \
72                               } while (0)
73 #endif
74
75 int (*ui_load_progress_hook) (const char *section, unsigned long num);
76 void (*show_load_progress) (const char *section,
77                             unsigned long section_sent, 
78                             unsigned long section_size, 
79                             unsigned long total_sent, 
80                             unsigned long total_size);
81 void (*pre_add_symbol_hook) (char *);
82 void (*post_add_symbol_hook) (void);
83 void (*target_new_objfile_hook) (struct objfile *);
84
85 static void clear_symtab_users_cleanup (void *ignore);
86
87 /* Global variables owned by this file */
88 int readnow_symbol_files;       /* Read full symbols immediately */
89
90 /* External variables and functions referenced. */
91
92 extern void report_transfer_performance (unsigned long, time_t, time_t);
93
94 /* Functions this file defines */
95
96 #if 0
97 static int simple_read_overlay_region_table (void);
98 static void simple_free_overlay_region_table (void);
99 #endif
100
101 static void set_initial_language (void);
102
103 static void load_command (char *, int);
104
105 static void symbol_file_add_main_1 (char *args, int from_tty, int flags);
106
107 static void add_symbol_file_command (char *, int);
108
109 static void add_shared_symbol_files_command (char *, int);
110
111 static void reread_separate_symbols (struct objfile *objfile);
112
113 static void cashier_psymtab (struct partial_symtab *);
114
115 bfd *symfile_bfd_open (char *);
116
117 int get_section_index (struct objfile *, char *);
118
119 static void find_sym_fns (struct objfile *);
120
121 static void decrement_reading_symtab (void *);
122
123 static void overlay_invalidate_all (void);
124
125 static int overlay_is_mapped (struct obj_section *);
126
127 void list_overlays_command (char *, int);
128
129 void map_overlay_command (char *, int);
130
131 void unmap_overlay_command (char *, int);
132
133 static void overlay_auto_command (char *, int);
134
135 static void overlay_manual_command (char *, int);
136
137 static void overlay_off_command (char *, int);
138
139 static void overlay_load_command (char *, int);
140
141 static void overlay_command (char *, int);
142
143 static void simple_free_overlay_table (void);
144
145 static void read_target_long_array (CORE_ADDR, unsigned int *, int);
146
147 static int simple_read_overlay_table (void);
148
149 static int simple_overlay_update_1 (struct obj_section *);
150
151 static void add_filename_language (char *ext, enum language lang);
152
153 static void set_ext_lang_command (char *args, int from_tty);
154
155 static void info_ext_lang_command (char *args, int from_tty);
156
157 static char *find_separate_debug_file (struct objfile *objfile);
158
159 static void init_filename_language_table (void);
160
161 void _initialize_symfile (void);
162
163 /* List of all available sym_fns.  On gdb startup, each object file reader
164    calls add_symtab_fns() to register information on each format it is
165    prepared to read. */
166
167 static struct sym_fns *symtab_fns = NULL;
168
169 /* Flag for whether user will be reloading symbols multiple times.
170    Defaults to ON for VxWorks, otherwise OFF.  */
171
172 #ifdef SYMBOL_RELOADING_DEFAULT
173 int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
174 #else
175 int symbol_reloading = 0;
176 #endif
177
178 /* If non-zero, shared library symbols will be added automatically
179    when the inferior is created, new libraries are loaded, or when
180    attaching to the inferior.  This is almost always what users will
181    want to have happen; but for very large programs, the startup time
182    will be excessive, and so if this is a problem, the user can clear
183    this flag and then add the shared library symbols as needed.  Note
184    that there is a potential for confusion, since if the shared
185    library symbols are not loaded, commands like "info fun" will *not*
186    report all the functions that are actually present. */
187
188 int auto_solib_add = 1;
189
190 /* For systems that support it, a threshold size in megabytes.  If
191    automatically adding a new library's symbol table to those already
192    known to the debugger would cause the total shared library symbol
193    size to exceed this threshhold, then the shlib's symbols are not
194    added.  The threshold is ignored if the user explicitly asks for a
195    shlib to be added, such as when using the "sharedlibrary"
196    command. */
197
198 int auto_solib_limit;
199 \f
200
201 /* Since this function is called from within qsort, in an ANSI environment
202    it must conform to the prototype for qsort, which specifies that the
203    comparison function takes two "void *" pointers. */
204
205 static int
206 compare_symbols (const void *s1p, const void *s2p)
207 {
208   register struct symbol **s1, **s2;
209
210   s1 = (struct symbol **) s1p;
211   s2 = (struct symbol **) s2p;
212   return (strcmp (SYMBOL_SOURCE_NAME (*s1), SYMBOL_SOURCE_NAME (*s2)));
213 }
214
215 /*
216
217    LOCAL FUNCTION
218
219    compare_psymbols -- compare two partial symbols by name
220
221    DESCRIPTION
222
223    Given pointers to pointers to two partial symbol table entries,
224    compare them by name and return -N, 0, or +N (ala strcmp).
225    Typically used by sorting routines like qsort().
226
227    NOTES
228
229    Does direct compare of first two characters before punting
230    and passing to strcmp for longer compares.  Note that the
231    original version had a bug whereby two null strings or two
232    identically named one character strings would return the
233    comparison of memory following the null byte.
234
235  */
236
237 static int
238 compare_psymbols (const void *s1p, const void *s2p)
239 {
240   register struct partial_symbol **s1, **s2;
241   register char *st1, *st2;
242
243   s1 = (struct partial_symbol **) s1p;
244   s2 = (struct partial_symbol **) s2p;
245   st1 = SYMBOL_SOURCE_NAME (*s1);
246   st2 = SYMBOL_SOURCE_NAME (*s2);
247
248
249   if ((st1[0] - st2[0]) || !st1[0])
250     {
251       return (st1[0] - st2[0]);
252     }
253   else if ((st1[1] - st2[1]) || !st1[1])
254     {
255       return (st1[1] - st2[1]);
256     }
257   else
258     {
259       return (strcmp (st1, st2));
260     }
261 }
262
263 void
264 sort_pst_symbols (struct partial_symtab *pst)
265 {
266   /* Sort the global list; don't sort the static list */
267
268   qsort (pst->objfile->global_psymbols.list + pst->globals_offset,
269          pst->n_global_syms, sizeof (struct partial_symbol *),
270          compare_psymbols);
271 }
272
273 /* Call sort_block_syms to sort alphabetically the symbols of one block.  */
274
275 void
276 sort_block_syms (register struct block *b)
277 {
278   qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
279          sizeof (struct symbol *), compare_symbols);
280 }
281
282 /* Call sort_symtab_syms to sort alphabetically
283    the symbols of each block of one symtab.  */
284
285 void
286 sort_symtab_syms (register struct symtab *s)
287 {
288   register struct blockvector *bv;
289   int nbl;
290   int i;
291   register struct block *b;
292
293   if (s == 0)
294     return;
295   bv = BLOCKVECTOR (s);
296   nbl = BLOCKVECTOR_NBLOCKS (bv);
297   for (i = 0; i < nbl; i++)
298     {
299       b = BLOCKVECTOR_BLOCK (bv, i);
300       if (BLOCK_SHOULD_SORT (b))
301         sort_block_syms (b);
302     }
303 }
304
305 /* Make a null terminated copy of the string at PTR with SIZE characters in
306    the obstack pointed to by OBSTACKP .  Returns the address of the copy.
307    Note that the string at PTR does not have to be null terminated, I.E. it
308    may be part of a larger string and we are only saving a substring. */
309
310 char *
311 obsavestring (const char *ptr, int size, struct obstack *obstackp)
312 {
313   register char *p = (char *) obstack_alloc (obstackp, size + 1);
314   /* Open-coded memcpy--saves function call time.  These strings are usually
315      short.  FIXME: Is this really still true with a compiler that can
316      inline memcpy? */
317   {
318     register const char *p1 = ptr;
319     register char *p2 = p;
320     const char *end = ptr + size;
321     while (p1 != end)
322       *p2++ = *p1++;
323   }
324   p[size] = 0;
325   return p;
326 }
327
328 /* Concatenate strings S1, S2 and S3; return the new string.  Space is found
329    in the obstack pointed to by OBSTACKP.  */
330
331 char *
332 obconcat (struct obstack *obstackp, const char *s1, const char *s2,
333           const char *s3)
334 {
335   register int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
336   register char *val = (char *) obstack_alloc (obstackp, len);
337   strcpy (val, s1);
338   strcat (val, s2);
339   strcat (val, s3);
340   return val;
341 }
342
343 /* True if we are nested inside psymtab_to_symtab. */
344
345 int currently_reading_symtab = 0;
346
347 static void
348 decrement_reading_symtab (void *dummy)
349 {
350   currently_reading_symtab--;
351 }
352
353 /* Get the symbol table that corresponds to a partial_symtab.
354    This is fast after the first time you do it.  In fact, there
355    is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
356    case inline.  */
357
358 struct symtab *
359 psymtab_to_symtab (register struct partial_symtab *pst)
360 {
361   /* If it's been looked up before, return it. */
362   if (pst->symtab)
363     return pst->symtab;
364
365   /* If it has not yet been read in, read it.  */
366   if (!pst->readin)
367     {
368       struct cleanup *back_to = make_cleanup (decrement_reading_symtab, NULL);
369       currently_reading_symtab++;
370       (*pst->read_symtab) (pst);
371       do_cleanups (back_to);
372     }
373
374   return pst->symtab;
375 }
376
377 /* Initialize entry point information for this objfile. */
378
379 void
380 init_entry_point_info (struct objfile *objfile)
381 {
382   /* Save startup file's range of PC addresses to help blockframe.c
383      decide where the bottom of the stack is.  */
384
385   if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
386     {
387       /* Executable file -- record its entry point so we'll recognize
388          the startup file because it contains the entry point.  */
389       objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
390     }
391   else
392     {
393       /* Examination of non-executable.o files.  Short-circuit this stuff.  */
394       objfile->ei.entry_point = INVALID_ENTRY_POINT;
395     }
396   objfile->ei.entry_file_lowpc = INVALID_ENTRY_LOWPC;
397   objfile->ei.entry_file_highpc = INVALID_ENTRY_HIGHPC;
398   objfile->ei.entry_func_lowpc = INVALID_ENTRY_LOWPC;
399   objfile->ei.entry_func_highpc = INVALID_ENTRY_HIGHPC;
400   objfile->ei.main_func_lowpc = INVALID_ENTRY_LOWPC;
401   objfile->ei.main_func_highpc = INVALID_ENTRY_HIGHPC;
402 }
403
404 /* Get current entry point address.  */
405
406 CORE_ADDR
407 entry_point_address (void)
408 {
409   return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
410 }
411
412 /* Remember the lowest-addressed loadable section we've seen.  
413    This function is called via bfd_map_over_sections. 
414
415    In case of equal vmas, the section with the largest size becomes the
416    lowest-addressed loadable section.
417
418    If the vmas and sizes are equal, the last section is considered the
419    lowest-addressed loadable section.  */
420
421 void
422 find_lowest_section (bfd *abfd, asection *sect, void *obj)
423 {
424   asection **lowest = (asection **) obj;
425
426   if (0 == (bfd_get_section_flags (abfd, sect) & SEC_LOAD))
427     return;
428   if (!*lowest)
429     *lowest = sect;             /* First loadable section */
430   else if (bfd_section_vma (abfd, *lowest) > bfd_section_vma (abfd, sect))
431     *lowest = sect;             /* A lower loadable section */
432   else if (bfd_section_vma (abfd, *lowest) == bfd_section_vma (abfd, sect)
433            && (bfd_section_size (abfd, (*lowest))
434                <= bfd_section_size (abfd, sect)))
435     *lowest = sect;
436 }
437
438
439 /* Build (allocate and populate) a section_addr_info struct from
440    an existing section table. */
441
442 extern struct section_addr_info *
443 build_section_addr_info_from_section_table (const struct section_table *start,
444                                             const struct section_table *end)
445 {
446   struct section_addr_info *sap;
447   const struct section_table *stp;
448   int oidx;
449
450   sap = xmalloc (sizeof (struct section_addr_info));
451   memset (sap, 0, sizeof (struct section_addr_info));
452
453   for (stp = start, oidx = 0; stp != end; stp++)
454     {
455       if (bfd_get_section_flags (stp->bfd, 
456                                  stp->the_bfd_section) & (SEC_ALLOC | SEC_LOAD)
457           && oidx < MAX_SECTIONS)
458         {
459           sap->other[oidx].addr = stp->addr;
460           sap->other[oidx].name 
461             = xstrdup (bfd_section_name (stp->bfd, stp->the_bfd_section));
462           sap->other[oidx].sectindex = stp->the_bfd_section->index;
463           oidx++;
464         }
465     }
466
467   return sap;
468 }
469
470
471 /* Free all memory allocated by build_section_addr_info_from_section_table. */
472
473 extern void
474 free_section_addr_info (struct section_addr_info *sap)
475 {
476   int idx;
477
478   for (idx = 0; idx < MAX_SECTIONS; idx++)
479     if (sap->other[idx].name)
480       xfree (sap->other[idx].name);
481   xfree (sap);
482 }
483
484
485 /* Initialize OBJFILE's sect_index_* members.  */
486 static void
487 init_objfile_sect_indices (struct objfile *objfile)
488 {
489   asection *sect;
490   int i;
491   
492   sect = bfd_get_section_by_name (objfile->obfd, ".text");
493   if (sect) 
494     objfile->sect_index_text = sect->index;
495
496   sect = bfd_get_section_by_name (objfile->obfd, ".data");
497   if (sect) 
498     objfile->sect_index_data = sect->index;
499
500   sect = bfd_get_section_by_name (objfile->obfd, ".bss");
501   if (sect) 
502     objfile->sect_index_bss = sect->index;
503
504   sect = bfd_get_section_by_name (objfile->obfd, ".rodata");
505   if (sect) 
506     objfile->sect_index_rodata = sect->index;
507
508   /* This is where things get really weird...  We MUST have valid
509      indices for the various sect_index_* members or gdb will abort.
510      So if for example, there is no ".text" section, we have to
511      accomodate that.  Except when explicitly adding symbol files at
512      some address, section_offsets contains nothing but zeros, so it
513      doesn't matter which slot in section_offsets the individual
514      sect_index_* members index into.  So if they are all zero, it is
515      safe to just point all the currently uninitialized indices to the
516      first slot. */
517
518   for (i = 0; i < objfile->num_sections; i++)
519     {
520       if (ANOFFSET (objfile->section_offsets, i) != 0)
521         {
522           break;
523         }
524     }
525   if (i == objfile->num_sections)
526     {
527       if (objfile->sect_index_text == -1)
528         objfile->sect_index_text = 0;
529       if (objfile->sect_index_data == -1)
530         objfile->sect_index_data = 0;
531       if (objfile->sect_index_bss == -1)
532         objfile->sect_index_bss = 0;
533       if (objfile->sect_index_rodata == -1)
534         objfile->sect_index_rodata = 0;
535     }
536 }
537
538
539 /* Parse the user's idea of an offset for dynamic linking, into our idea
540    of how to represent it for fast symbol reading.  This is the default 
541    version of the sym_fns.sym_offsets function for symbol readers that
542    don't need to do anything special.  It allocates a section_offsets table
543    for the objectfile OBJFILE and stuffs ADDR into all of the offsets.  */
544
545 void
546 default_symfile_offsets (struct objfile *objfile,
547                          struct section_addr_info *addrs)
548 {
549   int i;
550
551   objfile->num_sections = SECT_OFF_MAX;
552   objfile->section_offsets = (struct section_offsets *)
553     obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
554   memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
555
556   /* Now calculate offsets for section that were specified by the
557      caller. */
558   for (i = 0; i < MAX_SECTIONS && addrs->other[i].name; i++)
559     {
560       struct other_sections *osp ;
561
562       osp = &addrs->other[i] ;
563       if (osp->addr == 0)
564         continue;
565
566       /* Record all sections in offsets */
567       /* The section_offsets in the objfile are here filled in using
568          the BFD index. */
569       (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
570     }
571
572   /* Remember the bfd indexes for the .text, .data, .bss and
573      .rodata sections. */
574   init_objfile_sect_indices (objfile);
575 }
576
577
578 /* Process a symbol file, as either the main file or as a dynamically
579    loaded file.
580
581    OBJFILE is where the symbols are to be read from.
582
583    ADDRS is the list of section load addresses.  If the user has given
584    an 'add-symbol-file' command, then this is the list of offsets and
585    addresses he or she provided as arguments to the command; or, if
586    we're handling a shared library, these are the actual addresses the
587    sections are loaded at, according to the inferior's dynamic linker
588    (as gleaned by GDB's shared library code).  We convert each address
589    into an offset from the section VMA's as it appears in the object
590    file, and then call the file's sym_offsets function to convert this
591    into a format-specific offset table --- a `struct section_offsets'.
592    If ADDRS is non-zero, OFFSETS must be zero.
593
594    OFFSETS is a table of section offsets already in the right
595    format-specific representation.  NUM_OFFSETS is the number of
596    elements present in OFFSETS->offsets.  If OFFSETS is non-zero, we
597    assume this is the proper table the call to sym_offsets described
598    above would produce.  Instead of calling sym_offsets, we just dump
599    it right into objfile->section_offsets.  (When we're re-reading
600    symbols from an objfile, we don't have the original load address
601    list any more; all we have is the section offset table.)  If
602    OFFSETS is non-zero, ADDRS must be zero.
603
604    MAINLINE is nonzero if this is the main symbol file, or zero if
605    it's an extra symbol file such as dynamically loaded code.
606
607    VERBO is nonzero if the caller has printed a verbose message about
608    the symbol reading (and complaints can be more terse about it).  */
609
610 void
611 syms_from_objfile (struct objfile *objfile,
612                    struct section_addr_info *addrs,
613                    struct section_offsets *offsets,
614                    int num_offsets,
615                    int mainline,
616                    int verbo)
617 {
618   asection *lower_sect;
619   asection *sect;
620   CORE_ADDR lower_offset;
621   struct section_addr_info local_addr;
622   struct cleanup *old_chain;
623   int i;
624
625   gdb_assert (! (addrs && offsets));
626
627   /* If ADDRS and OFFSETS are both NULL, put together a dummy address
628      list.  We now establish the convention that an addr of zero means
629      no load address was specified. */
630   if (! addrs && ! offsets)
631     {
632       memset (&local_addr, 0, sizeof (local_addr));
633       addrs = &local_addr;
634     }
635
636   /* Now either addrs or offsets is non-zero.  */
637
638   init_entry_point_info (objfile);
639   find_sym_fns (objfile);
640
641   if (objfile->sf == NULL)
642     return;     /* No symbols. */
643
644   /* Make sure that partially constructed symbol tables will be cleaned up
645      if an error occurs during symbol reading.  */
646   old_chain = make_cleanup_free_objfile (objfile);
647
648   if (mainline)
649     {
650       /* We will modify the main symbol table, make sure that all its users
651          will be cleaned up if an error occurs during symbol reading.  */
652       make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
653
654       /* Since no error yet, throw away the old symbol table.  */
655
656       if (symfile_objfile != NULL)
657         {
658           free_objfile (symfile_objfile);
659           symfile_objfile = NULL;
660         }
661
662       /* Currently we keep symbols from the add-symbol-file command.
663          If the user wants to get rid of them, they should do "symbol-file"
664          without arguments first.  Not sure this is the best behavior
665          (PR 2207).  */
666
667       (*objfile->sf->sym_new_init) (objfile);
668     }
669
670   /* Convert addr into an offset rather than an absolute address.
671      We find the lowest address of a loaded segment in the objfile,
672      and assume that <addr> is where that got loaded.
673
674      We no longer warn if the lowest section is not a text segment (as
675      happens for the PA64 port.  */
676   if (!mainline)
677     {
678       /* Find lowest loadable section to be used as starting point for 
679          continguous sections. FIXME!! won't work without call to find
680          .text first, but this assumes text is lowest section. */
681       lower_sect = bfd_get_section_by_name (objfile->obfd, ".text");
682       if (lower_sect == NULL)
683         bfd_map_over_sections (objfile->obfd, find_lowest_section,
684                                &lower_sect);
685       if (lower_sect == NULL)
686         warning ("no loadable sections found in added symbol-file %s",
687                  objfile->name);
688       else 
689         if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
690           warning ("Lowest section in %s is %s at %s",
691                    objfile->name,
692                    bfd_section_name (objfile->obfd, lower_sect),
693                    paddr (bfd_section_vma (objfile->obfd, lower_sect)));
694       if (lower_sect != NULL)
695         lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
696       else
697         lower_offset = 0;
698  
699       /* Calculate offsets for the loadable sections.
700          FIXME! Sections must be in order of increasing loadable section
701          so that contiguous sections can use the lower-offset!!!
702  
703          Adjust offsets if the segments are not contiguous.
704          If the section is contiguous, its offset should be set to
705          the offset of the highest loadable section lower than it
706          (the loadable section directly below it in memory).
707          this_offset = lower_offset = lower_addr - lower_orig_addr */
708
709       /* Calculate offsets for sections. */
710       if (addrs)
711         for (i=0 ; i < MAX_SECTIONS && addrs->other[i].name; i++)
712           {
713             if (addrs->other[i].addr != 0)
714               {
715                 sect = bfd_get_section_by_name (objfile->obfd,
716                                                 addrs->other[i].name);
717                 if (sect)
718                   {
719                     addrs->other[i].addr
720                       -= bfd_section_vma (objfile->obfd, sect);
721                     lower_offset = addrs->other[i].addr;
722                     /* This is the index used by BFD. */
723                     addrs->other[i].sectindex = sect->index ;
724                   }
725                 else
726                   {
727                     warning ("section %s not found in %s",
728                              addrs->other[i].name, 
729                              objfile->name);
730                     addrs->other[i].addr = 0;
731                   }
732               }
733             else
734               addrs->other[i].addr = lower_offset;
735           }
736     }
737
738   /* Initialize symbol reading routines for this objfile, allow complaints to
739      appear for this new file, and record how verbose to be, then do the
740      initial symbol reading for this file. */
741
742   (*objfile->sf->sym_init) (objfile);
743   clear_complaints (&symfile_complaints, 1, verbo);
744
745   if (addrs)
746     (*objfile->sf->sym_offsets) (objfile, addrs);
747   else
748     {
749       size_t size = SIZEOF_N_SECTION_OFFSETS (num_offsets);
750
751       /* Just copy in the offset table directly as given to us.  */
752       objfile->num_sections = num_offsets;
753       objfile->section_offsets
754         = ((struct section_offsets *)
755            obstack_alloc (&objfile->psymbol_obstack, size));
756       memcpy (objfile->section_offsets, offsets, size);
757
758       init_objfile_sect_indices (objfile);
759     }
760
761 #ifndef IBM6000_TARGET
762   /* This is a SVR4/SunOS specific hack, I think.  In any event, it
763      screws RS/6000.  sym_offsets should be doing this sort of thing,
764      because it knows the mapping between bfd sections and
765      section_offsets.  */
766   /* This is a hack.  As far as I can tell, section offsets are not
767      target dependent.  They are all set to addr with a couple of
768      exceptions.  The exceptions are sysvr4 shared libraries, whose
769      offsets are kept in solib structures anyway and rs6000 xcoff
770      which handles shared libraries in a completely unique way.
771
772      Section offsets are built similarly, except that they are built
773      by adding addr in all cases because there is no clear mapping
774      from section_offsets into actual sections.  Note that solib.c
775      has a different algorithm for finding section offsets.
776
777      These should probably all be collapsed into some target
778      independent form of shared library support.  FIXME.  */
779
780   if (addrs)
781     {
782       struct obj_section *s;
783
784         /* Map section offsets in "addr" back to the object's 
785            sections by comparing the section names with bfd's 
786            section names.  Then adjust the section address by
787            the offset. */ /* for gdb/13815 */
788  
789       ALL_OBJFILE_OSECTIONS (objfile, s)
790         {
791           CORE_ADDR s_addr = 0;
792           int i;
793
794             for (i = 0; 
795                  !s_addr && i < MAX_SECTIONS && addrs->other[i].name;
796                  i++)
797               if (strcmp (bfd_section_name (s->objfile->obfd, 
798                                             s->the_bfd_section), 
799                           addrs->other[i].name) == 0)
800                 s_addr = addrs->other[i].addr; /* end added for gdb/13815 */
801  
802           s->addr -= s->offset;
803           s->addr += s_addr;
804           s->endaddr -= s->offset;
805           s->endaddr += s_addr;
806           s->offset += s_addr;
807         }
808     }
809 #endif /* not IBM6000_TARGET */
810
811   (*objfile->sf->sym_read) (objfile, mainline);
812
813   /* Don't allow char * to have a typename (else would get caddr_t).
814      Ditto void *.  FIXME: Check whether this is now done by all the
815      symbol readers themselves (many of them now do), and if so remove
816      it from here.  */
817
818   TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
819   TYPE_NAME (lookup_pointer_type (builtin_type_void)) = 0;
820
821   /* Mark the objfile has having had initial symbol read attempted.  Note
822      that this does not mean we found any symbols... */
823
824   objfile->flags |= OBJF_SYMS;
825
826   /* Discard cleanups as symbol reading was successful.  */
827
828   discard_cleanups (old_chain);
829
830   /* Call this after reading in a new symbol table to give target
831      dependent code a crack at the new symbols.  For instance, this
832      could be used to update the values of target-specific symbols GDB
833      needs to keep track of (such as _sigtramp, or whatever).  */
834
835   TARGET_SYMFILE_POSTREAD (objfile);
836 }
837
838 /* Perform required actions after either reading in the initial
839    symbols for a new objfile, or mapping in the symbols from a reusable
840    objfile. */
841
842 void
843 new_symfile_objfile (struct objfile *objfile, int mainline, int verbo)
844 {
845
846   /* If this is the main symbol file we have to clean up all users of the
847      old main symbol file. Otherwise it is sufficient to fixup all the
848      breakpoints that may have been redefined by this symbol file.  */
849   if (mainline)
850     {
851       /* OK, make it the "real" symbol file.  */
852       symfile_objfile = objfile;
853
854       clear_symtab_users ();
855     }
856   else
857     {
858       breakpoint_re_set ();
859     }
860
861   /* We're done reading the symbol file; finish off complaints.  */
862   clear_complaints (&symfile_complaints, 0, verbo);
863 }
864
865 /* Process a symbol file, as either the main file or as a dynamically
866    loaded file.
867
868    NAME is the file name (which will be tilde-expanded and made
869    absolute herein) (but we don't free or modify NAME itself).
870
871    FROM_TTY says how verbose to be.
872
873    MAINLINE specifies whether this is the main symbol file, or whether
874    it's an extra symbol file such as dynamically loaded code.
875
876    ADDRS, OFFSETS, and NUM_OFFSETS are as described for
877    syms_from_objfile, above.  ADDRS is ignored when MAINLINE is
878    non-zero.
879
880    Upon success, returns a pointer to the objfile that was added.
881    Upon failure, jumps back to command level (never returns). */
882 static struct objfile *
883 symbol_file_add_with_addrs_or_offsets (char *name, int from_tty,
884                                        struct section_addr_info *addrs,
885                                        struct section_offsets *offsets,
886                                        int num_offsets,
887                                        int mainline, int flags)
888 {
889   struct objfile *objfile;
890   struct partial_symtab *psymtab;
891   char *debugfile;
892   bfd *abfd;
893   struct section_addr_info orig_addrs;
894   
895   if (addrs)
896     orig_addrs = *addrs;
897
898   /* Open a bfd for the file, and give user a chance to burp if we'd be
899      interactively wiping out any existing symbols.  */
900
901   abfd = symfile_bfd_open (name);
902
903   if ((have_full_symbols () || have_partial_symbols ())
904       && mainline
905       && from_tty
906       && !query ("Load new symbol table from \"%s\"? ", name))
907     error ("Not confirmed.");
908
909   objfile = allocate_objfile (abfd, flags);
910
911   /* If the objfile uses a mapped symbol file, and we have a psymtab for
912      it, then skip reading any symbols at this time. */
913
914   if ((objfile->flags & OBJF_MAPPED) && (objfile->flags & OBJF_SYMS))
915     {
916       /* We mapped in an existing symbol table file that already has had
917          initial symbol reading performed, so we can skip that part.  Notify
918          the user that instead of reading the symbols, they have been mapped.
919        */
920       if (from_tty || info_verbose)
921         {
922           printf_filtered ("Mapped symbols for %s...", name);
923           wrap_here ("");
924           gdb_flush (gdb_stdout);
925         }
926       init_entry_point_info (objfile);
927       find_sym_fns (objfile);
928     }
929   else
930     {
931       /* We either created a new mapped symbol table, mapped an existing
932          symbol table file which has not had initial symbol reading
933          performed, or need to read an unmapped symbol table. */
934       if (from_tty || info_verbose)
935         {
936           if (pre_add_symbol_hook)
937             pre_add_symbol_hook (name);
938           else
939             {
940               printf_filtered ("Reading symbols from %s...", name);
941               wrap_here ("");
942               gdb_flush (gdb_stdout);
943             }
944         }
945       syms_from_objfile (objfile, addrs, offsets, num_offsets,
946                          mainline, from_tty);
947     }
948
949   /* We now have at least a partial symbol table.  Check to see if the
950      user requested that all symbols be read on initial access via either
951      the gdb startup command line or on a per symbol file basis.  Expand
952      all partial symbol tables for this objfile if so. */
953
954   if ((flags & OBJF_READNOW) || readnow_symbol_files)
955     {
956       if (from_tty || info_verbose)
957         {
958           printf_filtered ("expanding to full symbols...");
959           wrap_here ("");
960           gdb_flush (gdb_stdout);
961         }
962
963       for (psymtab = objfile->psymtabs;
964            psymtab != NULL;
965            psymtab = psymtab->next)
966         {
967           psymtab_to_symtab (psymtab);
968         }
969     }
970
971   debugfile = find_separate_debug_file (objfile);
972   if (debugfile)
973     {
974       if (addrs != NULL)
975         {
976           objfile->separate_debug_objfile
977             = symbol_file_add (debugfile, from_tty, &orig_addrs, 0, flags);
978         }
979       else
980         {
981           objfile->separate_debug_objfile
982             = symbol_file_add (debugfile, from_tty, NULL, 0, flags);
983         }
984       objfile->separate_debug_objfile->separate_debug_objfile_backlink
985         = objfile;
986       
987       /* Put the separate debug object before the normal one, this is so that
988          usage of the ALL_OBJFILES_SAFE macro will stay safe. */
989       put_objfile_before (objfile->separate_debug_objfile, objfile);
990       
991       xfree (debugfile);
992     }
993   
994   if (!have_partial_symbols () && !have_full_symbols ())
995     {
996       wrap_here ("");
997       printf_filtered ("(no debugging symbols found)...");
998       wrap_here ("");
999     }
1000
1001   if (from_tty || info_verbose)
1002     {
1003       if (post_add_symbol_hook)
1004         post_add_symbol_hook ();
1005       else
1006         {
1007           printf_filtered ("done.\n");
1008         }
1009     }
1010
1011   /* We print some messages regardless of whether 'from_tty ||
1012      info_verbose' is true, so make sure they go out at the right
1013      time.  */
1014   gdb_flush (gdb_stdout);
1015
1016   if (objfile->sf == NULL)
1017     return objfile;     /* No symbols. */
1018
1019   new_symfile_objfile (objfile, mainline, from_tty);
1020
1021   if (target_new_objfile_hook)
1022     target_new_objfile_hook (objfile);
1023
1024   return (objfile);
1025 }
1026
1027
1028 /* Process a symbol file, as either the main file or as a dynamically
1029    loaded file.  See symbol_file_add_with_addrs_or_offsets's comments
1030    for details.  */
1031 struct objfile *
1032 symbol_file_add (char *name, int from_tty, struct section_addr_info *addrs,
1033                  int mainline, int flags)
1034 {
1035   return symbol_file_add_with_addrs_or_offsets (name, from_tty, addrs, 0, 0, 
1036                                                 mainline, flags);
1037 }
1038
1039
1040 /* Call symbol_file_add() with default values and update whatever is
1041    affected by the loading of a new main().
1042    Used when the file is supplied in the gdb command line
1043    and by some targets with special loading requirements.
1044    The auxiliary function, symbol_file_add_main_1(), has the flags
1045    argument for the switches that can only be specified in the symbol_file
1046    command itself.  */
1047    
1048 void
1049 symbol_file_add_main (char *args, int from_tty)
1050 {
1051   symbol_file_add_main_1 (args, from_tty, 0);
1052 }
1053
1054 static void
1055 symbol_file_add_main_1 (char *args, int from_tty, int flags)
1056 {
1057   symbol_file_add (args, from_tty, NULL, 1, flags);
1058
1059 #ifdef HPUXHPPA
1060   RESET_HP_UX_GLOBALS ();
1061 #endif
1062
1063   /* Getting new symbols may change our opinion about
1064      what is frameless.  */
1065   reinit_frame_cache ();
1066
1067   set_initial_language ();
1068 }
1069
1070 void
1071 symbol_file_clear (int from_tty)
1072 {
1073   if ((have_full_symbols () || have_partial_symbols ())
1074       && from_tty
1075       && !query ("Discard symbol table from `%s'? ",
1076                  symfile_objfile->name))
1077     error ("Not confirmed.");
1078     free_all_objfiles ();
1079
1080     /* solib descriptors may have handles to objfiles.  Since their
1081        storage has just been released, we'd better wipe the solib
1082        descriptors as well.
1083      */
1084 #if defined(SOLIB_RESTART)
1085     SOLIB_RESTART ();
1086 #endif
1087
1088     symfile_objfile = NULL;
1089     if (from_tty)
1090       printf_unfiltered ("No symbol file now.\n");
1091 #ifdef HPUXHPPA
1092     RESET_HP_UX_GLOBALS ();
1093 #endif
1094 }
1095
1096 static char *
1097 get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
1098 {
1099   asection *sect;
1100   bfd_size_type debuglink_size;
1101   unsigned long crc32;
1102   char *contents;
1103   int crc_offset;
1104   unsigned char *p;
1105   
1106   sect = bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink");
1107
1108   if (sect == NULL)
1109     return NULL;
1110
1111   debuglink_size = bfd_section_size (objfile->obfd, sect);
1112   
1113   contents = xmalloc (debuglink_size);
1114   bfd_get_section_contents (objfile->obfd, sect, contents,
1115                             (file_ptr)0, (bfd_size_type)debuglink_size);
1116
1117   /* Crc value is stored after the filename, aligned up to 4 bytes. */
1118   crc_offset = strlen (contents) + 1;
1119   crc_offset = (crc_offset + 3) & ~3;
1120
1121   crc32 = bfd_get_32 (objfile->obfd, (bfd_byte *) (contents + crc_offset));
1122   
1123   *crc32_out = crc32;
1124   return contents;
1125 }
1126
1127 static int
1128 separate_debug_file_exists (const char *name, unsigned long crc)
1129 {
1130   unsigned long file_crc = 0;
1131   int fd;
1132   char buffer[8*1024];
1133   int count;
1134
1135   fd = open (name, O_RDONLY | O_BINARY);
1136   if (fd < 0)
1137     return 0;
1138
1139   while ((count = read (fd, buffer, sizeof (buffer))) > 0)
1140     file_crc = gnu_debuglink_crc32 (file_crc, buffer, count);
1141
1142   close (fd);
1143
1144   return crc == file_crc;
1145 }
1146
1147 static char *debug_file_directory = NULL;
1148
1149 #if ! defined (DEBUG_SUBDIRECTORY)
1150 #define DEBUG_SUBDIRECTORY ".debug"
1151 #endif
1152
1153 static char *
1154 find_separate_debug_file (struct objfile *objfile)
1155 {
1156   asection *sect;
1157   char *basename;
1158   char *dir;
1159   char *debugfile;
1160   char *name_copy;
1161   bfd_size_type debuglink_size;
1162   unsigned long crc32;
1163   int i;
1164
1165   basename = get_debug_link_info (objfile, &crc32);
1166
1167   if (basename == NULL)
1168     return NULL;
1169   
1170   dir = xstrdup (objfile->name);
1171
1172   /* Strip off the final filename part, leaving the directory name,
1173      followed by a slash.  Objfile names should always be absolute and
1174      tilde-expanded, so there should always be a slash in there
1175      somewhere.  */
1176   for (i = strlen(dir) - 1; i >= 0; i--)
1177     {
1178       if (IS_DIR_SEPARATOR (dir[i]))
1179         break;
1180     }
1181   gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
1182   dir[i+1] = '\0';
1183   
1184   debugfile = alloca (strlen (debug_file_directory) + 1
1185                       + strlen (dir)
1186                       + strlen (DEBUG_SUBDIRECTORY)
1187                       + strlen ("/")
1188                       + strlen (basename) 
1189                       + 1);
1190
1191   /* First try in the same directory as the original file.  */
1192   strcpy (debugfile, dir);
1193   strcat (debugfile, basename);
1194
1195   if (separate_debug_file_exists (debugfile, crc32))
1196     {
1197       xfree (basename);
1198       xfree (dir);
1199       return xstrdup (debugfile);
1200     }
1201   
1202   /* Then try in the subdirectory named DEBUG_SUBDIRECTORY.  */
1203   strcpy (debugfile, dir);
1204   strcat (debugfile, DEBUG_SUBDIRECTORY);
1205   strcat (debugfile, "/");
1206   strcat (debugfile, basename);
1207
1208   if (separate_debug_file_exists (debugfile, crc32))
1209     {
1210       xfree (basename);
1211       xfree (dir);
1212       return xstrdup (debugfile);
1213     }
1214   
1215   /* Then try in the global debugfile directory.  */
1216   strcpy (debugfile, debug_file_directory);
1217   strcat (debugfile, "/");
1218   strcat (debugfile, dir);
1219   strcat (debugfile, basename);
1220
1221   if (separate_debug_file_exists (debugfile, crc32))
1222     {
1223       xfree (basename);
1224       xfree (dir);
1225       return xstrdup (debugfile);
1226     }
1227   
1228   xfree (basename);
1229   xfree (dir);
1230   return NULL;
1231 }
1232
1233
1234 /* This is the symbol-file command.  Read the file, analyze its
1235    symbols, and add a struct symtab to a symtab list.  The syntax of
1236    the command is rather bizarre--(1) buildargv implements various
1237    quoting conventions which are undocumented and have little or
1238    nothing in common with the way things are quoted (or not quoted)
1239    elsewhere in GDB, (2) options are used, which are not generally
1240    used in GDB (perhaps "set mapped on", "set readnow on" would be
1241    better), (3) the order of options matters, which is contrary to GNU
1242    conventions (because it is confusing and inconvenient).  */
1243 /* Note: ezannoni 2000-04-17. This function used to have support for
1244    rombug (see remote-os9k.c). It consisted of a call to target_link()
1245    (target.c) to get the address of the text segment from the target,
1246    and pass that to symbol_file_add(). This is no longer supported. */
1247
1248 void
1249 symbol_file_command (char *args, int from_tty)
1250 {
1251   char **argv;
1252   char *name = NULL;
1253   struct cleanup *cleanups;
1254   int flags = OBJF_USERLOADED;
1255
1256   dont_repeat ();
1257
1258   if (args == NULL)
1259     {
1260       symbol_file_clear (from_tty);
1261     }
1262   else
1263     {
1264       if ((argv = buildargv (args)) == NULL)
1265         {
1266           nomem (0);
1267         }
1268       cleanups = make_cleanup_freeargv (argv);
1269       while (*argv != NULL)
1270         {
1271           if (STREQ (*argv, "-mapped"))
1272             flags |= OBJF_MAPPED;
1273           else 
1274             if (STREQ (*argv, "-readnow"))
1275               flags |= OBJF_READNOW;
1276             else 
1277               if (**argv == '-')
1278                 error ("unknown option `%s'", *argv);
1279               else
1280                 {
1281                   name = *argv;
1282
1283                   symbol_file_add_main_1 (name, from_tty, flags);
1284                 }
1285           argv++;
1286         }
1287
1288       if (name == NULL)
1289         {
1290           error ("no symbol file name was specified");
1291         }
1292       do_cleanups (cleanups);
1293     }
1294 }
1295
1296 /* Set the initial language.
1297
1298    A better solution would be to record the language in the psymtab when reading
1299    partial symbols, and then use it (if known) to set the language.  This would
1300    be a win for formats that encode the language in an easily discoverable place,
1301    such as DWARF.  For stabs, we can jump through hoops looking for specially
1302    named symbols or try to intuit the language from the specific type of stabs
1303    we find, but we can't do that until later when we read in full symbols.
1304    FIXME.  */
1305
1306 static void
1307 set_initial_language (void)
1308 {
1309   struct partial_symtab *pst;
1310   enum language lang = language_unknown;
1311
1312   pst = find_main_psymtab ();
1313   if (pst != NULL)
1314     {
1315       if (pst->filename != NULL)
1316         {
1317           lang = deduce_language_from_filename (pst->filename);
1318         }
1319       if (lang == language_unknown)
1320         {
1321           /* Make C the default language */
1322           lang = language_c;
1323         }
1324       set_language (lang);
1325       expected_language = current_language;     /* Don't warn the user */
1326     }
1327 }
1328
1329 /* Open file specified by NAME and hand it off to BFD for preliminary
1330    analysis.  Result is a newly initialized bfd *, which includes a newly
1331    malloc'd` copy of NAME (tilde-expanded and made absolute).
1332    In case of trouble, error() is called.  */
1333
1334 bfd *
1335 symfile_bfd_open (char *name)
1336 {
1337   bfd *sym_bfd;
1338   int desc;
1339   char *absolute_name;
1340
1341
1342
1343   name = tilde_expand (name);   /* Returns 1st new malloc'd copy */
1344
1345   /* Look down path for it, allocate 2nd new malloc'd copy.  */
1346   desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
1347 #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
1348   if (desc < 0)
1349     {
1350       char *exename = alloca (strlen (name) + 5);
1351       strcat (strcpy (exename, name), ".exe");
1352       desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,
1353                     0, &absolute_name);
1354     }
1355 #endif
1356   if (desc < 0)
1357     {
1358       make_cleanup (xfree, name);
1359       perror_with_name (name);
1360     }
1361   xfree (name);                 /* Free 1st new malloc'd copy */
1362   name = absolute_name;         /* Keep 2nd malloc'd copy in bfd */
1363   /* It'll be freed in free_objfile(). */
1364
1365   sym_bfd = bfd_fdopenr (name, gnutarget, desc);
1366   if (!sym_bfd)
1367     {
1368       close (desc);
1369       make_cleanup (xfree, name);
1370       error ("\"%s\": can't open to read symbols: %s.", name,
1371              bfd_errmsg (bfd_get_error ()));
1372     }
1373   sym_bfd->cacheable = 1;
1374
1375   if (!bfd_check_format (sym_bfd, bfd_object))
1376     {
1377       /* FIXME: should be checking for errors from bfd_close (for one thing,
1378          on error it does not free all the storage associated with the
1379          bfd).  */
1380       bfd_close (sym_bfd);      /* This also closes desc */
1381       make_cleanup (xfree, name);
1382       error ("\"%s\": can't read symbols: %s.", name,
1383              bfd_errmsg (bfd_get_error ()));
1384     }
1385   return (sym_bfd);
1386 }
1387
1388 /* Return the section index for the given section name. Return -1 if
1389    the section was not found. */
1390 int
1391 get_section_index (struct objfile *objfile, char *section_name)
1392 {
1393   asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
1394   if (sect)
1395     return sect->index;
1396   else
1397     return -1;
1398 }
1399
1400 /* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
1401    startup by the _initialize routine in each object file format reader,
1402    to register information about each format the the reader is prepared
1403    to handle. */
1404
1405 void
1406 add_symtab_fns (struct sym_fns *sf)
1407 {
1408   sf->next = symtab_fns;
1409   symtab_fns = sf;
1410 }
1411
1412
1413 /* Initialize to read symbols from the symbol file sym_bfd.  It either
1414    returns or calls error().  The result is an initialized struct sym_fns
1415    in the objfile structure, that contains cached information about the
1416    symbol file.  */
1417
1418 static void
1419 find_sym_fns (struct objfile *objfile)
1420 {
1421   struct sym_fns *sf;
1422   enum bfd_flavour our_flavour = bfd_get_flavour (objfile->obfd);
1423   char *our_target = bfd_get_target (objfile->obfd);
1424
1425   if (our_flavour == bfd_target_srec_flavour
1426       || our_flavour == bfd_target_ihex_flavour
1427       || our_flavour == bfd_target_tekhex_flavour)
1428     return;     /* No symbols. */
1429
1430   /* Special kludge for apollo.  See dstread.c.  */
1431   if (STREQN (our_target, "apollo", 6))
1432     our_flavour = (enum bfd_flavour) -2;
1433
1434   for (sf = symtab_fns; sf != NULL; sf = sf->next)
1435     {
1436       if (our_flavour == sf->sym_flavour)
1437         {
1438           objfile->sf = sf;
1439           return;
1440         }
1441     }
1442   error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
1443          bfd_get_target (objfile->obfd));
1444 }
1445 \f
1446 /* This function runs the load command of our current target.  */
1447
1448 static void
1449 load_command (char *arg, int from_tty)
1450 {
1451   if (arg == NULL)
1452     arg = get_exec_file (1);
1453   target_load (arg, from_tty);
1454
1455   /* After re-loading the executable, we don't really know which
1456      overlays are mapped any more.  */
1457   overlay_cache_invalid = 1;
1458 }
1459
1460 /* This version of "load" should be usable for any target.  Currently
1461    it is just used for remote targets, not inftarg.c or core files,
1462    on the theory that only in that case is it useful.
1463
1464    Avoiding xmodem and the like seems like a win (a) because we don't have
1465    to worry about finding it, and (b) On VMS, fork() is very slow and so
1466    we don't want to run a subprocess.  On the other hand, I'm not sure how
1467    performance compares.  */
1468
1469 static int download_write_size = 512;
1470 static int validate_download = 0;
1471
1472 /* Callback service function for generic_load (bfd_map_over_sections).  */
1473
1474 static void
1475 add_section_size_callback (bfd *abfd, asection *asec, void *data)
1476 {
1477   bfd_size_type *sum = data;
1478
1479   *sum += bfd_get_section_size_before_reloc (asec);
1480 }
1481
1482 /* Opaque data for load_section_callback.  */
1483 struct load_section_data {
1484   unsigned long load_offset;
1485   unsigned long write_count;
1486   unsigned long data_count;
1487   bfd_size_type total_size;
1488 };
1489
1490 /* Callback service function for generic_load (bfd_map_over_sections).  */
1491
1492 static void
1493 load_section_callback (bfd *abfd, asection *asec, void *data)
1494 {
1495   struct load_section_data *args = data;
1496
1497   if (bfd_get_section_flags (abfd, asec) & SEC_LOAD)
1498     {
1499       bfd_size_type size = bfd_get_section_size_before_reloc (asec);
1500       if (size > 0)
1501         {
1502           char *buffer;
1503           struct cleanup *old_chain;
1504           CORE_ADDR lma = bfd_section_lma (abfd, asec) + args->load_offset;
1505           bfd_size_type block_size;
1506           int err;
1507           const char *sect_name = bfd_get_section_name (abfd, asec);
1508           bfd_size_type sent;
1509
1510           if (download_write_size > 0 && size > download_write_size)
1511             block_size = download_write_size;
1512           else
1513             block_size = size;
1514
1515           buffer = xmalloc (size);
1516           old_chain = make_cleanup (xfree, buffer);
1517
1518           /* Is this really necessary?  I guess it gives the user something
1519              to look at during a long download.  */
1520           ui_out_message (uiout, 0, "Loading section %s, size 0x%s lma 0x%s\n",
1521                           sect_name, paddr_nz (size), paddr_nz (lma));
1522
1523           bfd_get_section_contents (abfd, asec, buffer, 0, size);
1524
1525           sent = 0;
1526           do
1527             {
1528               int len;
1529               bfd_size_type this_transfer = size - sent;
1530
1531               if (this_transfer >= block_size)
1532                 this_transfer = block_size;
1533               len = target_write_memory_partial (lma, buffer,
1534                                                  this_transfer, &err);
1535               if (err)
1536                 break;
1537               if (validate_download)
1538                 {
1539                   /* Broken memories and broken monitors manifest
1540                      themselves here when bring new computers to
1541                      life.  This doubles already slow downloads.  */
1542                   /* NOTE: cagney/1999-10-18: A more efficient
1543                      implementation might add a verify_memory()
1544                      method to the target vector and then use
1545                      that.  remote.c could implement that method
1546                      using the ``qCRC'' packet.  */
1547                   char *check = xmalloc (len);
1548                   struct cleanup *verify_cleanups = 
1549                     make_cleanup (xfree, check);
1550
1551                   if (target_read_memory (lma, check, len) != 0)
1552                     error ("Download verify read failed at 0x%s",
1553                            paddr (lma));
1554                   if (memcmp (buffer, check, len) != 0)
1555                     error ("Download verify compare failed at 0x%s",
1556                            paddr (lma));
1557                   do_cleanups (verify_cleanups);
1558                 }
1559               args->data_count += len;
1560               lma += len;
1561               buffer += len;
1562               args->write_count += 1;
1563               sent += len;
1564               if (quit_flag
1565                   || (ui_load_progress_hook != NULL
1566                       && ui_load_progress_hook (sect_name, sent)))
1567                 error ("Canceled the download");
1568
1569               if (show_load_progress != NULL)
1570                 show_load_progress (sect_name, sent, size, 
1571                                     args->data_count, args->total_size);
1572             }
1573           while (sent < size);
1574
1575           if (err != 0)
1576             error ("Memory access error while loading section %s.", sect_name);
1577
1578           do_cleanups (old_chain);
1579         }
1580     }
1581 }
1582
1583 void
1584 generic_load (char *args, int from_tty)
1585 {
1586   asection *s;
1587   bfd *loadfile_bfd;
1588   time_t start_time, end_time;  /* Start and end times of download */
1589   char *filename;
1590   struct cleanup *old_cleanups;
1591   char *offptr;
1592   struct load_section_data cbdata;
1593   CORE_ADDR entry;
1594
1595   cbdata.load_offset = 0;       /* Offset to add to vma for each section. */
1596   cbdata.write_count = 0;       /* Number of writes needed. */
1597   cbdata.data_count = 0;        /* Number of bytes written to target memory. */
1598   cbdata.total_size = 0;        /* Total size of all bfd sectors. */
1599
1600   /* Parse the input argument - the user can specify a load offset as
1601      a second argument. */
1602   filename = xmalloc (strlen (args) + 1);
1603   old_cleanups = make_cleanup (xfree, filename);
1604   strcpy (filename, args);
1605   offptr = strchr (filename, ' ');
1606   if (offptr != NULL)
1607     {
1608       char *endptr;
1609
1610       cbdata.load_offset = strtoul (offptr, &endptr, 0);
1611       if (offptr == endptr)
1612         error ("Invalid download offset:%s\n", offptr);
1613       *offptr = '\0';
1614     }
1615   else
1616     cbdata.load_offset = 0;
1617
1618   /* Open the file for loading. */
1619   loadfile_bfd = bfd_openr (filename, gnutarget);
1620   if (loadfile_bfd == NULL)
1621     {
1622       perror_with_name (filename);
1623       return;
1624     }
1625
1626   /* FIXME: should be checking for errors from bfd_close (for one thing,
1627      on error it does not free all the storage associated with the
1628      bfd).  */
1629   make_cleanup_bfd_close (loadfile_bfd);
1630
1631   if (!bfd_check_format (loadfile_bfd, bfd_object))
1632     {
1633       error ("\"%s\" is not an object file: %s", filename,
1634              bfd_errmsg (bfd_get_error ()));
1635     }
1636
1637   bfd_map_over_sections (loadfile_bfd, add_section_size_callback, 
1638                          (void *) &cbdata.total_size);
1639
1640   start_time = time (NULL);
1641
1642   bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
1643
1644   end_time = time (NULL);
1645
1646   entry = bfd_get_start_address (loadfile_bfd);
1647   ui_out_text (uiout, "Start address ");
1648   ui_out_field_fmt (uiout, "address", "0x%s", paddr_nz (entry));
1649   ui_out_text (uiout, ", load size ");
1650   ui_out_field_fmt (uiout, "load-size", "%lu", cbdata.data_count);
1651   ui_out_text (uiout, "\n");
1652   /* We were doing this in remote-mips.c, I suspect it is right
1653      for other targets too.  */
1654   write_pc (entry);
1655
1656   /* FIXME: are we supposed to call symbol_file_add or not?  According
1657      to a comment from remote-mips.c (where a call to symbol_file_add
1658      was commented out), making the call confuses GDB if more than one
1659      file is loaded in.  Some targets do (e.g., remote-vx.c) but
1660      others don't (or didn't - perhaphs they have all been deleted).  */
1661
1662   print_transfer_performance (gdb_stdout, cbdata.data_count, 
1663                               cbdata.write_count, end_time - start_time);
1664
1665   do_cleanups (old_cleanups);
1666 }
1667
1668 /* Report how fast the transfer went. */
1669
1670 /* DEPRECATED: cagney/1999-10-18: report_transfer_performance is being
1671    replaced by print_transfer_performance (with a very different
1672    function signature). */
1673
1674 void
1675 report_transfer_performance (unsigned long data_count, time_t start_time,
1676                              time_t end_time)
1677 {
1678   print_transfer_performance (gdb_stdout, data_count, 
1679                               end_time - start_time, 0);
1680 }
1681
1682 void
1683 print_transfer_performance (struct ui_file *stream,
1684                             unsigned long data_count,
1685                             unsigned long write_count,
1686                             unsigned long time_count)
1687 {
1688   ui_out_text (uiout, "Transfer rate: ");
1689   if (time_count > 0)
1690     {
1691       ui_out_field_fmt (uiout, "transfer-rate", "%lu", 
1692                         (data_count * 8) / time_count);
1693       ui_out_text (uiout, " bits/sec");
1694     }
1695   else
1696     {
1697       ui_out_field_fmt (uiout, "transferred-bits", "%lu", (data_count * 8));
1698       ui_out_text (uiout, " bits in <1 sec");    
1699     }
1700   if (write_count > 0)
1701     {
1702       ui_out_text (uiout, ", ");
1703       ui_out_field_fmt (uiout, "write-rate", "%lu", data_count / write_count);
1704       ui_out_text (uiout, " bytes/write");
1705     }
1706   ui_out_text (uiout, ".\n");
1707 }
1708
1709 /* This function allows the addition of incrementally linked object files.
1710    It does not modify any state in the target, only in the debugger.  */
1711 /* Note: ezannoni 2000-04-13 This function/command used to have a
1712    special case syntax for the rombug target (Rombug is the boot
1713    monitor for Microware's OS-9 / OS-9000, see remote-os9k.c). In the
1714    rombug case, the user doesn't need to supply a text address,
1715    instead a call to target_link() (in target.c) would supply the
1716    value to use. We are now discontinuing this type of ad hoc syntax. */
1717
1718 /* ARGSUSED */
1719 static void
1720 add_symbol_file_command (char *args, int from_tty)
1721 {
1722   char *filename = NULL;
1723   int flags = OBJF_USERLOADED;
1724   char *arg;
1725   int expecting_option = 0;
1726   int section_index = 0;
1727   int argcnt = 0;
1728   int sec_num = 0;
1729   int i;
1730   int expecting_sec_name = 0;
1731   int expecting_sec_addr = 0;
1732
1733   struct
1734   {
1735     char *name;
1736     char *value;
1737   } sect_opts[SECT_OFF_MAX];
1738
1739   struct section_addr_info section_addrs;
1740   struct cleanup *my_cleanups = make_cleanup (null_cleanup, NULL);
1741
1742   dont_repeat ();
1743
1744   if (args == NULL)
1745     error ("add-symbol-file takes a file name and an address");
1746
1747   /* Make a copy of the string that we can safely write into. */
1748   args = xstrdup (args);
1749
1750   /* Ensure section_addrs is initialized */
1751   memset (&section_addrs, 0, sizeof (section_addrs));
1752
1753   while (*args != '\000')
1754     {
1755       /* Any leading spaces? */
1756       while (isspace (*args))
1757         args++;
1758
1759       /* Point arg to the beginning of the argument. */
1760       arg = args;
1761
1762       /* Move args pointer over the argument. */
1763       while ((*args != '\000') && !isspace (*args))
1764         args++;
1765
1766       /* If there are more arguments, terminate arg and
1767          proceed past it. */
1768       if (*args != '\000')
1769         *args++ = '\000';
1770
1771       /* Now process the argument. */
1772       if (argcnt == 0)
1773         {
1774           /* The first argument is the file name. */
1775           filename = tilde_expand (arg);
1776           make_cleanup (xfree, filename);
1777         }
1778       else
1779         if (argcnt == 1)
1780           {
1781             /* The second argument is always the text address at which
1782                to load the program. */
1783             sect_opts[section_index].name = ".text";
1784             sect_opts[section_index].value = arg;
1785             section_index++;              
1786           }
1787         else
1788           {
1789             /* It's an option (starting with '-') or it's an argument
1790                to an option */
1791
1792             if (*arg == '-')
1793               {
1794                 if (strcmp (arg, "-mapped") == 0)
1795                   flags |= OBJF_MAPPED;
1796                 else 
1797                   if (strcmp (arg, "-readnow") == 0)
1798                     flags |= OBJF_READNOW;
1799                   else 
1800                     if (strcmp (arg, "-s") == 0)
1801                       {
1802                         if (section_index >= SECT_OFF_MAX)
1803                           error ("Too many sections specified.");
1804                         expecting_sec_name = 1;
1805                         expecting_sec_addr = 1;
1806                       }
1807               }
1808             else
1809               {
1810                 if (expecting_sec_name)
1811                   {
1812                     sect_opts[section_index].name = arg;
1813                     expecting_sec_name = 0;
1814                   }
1815                 else
1816                   if (expecting_sec_addr)
1817                     {
1818                       sect_opts[section_index].value = arg;
1819                       expecting_sec_addr = 0;
1820                       section_index++;            
1821                     }
1822                   else
1823                     error ("USAGE: add-symbol-file <filename> <textaddress> [-mapped] [-readnow] [-s <secname> <addr>]*");
1824               }
1825           }
1826       argcnt++;
1827     }
1828
1829   /* Print the prompt for the query below. And save the arguments into
1830      a sect_addr_info structure to be passed around to other
1831      functions.  We have to split this up into separate print
1832      statements because local_hex_string returns a local static
1833      string. */
1834  
1835   printf_filtered ("add symbol table from file \"%s\" at\n", filename);
1836   for (i = 0; i < section_index; i++)
1837     {
1838       CORE_ADDR addr;
1839       char *val = sect_opts[i].value;
1840       char *sec = sect_opts[i].name;
1841  
1842       val = sect_opts[i].value;
1843       if (val[0] == '0' && val[1] == 'x')
1844         addr = strtoul (val+2, NULL, 16);
1845       else
1846         addr = strtoul (val, NULL, 10);
1847
1848       /* Here we store the section offsets in the order they were
1849          entered on the command line. */
1850       section_addrs.other[sec_num].name = sec;
1851       section_addrs.other[sec_num].addr = addr;
1852       printf_filtered ("\t%s_addr = %s\n",
1853                        sec, 
1854                        local_hex_string ((unsigned long)addr));
1855       sec_num++;
1856
1857       /* The object's sections are initialized when a 
1858          call is made to build_objfile_section_table (objfile).
1859          This happens in reread_symbols. 
1860          At this point, we don't know what file type this is,
1861          so we can't determine what section names are valid.  */
1862     }
1863
1864   if (from_tty && (!query ("%s", "")))
1865     error ("Not confirmed.");
1866
1867   symbol_file_add (filename, from_tty, &section_addrs, 0, flags);
1868
1869   /* Getting new symbols may change our opinion about what is
1870      frameless.  */
1871   reinit_frame_cache ();
1872   do_cleanups (my_cleanups);
1873 }
1874 \f
1875 static void
1876 add_shared_symbol_files_command (char *args, int from_tty)
1877 {
1878 #ifdef ADD_SHARED_SYMBOL_FILES
1879   ADD_SHARED_SYMBOL_FILES (args, from_tty);
1880 #else
1881   error ("This command is not available in this configuration of GDB.");
1882 #endif
1883 }
1884 \f
1885 /* Re-read symbols if a symbol-file has changed.  */
1886 void
1887 reread_symbols (void)
1888 {
1889   struct objfile *objfile;
1890   long new_modtime;
1891   int reread_one = 0;
1892   struct stat new_statbuf;
1893   int res;
1894
1895   /* With the addition of shared libraries, this should be modified,
1896      the load time should be saved in the partial symbol tables, since
1897      different tables may come from different source files.  FIXME.
1898      This routine should then walk down each partial symbol table
1899      and see if the symbol table that it originates from has been changed */
1900
1901   for (objfile = object_files; objfile; objfile = objfile->next)
1902     {
1903       if (objfile->obfd)
1904         {
1905 #ifdef IBM6000_TARGET
1906           /* If this object is from a shared library, then you should
1907              stat on the library name, not member name. */
1908
1909           if (objfile->obfd->my_archive)
1910             res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
1911           else
1912 #endif
1913             res = stat (objfile->name, &new_statbuf);
1914           if (res != 0)
1915             {
1916               /* FIXME, should use print_sys_errmsg but it's not filtered. */
1917               printf_filtered ("`%s' has disappeared; keeping its symbols.\n",
1918                                objfile->name);
1919               continue;
1920             }
1921           new_modtime = new_statbuf.st_mtime;
1922           if (new_modtime != objfile->mtime)
1923             {
1924               struct cleanup *old_cleanups;
1925               struct section_offsets *offsets;
1926               int num_offsets;
1927               char *obfd_filename;
1928
1929               printf_filtered ("`%s' has changed; re-reading symbols.\n",
1930                                objfile->name);
1931
1932               /* There are various functions like symbol_file_add,
1933                  symfile_bfd_open, syms_from_objfile, etc., which might
1934                  appear to do what we want.  But they have various other
1935                  effects which we *don't* want.  So we just do stuff
1936                  ourselves.  We don't worry about mapped files (for one thing,
1937                  any mapped file will be out of date).  */
1938
1939               /* If we get an error, blow away this objfile (not sure if
1940                  that is the correct response for things like shared
1941                  libraries).  */
1942               old_cleanups = make_cleanup_free_objfile (objfile);
1943               /* We need to do this whenever any symbols go away.  */
1944               make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
1945
1946               /* Clean up any state BFD has sitting around.  We don't need
1947                  to close the descriptor but BFD lacks a way of closing the
1948                  BFD without closing the descriptor.  */
1949               obfd_filename = bfd_get_filename (objfile->obfd);
1950               if (!bfd_close (objfile->obfd))
1951                 error ("Can't close BFD for %s: %s", objfile->name,
1952                        bfd_errmsg (bfd_get_error ()));
1953               objfile->obfd = bfd_openr (obfd_filename, gnutarget);
1954               if (objfile->obfd == NULL)
1955                 error ("Can't open %s to read symbols.", objfile->name);
1956               /* bfd_openr sets cacheable to true, which is what we want.  */
1957               if (!bfd_check_format (objfile->obfd, bfd_object))
1958                 error ("Can't read symbols from %s: %s.", objfile->name,
1959                        bfd_errmsg (bfd_get_error ()));
1960
1961               /* Save the offsets, we will nuke them with the rest of the
1962                  psymbol_obstack.  */
1963               num_offsets = objfile->num_sections;
1964               offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
1965               memcpy (offsets, objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
1966
1967               /* Nuke all the state that we will re-read.  Much of the following
1968                  code which sets things to NULL really is necessary to tell
1969                  other parts of GDB that there is nothing currently there.  */
1970
1971               /* FIXME: Do we have to free a whole linked list, or is this
1972                  enough?  */
1973               if (objfile->global_psymbols.list)
1974                 xmfree (objfile->md, objfile->global_psymbols.list);
1975               memset (&objfile->global_psymbols, 0,
1976                       sizeof (objfile->global_psymbols));
1977               if (objfile->static_psymbols.list)
1978                 xmfree (objfile->md, objfile->static_psymbols.list);
1979               memset (&objfile->static_psymbols, 0,
1980                       sizeof (objfile->static_psymbols));
1981
1982               /* Free the obstacks for non-reusable objfiles */
1983               bcache_xfree (objfile->psymbol_cache);
1984               objfile->psymbol_cache = bcache_xmalloc ();
1985               bcache_xfree (objfile->macro_cache);
1986               objfile->macro_cache = bcache_xmalloc ();
1987               if (objfile->demangled_names_hash != NULL)
1988                 {
1989                   htab_delete (objfile->demangled_names_hash);
1990                   objfile->demangled_names_hash = NULL;
1991                 }
1992               obstack_free (&objfile->psymbol_obstack, 0);
1993               obstack_free (&objfile->symbol_obstack, 0);
1994               obstack_free (&objfile->type_obstack, 0);
1995               objfile->sections = NULL;
1996               objfile->symtabs = NULL;
1997               objfile->psymtabs = NULL;
1998               objfile->free_psymtabs = NULL;
1999               objfile->msymbols = NULL;
2000               objfile->minimal_symbol_count = 0;
2001               memset (&objfile->msymbol_hash, 0,
2002                       sizeof (objfile->msymbol_hash));
2003               memset (&objfile->msymbol_demangled_hash, 0,
2004                       sizeof (objfile->msymbol_demangled_hash));
2005               objfile->fundamental_types = NULL;
2006               if (objfile->sf != NULL)
2007                 {
2008                   (*objfile->sf->sym_finish) (objfile);
2009                 }
2010
2011               /* We never make this a mapped file.  */
2012               objfile->md = NULL;
2013               /* obstack_specify_allocation also initializes the obstack so
2014                  it is empty.  */
2015               objfile->psymbol_cache = bcache_xmalloc ();
2016               objfile->macro_cache = bcache_xmalloc ();
2017               obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0,
2018                                           xmalloc, xfree);
2019               obstack_specify_allocation (&objfile->symbol_obstack, 0, 0,
2020                                           xmalloc, xfree);
2021               obstack_specify_allocation (&objfile->type_obstack, 0, 0,
2022                                           xmalloc, xfree);
2023               if (build_objfile_section_table (objfile))
2024                 {
2025                   error ("Can't find the file sections in `%s': %s",
2026                          objfile->name, bfd_errmsg (bfd_get_error ()));
2027                 }
2028               terminate_minimal_symbol_table (objfile);
2029
2030               /* We use the same section offsets as from last time.  I'm not
2031                  sure whether that is always correct for shared libraries.  */
2032               objfile->section_offsets = (struct section_offsets *)
2033                 obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
2034               memcpy (objfile->section_offsets, offsets, SIZEOF_SECTION_OFFSETS);
2035               objfile->num_sections = num_offsets;
2036
2037               /* What the hell is sym_new_init for, anyway?  The concept of
2038                  distinguishing between the main file and additional files
2039                  in this way seems rather dubious.  */
2040               if (objfile == symfile_objfile)
2041                 {
2042                   (*objfile->sf->sym_new_init) (objfile);
2043 #ifdef HPUXHPPA
2044                   RESET_HP_UX_GLOBALS ();
2045 #endif
2046                 }
2047
2048               (*objfile->sf->sym_init) (objfile);
2049               clear_complaints (&symfile_complaints, 1, 1);
2050               /* The "mainline" parameter is a hideous hack; I think leaving it
2051                  zero is OK since dbxread.c also does what it needs to do if
2052                  objfile->global_psymbols.size is 0.  */
2053               (*objfile->sf->sym_read) (objfile, 0);
2054               if (!have_partial_symbols () && !have_full_symbols ())
2055                 {
2056                   wrap_here ("");
2057                   printf_filtered ("(no debugging symbols found)\n");
2058                   wrap_here ("");
2059                 }
2060               objfile->flags |= OBJF_SYMS;
2061
2062               /* We're done reading the symbol file; finish off complaints.  */
2063               clear_complaints (&symfile_complaints, 0, 1);
2064
2065               /* Getting new symbols may change our opinion about what is
2066                  frameless.  */
2067
2068               reinit_frame_cache ();
2069
2070               /* Discard cleanups as symbol reading was successful.  */
2071               discard_cleanups (old_cleanups);
2072
2073               /* If the mtime has changed between the time we set new_modtime
2074                  and now, we *want* this to be out of date, so don't call stat
2075                  again now.  */
2076               objfile->mtime = new_modtime;
2077               reread_one = 1;
2078
2079               /* Call this after reading in a new symbol table to give target
2080                  dependent code a crack at the new symbols.  For instance, this
2081                  could be used to update the values of target-specific symbols GDB
2082                  needs to keep track of (such as _sigtramp, or whatever).  */
2083
2084               TARGET_SYMFILE_POSTREAD (objfile);
2085
2086               reread_separate_symbols (objfile);
2087             }
2088         }
2089     }
2090
2091   if (reread_one)
2092     clear_symtab_users ();
2093 }
2094
2095
2096 /* Handle separate debug info for OBJFILE, which has just been
2097    re-read:
2098    - If we had separate debug info before, but now we don't, get rid
2099      of the separated objfile.
2100    - If we didn't have separated debug info before, but now we do,
2101      read in the new separated debug info file.
2102    - If the debug link points to a different file, toss the old one
2103      and read the new one.
2104    This function does *not* handle the case where objfile is still
2105    using the same separate debug info file, but that file's timestamp
2106    has changed.  That case should be handled by the loop in
2107    reread_symbols already.  */
2108 static void
2109 reread_separate_symbols (struct objfile *objfile)
2110 {
2111   char *debug_file;
2112   unsigned long crc32;
2113
2114   /* Does the updated objfile's debug info live in a
2115      separate file?  */
2116   debug_file = find_separate_debug_file (objfile);
2117
2118   if (objfile->separate_debug_objfile)
2119     {
2120       /* There are two cases where we need to get rid of
2121          the old separated debug info objfile:
2122          - if the new primary objfile doesn't have
2123          separated debug info, or
2124          - if the new primary objfile has separate debug
2125          info, but it's under a different filename.
2126  
2127          If the old and new objfiles both have separate
2128          debug info, under the same filename, then we're
2129          okay --- if the separated file's contents have
2130          changed, we will have caught that when we
2131          visited it in this function's outermost
2132          loop.  */
2133       if (! debug_file
2134           || strcmp (debug_file, objfile->separate_debug_objfile->name) != 0)
2135         free_objfile (objfile->separate_debug_objfile);
2136     }
2137
2138   /* If the new objfile has separate debug info, and we
2139      haven't loaded it already, do so now.  */
2140   if (debug_file
2141       && ! objfile->separate_debug_objfile)
2142     {
2143       /* Use the same section offset table as objfile itself.
2144          Preserve the flags from objfile that make sense.  */
2145       objfile->separate_debug_objfile
2146         = (symbol_file_add_with_addrs_or_offsets
2147            (debug_file,
2148             info_verbose, /* from_tty: Don't override the default. */
2149             0, /* No addr table.  */
2150             objfile->section_offsets, objfile->num_sections,
2151             0, /* Not mainline.  See comments about this above.  */
2152             objfile->flags & (OBJF_MAPPED | OBJF_REORDERED
2153                               | OBJF_SHARED | OBJF_READNOW
2154                               | OBJF_USERLOADED)));
2155       objfile->separate_debug_objfile->separate_debug_objfile_backlink
2156         = objfile;
2157     }
2158 }
2159
2160
2161 \f
2162
2163
2164 typedef struct
2165 {
2166   char *ext;
2167   enum language lang;
2168 }
2169 filename_language;
2170
2171 static filename_language *filename_language_table;
2172 static int fl_table_size, fl_table_next;
2173
2174 static void
2175 add_filename_language (char *ext, enum language lang)
2176 {
2177   if (fl_table_next >= fl_table_size)
2178     {
2179       fl_table_size += 10;
2180       filename_language_table = 
2181         xrealloc (filename_language_table,
2182                   fl_table_size * sizeof (*filename_language_table));
2183     }
2184
2185   filename_language_table[fl_table_next].ext = xstrdup (ext);
2186   filename_language_table[fl_table_next].lang = lang;
2187   fl_table_next++;
2188 }
2189
2190 static char *ext_args;
2191
2192 static void
2193 set_ext_lang_command (char *args, int from_tty)
2194 {
2195   int i;
2196   char *cp = ext_args;
2197   enum language lang;
2198
2199   /* First arg is filename extension, starting with '.' */
2200   if (*cp != '.')
2201     error ("'%s': Filename extension must begin with '.'", ext_args);
2202
2203   /* Find end of first arg.  */
2204   while (*cp && !isspace (*cp))
2205     cp++;
2206
2207   if (*cp == '\0')
2208     error ("'%s': two arguments required -- filename extension and language",
2209            ext_args);
2210
2211   /* Null-terminate first arg */
2212   *cp++ = '\0';
2213
2214   /* Find beginning of second arg, which should be a source language.  */
2215   while (*cp && isspace (*cp))
2216     cp++;
2217
2218   if (*cp == '\0')
2219     error ("'%s': two arguments required -- filename extension and language",
2220            ext_args);
2221
2222   /* Lookup the language from among those we know.  */
2223   lang = language_enum (cp);
2224
2225   /* Now lookup the filename extension: do we already know it?  */
2226   for (i = 0; i < fl_table_next; i++)
2227     if (0 == strcmp (ext_args, filename_language_table[i].ext))
2228       break;
2229
2230   if (i >= fl_table_next)
2231     {
2232       /* new file extension */
2233       add_filename_language (ext_args, lang);
2234     }
2235   else
2236     {
2237       /* redefining a previously known filename extension */
2238
2239       /* if (from_tty) */
2240       /*   query ("Really make files of type %s '%s'?", */
2241       /*          ext_args, language_str (lang));           */
2242
2243       xfree (filename_language_table[i].ext);
2244       filename_language_table[i].ext = xstrdup (ext_args);
2245       filename_language_table[i].lang = lang;
2246     }
2247 }
2248
2249 static void
2250 info_ext_lang_command (char *args, int from_tty)
2251 {
2252   int i;
2253
2254   printf_filtered ("Filename extensions and the languages they represent:");
2255   printf_filtered ("\n\n");
2256   for (i = 0; i < fl_table_next; i++)
2257     printf_filtered ("\t%s\t- %s\n",
2258                      filename_language_table[i].ext,
2259                      language_str (filename_language_table[i].lang));
2260 }
2261
2262 static void
2263 init_filename_language_table (void)
2264 {
2265   if (fl_table_size == 0)       /* protect against repetition */
2266     {
2267       fl_table_size = 20;
2268       fl_table_next = 0;
2269       filename_language_table =
2270         xmalloc (fl_table_size * sizeof (*filename_language_table));
2271       add_filename_language (".c", language_c);
2272       add_filename_language (".C", language_cplus);
2273       add_filename_language (".cc", language_cplus);
2274       add_filename_language (".cp", language_cplus);
2275       add_filename_language (".cpp", language_cplus);
2276       add_filename_language (".cxx", language_cplus);
2277       add_filename_language (".c++", language_cplus);
2278       add_filename_language (".java", language_java);
2279       add_filename_language (".class", language_java);
2280       add_filename_language (".m", language_objc);
2281       add_filename_language (".f", language_fortran);
2282       add_filename_language (".F", language_fortran);
2283       add_filename_language (".s", language_asm);
2284       add_filename_language (".S", language_asm);
2285       add_filename_language (".pas", language_pascal);
2286       add_filename_language (".p", language_pascal);
2287       add_filename_language (".pp", language_pascal);
2288     }
2289 }
2290
2291 enum language
2292 deduce_language_from_filename (char *filename)
2293 {
2294   int i;
2295   char *cp;
2296
2297   if (filename != NULL)
2298     if ((cp = strrchr (filename, '.')) != NULL)
2299       for (i = 0; i < fl_table_next; i++)
2300         if (strcmp (cp, filename_language_table[i].ext) == 0)
2301           return filename_language_table[i].lang;
2302
2303   return language_unknown;
2304 }
2305 \f
2306 /* allocate_symtab:
2307
2308    Allocate and partly initialize a new symbol table.  Return a pointer
2309    to it.  error() if no space.
2310
2311    Caller must set these fields:
2312    LINETABLE(symtab)
2313    symtab->blockvector
2314    symtab->dirname
2315    symtab->free_code
2316    symtab->free_ptr
2317    possibly free_named_symtabs (symtab->filename);
2318  */
2319
2320 struct symtab *
2321 allocate_symtab (char *filename, struct objfile *objfile)
2322 {
2323   register struct symtab *symtab;
2324
2325   symtab = (struct symtab *)
2326     obstack_alloc (&objfile->symbol_obstack, sizeof (struct symtab));
2327   memset (symtab, 0, sizeof (*symtab));
2328   symtab->filename = obsavestring (filename, strlen (filename),
2329                                    &objfile->symbol_obstack);
2330   symtab->fullname = NULL;
2331   symtab->language = deduce_language_from_filename (filename);
2332   symtab->debugformat = obsavestring ("unknown", 7,
2333                                       &objfile->symbol_obstack);
2334
2335   /* Hook it to the objfile it comes from */
2336
2337   symtab->objfile = objfile;
2338   symtab->next = objfile->symtabs;
2339   objfile->symtabs = symtab;
2340
2341   /* FIXME: This should go away.  It is only defined for the Z8000,
2342      and the Z8000 definition of this macro doesn't have anything to
2343      do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2344      here for convenience.  */
2345 #ifdef INIT_EXTRA_SYMTAB_INFO
2346   INIT_EXTRA_SYMTAB_INFO (symtab);
2347 #endif
2348
2349   return (symtab);
2350 }
2351
2352 struct partial_symtab *
2353 allocate_psymtab (char *filename, struct objfile *objfile)
2354 {
2355   struct partial_symtab *psymtab;
2356
2357   if (objfile->free_psymtabs)
2358     {
2359       psymtab = objfile->free_psymtabs;
2360       objfile->free_psymtabs = psymtab->next;
2361     }
2362   else
2363     psymtab = (struct partial_symtab *)
2364       obstack_alloc (&objfile->psymbol_obstack,
2365                      sizeof (struct partial_symtab));
2366
2367   memset (psymtab, 0, sizeof (struct partial_symtab));
2368   psymtab->filename = obsavestring (filename, strlen (filename),
2369                                     &objfile->psymbol_obstack);
2370   psymtab->symtab = NULL;
2371
2372   /* Prepend it to the psymtab list for the objfile it belongs to.
2373      Psymtabs are searched in most recent inserted -> least recent
2374      inserted order. */
2375
2376   psymtab->objfile = objfile;
2377   psymtab->next = objfile->psymtabs;
2378   objfile->psymtabs = psymtab;
2379 #if 0
2380   {
2381     struct partial_symtab **prev_pst;
2382     psymtab->objfile = objfile;
2383     psymtab->next = NULL;
2384     prev_pst = &(objfile->psymtabs);
2385     while ((*prev_pst) != NULL)
2386       prev_pst = &((*prev_pst)->next);
2387     (*prev_pst) = psymtab;
2388   }
2389 #endif
2390
2391   return (psymtab);
2392 }
2393
2394 void
2395 discard_psymtab (struct partial_symtab *pst)
2396 {
2397   struct partial_symtab **prev_pst;
2398
2399   /* From dbxread.c:
2400      Empty psymtabs happen as a result of header files which don't
2401      have any symbols in them.  There can be a lot of them.  But this
2402      check is wrong, in that a psymtab with N_SLINE entries but
2403      nothing else is not empty, but we don't realize that.  Fixing
2404      that without slowing things down might be tricky.  */
2405
2406   /* First, snip it out of the psymtab chain */
2407
2408   prev_pst = &(pst->objfile->psymtabs);
2409   while ((*prev_pst) != pst)
2410     prev_pst = &((*prev_pst)->next);
2411   (*prev_pst) = pst->next;
2412
2413   /* Next, put it on a free list for recycling */
2414
2415   pst->next = pst->objfile->free_psymtabs;
2416   pst->objfile->free_psymtabs = pst;
2417 }
2418 \f
2419
2420 /* Reset all data structures in gdb which may contain references to symbol
2421    table data.  */
2422
2423 void
2424 clear_symtab_users (void)
2425 {
2426   /* Someday, we should do better than this, by only blowing away
2427      the things that really need to be blown.  */
2428   clear_value_history ();
2429   clear_displays ();
2430   clear_internalvars ();
2431   breakpoint_re_set ();
2432   set_default_breakpoint (0, 0, 0, 0);
2433   clear_current_source_symtab_and_line ();
2434   clear_pc_function_cache ();
2435   if (target_new_objfile_hook)
2436     target_new_objfile_hook (NULL);
2437 }
2438
2439 static void
2440 clear_symtab_users_cleanup (void *ignore)
2441 {
2442   clear_symtab_users ();
2443 }
2444
2445 /* clear_symtab_users_once:
2446
2447    This function is run after symbol reading, or from a cleanup.
2448    If an old symbol table was obsoleted, the old symbol table
2449    has been blown away, but the other GDB data structures that may 
2450    reference it have not yet been cleared or re-directed.  (The old
2451    symtab was zapped, and the cleanup queued, in free_named_symtab()
2452    below.)
2453
2454    This function can be queued N times as a cleanup, or called
2455    directly; it will do all the work the first time, and then will be a
2456    no-op until the next time it is queued.  This works by bumping a
2457    counter at queueing time.  Much later when the cleanup is run, or at
2458    the end of symbol processing (in case the cleanup is discarded), if
2459    the queued count is greater than the "done-count", we do the work
2460    and set the done-count to the queued count.  If the queued count is
2461    less than or equal to the done-count, we just ignore the call.  This
2462    is needed because reading a single .o file will often replace many
2463    symtabs (one per .h file, for example), and we don't want to reset
2464    the breakpoints N times in the user's face.
2465
2466    The reason we both queue a cleanup, and call it directly after symbol
2467    reading, is because the cleanup protects us in case of errors, but is
2468    discarded if symbol reading is successful.  */
2469
2470 #if 0
2471 /* FIXME:  As free_named_symtabs is currently a big noop this function
2472    is no longer needed.  */
2473 static void clear_symtab_users_once (void);
2474
2475 static int clear_symtab_users_queued;
2476 static int clear_symtab_users_done;
2477
2478 static void
2479 clear_symtab_users_once (void)
2480 {
2481   /* Enforce once-per-`do_cleanups'-semantics */
2482   if (clear_symtab_users_queued <= clear_symtab_users_done)
2483     return;
2484   clear_symtab_users_done = clear_symtab_users_queued;
2485
2486   clear_symtab_users ();
2487 }
2488 #endif
2489
2490 /* Delete the specified psymtab, and any others that reference it.  */
2491
2492 static void
2493 cashier_psymtab (struct partial_symtab *pst)
2494 {
2495   struct partial_symtab *ps, *pprev = NULL;
2496   int i;
2497
2498   /* Find its previous psymtab in the chain */
2499   for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2500     {
2501       if (ps == pst)
2502         break;
2503       pprev = ps;
2504     }
2505
2506   if (ps)
2507     {
2508       /* Unhook it from the chain.  */
2509       if (ps == pst->objfile->psymtabs)
2510         pst->objfile->psymtabs = ps->next;
2511       else
2512         pprev->next = ps->next;
2513
2514       /* FIXME, we can't conveniently deallocate the entries in the
2515          partial_symbol lists (global_psymbols/static_psymbols) that
2516          this psymtab points to.  These just take up space until all
2517          the psymtabs are reclaimed.  Ditto the dependencies list and
2518          filename, which are all in the psymbol_obstack.  */
2519
2520       /* We need to cashier any psymtab that has this one as a dependency... */
2521     again:
2522       for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2523         {
2524           for (i = 0; i < ps->number_of_dependencies; i++)
2525             {
2526               if (ps->dependencies[i] == pst)
2527                 {
2528                   cashier_psymtab (ps);
2529                   goto again;   /* Must restart, chain has been munged. */
2530                 }
2531             }
2532         }
2533     }
2534 }
2535
2536 /* If a symtab or psymtab for filename NAME is found, free it along
2537    with any dependent breakpoints, displays, etc.
2538    Used when loading new versions of object modules with the "add-file"
2539    command.  This is only called on the top-level symtab or psymtab's name;
2540    it is not called for subsidiary files such as .h files.
2541
2542    Return value is 1 if we blew away the environment, 0 if not.
2543    FIXME.  The return value appears to never be used.
2544
2545    FIXME.  I think this is not the best way to do this.  We should
2546    work on being gentler to the environment while still cleaning up
2547    all stray pointers into the freed symtab.  */
2548
2549 int
2550 free_named_symtabs (char *name)
2551 {
2552 #if 0
2553   /* FIXME:  With the new method of each objfile having it's own
2554      psymtab list, this function needs serious rethinking.  In particular,
2555      why was it ever necessary to toss psymtabs with specific compilation
2556      unit filenames, as opposed to all psymtabs from a particular symbol
2557      file?  -- fnf
2558      Well, the answer is that some systems permit reloading of particular
2559      compilation units.  We want to blow away any old info about these
2560      compilation units, regardless of which objfiles they arrived in. --gnu.  */
2561
2562   register struct symtab *s;
2563   register struct symtab *prev;
2564   register struct partial_symtab *ps;
2565   struct blockvector *bv;
2566   int blewit = 0;
2567
2568   /* We only wack things if the symbol-reload switch is set.  */
2569   if (!symbol_reloading)
2570     return 0;
2571
2572   /* Some symbol formats have trouble providing file names... */
2573   if (name == 0 || *name == '\0')
2574     return 0;
2575
2576   /* Look for a psymtab with the specified name.  */
2577
2578 again2:
2579   for (ps = partial_symtab_list; ps; ps = ps->next)
2580     {
2581       if (STREQ (name, ps->filename))
2582         {
2583           cashier_psymtab (ps); /* Blow it away...and its little dog, too.  */
2584           goto again2;          /* Must restart, chain has been munged */
2585         }
2586     }
2587
2588   /* Look for a symtab with the specified name.  */
2589
2590   for (s = symtab_list; s; s = s->next)
2591     {
2592       if (STREQ (name, s->filename))
2593         break;
2594       prev = s;
2595     }
2596
2597   if (s)
2598     {
2599       if (s == symtab_list)
2600         symtab_list = s->next;
2601       else
2602         prev->next = s->next;
2603
2604       /* For now, queue a delete for all breakpoints, displays, etc., whether
2605          or not they depend on the symtab being freed.  This should be
2606          changed so that only those data structures affected are deleted.  */
2607
2608       /* But don't delete anything if the symtab is empty.
2609          This test is necessary due to a bug in "dbxread.c" that
2610          causes empty symtabs to be created for N_SO symbols that
2611          contain the pathname of the object file.  (This problem
2612          has been fixed in GDB 3.9x).  */
2613
2614       bv = BLOCKVECTOR (s);
2615       if (BLOCKVECTOR_NBLOCKS (bv) > 2
2616           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2617           || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2618         {
2619           complaint (&symfile_complaints, "Replacing old symbols for `%s'",
2620                      name);
2621           clear_symtab_users_queued++;
2622           make_cleanup (clear_symtab_users_once, 0);
2623           blewit = 1;
2624         }
2625       else
2626         {
2627           complaint (&symfile_complaints, "Empty symbol table found for `%s'",
2628                      name);
2629         }
2630
2631       free_symtab (s);
2632     }
2633   else
2634     {
2635       /* It is still possible that some breakpoints will be affected
2636          even though no symtab was found, since the file might have
2637          been compiled without debugging, and hence not be associated
2638          with a symtab.  In order to handle this correctly, we would need
2639          to keep a list of text address ranges for undebuggable files.
2640          For now, we do nothing, since this is a fairly obscure case.  */
2641       ;
2642     }
2643
2644   /* FIXME, what about the minimal symbol table? */
2645   return blewit;
2646 #else
2647   return (0);
2648 #endif
2649 }
2650 \f
2651 /* Allocate and partially fill a partial symtab.  It will be
2652    completely filled at the end of the symbol list.
2653
2654    FILENAME is the name of the symbol-file we are reading from. */
2655
2656 struct partial_symtab *
2657 start_psymtab_common (struct objfile *objfile,
2658                       struct section_offsets *section_offsets, char *filename,
2659                       CORE_ADDR textlow, struct partial_symbol **global_syms,
2660                       struct partial_symbol **static_syms)
2661 {
2662   struct partial_symtab *psymtab;
2663
2664   psymtab = allocate_psymtab (filename, objfile);
2665   psymtab->section_offsets = section_offsets;
2666   psymtab->textlow = textlow;
2667   psymtab->texthigh = psymtab->textlow;         /* default */
2668   psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2669   psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2670   return (psymtab);
2671 }
2672 \f
2673 /* Add a symbol with a long value to a psymtab.
2674    Since one arg is a struct, we pass in a ptr and deref it (sigh).  */
2675
2676 void
2677 add_psymbol_to_list (char *name, int namelength, namespace_enum namespace,
2678                      enum address_class class,
2679                      struct psymbol_allocation_list *list, long val,    /* Value as a long */
2680                      CORE_ADDR coreaddr,        /* Value as a CORE_ADDR */
2681                      enum language language, struct objfile *objfile)
2682 {
2683   register struct partial_symbol *psym;
2684   char *buf = alloca (namelength + 1);
2685   /* psymbol is static so that there will be no uninitialized gaps in the
2686      structure which might contain random data, causing cache misses in
2687      bcache. */
2688   static struct partial_symbol psymbol;
2689
2690   /* Create local copy of the partial symbol */
2691   memcpy (buf, name, namelength);
2692   buf[namelength] = '\0';
2693   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2694   if (val != 0)
2695     {
2696       SYMBOL_VALUE (&psymbol) = val;
2697     }
2698   else
2699     {
2700       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2701     }
2702   SYMBOL_SECTION (&psymbol) = 0;
2703   SYMBOL_LANGUAGE (&psymbol) = language;
2704   PSYMBOL_NAMESPACE (&psymbol) = namespace;
2705   PSYMBOL_CLASS (&psymbol) = class;
2706
2707   SYMBOL_SET_NAMES (&psymbol, buf, namelength, objfile);
2708
2709   /* Stash the partial symbol away in the cache */
2710   psym = bcache (&psymbol, sizeof (struct partial_symbol), objfile->psymbol_cache);
2711
2712   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2713   if (list->next >= list->list + list->size)
2714     {
2715       extend_psymbol_list (list, objfile);
2716     }
2717   *list->next++ = psym;
2718   OBJSTAT (objfile, n_psyms++);
2719 }
2720
2721 /* Add a symbol with a long value to a psymtab. This differs from
2722  * add_psymbol_to_list above in taking both a mangled and a demangled
2723  * name. */
2724
2725 void
2726 add_psymbol_with_dem_name_to_list (char *name, int namelength, char *dem_name,
2727                                    int dem_namelength, namespace_enum namespace,
2728                                    enum address_class class,
2729                                    struct psymbol_allocation_list *list, long val,      /* Value as a long */
2730                                    CORE_ADDR coreaddr,  /* Value as a CORE_ADDR */
2731                                    enum language language,
2732                                    struct objfile *objfile)
2733 {
2734   register struct partial_symbol *psym;
2735   char *buf = alloca (namelength + 1);
2736   /* psymbol is static so that there will be no uninitialized gaps in the
2737      structure which might contain random data, causing cache misses in
2738      bcache. */
2739   static struct partial_symbol psymbol;
2740
2741   /* Create local copy of the partial symbol */
2742
2743   memcpy (buf, name, namelength);
2744   buf[namelength] = '\0';
2745   SYMBOL_NAME (&psymbol) = bcache (buf, namelength + 1, objfile->psymbol_cache);
2746
2747   buf = alloca (dem_namelength + 1);
2748   memcpy (buf, dem_name, dem_namelength);
2749   buf[dem_namelength] = '\0';
2750
2751   switch (language)
2752     {
2753     case language_c:
2754     case language_cplus:
2755       SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2756         bcache (buf, dem_namelength + 1, objfile->psymbol_cache);
2757       break;
2758       /* FIXME What should be done for the default case? Ignoring for now. */
2759     }
2760
2761   /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2762   if (val != 0)
2763     {
2764       SYMBOL_VALUE (&psymbol) = val;
2765     }
2766   else
2767     {
2768       SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2769     }
2770   SYMBOL_SECTION (&psymbol) = 0;
2771   SYMBOL_LANGUAGE (&psymbol) = language;
2772   PSYMBOL_NAMESPACE (&psymbol) = namespace;
2773   PSYMBOL_CLASS (&psymbol) = class;
2774   SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2775
2776   /* Stash the partial symbol away in the cache */
2777   psym = bcache (&psymbol, sizeof (struct partial_symbol), objfile->psymbol_cache);
2778
2779   /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2780   if (list->next >= list->list + list->size)
2781     {
2782       extend_psymbol_list (list, objfile);
2783     }
2784   *list->next++ = psym;
2785   OBJSTAT (objfile, n_psyms++);
2786 }
2787
2788 /* Initialize storage for partial symbols.  */
2789
2790 void
2791 init_psymbol_list (struct objfile *objfile, int total_symbols)
2792 {
2793   /* Free any previously allocated psymbol lists.  */
2794
2795   if (objfile->global_psymbols.list)
2796     {
2797       xmfree (objfile->md, objfile->global_psymbols.list);
2798     }
2799   if (objfile->static_psymbols.list)
2800     {
2801       xmfree (objfile->md, objfile->static_psymbols.list);
2802     }
2803
2804   /* Current best guess is that approximately a twentieth
2805      of the total symbols (in a debugging file) are global or static
2806      oriented symbols */
2807
2808   objfile->global_psymbols.size = total_symbols / 10;
2809   objfile->static_psymbols.size = total_symbols / 10;
2810
2811   if (objfile->global_psymbols.size > 0)
2812     {
2813       objfile->global_psymbols.next =
2814         objfile->global_psymbols.list = (struct partial_symbol **)
2815         xmmalloc (objfile->md, (objfile->global_psymbols.size
2816                                 * sizeof (struct partial_symbol *)));
2817     }
2818   if (objfile->static_psymbols.size > 0)
2819     {
2820       objfile->static_psymbols.next =
2821         objfile->static_psymbols.list = (struct partial_symbol **)
2822         xmmalloc (objfile->md, (objfile->static_psymbols.size
2823                                 * sizeof (struct partial_symbol *)));
2824     }
2825 }
2826
2827 /* OVERLAYS:
2828    The following code implements an abstraction for debugging overlay sections.
2829
2830    The target model is as follows:
2831    1) The gnu linker will permit multiple sections to be mapped into the
2832    same VMA, each with its own unique LMA (or load address).
2833    2) It is assumed that some runtime mechanism exists for mapping the
2834    sections, one by one, from the load address into the VMA address.
2835    3) This code provides a mechanism for gdb to keep track of which 
2836    sections should be considered to be mapped from the VMA to the LMA.
2837    This information is used for symbol lookup, and memory read/write.
2838    For instance, if a section has been mapped then its contents 
2839    should be read from the VMA, otherwise from the LMA.
2840
2841    Two levels of debugger support for overlays are available.  One is
2842    "manual", in which the debugger relies on the user to tell it which
2843    overlays are currently mapped.  This level of support is
2844    implemented entirely in the core debugger, and the information about
2845    whether a section is mapped is kept in the objfile->obj_section table.
2846
2847    The second level of support is "automatic", and is only available if
2848    the target-specific code provides functionality to read the target's
2849    overlay mapping table, and translate its contents for the debugger
2850    (by updating the mapped state information in the obj_section tables).
2851
2852    The interface is as follows:
2853    User commands:
2854    overlay map <name>   -- tell gdb to consider this section mapped
2855    overlay unmap <name> -- tell gdb to consider this section unmapped
2856    overlay list         -- list the sections that GDB thinks are mapped
2857    overlay read-target  -- get the target's state of what's mapped
2858    overlay off/manual/auto -- set overlay debugging state
2859    Functional interface:
2860    find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2861    section, return that section.
2862    find_pc_overlay(pc):       find any overlay section that contains 
2863    the pc, either in its VMA or its LMA
2864    overlay_is_mapped(sect):       true if overlay is marked as mapped
2865    section_is_overlay(sect):      true if section's VMA != LMA
2866    pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2867    pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2868    sections_overlap(sec1, sec2):  true if mapped sec1 and sec2 ranges overlap
2869    overlay_mapped_address(...):   map an address from section's LMA to VMA
2870    overlay_unmapped_address(...): map an address from section's VMA to LMA
2871    symbol_overlayed_address(...): Return a "current" address for symbol:
2872    either in VMA or LMA depending on whether
2873    the symbol's section is currently mapped
2874  */
2875
2876 /* Overlay debugging state: */
2877
2878 enum overlay_debugging_state overlay_debugging = ovly_off;
2879 int overlay_cache_invalid = 0;  /* True if need to refresh mapped state */
2880
2881 /* Target vector for refreshing overlay mapped state */
2882 static void simple_overlay_update (struct obj_section *);
2883 void (*target_overlay_update) (struct obj_section *) = simple_overlay_update;
2884
2885 /* Function: section_is_overlay (SECTION)
2886    Returns true if SECTION has VMA not equal to LMA, ie. 
2887    SECTION is loaded at an address different from where it will "run".  */
2888
2889 int
2890 section_is_overlay (asection *section)
2891 {
2892   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2893
2894   if (overlay_debugging)
2895     if (section && section->lma != 0 &&
2896         section->vma != section->lma)
2897       return 1;
2898
2899   return 0;
2900 }
2901
2902 /* Function: overlay_invalidate_all (void)
2903    Invalidate the mapped state of all overlay sections (mark it as stale).  */
2904
2905 static void
2906 overlay_invalidate_all (void)
2907 {
2908   struct objfile *objfile;
2909   struct obj_section *sect;
2910
2911   ALL_OBJSECTIONS (objfile, sect)
2912     if (section_is_overlay (sect->the_bfd_section))
2913     sect->ovly_mapped = -1;
2914 }
2915
2916 /* Function: overlay_is_mapped (SECTION)
2917    Returns true if section is an overlay, and is currently mapped. 
2918    Private: public access is thru function section_is_mapped.
2919
2920    Access to the ovly_mapped flag is restricted to this function, so
2921    that we can do automatic update.  If the global flag
2922    OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2923    overlay_invalidate_all.  If the mapped state of the particular
2924    section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2925
2926 static int
2927 overlay_is_mapped (struct obj_section *osect)
2928 {
2929   if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2930     return 0;
2931
2932   switch (overlay_debugging)
2933     {
2934     default:
2935     case ovly_off:
2936       return 0;                 /* overlay debugging off */
2937     case ovly_auto:             /* overlay debugging automatic */
2938       /* Unles there is a target_overlay_update function, 
2939          there's really nothing useful to do here (can't really go auto)  */
2940       if (target_overlay_update)
2941         {
2942           if (overlay_cache_invalid)
2943             {
2944               overlay_invalidate_all ();
2945               overlay_cache_invalid = 0;
2946             }
2947           if (osect->ovly_mapped == -1)
2948             (*target_overlay_update) (osect);
2949         }
2950       /* fall thru to manual case */
2951     case ovly_on:               /* overlay debugging manual */
2952       return osect->ovly_mapped == 1;
2953     }
2954 }
2955
2956 /* Function: section_is_mapped
2957    Returns true if section is an overlay, and is currently mapped.  */
2958
2959 int
2960 section_is_mapped (asection *section)
2961 {
2962   struct objfile *objfile;
2963   struct obj_section *osect;
2964
2965   if (overlay_debugging)
2966     if (section && section_is_overlay (section))
2967       ALL_OBJSECTIONS (objfile, osect)
2968         if (osect->the_bfd_section == section)
2969         return overlay_is_mapped (osect);
2970
2971   return 0;
2972 }
2973
2974 /* Function: pc_in_unmapped_range
2975    If PC falls into the lma range of SECTION, return true, else false.  */
2976
2977 CORE_ADDR
2978 pc_in_unmapped_range (CORE_ADDR pc, asection *section)
2979 {
2980   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
2981
2982   int size;
2983
2984   if (overlay_debugging)
2985     if (section && section_is_overlay (section))
2986       {
2987         size = bfd_get_section_size_before_reloc (section);
2988         if (section->lma <= pc && pc < section->lma + size)
2989           return 1;
2990       }
2991   return 0;
2992 }
2993
2994 /* Function: pc_in_mapped_range
2995    If PC falls into the vma range of SECTION, return true, else false.  */
2996
2997 CORE_ADDR
2998 pc_in_mapped_range (CORE_ADDR pc, asection *section)
2999 {
3000   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
3001
3002   int size;
3003
3004   if (overlay_debugging)
3005     if (section && section_is_overlay (section))
3006       {
3007         size = bfd_get_section_size_before_reloc (section);
3008         if (section->vma <= pc && pc < section->vma + size)
3009           return 1;
3010       }
3011   return 0;
3012 }
3013
3014
3015 /* Return true if the mapped ranges of sections A and B overlap, false
3016    otherwise.  */
3017 int
3018 sections_overlap (asection *a, asection *b)
3019 {
3020   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
3021
3022   CORE_ADDR a_start = a->vma;
3023   CORE_ADDR a_end = a->vma + bfd_get_section_size_before_reloc (a);
3024   CORE_ADDR b_start = b->vma;
3025   CORE_ADDR b_end = b->vma + bfd_get_section_size_before_reloc (b);
3026
3027   return (a_start < b_end && b_start < a_end);
3028 }
3029
3030 /* Function: overlay_unmapped_address (PC, SECTION)
3031    Returns the address corresponding to PC in the unmapped (load) range.
3032    May be the same as PC.  */
3033
3034 CORE_ADDR
3035 overlay_unmapped_address (CORE_ADDR pc, asection *section)
3036 {
3037   /* FIXME: need bfd *, so we can use bfd_section_lma methods. */
3038
3039   if (overlay_debugging)
3040     if (section && section_is_overlay (section) &&
3041         pc_in_mapped_range (pc, section))
3042       return pc + section->lma - section->vma;
3043
3044   return pc;
3045 }
3046
3047 /* Function: overlay_mapped_address (PC, SECTION)
3048    Returns the address corresponding to PC in the mapped (runtime) range.
3049    May be the same as PC.  */
3050
3051 CORE_ADDR
3052 overlay_mapped_address (CORE_ADDR pc, asection *section)
3053 {
3054   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
3055
3056   if (overlay_debugging)
3057     if (section && section_is_overlay (section) &&
3058         pc_in_unmapped_range (pc, section))
3059       return pc + section->vma - section->lma;
3060
3061   return pc;
3062 }
3063
3064
3065 /* Function: symbol_overlayed_address 
3066    Return one of two addresses (relative to the VMA or to the LMA),
3067    depending on whether the section is mapped or not.  */
3068
3069 CORE_ADDR
3070 symbol_overlayed_address (CORE_ADDR address, asection *section)
3071 {
3072   if (overlay_debugging)
3073     {
3074       /* If the symbol has no section, just return its regular address. */
3075       if (section == 0)
3076         return address;
3077       /* If the symbol's section is not an overlay, just return its address */
3078       if (!section_is_overlay (section))
3079         return address;
3080       /* If the symbol's section is mapped, just return its address */
3081       if (section_is_mapped (section))
3082         return address;
3083       /*
3084        * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
3085        * then return its LOADED address rather than its vma address!!
3086        */
3087       return overlay_unmapped_address (address, section);
3088     }
3089   return address;
3090 }
3091
3092 /* Function: find_pc_overlay (PC) 
3093    Return the best-match overlay section for PC:
3094    If PC matches a mapped overlay section's VMA, return that section.
3095    Else if PC matches an unmapped section's VMA, return that section.
3096    Else if PC matches an unmapped section's LMA, return that section.  */
3097
3098 asection *
3099 find_pc_overlay (CORE_ADDR pc)
3100 {
3101   struct objfile *objfile;
3102   struct obj_section *osect, *best_match = NULL;
3103
3104   if (overlay_debugging)
3105     ALL_OBJSECTIONS (objfile, osect)
3106       if (section_is_overlay (osect->the_bfd_section))
3107       {
3108         if (pc_in_mapped_range (pc, osect->the_bfd_section))
3109           {
3110             if (overlay_is_mapped (osect))
3111               return osect->the_bfd_section;
3112             else
3113               best_match = osect;
3114           }
3115         else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
3116           best_match = osect;
3117       }
3118   return best_match ? best_match->the_bfd_section : NULL;
3119 }
3120
3121 /* Function: find_pc_mapped_section (PC)
3122    If PC falls into the VMA address range of an overlay section that is 
3123    currently marked as MAPPED, return that section.  Else return NULL.  */
3124
3125 asection *
3126 find_pc_mapped_section (CORE_ADDR pc)
3127 {
3128   struct objfile *objfile;
3129   struct obj_section *osect;
3130
3131   if (overlay_debugging)
3132     ALL_OBJSECTIONS (objfile, osect)
3133       if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
3134           overlay_is_mapped (osect))
3135       return osect->the_bfd_section;
3136
3137   return NULL;
3138 }
3139
3140 /* Function: list_overlays_command
3141    Print a list of mapped sections and their PC ranges */
3142
3143 void
3144 list_overlays_command (char *args, int from_tty)
3145 {
3146   int nmapped = 0;
3147   struct objfile *objfile;
3148   struct obj_section *osect;
3149
3150   if (overlay_debugging)
3151     ALL_OBJSECTIONS (objfile, osect)
3152       if (overlay_is_mapped (osect))
3153       {
3154         const char *name;
3155         bfd_vma lma, vma;
3156         int size;
3157
3158         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
3159         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
3160         size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3161         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
3162
3163         printf_filtered ("Section %s, loaded at ", name);
3164         print_address_numeric (lma, 1, gdb_stdout);
3165         puts_filtered (" - ");
3166         print_address_numeric (lma + size, 1, gdb_stdout);
3167         printf_filtered (", mapped at ");
3168         print_address_numeric (vma, 1, gdb_stdout);
3169         puts_filtered (" - ");
3170         print_address_numeric (vma + size, 1, gdb_stdout);
3171         puts_filtered ("\n");
3172
3173         nmapped++;
3174       }
3175   if (nmapped == 0)
3176     printf_filtered ("No sections are mapped.\n");
3177 }
3178
3179 /* Function: map_overlay_command
3180    Mark the named section as mapped (ie. residing at its VMA address).  */
3181
3182 void
3183 map_overlay_command (char *args, int from_tty)
3184 {
3185   struct objfile *objfile, *objfile2;
3186   struct obj_section *sec, *sec2;
3187   asection *bfdsec;
3188
3189   if (!overlay_debugging)
3190     error ("\
3191 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3192 the 'overlay manual' command.");
3193
3194   if (args == 0 || *args == 0)
3195     error ("Argument required: name of an overlay section");
3196
3197   /* First, find a section matching the user supplied argument */
3198   ALL_OBJSECTIONS (objfile, sec)
3199     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3200     {
3201       /* Now, check to see if the section is an overlay. */
3202       bfdsec = sec->the_bfd_section;
3203       if (!section_is_overlay (bfdsec))
3204         continue;               /* not an overlay section */
3205
3206       /* Mark the overlay as "mapped" */
3207       sec->ovly_mapped = 1;
3208
3209       /* Next, make a pass and unmap any sections that are
3210          overlapped by this new section: */
3211       ALL_OBJSECTIONS (objfile2, sec2)
3212         if (sec2->ovly_mapped
3213             && sec != sec2
3214             && sec->the_bfd_section != sec2->the_bfd_section
3215             && sections_overlap (sec->the_bfd_section,
3216                                  sec2->the_bfd_section))
3217         {
3218           if (info_verbose)
3219             printf_filtered ("Note: section %s unmapped by overlap\n",
3220                              bfd_section_name (objfile->obfd,
3221                                                sec2->the_bfd_section));
3222           sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
3223         }
3224       return;
3225     }
3226   error ("No overlay section called %s", args);
3227 }
3228
3229 /* Function: unmap_overlay_command
3230    Mark the overlay section as unmapped 
3231    (ie. resident in its LMA address range, rather than the VMA range).  */
3232
3233 void
3234 unmap_overlay_command (char *args, int from_tty)
3235 {
3236   struct objfile *objfile;
3237   struct obj_section *sec;
3238
3239   if (!overlay_debugging)
3240     error ("\
3241 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3242 the 'overlay manual' command.");
3243
3244   if (args == 0 || *args == 0)
3245     error ("Argument required: name of an overlay section");
3246
3247   /* First, find a section matching the user supplied argument */
3248   ALL_OBJSECTIONS (objfile, sec)
3249     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3250     {
3251       if (!sec->ovly_mapped)
3252         error ("Section %s is not mapped", args);
3253       sec->ovly_mapped = 0;
3254       return;
3255     }
3256   error ("No overlay section called %s", args);
3257 }
3258
3259 /* Function: overlay_auto_command
3260    A utility command to turn on overlay debugging.
3261    Possibly this should be done via a set/show command. */
3262
3263 static void
3264 overlay_auto_command (char *args, int from_tty)
3265 {
3266   overlay_debugging = ovly_auto;
3267   enable_overlay_breakpoints ();
3268   if (info_verbose)
3269     printf_filtered ("Automatic overlay debugging enabled.");
3270 }
3271
3272 /* Function: overlay_manual_command
3273    A utility command to turn on overlay debugging.
3274    Possibly this should be done via a set/show command. */
3275
3276 static void
3277 overlay_manual_command (char *args, int from_tty)
3278 {
3279   overlay_debugging = ovly_on;
3280   disable_overlay_breakpoints ();
3281   if (info_verbose)
3282     printf_filtered ("Overlay debugging enabled.");
3283 }
3284
3285 /* Function: overlay_off_command
3286    A utility command to turn on overlay debugging.
3287    Possibly this should be done via a set/show command. */
3288
3289 static void
3290 overlay_off_command (char *args, int from_tty)
3291 {
3292   overlay_debugging = ovly_off;
3293   disable_overlay_breakpoints ();
3294   if (info_verbose)
3295     printf_filtered ("Overlay debugging disabled.");
3296 }
3297
3298 static void
3299 overlay_load_command (char *args, int from_tty)
3300 {
3301   if (target_overlay_update)
3302     (*target_overlay_update) (NULL);
3303   else
3304     error ("This target does not know how to read its overlay state.");
3305 }
3306
3307 /* Function: overlay_command
3308    A place-holder for a mis-typed command */
3309
3310 /* Command list chain containing all defined "overlay" subcommands. */
3311 struct cmd_list_element *overlaylist;
3312
3313 static void
3314 overlay_command (char *args, int from_tty)
3315 {
3316   printf_unfiltered
3317     ("\"overlay\" must be followed by the name of an overlay command.\n");
3318   help_list (overlaylist, "overlay ", -1, gdb_stdout);
3319 }
3320
3321
3322 /* Target Overlays for the "Simplest" overlay manager:
3323
3324    This is GDB's default target overlay layer.  It works with the 
3325    minimal overlay manager supplied as an example by Cygnus.  The 
3326    entry point is via a function pointer "target_overlay_update", 
3327    so targets that use a different runtime overlay manager can 
3328    substitute their own overlay_update function and take over the
3329    function pointer.
3330
3331    The overlay_update function pokes around in the target's data structures
3332    to see what overlays are mapped, and updates GDB's overlay mapping with
3333    this information.
3334
3335    In this simple implementation, the target data structures are as follows:
3336    unsigned _novlys;            /# number of overlay sections #/
3337    unsigned _ovly_table[_novlys][4] = {
3338    {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3339    {..., ...,  ..., ...},
3340    }
3341    unsigned _novly_regions;     /# number of overlay regions #/
3342    unsigned _ovly_region_table[_novly_regions][3] = {
3343    {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3344    {..., ...,  ...},
3345    }
3346    These functions will attempt to update GDB's mappedness state in the
3347    symbol section table, based on the target's mappedness state.
3348
3349    To do this, we keep a cached copy of the target's _ovly_table, and
3350    attempt to detect when the cached copy is invalidated.  The main
3351    entry point is "simple_overlay_update(SECT), which looks up SECT in
3352    the cached table and re-reads only the entry for that section from
3353    the target (whenever possible).
3354  */
3355
3356 /* Cached, dynamically allocated copies of the target data structures: */
3357 static unsigned (*cache_ovly_table)[4] = 0;
3358 #if 0
3359 static unsigned (*cache_ovly_region_table)[3] = 0;
3360 #endif
3361 static unsigned cache_novlys = 0;
3362 #if 0
3363 static unsigned cache_novly_regions = 0;
3364 #endif
3365 static CORE_ADDR cache_ovly_table_base = 0;
3366 #if 0
3367 static CORE_ADDR cache_ovly_region_table_base = 0;
3368 #endif
3369 enum ovly_index
3370   {
3371     VMA, SIZE, LMA, MAPPED
3372   };
3373 #define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3374
3375 /* Throw away the cached copy of _ovly_table */
3376 static void
3377 simple_free_overlay_table (void)
3378 {
3379   if (cache_ovly_table)
3380     xfree (cache_ovly_table);
3381   cache_novlys = 0;
3382   cache_ovly_table = NULL;
3383   cache_ovly_table_base = 0;
3384 }
3385
3386 #if 0
3387 /* Throw away the cached copy of _ovly_region_table */
3388 static void
3389 simple_free_overlay_region_table (void)
3390 {
3391   if (cache_ovly_region_table)
3392     xfree (cache_ovly_region_table);
3393   cache_novly_regions = 0;
3394   cache_ovly_region_table = NULL;
3395   cache_ovly_region_table_base = 0;
3396 }
3397 #endif
3398
3399 /* Read an array of ints from the target into a local buffer.
3400    Convert to host order.  int LEN is number of ints  */
3401 static void
3402 read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len)
3403 {
3404   /* FIXME (alloca): Not safe if array is very large. */
3405   char *buf = alloca (len * TARGET_LONG_BYTES);
3406   int i;
3407
3408   read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3409   for (i = 0; i < len; i++)
3410     myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3411                                           TARGET_LONG_BYTES);
3412 }
3413
3414 /* Find and grab a copy of the target _ovly_table
3415    (and _novlys, which is needed for the table's size) */
3416 static int
3417 simple_read_overlay_table (void)
3418 {
3419   struct minimal_symbol *novlys_msym, *ovly_table_msym;
3420
3421   simple_free_overlay_table ();
3422   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
3423   if (! novlys_msym)
3424     {
3425       error ("Error reading inferior's overlay table: "
3426              "couldn't find `_novlys' variable\n"
3427              "in inferior.  Use `overlay manual' mode.");
3428       return 0;
3429     }
3430
3431   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
3432   if (! ovly_table_msym)
3433     {
3434       error ("Error reading inferior's overlay table: couldn't find "
3435              "`_ovly_table' array\n"
3436              "in inferior.  Use `overlay manual' mode.");
3437       return 0;
3438     }
3439
3440   cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (novlys_msym), 4);
3441   cache_ovly_table
3442     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3443   cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
3444   read_target_long_array (cache_ovly_table_base,
3445                           (int *) cache_ovly_table,
3446                           cache_novlys * 4);
3447
3448   return 1;                     /* SUCCESS */
3449 }
3450
3451 #if 0
3452 /* Find and grab a copy of the target _ovly_region_table
3453    (and _novly_regions, which is needed for the table's size) */
3454 static int
3455 simple_read_overlay_region_table (void)
3456 {
3457   struct minimal_symbol *msym;
3458
3459   simple_free_overlay_region_table ();
3460   msym = lookup_minimal_symbol ("_novly_regions", NULL, NULL);
3461   if (msym != NULL)
3462     cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3463   else
3464     return 0;                   /* failure */
3465   cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3466   if (cache_ovly_region_table != NULL)
3467     {
3468       msym = lookup_minimal_symbol ("_ovly_region_table", NULL, NULL);
3469       if (msym != NULL)
3470         {
3471           cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3472           read_target_long_array (cache_ovly_region_table_base,
3473                                   (int *) cache_ovly_region_table,
3474                                   cache_novly_regions * 3);
3475         }
3476       else
3477         return 0;               /* failure */
3478     }
3479   else
3480     return 0;                   /* failure */
3481   return 1;                     /* SUCCESS */
3482 }
3483 #endif
3484
3485 /* Function: simple_overlay_update_1 
3486    A helper function for simple_overlay_update.  Assuming a cached copy
3487    of _ovly_table exists, look through it to find an entry whose vma,
3488    lma and size match those of OSECT.  Re-read the entry and make sure
3489    it still matches OSECT (else the table may no longer be valid).
3490    Set OSECT's mapped state to match the entry.  Return: 1 for
3491    success, 0 for failure.  */
3492
3493 static int
3494 simple_overlay_update_1 (struct obj_section *osect)
3495 {
3496   int i, size;
3497   bfd *obfd = osect->objfile->obfd;
3498   asection *bsect = osect->the_bfd_section;
3499
3500   size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3501   for (i = 0; i < cache_novlys; i++)
3502     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3503         && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3504         /* && cache_ovly_table[i][SIZE] == size */ )
3505       {
3506         read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3507                                 (int *) cache_ovly_table[i], 4);
3508         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3509             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3510             /* && cache_ovly_table[i][SIZE] == size */ )
3511           {
3512             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3513             return 1;
3514           }
3515         else    /* Warning!  Warning!  Target's ovly table has changed! */
3516           return 0;
3517       }
3518   return 0;
3519 }
3520
3521 /* Function: simple_overlay_update
3522    If OSECT is NULL, then update all sections' mapped state 
3523    (after re-reading the entire target _ovly_table). 
3524    If OSECT is non-NULL, then try to find a matching entry in the 
3525    cached ovly_table and update only OSECT's mapped state.
3526    If a cached entry can't be found or the cache isn't valid, then 
3527    re-read the entire cache, and go ahead and update all sections.  */
3528
3529 static void
3530 simple_overlay_update (struct obj_section *osect)
3531 {
3532   struct objfile *objfile;
3533
3534   /* Were we given an osect to look up?  NULL means do all of them. */
3535   if (osect)
3536     /* Have we got a cached copy of the target's overlay table? */
3537     if (cache_ovly_table != NULL)
3538       /* Does its cached location match what's currently in the symtab? */
3539       if (cache_ovly_table_base ==
3540           SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", NULL, NULL)))
3541         /* Then go ahead and try to look up this single section in the cache */
3542         if (simple_overlay_update_1 (osect))
3543           /* Found it!  We're done. */
3544           return;
3545
3546   /* Cached table no good: need to read the entire table anew.
3547      Or else we want all the sections, in which case it's actually
3548      more efficient to read the whole table in one block anyway.  */
3549
3550   if (! simple_read_overlay_table ())
3551     return;
3552
3553   /* Now may as well update all sections, even if only one was requested. */
3554   ALL_OBJSECTIONS (objfile, osect)
3555     if (section_is_overlay (osect->the_bfd_section))
3556     {
3557       int i, size;
3558       bfd *obfd = osect->objfile->obfd;
3559       asection *bsect = osect->the_bfd_section;
3560
3561       size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3562       for (i = 0; i < cache_novlys; i++)
3563         if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
3564             && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
3565             /* && cache_ovly_table[i][SIZE] == size */ )
3566           { /* obj_section matches i'th entry in ovly_table */
3567             osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3568             break;              /* finished with inner for loop: break out */
3569           }
3570     }
3571 }
3572
3573 /* Set the output sections and output offsets for section SECTP in
3574    ABFD.  The relocation code in BFD will read these offsets, so we
3575    need to be sure they're initialized.  We map each section to itself,
3576    with no offset; this means that SECTP->vma will be honored.  */
3577
3578 static void
3579 symfile_dummy_outputs (bfd *abfd, asection *sectp, void *dummy)
3580 {
3581   sectp->output_section = sectp;
3582   sectp->output_offset = 0;
3583 }
3584
3585 /* Relocate the contents of a debug section SECTP in ABFD.  The
3586    contents are stored in BUF if it is non-NULL, or returned in a
3587    malloc'd buffer otherwise.
3588
3589    For some platforms and debug info formats, shared libraries contain
3590    relocations against the debug sections (particularly for DWARF-2;
3591    one affected platform is PowerPC GNU/Linux, although it depends on
3592    the version of the linker in use).  Also, ELF object files naturally
3593    have unresolved relocations for their debug sections.  We need to apply
3594    the relocations in order to get the locations of symbols correct.  */
3595
3596 bfd_byte *
3597 symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
3598 {
3599   /* We're only interested in debugging sections with relocation
3600      information.  */
3601   if ((sectp->flags & SEC_RELOC) == 0)
3602     return NULL;
3603   if ((sectp->flags & SEC_DEBUGGING) == 0)
3604     return NULL;
3605
3606   /* We will handle section offsets properly elsewhere, so relocate as if
3607      all sections begin at 0.  */
3608   bfd_map_over_sections (abfd, symfile_dummy_outputs, NULL);
3609
3610   return bfd_simple_get_relocated_section_contents (abfd, sectp, buf);
3611 }
3612
3613 void
3614 _initialize_symfile (void)
3615 {
3616   struct cmd_list_element *c;
3617
3618   c = add_cmd ("symbol-file", class_files, symbol_file_command,
3619                "Load symbol table from executable file FILE.\n\
3620 The `file' command can also load symbol tables, as well as setting the file\n\
3621 to execute.", &cmdlist);
3622   set_cmd_completer (c, filename_completer);
3623
3624   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3625                "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
3626 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3627 ADDR is the starting address of the file's text.\n\
3628 The optional arguments are section-name section-address pairs and\n\
3629 should be specified if the data and bss segments are not contiguous\n\
3630 with the text.  SECT is a section name to be loaded at SECT_ADDR.",
3631                &cmdlist);
3632   set_cmd_completer (c, filename_completer);
3633
3634   c = add_cmd ("add-shared-symbol-files", class_files,
3635                add_shared_symbol_files_command,
3636    "Load the symbols from shared objects in the dynamic linker's link map.",
3637                &cmdlist);
3638   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3639                      &cmdlist);
3640
3641   c = add_cmd ("load", class_files, load_command,
3642                "Dynamically load FILE into the running program, and record its symbols\n\
3643 for access from GDB.", &cmdlist);
3644   set_cmd_completer (c, filename_completer);
3645
3646   add_show_from_set
3647     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3648                   (char *) &symbol_reloading,
3649             "Set dynamic symbol table reloading multiple times in one run.",
3650                   &setlist),
3651      &showlist);
3652
3653   add_prefix_cmd ("overlay", class_support, overlay_command,
3654                   "Commands for debugging overlays.", &overlaylist,
3655                   "overlay ", 0, &cmdlist);
3656
3657   add_com_alias ("ovly", "overlay", class_alias, 1);
3658   add_com_alias ("ov", "overlay", class_alias, 1);
3659
3660   add_cmd ("map-overlay", class_support, map_overlay_command,
3661            "Assert that an overlay section is mapped.", &overlaylist);
3662
3663   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3664            "Assert that an overlay section is unmapped.", &overlaylist);
3665
3666   add_cmd ("list-overlays", class_support, list_overlays_command,
3667            "List mappings of overlay sections.", &overlaylist);
3668
3669   add_cmd ("manual", class_support, overlay_manual_command,
3670            "Enable overlay debugging.", &overlaylist);
3671   add_cmd ("off", class_support, overlay_off_command,
3672            "Disable overlay debugging.", &overlaylist);
3673   add_cmd ("auto", class_support, overlay_auto_command,
3674            "Enable automatic overlay debugging.", &overlaylist);
3675   add_cmd ("load-target", class_support, overlay_load_command,
3676            "Read the overlay mapping state from the target.", &overlaylist);
3677
3678   /* Filename extension to source language lookup table: */
3679   init_filename_language_table ();
3680   c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3681                    (char *) &ext_args,
3682                    "Set mapping between filename extension and source language.\n\
3683 Usage: set extension-language .foo bar",
3684                    &setlist);
3685   set_cmd_cfunc (c, set_ext_lang_command);
3686
3687   add_info ("extensions", info_ext_lang_command,
3688             "All filename extensions associated with a source language.");
3689
3690   add_show_from_set
3691     (add_set_cmd ("download-write-size", class_obscure,
3692                   var_integer, (char *) &download_write_size,
3693                   "Set the write size used when downloading a program.\n"
3694                   "Only used when downloading a program onto a remote\n"
3695                   "target. Specify zero, or a negative value, to disable\n"
3696                   "blocked writes. The actual size of each transfer is also\n"
3697                   "limited by the size of the target packet and the memory\n"
3698                   "cache.\n",
3699                   &setlist),
3700      &showlist);
3701
3702   debug_file_directory = xstrdup (DEBUGDIR);
3703   c = (add_set_cmd
3704        ("debug-file-directory", class_support, var_string,
3705         (char *) &debug_file_directory,
3706         "Set the directory where separate debug symbols are searched for.\n"
3707         "Separate debug symbols are first searched for in the same\n"
3708         "directory as the binary, then in the `" DEBUG_SUBDIRECTORY 
3709         "' subdirectory,\n"
3710         "and lastly at the path of the directory of the binary with\n"
3711         "the global debug-file directory prepended\n",
3712         &setlist));
3713   add_show_from_set (c, &showlist);
3714   set_cmd_completer (c, filename_completer);
3715 }