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