daily update
[deliverable/binutils-gdb.git] / gdb / objfiles.c
CommitLineData
c906108c 1/* GDB routines for manipulating objfiles.
af5f3db6
AC
2
3 Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
b99607ea 4 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
af5f3db6 5
c906108c
SS
6 Contributed by Cygnus Support, using pieces from other GDB modules.
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
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.
c906108c 14
c5aa993b
JM
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.
c906108c 19
c5aa993b
JM
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. */
c906108c
SS
24
25/* This file contains support routines for creating, manipulating, and
26 destroying objfile structures. */
27
28#include "defs.h"
29#include "bfd.h" /* Binary File Description */
30#include "symtab.h"
31#include "symfile.h"
32#include "objfiles.h"
33#include "gdb-stabs.h"
34#include "target.h"
af5f3db6 35#include "bcache.h"
c906108c 36
0d0e1a63 37#include "gdb_assert.h"
c906108c
SS
38#include <sys/types.h>
39#include "gdb_stat.h"
40#include <fcntl.h>
04ea0df1 41#include "gdb_obstack.h"
c906108c 42#include "gdb_string.h"
2de7ced7 43#include "hashtab.h"
c906108c 44
7a292a7a 45#include "breakpoint.h"
fe898f56 46#include "block.h"
de4f826b 47#include "dictionary.h"
7a292a7a 48
c906108c
SS
49/* Prototypes for local functions */
50
0d0e1a63
MK
51static void objfile_alloc_data (struct objfile *objfile);
52static void objfile_free_data (struct objfile *objfile);
53
c906108c
SS
54/* Externally visible variables that are owned by this module.
55 See declarations in objfile.h for more info. */
56
c5aa993b 57struct objfile *object_files; /* Linked list of all objfiles */
c906108c
SS
58struct objfile *current_objfile; /* For symbol file being read in */
59struct objfile *symfile_objfile; /* Main symbol table loaded from */
60struct objfile *rt_common_objfile; /* For runtime common symbols */
61
c906108c
SS
62/* Locate all mappable sections of a BFD file.
63 objfile_p_char is a char * to get it through
64 bfd_map_over_sections; we cast it back to its proper type. */
65
66#ifndef TARGET_KEEP_SECTION
67#define TARGET_KEEP_SECTION(ASECT) 0
68#endif
69
96baa820
JM
70/* Called via bfd_map_over_sections to build up the section table that
71 the objfile references. The objfile contains pointers to the start
72 of the table (objfile->sections) and to the first location after
73 the end of the table (objfile->sections_end). */
74
c906108c 75static void
7be0c536
AC
76add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
77 void *objfile_p_char)
c906108c
SS
78{
79 struct objfile *objfile = (struct objfile *) objfile_p_char;
80 struct obj_section section;
81 flagword aflag;
82
83 aflag = bfd_get_section_flags (abfd, asect);
84
c5aa993b 85 if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
c906108c
SS
86 return;
87
88 if (0 == bfd_section_size (abfd, asect))
89 return;
90 section.offset = 0;
91 section.objfile = objfile;
92 section.the_bfd_section = asect;
93 section.ovly_mapped = 0;
94 section.addr = bfd_section_vma (abfd, asect);
95 section.endaddr = section.addr + bfd_section_size (abfd, asect);
8b92e4d5 96 obstack_grow (&objfile->objfile_obstack, (char *) &section, sizeof (section));
c906108c
SS
97 objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
98}
99
100/* Builds a section table for OBJFILE.
101 Returns 0 if OK, 1 on error (in which case bfd_error contains the
96baa820
JM
102 error).
103
104 Note that while we are building the table, which goes into the
105 psymbol obstack, we hijack the sections_end pointer to instead hold
106 a count of the number of sections. When bfd_map_over_sections
107 returns, this count is used to compute the pointer to the end of
108 the sections table, which then overwrites the count.
109
110 Also note that the OFFSET and OVLY_MAPPED in each table entry
111 are initialized to zero.
112
113 Also note that if anything else writes to the psymbol obstack while
114 we are building the table, we're pretty much hosed. */
c906108c
SS
115
116int
fba45db2 117build_objfile_section_table (struct objfile *objfile)
c906108c
SS
118{
119 /* objfile->sections can be already set when reading a mapped symbol
120 file. I believe that we do need to rebuild the section table in
121 this case (we rebuild other things derived from the bfd), but we
8b92e4d5 122 can't free the old one (it's in the objfile_obstack). So we just
c906108c
SS
123 waste some memory. */
124
125 objfile->sections_end = 0;
c5aa993b 126 bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
c906108c 127 objfile->sections = (struct obj_section *)
8b92e4d5 128 obstack_finish (&objfile->objfile_obstack);
c906108c 129 objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
c5aa993b 130 return (0);
c906108c
SS
131}
132
2df3850c
JM
133/* Given a pointer to an initialized bfd (ABFD) and some flag bits
134 allocate a new objfile struct, fill it in as best we can, link it
135 into the list of all known objfiles, and return a pointer to the
136 new objfile struct.
c906108c 137
2df3850c 138 The FLAGS word contains various bits (OBJF_*) that can be taken as
78a4a9b9
AC
139 requests for specific operations. Other bits like OBJF_SHARED are
140 simply copied through to the new objfile flags member. */
c906108c 141
eb9a305d
DC
142/* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
143 by jv-lang.c, to create an artificial objfile used to hold
144 information about dynamically-loaded Java classes. Unfortunately,
145 that branch of this function doesn't get tested very frequently, so
146 it's prone to breakage. (E.g. at one time the name was set to NULL
147 in that situation, which broke a loop over all names in the dynamic
148 library loader.) If you change this function, please try to leave
149 things in a consistent state even if abfd is NULL. */
150
c906108c 151struct objfile *
fba45db2 152allocate_objfile (bfd *abfd, int flags)
c906108c
SS
153{
154 struct objfile *objfile = NULL;
155 struct objfile *last_one = NULL;
156
c906108c
SS
157 /* If we don't support mapped symbol files, didn't ask for the file to be
158 mapped, or failed to open the mapped file for some reason, then revert
159 back to an unmapped objfile. */
160
161 if (objfile == NULL)
162 {
163 objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
164 memset (objfile, 0, sizeof (struct objfile));
c5aa993b 165 objfile->md = NULL;
af5f3db6
AC
166 objfile->psymbol_cache = bcache_xmalloc ();
167 objfile->macro_cache = bcache_xmalloc ();
8b92e4d5 168 obstack_specify_allocation (&objfile->objfile_obstack, 0, 0, xmalloc,
b8c9b27d 169 xfree);
c5aa993b 170 obstack_specify_allocation (&objfile->symbol_obstack, 0, 0, xmalloc,
b8c9b27d 171 xfree);
15831452
JB
172
173 terminate_minimal_symbol_table (objfile);
c906108c
SS
174 }
175
0d0e1a63
MK
176 objfile_alloc_data (objfile);
177
c906108c
SS
178 /* Update the per-objfile information that comes from the bfd, ensuring
179 that any data that is reference is saved in the per-objfile data
180 region. */
181
c5aa993b
JM
182 objfile->obfd = abfd;
183 if (objfile->name != NULL)
c906108c 184 {
aac7f4ea 185 xmfree (objfile->md, objfile->name);
c906108c
SS
186 }
187 if (abfd != NULL)
188 {
c5aa993b
JM
189 objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
190 objfile->mtime = bfd_get_mtime (abfd);
c906108c
SS
191
192 /* Build section table. */
193
194 if (build_objfile_section_table (objfile))
195 {
c5aa993b
JM
196 error ("Can't find the file sections in `%s': %s",
197 objfile->name, bfd_errmsg (bfd_get_error ()));
c906108c
SS
198 }
199 }
eb9a305d
DC
200 else
201 {
a9c0dc7f 202 objfile->name = mstrsave (objfile->md, "<<anonymous objfile>>");
eb9a305d 203 }
c906108c 204
b8fbeb18
EZ
205 /* Initialize the section indexes for this objfile, so that we can
206 later detect if they are used w/o being properly assigned to. */
207
5c4e30ca
DC
208 objfile->sect_index_text = -1;
209 objfile->sect_index_data = -1;
210 objfile->sect_index_bss = -1;
211 objfile->sect_index_rodata = -1;
212
213 /* We don't yet have a C++-specific namespace symtab. */
214
215 objfile->cp_namespace_symtab = NULL;
b8fbeb18 216
c906108c
SS
217 /* Add this file onto the tail of the linked list of other such files. */
218
c5aa993b 219 objfile->next = NULL;
c906108c
SS
220 if (object_files == NULL)
221 object_files = objfile;
222 else
223 {
224 for (last_one = object_files;
c5aa993b
JM
225 last_one->next;
226 last_one = last_one->next);
227 last_one->next = objfile;
c906108c
SS
228 }
229
2df3850c
JM
230 /* Save passed in flag bits. */
231 objfile->flags |= flags;
c906108c
SS
232
233 return (objfile);
234}
235
15831452
JB
236
237/* Create the terminating entry of OBJFILE's minimal symbol table.
238 If OBJFILE->msymbols is zero, allocate a single entry from
239 OBJFILE->symbol_obstack; otherwise, just initialize
240 OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
241void
242terminate_minimal_symbol_table (struct objfile *objfile)
243{
244 if (! objfile->msymbols)
245 objfile->msymbols = ((struct minimal_symbol *)
246 obstack_alloc (&objfile->symbol_obstack,
247 sizeof (objfile->msymbols[0])));
248
249 {
250 struct minimal_symbol *m
251 = &objfile->msymbols[objfile->minimal_symbol_count];
252
253 memset (m, 0, sizeof (*m));
22abf04a 254 DEPRECATED_SYMBOL_NAME (m) = NULL;
15831452
JB
255 SYMBOL_VALUE_ADDRESS (m) = 0;
256 MSYMBOL_INFO (m) = NULL;
f594e5e9 257 MSYMBOL_SIZE (m) = 0;
15831452
JB
258 MSYMBOL_TYPE (m) = mst_unknown;
259 SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
260 }
261}
262
263
5b5d99cf
JB
264/* Put one object file before a specified on in the global list.
265 This can be used to make sure an object file is destroyed before
266 another when using ALL_OBJFILES_SAFE to free all objfiles. */
267void
268put_objfile_before (struct objfile *objfile, struct objfile *before_this)
269{
270 struct objfile **objp;
271
272 unlink_objfile (objfile);
273
274 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
275 {
276 if (*objp == before_this)
277 {
278 objfile->next = *objp;
279 *objp = objfile;
280 return;
281 }
282 }
283
284 internal_error (__FILE__, __LINE__,
285 "put_objfile_before: before objfile not in list");
286}
287
c906108c
SS
288/* Put OBJFILE at the front of the list. */
289
290void
fba45db2 291objfile_to_front (struct objfile *objfile)
c906108c
SS
292{
293 struct objfile **objp;
294 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
295 {
296 if (*objp == objfile)
297 {
298 /* Unhook it from where it is. */
299 *objp = objfile->next;
300 /* Put it in the front. */
301 objfile->next = object_files;
302 object_files = objfile;
303 break;
304 }
305 }
306}
307
308/* Unlink OBJFILE from the list of known objfiles, if it is found in the
309 list.
310
311 It is not a bug, or error, to call this function if OBJFILE is not known
312 to be in the current list. This is done in the case of mapped objfiles,
313 for example, just to ensure that the mapped objfile doesn't appear twice
314 in the list. Since the list is threaded, linking in a mapped objfile
315 twice would create a circular list.
316
317 If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
318 unlinking it, just to ensure that we have completely severed any linkages
319 between the OBJFILE and the list. */
320
321void
fba45db2 322unlink_objfile (struct objfile *objfile)
c906108c 323{
c5aa993b 324 struct objfile **objpp;
c906108c 325
c5aa993b 326 for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
c906108c 327 {
c5aa993b 328 if (*objpp == objfile)
c906108c 329 {
c5aa993b
JM
330 *objpp = (*objpp)->next;
331 objfile->next = NULL;
07cd4b97 332 return;
c906108c
SS
333 }
334 }
07cd4b97 335
8e65ff28
AC
336 internal_error (__FILE__, __LINE__,
337 "unlink_objfile: objfile already unlinked");
c906108c
SS
338}
339
340
341/* Destroy an objfile and all the symtabs and psymtabs under it. Note
342 that as much as possible is allocated on the symbol_obstack and
8b92e4d5 343 objfile_obstack, so that the memory can be efficiently freed.
c906108c
SS
344
345 Things which we do NOT free because they are not in malloc'd memory
346 or not in memory specific to the objfile include:
347
c5aa993b 348 objfile -> sf
c906108c
SS
349
350 FIXME: If the objfile is using reusable symbol information (via mmalloc),
351 then we need to take into account the fact that more than one process
352 may be using the symbol information at the same time (when mmalloc is
353 extended to support cooperative locking). When more than one process
354 is using the mapped symbol info, we need to be more careful about when
355 we free objects in the reusable area. */
356
357void
fba45db2 358free_objfile (struct objfile *objfile)
c906108c 359{
5b5d99cf
JB
360 if (objfile->separate_debug_objfile)
361 {
362 free_objfile (objfile->separate_debug_objfile);
363 }
364
365 if (objfile->separate_debug_objfile_backlink)
366 {
367 /* We freed the separate debug file, make sure the base objfile
368 doesn't reference it. */
369 objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
370 }
371
c906108c
SS
372 /* First do any symbol file specific actions required when we are
373 finished with a particular symbol file. Note that if the objfile
374 is using reusable symbol information (via mmalloc) then each of
375 these routines is responsible for doing the correct thing, either
376 freeing things which are valid only during this particular gdb
377 execution, or leaving them to be reused during the next one. */
378
c5aa993b 379 if (objfile->sf != NULL)
c906108c 380 {
c5aa993b 381 (*objfile->sf->sym_finish) (objfile);
c906108c
SS
382 }
383
384 /* We always close the bfd. */
385
c5aa993b 386 if (objfile->obfd != NULL)
c906108c
SS
387 {
388 char *name = bfd_get_filename (objfile->obfd);
c5aa993b 389 if (!bfd_close (objfile->obfd))
c906108c
SS
390 warning ("cannot close \"%s\": %s",
391 name, bfd_errmsg (bfd_get_error ()));
b8c9b27d 392 xfree (name);
c906108c
SS
393 }
394
395 /* Remove it from the chain of all objfiles. */
396
397 unlink_objfile (objfile);
398
399 /* If we are going to free the runtime common objfile, mark it
400 as unallocated. */
401
402 if (objfile == rt_common_objfile)
403 rt_common_objfile = NULL;
404
405 /* Before the symbol table code was redone to make it easier to
406 selectively load and remove information particular to a specific
407 linkage unit, gdb used to do these things whenever the monolithic
408 symbol table was blown away. How much still needs to be done
409 is unknown, but we play it safe for now and keep each action until
410 it is shown to be no longer needed. */
c5aa993b 411
c906108c
SS
412 /* I *think* all our callers call clear_symtab_users. If so, no need
413 to call this here. */
414 clear_pc_function_cache ();
415
78a4a9b9 416 /* The last thing we do is free the objfile struct itself. */
c906108c 417
78a4a9b9
AC
418 objfile_free_data (objfile);
419 if (objfile->name != NULL)
c906108c 420 {
78a4a9b9 421 xmfree (objfile->md, objfile->name);
c906108c 422 }
78a4a9b9
AC
423 if (objfile->global_psymbols.list)
424 xmfree (objfile->md, objfile->global_psymbols.list);
425 if (objfile->static_psymbols.list)
426 xmfree (objfile->md, objfile->static_psymbols.list);
427 /* Free the obstacks for non-reusable objfiles */
428 bcache_xfree (objfile->psymbol_cache);
429 bcache_xfree (objfile->macro_cache);
430 if (objfile->demangled_names_hash)
431 htab_delete (objfile->demangled_names_hash);
b99607ea 432 obstack_free (&objfile->objfile_obstack, 0);
8b92e4d5
EZ
433 obstack_free (&objfile->symbol_obstack, 0);
434
78a4a9b9
AC
435 xmfree (objfile->md, objfile);
436 objfile = NULL;
c906108c
SS
437}
438
74b7792f
AC
439static void
440do_free_objfile_cleanup (void *obj)
441{
442 free_objfile (obj);
443}
444
445struct cleanup *
446make_cleanup_free_objfile (struct objfile *obj)
447{
448 return make_cleanup (do_free_objfile_cleanup, obj);
449}
c906108c
SS
450
451/* Free all the object files at once and clean up their users. */
452
453void
fba45db2 454free_all_objfiles (void)
c906108c
SS
455{
456 struct objfile *objfile, *temp;
457
458 ALL_OBJFILES_SAFE (objfile, temp)
c5aa993b
JM
459 {
460 free_objfile (objfile);
461 }
c906108c
SS
462 clear_symtab_users ();
463}
464\f
465/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
466 entries in new_offsets. */
467void
fba45db2 468objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
c906108c 469{
d4f3574e 470 struct section_offsets *delta =
a39a16c4
MM
471 ((struct section_offsets *)
472 alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
c906108c
SS
473
474 {
475 int i;
476 int something_changed = 0;
477 for (i = 0; i < objfile->num_sections; ++i)
478 {
a4c8257b 479 delta->offsets[i] =
c906108c
SS
480 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
481 if (ANOFFSET (delta, i) != 0)
482 something_changed = 1;
483 }
484 if (!something_changed)
485 return;
486 }
487
488 /* OK, get all the symtabs. */
489 {
490 struct symtab *s;
491
492 ALL_OBJFILE_SYMTABS (objfile, s)
c5aa993b
JM
493 {
494 struct linetable *l;
495 struct blockvector *bv;
496 int i;
497
498 /* First the line table. */
499 l = LINETABLE (s);
500 if (l)
501 {
502 for (i = 0; i < l->nitems; ++i)
503 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
504 }
c906108c 505
c5aa993b
JM
506 /* Don't relocate a shared blockvector more than once. */
507 if (!s->primary)
508 continue;
c906108c 509
c5aa993b
JM
510 bv = BLOCKVECTOR (s);
511 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
512 {
513 struct block *b;
e88c90f2 514 struct symbol *sym;
de4f826b 515 struct dict_iterator iter;
c5aa993b
JM
516
517 b = BLOCKVECTOR_BLOCK (bv, i);
518 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
519 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
520
de4f826b 521 ALL_BLOCK_SYMBOLS (b, iter, sym)
c5aa993b 522 {
7a78d0ee
KB
523 fixup_symbol_section (sym, objfile);
524
c5aa993b 525 /* The RS6000 code from which this was taken skipped
176620f1 526 any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
c5aa993b
JM
527 But I'm leaving out that test, on the theory that
528 they can't possibly pass the tests below. */
529 if ((SYMBOL_CLASS (sym) == LOC_LABEL
530 || SYMBOL_CLASS (sym) == LOC_STATIC
531 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
532 && SYMBOL_SECTION (sym) >= 0)
533 {
534 SYMBOL_VALUE_ADDRESS (sym) +=
535 ANOFFSET (delta, SYMBOL_SECTION (sym));
536 }
c906108c 537#ifdef MIPS_EFI_SYMBOL_NAME
c5aa993b 538 /* Relocate Extra Function Info for ecoff. */
c906108c 539
c5aa993b 540 else if (SYMBOL_CLASS (sym) == LOC_CONST
176620f1 541 && SYMBOL_DOMAIN (sym) == LABEL_DOMAIN
22abf04a 542 && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
c5aa993b 543 ecoff_relocate_efi (sym, ANOFFSET (delta,
c906108c
SS
544 s->block_line_section));
545#endif
c5aa993b
JM
546 }
547 }
548 }
c906108c
SS
549 }
550
551 {
552 struct partial_symtab *p;
553
554 ALL_OBJFILE_PSYMTABS (objfile, p)
c5aa993b 555 {
b8fbeb18
EZ
556 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
557 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c5aa993b 558 }
c906108c
SS
559 }
560
561 {
562 struct partial_symbol **psym;
563
564 for (psym = objfile->global_psymbols.list;
565 psym < objfile->global_psymbols.next;
566 psym++)
7a78d0ee
KB
567 {
568 fixup_psymbol_section (*psym, objfile);
569 if (SYMBOL_SECTION (*psym) >= 0)
570 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
571 SYMBOL_SECTION (*psym));
572 }
c906108c
SS
573 for (psym = objfile->static_psymbols.list;
574 psym < objfile->static_psymbols.next;
575 psym++)
7a78d0ee
KB
576 {
577 fixup_psymbol_section (*psym, objfile);
578 if (SYMBOL_SECTION (*psym) >= 0)
579 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
580 SYMBOL_SECTION (*psym));
581 }
c906108c
SS
582 }
583
584 {
585 struct minimal_symbol *msym;
586 ALL_OBJFILE_MSYMBOLS (objfile, msym)
587 if (SYMBOL_SECTION (msym) >= 0)
c5aa993b 588 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
c906108c
SS
589 }
590 /* Relocating different sections by different amounts may cause the symbols
591 to be out of order. */
592 msymbols_sort (objfile);
593
594 {
595 int i;
596 for (i = 0; i < objfile->num_sections; ++i)
a4c8257b 597 (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
c906108c
SS
598 }
599
36b0c0e0
PS
600 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
601 {
602 /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
603 only as a fallback. */
604 struct obj_section *s;
605 s = find_pc_section (objfile->ei.entry_point);
606 if (s)
607 objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
608 else
609 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
610 }
611
c906108c
SS
612 {
613 struct obj_section *s;
614 bfd *abfd;
615
616 abfd = objfile->obfd;
617
96baa820 618 ALL_OBJFILE_OSECTIONS (objfile, s)
c906108c 619 {
78f0949b
KB
620 int idx = s->the_bfd_section->index;
621
622 s->addr += ANOFFSET (delta, idx);
623 s->endaddr += ANOFFSET (delta, idx);
c906108c
SS
624 }
625 }
626
c906108c
SS
627 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
628 {
b8fbeb18
EZ
629 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
630 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
631 }
632
627b3ba2 633 if (objfile->ei.deprecated_entry_file_lowpc != INVALID_ENTRY_LOWPC)
c906108c 634 {
627b3ba2
AC
635 objfile->ei.deprecated_entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
636 objfile->ei.deprecated_entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
637 }
638
639 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
640 {
b8fbeb18
EZ
641 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
642 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
643 }
644
645 /* Relocate breakpoints as necessary, after things are relocated. */
646 breakpoint_re_set ();
647}
648\f
649/* Many places in gdb want to test just to see if we have any partial
650 symbols available. This function returns zero if none are currently
651 available, nonzero otherwise. */
652
653int
fba45db2 654have_partial_symbols (void)
c906108c
SS
655{
656 struct objfile *ofp;
657
658 ALL_OBJFILES (ofp)
c5aa993b
JM
659 {
660 if (ofp->psymtabs != NULL)
661 {
662 return 1;
663 }
664 }
c906108c
SS
665 return 0;
666}
667
668/* Many places in gdb want to test just to see if we have any full
669 symbols available. This function returns zero if none are currently
670 available, nonzero otherwise. */
671
672int
fba45db2 673have_full_symbols (void)
c906108c
SS
674{
675 struct objfile *ofp;
676
677 ALL_OBJFILES (ofp)
c5aa993b
JM
678 {
679 if (ofp->symtabs != NULL)
680 {
681 return 1;
682 }
683 }
c906108c
SS
684 return 0;
685}
686
687
688/* This operations deletes all objfile entries that represent solibs that
689 weren't explicitly loaded by the user, via e.g., the add-symbol-file
690 command.
c5aa993b 691 */
c906108c 692void
fba45db2 693objfile_purge_solibs (void)
c906108c 694{
c5aa993b
JM
695 struct objfile *objf;
696 struct objfile *temp;
c906108c
SS
697
698 ALL_OBJFILES_SAFE (objf, temp)
699 {
700 /* We assume that the solib package has been purged already, or will
701 be soon.
c5aa993b 702 */
2df3850c 703 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
c906108c
SS
704 free_objfile (objf);
705 }
706}
707
708
709/* Many places in gdb want to test just to see if we have any minimal
710 symbols available. This function returns zero if none are currently
711 available, nonzero otherwise. */
712
713int
fba45db2 714have_minimal_symbols (void)
c906108c
SS
715{
716 struct objfile *ofp;
717
718 ALL_OBJFILES (ofp)
c5aa993b 719 {
15831452 720 if (ofp->minimal_symbol_count > 0)
c5aa993b
JM
721 {
722 return 1;
723 }
724 }
c906108c
SS
725 return 0;
726}
727
198beae2
AC
728/* Returns a section whose range includes PC and SECTION, or NULL if
729 none found. Note the distinction between the return type, struct
730 obj_section (which is defined in gdb), and the input type "struct
731 bfd_section" (which is a bfd-defined data type). The obj_section
732 contains a pointer to the "struct bfd_section". */
c906108c
SS
733
734struct obj_section *
198beae2 735find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
c906108c
SS
736{
737 struct obj_section *s;
738 struct objfile *objfile;
c5aa993b 739
96baa820 740 ALL_OBJSECTIONS (objfile, s)
c5aa993b
JM
741 if ((section == 0 || section == s->the_bfd_section) &&
742 s->addr <= pc && pc < s->endaddr)
c5aa993b 743 return (s);
c906108c 744
c5aa993b 745 return (NULL);
c906108c
SS
746}
747
748/* Returns a section whose range includes PC or NULL if none found.
749 Backward compatibility, no section. */
750
751struct obj_section *
fba45db2 752find_pc_section (CORE_ADDR pc)
c906108c
SS
753{
754 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
755}
c5aa993b 756
c906108c
SS
757
758/* In SVR4, we recognize a trampoline by it's section name.
759 That is, if the pc is in a section named ".plt" then we are in
760 a trampoline. */
761
762int
fba45db2 763in_plt_section (CORE_ADDR pc, char *name)
c906108c
SS
764{
765 struct obj_section *s;
766 int retval = 0;
c5aa993b
JM
767
768 s = find_pc_section (pc);
769
c906108c
SS
770 retval = (s != NULL
771 && s->the_bfd_section->name != NULL
6314a349 772 && strcmp (s->the_bfd_section->name, ".plt") == 0);
c5aa993b 773 return (retval);
c906108c 774}
7be570e7
JM
775
776/* Return nonzero if NAME is in the import list of OBJFILE. Else
777 return zero. */
778
779int
fba45db2 780is_in_import_list (char *name, struct objfile *objfile)
7be570e7 781{
52f0bd74 782 int i;
7be570e7
JM
783
784 if (!objfile || !name || !*name)
785 return 0;
786
787 for (i = 0; i < objfile->import_list_size; i++)
cb137aa5 788 if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
7be570e7
JM
789 return 1;
790 return 0;
791}
0d0e1a63
MK
792\f
793
794/* Keep a registry of per-objfile data-pointers required by other GDB
795 modules. */
796
797struct objfile_data
798{
799 unsigned index;
800};
801
802struct objfile_data_registration
803{
804 struct objfile_data *data;
805 struct objfile_data_registration *next;
806};
807
808struct objfile_data_registry
809{
810 struct objfile_data_registration *registrations;
811 unsigned num_registrations;
812};
813
814static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
815
816const struct objfile_data *
817register_objfile_data (void)
818{
819 struct objfile_data_registration **curr;
820
821 /* Append new registration. */
822 for (curr = &objfile_data_registry.registrations;
823 *curr != NULL; curr = &(*curr)->next);
7be570e7 824
0d0e1a63
MK
825 *curr = XMALLOC (struct objfile_data_registration);
826 (*curr)->next = NULL;
827 (*curr)->data = XMALLOC (struct objfile_data);
828 (*curr)->data->index = objfile_data_registry.num_registrations++;
829
830 return (*curr)->data;
831}
832
833static void
834objfile_alloc_data (struct objfile *objfile)
835{
836 gdb_assert (objfile->data == NULL);
837 objfile->num_data = objfile_data_registry.num_registrations;
838 objfile->data = XCALLOC (objfile->num_data, void *);
839}
840
841static void
842objfile_free_data (struct objfile *objfile)
843{
844 gdb_assert (objfile->data != NULL);
845 xfree (objfile->data);
846 objfile->data = NULL;
847}
848
7b097ae3
MK
849void
850clear_objfile_data (struct objfile *objfile)
851{
852 gdb_assert (objfile->data != NULL);
853 memset (objfile->data, 0, objfile->num_data * sizeof (void *));
854}
855
0d0e1a63
MK
856void
857set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
858 void *value)
859{
860 gdb_assert (data->index < objfile->num_data);
861 objfile->data[data->index] = value;
862}
863
864void *
865objfile_data (struct objfile *objfile, const struct objfile_data *data)
866{
867 gdb_assert (data->index < objfile->num_data);
868 return objfile->data[data->index];
869}
This page took 0.400441 seconds and 4 git commands to generate.