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