OSDN Git Service

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