OSDN Git Service

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