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