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