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