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