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