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