OSDN Git Service

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