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