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