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