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