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