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