Clarify texinfo/
[deliverable/binutils-gdb.git] / gdb / objfiles.c
CommitLineData
c906108c
SS
1/* GDB routines for manipulating objfiles.
2 Copyright 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Contributed by Cygnus Support, using pieces from other GDB modules.
4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22/* This file contains support routines for creating, manipulating, and
23 destroying objfile structures. */
24
25#include "defs.h"
26#include "bfd.h" /* Binary File Description */
27#include "symtab.h"
28#include "symfile.h"
29#include "objfiles.h"
30#include "gdb-stabs.h"
31#include "target.h"
32
33#include <sys/types.h>
34#include "gdb_stat.h"
35#include <fcntl.h>
36#include "obstack.h"
37#include "gdb_string.h"
38
7a292a7a
SS
39#include "breakpoint.h"
40
c906108c
SS
41/* Prototypes for local functions */
42
43#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
44
a14ed312 45static int open_existing_mapped_file (char *, long, int);
c906108c 46
a14ed312 47static int open_mapped_file (char *filename, long mtime, int flags);
c906108c 48
a14ed312 49static PTR map_to_file (int);
c906108c 50
c5aa993b 51#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
c906108c 52
a14ed312 53static void add_to_objfile_sections (bfd *, sec_ptr, PTR);
c906108c
SS
54
55/* Externally visible variables that are owned by this module.
56 See declarations in objfile.h for more info. */
57
c5aa993b 58struct objfile *object_files; /* Linked list of all objfiles */
c906108c
SS
59struct objfile *current_objfile; /* For symbol file being read in */
60struct objfile *symfile_objfile; /* Main symbol table loaded from */
61struct objfile *rt_common_objfile; /* For runtime common symbols */
62
c5aa993b 63int mapped_symbol_files; /* Try to use mapped symbol files */
c906108c
SS
64
65/* Locate all mappable sections of a BFD file.
66 objfile_p_char is a char * to get it through
67 bfd_map_over_sections; we cast it back to its proper type. */
68
69#ifndef TARGET_KEEP_SECTION
70#define TARGET_KEEP_SECTION(ASECT) 0
71#endif
72
96baa820
JM
73/* Called via bfd_map_over_sections to build up the section table that
74 the objfile references. The objfile contains pointers to the start
75 of the table (objfile->sections) and to the first location after
76 the end of the table (objfile->sections_end). */
77
c906108c
SS
78static void
79add_to_objfile_sections (abfd, asect, objfile_p_char)
80 bfd *abfd;
81 sec_ptr asect;
82 PTR objfile_p_char;
83{
84 struct objfile *objfile = (struct objfile *) objfile_p_char;
85 struct obj_section section;
86 flagword aflag;
87
88 aflag = bfd_get_section_flags (abfd, asect);
89
c5aa993b 90 if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
c906108c
SS
91 return;
92
93 if (0 == bfd_section_size (abfd, asect))
94 return;
95 section.offset = 0;
96 section.objfile = objfile;
97 section.the_bfd_section = asect;
98 section.ovly_mapped = 0;
99 section.addr = bfd_section_vma (abfd, asect);
100 section.endaddr = section.addr + bfd_section_size (abfd, asect);
c5aa993b 101 obstack_grow (&objfile->psymbol_obstack, (char *) &section, sizeof (section));
c906108c
SS
102 objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
103}
104
105/* Builds a section table for OBJFILE.
106 Returns 0 if OK, 1 on error (in which case bfd_error contains the
96baa820
JM
107 error).
108
109 Note that while we are building the table, which goes into the
110 psymbol obstack, we hijack the sections_end pointer to instead hold
111 a count of the number of sections. When bfd_map_over_sections
112 returns, this count is used to compute the pointer to the end of
113 the sections table, which then overwrites the count.
114
115 Also note that the OFFSET and OVLY_MAPPED in each table entry
116 are initialized to zero.
117
118 Also note that if anything else writes to the psymbol obstack while
119 we are building the table, we're pretty much hosed. */
c906108c
SS
120
121int
122build_objfile_section_table (objfile)
123 struct objfile *objfile;
124{
125 /* objfile->sections can be already set when reading a mapped symbol
126 file. I believe that we do need to rebuild the section table in
127 this case (we rebuild other things derived from the bfd), but we
128 can't free the old one (it's in the psymbol_obstack). So we just
129 waste some memory. */
130
131 objfile->sections_end = 0;
c5aa993b 132 bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
c906108c
SS
133 objfile->sections = (struct obj_section *)
134 obstack_finish (&objfile->psymbol_obstack);
135 objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
c5aa993b 136 return (0);
c906108c
SS
137}
138
2df3850c
JM
139/* Given a pointer to an initialized bfd (ABFD) and some flag bits
140 allocate a new objfile struct, fill it in as best we can, link it
141 into the list of all known objfiles, and return a pointer to the
142 new objfile struct.
c906108c 143
2df3850c
JM
144 The FLAGS word contains various bits (OBJF_*) that can be taken as
145 requests for specific operations, like trying to open a mapped
146 version of the objfile (OBJF_MAPPED). Other bits like
147 OBJF_SHARED are simply copied through to the new objfile flags
148 member. */
c906108c
SS
149
150struct objfile *
2df3850c 151allocate_objfile (abfd, flags)
c906108c 152 bfd *abfd;
2df3850c 153 int flags;
c906108c
SS
154{
155 struct objfile *objfile = NULL;
156 struct objfile *last_one = NULL;
157
2df3850c
JM
158 if (mapped_symbol_files)
159 flags |= OBJF_MAPPED;
c906108c
SS
160
161#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
162 if (abfd != NULL)
c5aa993b 163 {
c906108c 164
c5aa993b
JM
165 /* If we can support mapped symbol files, try to open/reopen the
166 mapped file that corresponds to the file from which we wish to
167 read symbols. If the objfile is to be mapped, we must malloc
168 the structure itself using the mmap version, and arrange that
169 all memory allocation for the objfile uses the mmap routines.
170 If we are reusing an existing mapped file, from which we get
171 our objfile pointer, we have to make sure that we update the
172 pointers to the alloc/free functions in the obstack, in case
173 these functions have moved within the current gdb. */
174
175 int fd;
176
177 fd = open_mapped_file (bfd_get_filename (abfd), bfd_get_mtime (abfd),
2df3850c 178 flags);
c5aa993b
JM
179 if (fd >= 0)
180 {
181 PTR md;
c906108c 182
c5aa993b
JM
183 if ((md = map_to_file (fd)) == NULL)
184 {
185 close (fd);
186 }
187 else if ((objfile = (struct objfile *) mmalloc_getkey (md, 0)) != NULL)
188 {
189 /* Update memory corruption handler function addresses. */
190 init_malloc (md);
191 objfile->md = md;
192 objfile->mmfd = fd;
193 /* Update pointers to functions to *our* copies */
194 obstack_chunkfun (&objfile->psymbol_cache.cache, xmmalloc);
195 obstack_freefun (&objfile->psymbol_cache.cache, mfree);
196 obstack_chunkfun (&objfile->psymbol_obstack, xmmalloc);
197 obstack_freefun (&objfile->psymbol_obstack, mfree);
198 obstack_chunkfun (&objfile->symbol_obstack, xmmalloc);
199 obstack_freefun (&objfile->symbol_obstack, mfree);
200 obstack_chunkfun (&objfile->type_obstack, xmmalloc);
201 obstack_freefun (&objfile->type_obstack, mfree);
202 /* If already in objfile list, unlink it. */
203 unlink_objfile (objfile);
204 /* Forget things specific to a particular gdb, may have changed. */
205 objfile->sf = NULL;
206 }
207 else
208 {
c906108c 209
c5aa993b
JM
210 /* Set up to detect internal memory corruption. MUST be
211 done before the first malloc. See comments in
212 init_malloc() and mmcheck(). */
213
214 init_malloc (md);
215
216 objfile = (struct objfile *)
217 xmmalloc (md, sizeof (struct objfile));
218 memset (objfile, 0, sizeof (struct objfile));
219 objfile->md = md;
220 objfile->mmfd = fd;
221 objfile->flags |= OBJF_MAPPED;
222 mmalloc_setkey (objfile->md, 0, objfile);
223 obstack_specify_allocation_with_arg (&objfile->psymbol_cache.cache,
224 0, 0, xmmalloc, mfree,
225 objfile->md);
226 obstack_specify_allocation_with_arg (&objfile->psymbol_obstack,
227 0, 0, xmmalloc, mfree,
228 objfile->md);
229 obstack_specify_allocation_with_arg (&objfile->symbol_obstack,
230 0, 0, xmmalloc, mfree,
231 objfile->md);
232 obstack_specify_allocation_with_arg (&objfile->type_obstack,
233 0, 0, xmmalloc, mfree,
234 objfile->md);
235 }
236 }
c906108c 237
2df3850c 238 if ((flags & OBJF_MAPPED) && (objfile == NULL))
c5aa993b
JM
239 {
240 warning ("symbol table for '%s' will not be mapped",
241 bfd_get_filename (abfd));
2df3850c 242 flags &= ~OBJF_MAPPED;
c5aa993b
JM
243 }
244 }
245#else /* !defined(USE_MMALLOC) || !defined(HAVE_MMAP) */
c906108c 246
2df3850c 247 if (flags & OBJF_MAPPED)
c906108c
SS
248 {
249 warning ("mapped symbol tables are not supported on this machine; missing or broken mmap().");
250
251 /* Turn off the global flag so we don't try to do mapped symbol tables
c5aa993b
JM
252 any more, which shuts up gdb unless the user specifically gives the
253 "mapped" keyword again. */
c906108c
SS
254
255 mapped_symbol_files = 0;
2df3850c 256 flags &= ~OBJF_MAPPED;
c906108c
SS
257 }
258
c5aa993b 259#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
c906108c
SS
260
261 /* If we don't support mapped symbol files, didn't ask for the file to be
262 mapped, or failed to open the mapped file for some reason, then revert
263 back to an unmapped objfile. */
264
265 if (objfile == NULL)
266 {
267 objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
268 memset (objfile, 0, sizeof (struct objfile));
c5aa993b
JM
269 objfile->md = NULL;
270 obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
c906108c 271 xmalloc, free);
c5aa993b 272 obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0, xmalloc,
c906108c 273 free);
c5aa993b 274 obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
c906108c 275 free);
c5aa993b 276 obstack_specify_allocation (&objfile->type_obstack, 0, 0, xmalloc,
c906108c 277 free);
2df3850c 278 flags &= ~OBJF_MAPPED;
c906108c
SS
279 }
280
281 /* Update the per-objfile information that comes from the bfd, ensuring
282 that any data that is reference is saved in the per-objfile data
283 region. */
284
c5aa993b
JM
285 objfile->obfd = abfd;
286 if (objfile->name != NULL)
c906108c 287 {
c5aa993b 288 mfree (objfile->md, objfile->name);
c906108c
SS
289 }
290 if (abfd != NULL)
291 {
c5aa993b
JM
292 objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
293 objfile->mtime = bfd_get_mtime (abfd);
c906108c
SS
294
295 /* Build section table. */
296
297 if (build_objfile_section_table (objfile))
298 {
c5aa993b
JM
299 error ("Can't find the file sections in `%s': %s",
300 objfile->name, bfd_errmsg (bfd_get_error ()));
c906108c
SS
301 }
302 }
303
b8fbeb18
EZ
304 /* Initialize the section indexes for this objfile, so that we can
305 later detect if they are used w/o being properly assigned to. */
306
307 objfile->sect_index_text = -1;
308 objfile->sect_index_data = -1;
309 objfile->sect_index_bss = -1;
310 objfile->sect_index_rodata = -1;
311
c906108c
SS
312 /* Add this file onto the tail of the linked list of other such files. */
313
c5aa993b 314 objfile->next = NULL;
c906108c
SS
315 if (object_files == NULL)
316 object_files = objfile;
317 else
318 {
319 for (last_one = object_files;
c5aa993b
JM
320 last_one->next;
321 last_one = last_one->next);
322 last_one->next = objfile;
c906108c
SS
323 }
324
2df3850c
JM
325 /* Save passed in flag bits. */
326 objfile->flags |= flags;
c906108c
SS
327
328 return (objfile);
329}
330
331/* Put OBJFILE at the front of the list. */
332
333void
334objfile_to_front (objfile)
335 struct objfile *objfile;
336{
337 struct objfile **objp;
338 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
339 {
340 if (*objp == objfile)
341 {
342 /* Unhook it from where it is. */
343 *objp = objfile->next;
344 /* Put it in the front. */
345 objfile->next = object_files;
346 object_files = objfile;
347 break;
348 }
349 }
350}
351
352/* Unlink OBJFILE from the list of known objfiles, if it is found in the
353 list.
354
355 It is not a bug, or error, to call this function if OBJFILE is not known
356 to be in the current list. This is done in the case of mapped objfiles,
357 for example, just to ensure that the mapped objfile doesn't appear twice
358 in the list. Since the list is threaded, linking in a mapped objfile
359 twice would create a circular list.
360
361 If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
362 unlinking it, just to ensure that we have completely severed any linkages
363 between the OBJFILE and the list. */
364
365void
366unlink_objfile (objfile)
367 struct objfile *objfile;
368{
c5aa993b 369 struct objfile **objpp;
c906108c 370
c5aa993b 371 for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
c906108c 372 {
c5aa993b 373 if (*objpp == objfile)
c906108c 374 {
c5aa993b
JM
375 *objpp = (*objpp)->next;
376 objfile->next = NULL;
07cd4b97 377 return;
c906108c
SS
378 }
379 }
07cd4b97
JB
380
381 internal_error ("objfiles.c (unlink_objfile): objfile already unlinked");
c906108c
SS
382}
383
384
385/* Destroy an objfile and all the symtabs and psymtabs under it. Note
386 that as much as possible is allocated on the symbol_obstack and
387 psymbol_obstack, so that the memory can be efficiently freed.
388
389 Things which we do NOT free because they are not in malloc'd memory
390 or not in memory specific to the objfile include:
391
c5aa993b 392 objfile -> sf
c906108c
SS
393
394 FIXME: If the objfile is using reusable symbol information (via mmalloc),
395 then we need to take into account the fact that more than one process
396 may be using the symbol information at the same time (when mmalloc is
397 extended to support cooperative locking). When more than one process
398 is using the mapped symbol info, we need to be more careful about when
399 we free objects in the reusable area. */
400
401void
402free_objfile (objfile)
403 struct objfile *objfile;
404{
405 /* First do any symbol file specific actions required when we are
406 finished with a particular symbol file. Note that if the objfile
407 is using reusable symbol information (via mmalloc) then each of
408 these routines is responsible for doing the correct thing, either
409 freeing things which are valid only during this particular gdb
410 execution, or leaving them to be reused during the next one. */
411
c5aa993b 412 if (objfile->sf != NULL)
c906108c 413 {
c5aa993b 414 (*objfile->sf->sym_finish) (objfile);
c906108c
SS
415 }
416
417 /* We always close the bfd. */
418
c5aa993b 419 if (objfile->obfd != NULL)
c906108c
SS
420 {
421 char *name = bfd_get_filename (objfile->obfd);
c5aa993b 422 if (!bfd_close (objfile->obfd))
c906108c
SS
423 warning ("cannot close \"%s\": %s",
424 name, bfd_errmsg (bfd_get_error ()));
425 free (name);
426 }
427
428 /* Remove it from the chain of all objfiles. */
429
430 unlink_objfile (objfile);
431
432 /* If we are going to free the runtime common objfile, mark it
433 as unallocated. */
434
435 if (objfile == rt_common_objfile)
436 rt_common_objfile = NULL;
437
438 /* Before the symbol table code was redone to make it easier to
439 selectively load and remove information particular to a specific
440 linkage unit, gdb used to do these things whenever the monolithic
441 symbol table was blown away. How much still needs to be done
442 is unknown, but we play it safe for now and keep each action until
443 it is shown to be no longer needed. */
c5aa993b 444
c906108c
SS
445 /* I *think* all our callers call clear_symtab_users. If so, no need
446 to call this here. */
447 clear_pc_function_cache ();
448
449 /* The last thing we do is free the objfile struct itself for the
450 non-reusable case, or detach from the mapped file for the reusable
451 case. Note that the mmalloc_detach or the mfree is the last thing
452 we can do with this objfile. */
453
454#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
455
c5aa993b 456 if (objfile->flags & OBJF_MAPPED)
c906108c
SS
457 {
458 /* Remember the fd so we can close it. We can't close it before
c5aa993b 459 doing the detach, and after the detach the objfile is gone. */
c906108c
SS
460 int mmfd;
461
c5aa993b
JM
462 mmfd = objfile->mmfd;
463 mmalloc_detach (objfile->md);
c906108c
SS
464 objfile = NULL;
465 close (mmfd);
466 }
467
c5aa993b 468#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
c906108c
SS
469
470 /* If we still have an objfile, then either we don't support reusable
471 objfiles or this one was not reusable. So free it normally. */
472
473 if (objfile != NULL)
474 {
c5aa993b 475 if (objfile->name != NULL)
c906108c 476 {
c5aa993b 477 mfree (objfile->md, objfile->name);
c906108c
SS
478 }
479 if (objfile->global_psymbols.list)
480 mfree (objfile->md, objfile->global_psymbols.list);
481 if (objfile->static_psymbols.list)
482 mfree (objfile->md, objfile->static_psymbols.list);
483 /* Free the obstacks for non-reusable objfiles */
c2d11a7d 484 free_bcache (&objfile->psymbol_cache);
c5aa993b
JM
485 obstack_free (&objfile->psymbol_obstack, 0);
486 obstack_free (&objfile->symbol_obstack, 0);
487 obstack_free (&objfile->type_obstack, 0);
488 mfree (objfile->md, objfile);
c906108c
SS
489 objfile = NULL;
490 }
491}
492
74b7792f
AC
493static void
494do_free_objfile_cleanup (void *obj)
495{
496 free_objfile (obj);
497}
498
499struct cleanup *
500make_cleanup_free_objfile (struct objfile *obj)
501{
502 return make_cleanup (do_free_objfile_cleanup, obj);
503}
c906108c
SS
504
505/* Free all the object files at once and clean up their users. */
506
507void
508free_all_objfiles ()
509{
510 struct objfile *objfile, *temp;
511
512 ALL_OBJFILES_SAFE (objfile, temp)
c5aa993b
JM
513 {
514 free_objfile (objfile);
515 }
c906108c
SS
516 clear_symtab_users ();
517}
518\f
519/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
520 entries in new_offsets. */
521void
522objfile_relocate (objfile, new_offsets)
523 struct objfile *objfile;
524 struct section_offsets *new_offsets;
525{
d4f3574e
SS
526 struct section_offsets *delta =
527 (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
c906108c
SS
528
529 {
530 int i;
531 int something_changed = 0;
532 for (i = 0; i < objfile->num_sections; ++i)
533 {
534 ANOFFSET (delta, i) =
535 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
536 if (ANOFFSET (delta, i) != 0)
537 something_changed = 1;
538 }
539 if (!something_changed)
540 return;
541 }
542
543 /* OK, get all the symtabs. */
544 {
545 struct symtab *s;
546
547 ALL_OBJFILE_SYMTABS (objfile, s)
c5aa993b
JM
548 {
549 struct linetable *l;
550 struct blockvector *bv;
551 int i;
552
553 /* First the line table. */
554 l = LINETABLE (s);
555 if (l)
556 {
557 for (i = 0; i < l->nitems; ++i)
558 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
559 }
c906108c 560
c5aa993b
JM
561 /* Don't relocate a shared blockvector more than once. */
562 if (!s->primary)
563 continue;
c906108c 564
c5aa993b
JM
565 bv = BLOCKVECTOR (s);
566 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
567 {
568 struct block *b;
569 int j;
570
571 b = BLOCKVECTOR_BLOCK (bv, i);
572 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
573 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
574
575 for (j = 0; j < BLOCK_NSYMS (b); ++j)
576 {
577 struct symbol *sym = BLOCK_SYM (b, j);
578 /* The RS6000 code from which this was taken skipped
579 any symbols in STRUCT_NAMESPACE or UNDEF_NAMESPACE.
580 But I'm leaving out that test, on the theory that
581 they can't possibly pass the tests below. */
582 if ((SYMBOL_CLASS (sym) == LOC_LABEL
583 || SYMBOL_CLASS (sym) == LOC_STATIC
584 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
585 && SYMBOL_SECTION (sym) >= 0)
586 {
587 SYMBOL_VALUE_ADDRESS (sym) +=
588 ANOFFSET (delta, SYMBOL_SECTION (sym));
589 }
c906108c 590#ifdef MIPS_EFI_SYMBOL_NAME
c5aa993b 591 /* Relocate Extra Function Info for ecoff. */
c906108c 592
c5aa993b
JM
593 else if (SYMBOL_CLASS (sym) == LOC_CONST
594 && SYMBOL_NAMESPACE (sym) == LABEL_NAMESPACE
595 && STRCMP (SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
596 ecoff_relocate_efi (sym, ANOFFSET (delta,
c906108c
SS
597 s->block_line_section));
598#endif
c5aa993b
JM
599 }
600 }
601 }
c906108c
SS
602 }
603
604 {
605 struct partial_symtab *p;
606
607 ALL_OBJFILE_PSYMTABS (objfile, p)
c5aa993b 608 {
b8fbeb18
EZ
609 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
610 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c5aa993b 611 }
c906108c
SS
612 }
613
614 {
615 struct partial_symbol **psym;
616
617 for (psym = objfile->global_psymbols.list;
618 psym < objfile->global_psymbols.next;
619 psym++)
620 if (SYMBOL_SECTION (*psym) >= 0)
c5aa993b 621 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
c906108c
SS
622 SYMBOL_SECTION (*psym));
623 for (psym = objfile->static_psymbols.list;
624 psym < objfile->static_psymbols.next;
625 psym++)
626 if (SYMBOL_SECTION (*psym) >= 0)
c5aa993b 627 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
c906108c
SS
628 SYMBOL_SECTION (*psym));
629 }
630
631 {
632 struct minimal_symbol *msym;
633 ALL_OBJFILE_MSYMBOLS (objfile, msym)
634 if (SYMBOL_SECTION (msym) >= 0)
c5aa993b 635 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
c906108c
SS
636 }
637 /* Relocating different sections by different amounts may cause the symbols
638 to be out of order. */
639 msymbols_sort (objfile);
640
641 {
642 int i;
643 for (i = 0; i < objfile->num_sections; ++i)
644 ANOFFSET (objfile->section_offsets, i) = ANOFFSET (new_offsets, i);
645 }
646
647 {
648 struct obj_section *s;
649 bfd *abfd;
650
651 abfd = objfile->obfd;
652
96baa820 653 ALL_OBJFILE_OSECTIONS (objfile, s)
c906108c
SS
654 {
655 flagword flags;
656
657 flags = bfd_get_section_flags (abfd, s->the_bfd_section);
658
659 if (flags & SEC_CODE)
660 {
b8fbeb18
EZ
661 s->addr += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
662 s->endaddr += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
663 }
664 else if (flags & (SEC_DATA | SEC_LOAD))
665 {
b8fbeb18
EZ
666 s->addr += ANOFFSET (delta, SECT_OFF_DATA (objfile));
667 s->endaddr += ANOFFSET (delta, SECT_OFF_DATA (objfile));
c906108c
SS
668 }
669 else if (flags & SEC_ALLOC)
670 {
b8fbeb18
EZ
671 s->addr += ANOFFSET (delta, SECT_OFF_BSS (objfile));
672 s->endaddr += ANOFFSET (delta, SECT_OFF_BSS (objfile));
c906108c
SS
673 }
674 }
675 }
676
c5aa993b 677 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
b8fbeb18 678 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
679
680 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
681 {
b8fbeb18
EZ
682 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
683 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
684 }
685
686 if (objfile->ei.entry_file_lowpc != INVALID_ENTRY_LOWPC)
687 {
b8fbeb18
EZ
688 objfile->ei.entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
689 objfile->ei.entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
690 }
691
692 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
693 {
b8fbeb18
EZ
694 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
695 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
696 }
697
698 /* Relocate breakpoints as necessary, after things are relocated. */
699 breakpoint_re_set ();
700}
701\f
702/* Many places in gdb want to test just to see if we have any partial
703 symbols available. This function returns zero if none are currently
704 available, nonzero otherwise. */
705
706int
707have_partial_symbols ()
708{
709 struct objfile *ofp;
710
711 ALL_OBJFILES (ofp)
c5aa993b
JM
712 {
713 if (ofp->psymtabs != NULL)
714 {
715 return 1;
716 }
717 }
c906108c
SS
718 return 0;
719}
720
721/* Many places in gdb want to test just to see if we have any full
722 symbols available. This function returns zero if none are currently
723 available, nonzero otherwise. */
724
725int
726have_full_symbols ()
727{
728 struct objfile *ofp;
729
730 ALL_OBJFILES (ofp)
c5aa993b
JM
731 {
732 if (ofp->symtabs != NULL)
733 {
734 return 1;
735 }
736 }
c906108c
SS
737 return 0;
738}
739
740
741/* This operations deletes all objfile entries that represent solibs that
742 weren't explicitly loaded by the user, via e.g., the add-symbol-file
743 command.
c5aa993b 744 */
c906108c
SS
745void
746objfile_purge_solibs ()
747{
c5aa993b
JM
748 struct objfile *objf;
749 struct objfile *temp;
c906108c
SS
750
751 ALL_OBJFILES_SAFE (objf, temp)
752 {
753 /* We assume that the solib package has been purged already, or will
754 be soon.
c5aa993b 755 */
2df3850c 756 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
c906108c
SS
757 free_objfile (objf);
758 }
759}
760
761
762/* Many places in gdb want to test just to see if we have any minimal
763 symbols available. This function returns zero if none are currently
764 available, nonzero otherwise. */
765
766int
767have_minimal_symbols ()
768{
769 struct objfile *ofp;
770
771 ALL_OBJFILES (ofp)
c5aa993b
JM
772 {
773 if (ofp->msymbols != NULL)
774 {
775 return 1;
776 }
777 }
c906108c
SS
778 return 0;
779}
780
781#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
782
783/* Given the name of a mapped symbol file in SYMSFILENAME, and the timestamp
784 of the corresponding symbol file in MTIME, try to open an existing file
785 with the name SYMSFILENAME and verify it is more recent than the base
786 file by checking it's timestamp against MTIME.
787
788 If SYMSFILENAME does not exist (or can't be stat'd), simply returns -1.
789
790 If SYMSFILENAME does exist, but is out of date, we check to see if the
791 user has specified creation of a mapped file. If so, we don't issue
792 any warning message because we will be creating a new mapped file anyway,
793 overwriting the old one. If not, then we issue a warning message so that
794 the user will know why we aren't using this existing mapped symbol file.
795 In either case, we return -1.
796
797 If SYMSFILENAME does exist and is not out of date, but can't be opened for
798 some reason, then prints an appropriate system error message and returns -1.
799
800 Otherwise, returns the open file descriptor. */
801
802static int
2df3850c 803open_existing_mapped_file (symsfilename, mtime, flags)
c906108c
SS
804 char *symsfilename;
805 long mtime;
2df3850c 806 int flags;
c906108c
SS
807{
808 int fd = -1;
809 struct stat sbuf;
810
811 if (stat (symsfilename, &sbuf) == 0)
812 {
813 if (sbuf.st_mtime < mtime)
814 {
2df3850c 815 if (!(flags & OBJF_MAPPED))
c906108c
SS
816 {
817 warning ("mapped symbol file `%s' is out of date, ignored it",
818 symsfilename);
819 }
820 }
821 else if ((fd = open (symsfilename, O_RDWR)) < 0)
822 {
823 if (error_pre_print)
824 {
825 printf_unfiltered (error_pre_print);
826 }
827 print_sys_errmsg (symsfilename, errno);
828 }
829 }
830 return (fd);
831}
832
833/* Look for a mapped symbol file that corresponds to FILENAME and is more
834 recent than MTIME. If MAPPED is nonzero, the user has asked that gdb
835 use a mapped symbol file for this file, so create a new one if one does
836 not currently exist.
837
838 If found, then return an open file descriptor for the file, otherwise
839 return -1.
840
841 This routine is responsible for implementing the policy that generates
842 the name of the mapped symbol file from the name of a file containing
843 symbols that gdb would like to read. Currently this policy is to append
844 ".syms" to the name of the file.
845
846 This routine is also responsible for implementing the policy that
847 determines where the mapped symbol file is found (the search path).
848 This policy is that when reading an existing mapped file, a file of
849 the correct name in the current directory takes precedence over a
850 file of the correct name in the same directory as the symbol file.
851 When creating a new mapped file, it is always created in the current
852 directory. This helps to minimize the chances of a user unknowingly
853 creating big mapped files in places like /bin and /usr/local/bin, and
854 allows a local copy to override a manually installed global copy (in
855 /bin for example). */
856
857static int
2df3850c 858open_mapped_file (filename, mtime, flags)
c906108c
SS
859 char *filename;
860 long mtime;
2df3850c 861 int flags;
c906108c
SS
862{
863 int fd;
864 char *symsfilename;
865
866 /* First try to open an existing file in the current directory, and
867 then try the directory where the symbol file is located. */
868
869 symsfilename = concat ("./", basename (filename), ".syms", (char *) NULL);
2df3850c 870 if ((fd = open_existing_mapped_file (symsfilename, mtime, flags)) < 0)
c906108c
SS
871 {
872 free (symsfilename);
873 symsfilename = concat (filename, ".syms", (char *) NULL);
2fc18c15 874 fd = open_existing_mapped_file (symsfilename, mtime, flags);
c906108c
SS
875 }
876
877 /* If we don't have an open file by now, then either the file does not
878 already exist, or the base file has changed since it was created. In
879 either case, if the user has specified use of a mapped file, then
880 create a new mapped file, truncating any existing one. If we can't
881 create one, print a system error message saying why we can't.
882
883 By default the file is rw for everyone, with the user's umask taking
884 care of turning off the permissions the user wants off. */
885
2fc18c15 886 if ((fd < 0) && (flags & OBJF_MAPPED))
c906108c
SS
887 {
888 free (symsfilename);
889 symsfilename = concat ("./", basename (filename), ".syms",
890 (char *) NULL);
891 if ((fd = open (symsfilename, O_RDWR | O_CREAT | O_TRUNC, 0666)) < 0)
892 {
893 if (error_pre_print)
894 {
895 printf_unfiltered (error_pre_print);
896 }
897 print_sys_errmsg (symsfilename, errno);
898 }
899 }
900
901 free (symsfilename);
902 return (fd);
903}
904
905static PTR
906map_to_file (fd)
907 int fd;
908{
909 PTR md;
910 CORE_ADDR mapto;
911
912 md = mmalloc_attach (fd, (PTR) 0);
913 if (md != NULL)
914 {
915 mapto = (CORE_ADDR) mmalloc_getkey (md, 1);
916 md = mmalloc_detach (md);
917 if (md != NULL)
918 {
919 /* FIXME: should figure out why detach failed */
920 md = NULL;
921 }
922 else if (mapto != (CORE_ADDR) NULL)
923 {
924 /* This mapping file needs to be remapped at "mapto" */
925 md = mmalloc_attach (fd, (PTR) mapto);
926 }
927 else
928 {
929 /* This is a freshly created mapping file. */
930 mapto = (CORE_ADDR) mmalloc_findbase (20 * 1024 * 1024);
931 if (mapto != 0)
932 {
933 /* To avoid reusing the freshly created mapping file, at the
c5aa993b
JM
934 address selected by mmap, we must truncate it before trying
935 to do an attach at the address we want. */
c906108c
SS
936 ftruncate (fd, 0);
937 md = mmalloc_attach (fd, (PTR) mapto);
938 if (md != NULL)
939 {
940 mmalloc_setkey (md, 1, (PTR) mapto);
941 }
942 }
943 }
944 }
945 return (md);
946}
947
c5aa993b 948#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
c906108c
SS
949
950/* Returns a section whose range includes PC and SECTION,
951 or NULL if none found. Note the distinction between the return type,
952 struct obj_section (which is defined in gdb), and the input type
953 struct sec (which is a bfd-defined data type). The obj_section
954 contains a pointer to the bfd struct sec section. */
955
956struct obj_section *
957find_pc_sect_section (pc, section)
958 CORE_ADDR pc;
959 struct sec *section;
960{
961 struct obj_section *s;
962 struct objfile *objfile;
c5aa993b 963
96baa820 964 ALL_OBJSECTIONS (objfile, s)
c5aa993b
JM
965 if ((section == 0 || section == s->the_bfd_section) &&
966 s->addr <= pc && pc < s->endaddr)
c5aa993b 967 return (s);
c906108c 968
c5aa993b 969 return (NULL);
c906108c
SS
970}
971
972/* Returns a section whose range includes PC or NULL if none found.
973 Backward compatibility, no section. */
974
975struct obj_section *
c5aa993b 976find_pc_section (pc)
c906108c
SS
977 CORE_ADDR pc;
978{
979 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
980}
c5aa993b 981
c906108c
SS
982
983/* In SVR4, we recognize a trampoline by it's section name.
984 That is, if the pc is in a section named ".plt" then we are in
985 a trampoline. */
986
987int
c5aa993b 988in_plt_section (pc, name)
c906108c
SS
989 CORE_ADDR pc;
990 char *name;
991{
992 struct obj_section *s;
993 int retval = 0;
c5aa993b
JM
994
995 s = find_pc_section (pc);
996
c906108c
SS
997 retval = (s != NULL
998 && s->the_bfd_section->name != NULL
999 && STREQ (s->the_bfd_section->name, ".plt"));
c5aa993b 1000 return (retval);
c906108c 1001}
7be570e7
JM
1002
1003/* Return nonzero if NAME is in the import list of OBJFILE. Else
1004 return zero. */
1005
1006int
1007is_in_import_list (name, objfile)
1008 char *name;
1009 struct objfile *objfile;
1010{
1011 register int i;
1012
1013 if (!objfile || !name || !*name)
1014 return 0;
1015
1016 for (i = 0; i < objfile->import_list_size; i++)
1017 if (objfile->import_list[i] && STREQ (name, objfile->import_list[i]))
1018 return 1;
1019 return 0;
1020}
1021
This page took 0.143059 seconds and 4 git commands to generate.