2004-02-14 Elena Zannoni <ezannoni@redhat.com>
[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 ();
1ab21617
EZ
168 /* We could use obstack_specify_allocation here instead, but
169 gdb_obstack.h specifies the alloc/dealloc functions. */
170 obstack_init (&objfile->objfile_obstack);
15831452 171 terminate_minimal_symbol_table (objfile);
c906108c
SS
172 }
173
0d0e1a63
MK
174 objfile_alloc_data (objfile);
175
c906108c
SS
176 /* Update the per-objfile information that comes from the bfd, ensuring
177 that any data that is reference is saved in the per-objfile data
178 region. */
179
c5aa993b
JM
180 objfile->obfd = abfd;
181 if (objfile->name != NULL)
c906108c 182 {
aac7f4ea 183 xmfree (objfile->md, objfile->name);
c906108c
SS
184 }
185 if (abfd != NULL)
186 {
c5aa993b
JM
187 objfile->name = mstrsave (objfile->md, bfd_get_filename (abfd));
188 objfile->mtime = bfd_get_mtime (abfd);
c906108c
SS
189
190 /* Build section table. */
191
192 if (build_objfile_section_table (objfile))
193 {
c5aa993b
JM
194 error ("Can't find the file sections in `%s': %s",
195 objfile->name, bfd_errmsg (bfd_get_error ()));
c906108c
SS
196 }
197 }
eb9a305d
DC
198 else
199 {
a9c0dc7f 200 objfile->name = mstrsave (objfile->md, "<<anonymous objfile>>");
eb9a305d 201 }
c906108c 202
b8fbeb18
EZ
203 /* Initialize the section indexes for this objfile, so that we can
204 later detect if they are used w/o being properly assigned to. */
205
5c4e30ca
DC
206 objfile->sect_index_text = -1;
207 objfile->sect_index_data = -1;
208 objfile->sect_index_bss = -1;
209 objfile->sect_index_rodata = -1;
210
211 /* We don't yet have a C++-specific namespace symtab. */
212
213 objfile->cp_namespace_symtab = NULL;
b8fbeb18 214
c906108c
SS
215 /* Add this file onto the tail of the linked list of other such files. */
216
c5aa993b 217 objfile->next = NULL;
c906108c
SS
218 if (object_files == NULL)
219 object_files = objfile;
220 else
221 {
222 for (last_one = object_files;
c5aa993b
JM
223 last_one->next;
224 last_one = last_one->next);
225 last_one->next = objfile;
c906108c
SS
226 }
227
2df3850c
JM
228 /* Save passed in flag bits. */
229 objfile->flags |= flags;
c906108c
SS
230
231 return (objfile);
232}
233
9ab9195f
EZ
234/* Initialize entry point information for this objfile. */
235
236void
237init_entry_point_info (struct objfile *objfile)
238{
239 /* Save startup file's range of PC addresses to help blockframe.c
240 decide where the bottom of the stack is. */
241
242 if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
243 {
244 /* Executable file -- record its entry point so we'll recognize
245 the startup file because it contains the entry point. */
246 objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
247 }
248 else
249 {
250 /* Examination of non-executable.o files. Short-circuit this stuff. */
251 objfile->ei.entry_point = INVALID_ENTRY_POINT;
252 }
253 objfile->ei.deprecated_entry_file_lowpc = INVALID_ENTRY_LOWPC;
254 objfile->ei.deprecated_entry_file_highpc = INVALID_ENTRY_HIGHPC;
255 objfile->ei.entry_func_lowpc = INVALID_ENTRY_LOWPC;
256 objfile->ei.entry_func_highpc = INVALID_ENTRY_HIGHPC;
257 objfile->ei.main_func_lowpc = INVALID_ENTRY_LOWPC;
258 objfile->ei.main_func_highpc = INVALID_ENTRY_HIGHPC;
259}
260
261/* Get current entry point address. */
262
263CORE_ADDR
264entry_point_address (void)
265{
266 return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
267}
15831452
JB
268
269/* Create the terminating entry of OBJFILE's minimal symbol table.
270 If OBJFILE->msymbols is zero, allocate a single entry from
4a146b47 271 OBJFILE->objfile_obstack; otherwise, just initialize
15831452
JB
272 OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
273void
274terminate_minimal_symbol_table (struct objfile *objfile)
275{
276 if (! objfile->msymbols)
277 objfile->msymbols = ((struct minimal_symbol *)
4a146b47 278 obstack_alloc (&objfile->objfile_obstack,
15831452
JB
279 sizeof (objfile->msymbols[0])));
280
281 {
282 struct minimal_symbol *m
283 = &objfile->msymbols[objfile->minimal_symbol_count];
284
285 memset (m, 0, sizeof (*m));
22abf04a 286 DEPRECATED_SYMBOL_NAME (m) = NULL;
15831452
JB
287 SYMBOL_VALUE_ADDRESS (m) = 0;
288 MSYMBOL_INFO (m) = NULL;
f594e5e9 289 MSYMBOL_SIZE (m) = 0;
15831452
JB
290 MSYMBOL_TYPE (m) = mst_unknown;
291 SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
292 }
293}
294
295
5b5d99cf
JB
296/* Put one object file before a specified on in the global list.
297 This can be used to make sure an object file is destroyed before
298 another when using ALL_OBJFILES_SAFE to free all objfiles. */
299void
300put_objfile_before (struct objfile *objfile, struct objfile *before_this)
301{
302 struct objfile **objp;
303
304 unlink_objfile (objfile);
305
306 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
307 {
308 if (*objp == before_this)
309 {
310 objfile->next = *objp;
311 *objp = objfile;
312 return;
313 }
314 }
315
316 internal_error (__FILE__, __LINE__,
317 "put_objfile_before: before objfile not in list");
318}
319
c906108c
SS
320/* Put OBJFILE at the front of the list. */
321
322void
fba45db2 323objfile_to_front (struct objfile *objfile)
c906108c
SS
324{
325 struct objfile **objp;
326 for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
327 {
328 if (*objp == objfile)
329 {
330 /* Unhook it from where it is. */
331 *objp = objfile->next;
332 /* Put it in the front. */
333 objfile->next = object_files;
334 object_files = objfile;
335 break;
336 }
337 }
338}
339
340/* Unlink OBJFILE from the list of known objfiles, if it is found in the
341 list.
342
343 It is not a bug, or error, to call this function if OBJFILE is not known
344 to be in the current list. This is done in the case of mapped objfiles,
345 for example, just to ensure that the mapped objfile doesn't appear twice
346 in the list. Since the list is threaded, linking in a mapped objfile
347 twice would create a circular list.
348
349 If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
350 unlinking it, just to ensure that we have completely severed any linkages
351 between the OBJFILE and the list. */
352
353void
fba45db2 354unlink_objfile (struct objfile *objfile)
c906108c 355{
c5aa993b 356 struct objfile **objpp;
c906108c 357
c5aa993b 358 for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
c906108c 359 {
c5aa993b 360 if (*objpp == objfile)
c906108c 361 {
c5aa993b
JM
362 *objpp = (*objpp)->next;
363 objfile->next = NULL;
07cd4b97 364 return;
c906108c
SS
365 }
366 }
07cd4b97 367
8e65ff28
AC
368 internal_error (__FILE__, __LINE__,
369 "unlink_objfile: objfile already unlinked");
c906108c
SS
370}
371
372
373/* Destroy an objfile and all the symtabs and psymtabs under it. Note
4a146b47
EZ
374 that as much as possible is allocated on the objfile_obstack
375 so that the memory can be efficiently freed.
c906108c
SS
376
377 Things which we do NOT free because they are not in malloc'd memory
378 or not in memory specific to the objfile include:
379
c5aa993b 380 objfile -> sf
c906108c
SS
381
382 FIXME: If the objfile is using reusable symbol information (via mmalloc),
383 then we need to take into account the fact that more than one process
384 may be using the symbol information at the same time (when mmalloc is
385 extended to support cooperative locking). When more than one process
386 is using the mapped symbol info, we need to be more careful about when
387 we free objects in the reusable area. */
388
389void
fba45db2 390free_objfile (struct objfile *objfile)
c906108c 391{
5b5d99cf
JB
392 if (objfile->separate_debug_objfile)
393 {
394 free_objfile (objfile->separate_debug_objfile);
395 }
396
397 if (objfile->separate_debug_objfile_backlink)
398 {
399 /* We freed the separate debug file, make sure the base objfile
400 doesn't reference it. */
401 objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
402 }
403
c906108c
SS
404 /* First do any symbol file specific actions required when we are
405 finished with a particular symbol file. Note that if the objfile
406 is using reusable symbol information (via mmalloc) then each of
407 these routines is responsible for doing the correct thing, either
408 freeing things which are valid only during this particular gdb
409 execution, or leaving them to be reused during the next one. */
410
c5aa993b 411 if (objfile->sf != NULL)
c906108c 412 {
c5aa993b 413 (*objfile->sf->sym_finish) (objfile);
c906108c
SS
414 }
415
416 /* We always close the bfd. */
417
c5aa993b 418 if (objfile->obfd != NULL)
c906108c
SS
419 {
420 char *name = bfd_get_filename (objfile->obfd);
c5aa993b 421 if (!bfd_close (objfile->obfd))
c906108c
SS
422 warning ("cannot close \"%s\": %s",
423 name, bfd_errmsg (bfd_get_error ()));
b8c9b27d 424 xfree (name);
c906108c
SS
425 }
426
427 /* Remove it from the chain of all objfiles. */
428
429 unlink_objfile (objfile);
430
431 /* If we are going to free the runtime common objfile, mark it
432 as unallocated. */
433
434 if (objfile == rt_common_objfile)
435 rt_common_objfile = NULL;
436
437 /* Before the symbol table code was redone to make it easier to
438 selectively load and remove information particular to a specific
439 linkage unit, gdb used to do these things whenever the monolithic
440 symbol table was blown away. How much still needs to be done
441 is unknown, but we play it safe for now and keep each action until
442 it is shown to be no longer needed. */
c5aa993b 443
c906108c
SS
444 /* I *think* all our callers call clear_symtab_users. If so, no need
445 to call this here. */
446 clear_pc_function_cache ();
447
78a4a9b9 448 /* The last thing we do is free the objfile struct itself. */
c906108c 449
78a4a9b9
AC
450 objfile_free_data (objfile);
451 if (objfile->name != NULL)
c906108c 452 {
78a4a9b9 453 xmfree (objfile->md, objfile->name);
c906108c 454 }
78a4a9b9
AC
455 if (objfile->global_psymbols.list)
456 xmfree (objfile->md, objfile->global_psymbols.list);
457 if (objfile->static_psymbols.list)
458 xmfree (objfile->md, objfile->static_psymbols.list);
459 /* Free the obstacks for non-reusable objfiles */
460 bcache_xfree (objfile->psymbol_cache);
461 bcache_xfree (objfile->macro_cache);
462 if (objfile->demangled_names_hash)
463 htab_delete (objfile->demangled_names_hash);
b99607ea 464 obstack_free (&objfile->objfile_obstack, 0);
78a4a9b9
AC
465 xmfree (objfile->md, objfile);
466 objfile = NULL;
c906108c
SS
467}
468
74b7792f
AC
469static void
470do_free_objfile_cleanup (void *obj)
471{
472 free_objfile (obj);
473}
474
475struct cleanup *
476make_cleanup_free_objfile (struct objfile *obj)
477{
478 return make_cleanup (do_free_objfile_cleanup, obj);
479}
c906108c
SS
480
481/* Free all the object files at once and clean up their users. */
482
483void
fba45db2 484free_all_objfiles (void)
c906108c
SS
485{
486 struct objfile *objfile, *temp;
487
488 ALL_OBJFILES_SAFE (objfile, temp)
c5aa993b
JM
489 {
490 free_objfile (objfile);
491 }
c906108c
SS
492 clear_symtab_users ();
493}
494\f
495/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
496 entries in new_offsets. */
497void
fba45db2 498objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
c906108c 499{
d4f3574e 500 struct section_offsets *delta =
a39a16c4
MM
501 ((struct section_offsets *)
502 alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
c906108c
SS
503
504 {
505 int i;
506 int something_changed = 0;
507 for (i = 0; i < objfile->num_sections; ++i)
508 {
a4c8257b 509 delta->offsets[i] =
c906108c
SS
510 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
511 if (ANOFFSET (delta, i) != 0)
512 something_changed = 1;
513 }
514 if (!something_changed)
515 return;
516 }
517
518 /* OK, get all the symtabs. */
519 {
520 struct symtab *s;
521
522 ALL_OBJFILE_SYMTABS (objfile, s)
c5aa993b
JM
523 {
524 struct linetable *l;
525 struct blockvector *bv;
526 int i;
527
528 /* First the line table. */
529 l = LINETABLE (s);
530 if (l)
531 {
532 for (i = 0; i < l->nitems; ++i)
533 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
534 }
c906108c 535
c5aa993b
JM
536 /* Don't relocate a shared blockvector more than once. */
537 if (!s->primary)
538 continue;
c906108c 539
c5aa993b
JM
540 bv = BLOCKVECTOR (s);
541 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
542 {
543 struct block *b;
e88c90f2 544 struct symbol *sym;
de4f826b 545 struct dict_iterator iter;
c5aa993b
JM
546
547 b = BLOCKVECTOR_BLOCK (bv, i);
548 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
549 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
550
de4f826b 551 ALL_BLOCK_SYMBOLS (b, iter, sym)
c5aa993b 552 {
7a78d0ee
KB
553 fixup_symbol_section (sym, objfile);
554
c5aa993b 555 /* The RS6000 code from which this was taken skipped
176620f1 556 any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
c5aa993b
JM
557 But I'm leaving out that test, on the theory that
558 they can't possibly pass the tests below. */
559 if ((SYMBOL_CLASS (sym) == LOC_LABEL
560 || SYMBOL_CLASS (sym) == LOC_STATIC
561 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
562 && SYMBOL_SECTION (sym) >= 0)
563 {
564 SYMBOL_VALUE_ADDRESS (sym) +=
565 ANOFFSET (delta, SYMBOL_SECTION (sym));
566 }
c906108c 567#ifdef MIPS_EFI_SYMBOL_NAME
c5aa993b 568 /* Relocate Extra Function Info for ecoff. */
c906108c 569
c5aa993b 570 else if (SYMBOL_CLASS (sym) == LOC_CONST
176620f1 571 && SYMBOL_DOMAIN (sym) == LABEL_DOMAIN
22abf04a 572 && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
c5aa993b 573 ecoff_relocate_efi (sym, ANOFFSET (delta,
c906108c
SS
574 s->block_line_section));
575#endif
c5aa993b
JM
576 }
577 }
578 }
c906108c
SS
579 }
580
581 {
582 struct partial_symtab *p;
583
584 ALL_OBJFILE_PSYMTABS (objfile, p)
c5aa993b 585 {
b8fbeb18
EZ
586 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
587 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c5aa993b 588 }
c906108c
SS
589 }
590
591 {
592 struct partial_symbol **psym;
593
594 for (psym = objfile->global_psymbols.list;
595 psym < objfile->global_psymbols.next;
596 psym++)
7a78d0ee
KB
597 {
598 fixup_psymbol_section (*psym, objfile);
599 if (SYMBOL_SECTION (*psym) >= 0)
600 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
601 SYMBOL_SECTION (*psym));
602 }
c906108c
SS
603 for (psym = objfile->static_psymbols.list;
604 psym < objfile->static_psymbols.next;
605 psym++)
7a78d0ee
KB
606 {
607 fixup_psymbol_section (*psym, objfile);
608 if (SYMBOL_SECTION (*psym) >= 0)
609 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
610 SYMBOL_SECTION (*psym));
611 }
c906108c
SS
612 }
613
614 {
615 struct minimal_symbol *msym;
616 ALL_OBJFILE_MSYMBOLS (objfile, msym)
617 if (SYMBOL_SECTION (msym) >= 0)
c5aa993b 618 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
c906108c
SS
619 }
620 /* Relocating different sections by different amounts may cause the symbols
621 to be out of order. */
622 msymbols_sort (objfile);
623
624 {
625 int i;
626 for (i = 0; i < objfile->num_sections; ++i)
a4c8257b 627 (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
c906108c
SS
628 }
629
36b0c0e0
PS
630 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
631 {
632 /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
633 only as a fallback. */
634 struct obj_section *s;
635 s = find_pc_section (objfile->ei.entry_point);
636 if (s)
637 objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
638 else
639 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
640 }
641
c906108c
SS
642 {
643 struct obj_section *s;
644 bfd *abfd;
645
646 abfd = objfile->obfd;
647
96baa820 648 ALL_OBJFILE_OSECTIONS (objfile, s)
c906108c 649 {
78f0949b
KB
650 int idx = s->the_bfd_section->index;
651
652 s->addr += ANOFFSET (delta, idx);
653 s->endaddr += ANOFFSET (delta, idx);
c906108c
SS
654 }
655 }
656
c906108c
SS
657 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
658 {
b8fbeb18
EZ
659 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
660 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
661 }
662
627b3ba2 663 if (objfile->ei.deprecated_entry_file_lowpc != INVALID_ENTRY_LOWPC)
c906108c 664 {
627b3ba2
AC
665 objfile->ei.deprecated_entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
666 objfile->ei.deprecated_entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
667 }
668
669 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
670 {
b8fbeb18
EZ
671 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
672 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
673 }
674
675 /* Relocate breakpoints as necessary, after things are relocated. */
676 breakpoint_re_set ();
677}
678\f
679/* Many places in gdb want to test just to see if we have any partial
680 symbols available. This function returns zero if none are currently
681 available, nonzero otherwise. */
682
683int
fba45db2 684have_partial_symbols (void)
c906108c
SS
685{
686 struct objfile *ofp;
687
688 ALL_OBJFILES (ofp)
c5aa993b
JM
689 {
690 if (ofp->psymtabs != NULL)
691 {
692 return 1;
693 }
694 }
c906108c
SS
695 return 0;
696}
697
698/* Many places in gdb want to test just to see if we have any full
699 symbols available. This function returns zero if none are currently
700 available, nonzero otherwise. */
701
702int
fba45db2 703have_full_symbols (void)
c906108c
SS
704{
705 struct objfile *ofp;
706
707 ALL_OBJFILES (ofp)
c5aa993b
JM
708 {
709 if (ofp->symtabs != NULL)
710 {
711 return 1;
712 }
713 }
c906108c
SS
714 return 0;
715}
716
717
718/* This operations deletes all objfile entries that represent solibs that
719 weren't explicitly loaded by the user, via e.g., the add-symbol-file
720 command.
c5aa993b 721 */
c906108c 722void
fba45db2 723objfile_purge_solibs (void)
c906108c 724{
c5aa993b
JM
725 struct objfile *objf;
726 struct objfile *temp;
c906108c
SS
727
728 ALL_OBJFILES_SAFE (objf, temp)
729 {
730 /* We assume that the solib package has been purged already, or will
731 be soon.
c5aa993b 732 */
2df3850c 733 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
c906108c
SS
734 free_objfile (objf);
735 }
736}
737
738
739/* Many places in gdb want to test just to see if we have any minimal
740 symbols available. This function returns zero if none are currently
741 available, nonzero otherwise. */
742
743int
fba45db2 744have_minimal_symbols (void)
c906108c
SS
745{
746 struct objfile *ofp;
747
748 ALL_OBJFILES (ofp)
c5aa993b 749 {
15831452 750 if (ofp->minimal_symbol_count > 0)
c5aa993b
JM
751 {
752 return 1;
753 }
754 }
c906108c
SS
755 return 0;
756}
757
198beae2
AC
758/* Returns a section whose range includes PC and SECTION, or NULL if
759 none found. Note the distinction between the return type, struct
760 obj_section (which is defined in gdb), and the input type "struct
761 bfd_section" (which is a bfd-defined data type). The obj_section
762 contains a pointer to the "struct bfd_section". */
c906108c
SS
763
764struct obj_section *
198beae2 765find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
c906108c
SS
766{
767 struct obj_section *s;
768 struct objfile *objfile;
c5aa993b 769
96baa820 770 ALL_OBJSECTIONS (objfile, s)
c5aa993b
JM
771 if ((section == 0 || section == s->the_bfd_section) &&
772 s->addr <= pc && pc < s->endaddr)
c5aa993b 773 return (s);
c906108c 774
c5aa993b 775 return (NULL);
c906108c
SS
776}
777
778/* Returns a section whose range includes PC or NULL if none found.
779 Backward compatibility, no section. */
780
781struct obj_section *
fba45db2 782find_pc_section (CORE_ADDR pc)
c906108c
SS
783{
784 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
785}
c5aa993b 786
c906108c
SS
787
788/* In SVR4, we recognize a trampoline by it's section name.
789 That is, if the pc is in a section named ".plt" then we are in
790 a trampoline. */
791
792int
fba45db2 793in_plt_section (CORE_ADDR pc, char *name)
c906108c
SS
794{
795 struct obj_section *s;
796 int retval = 0;
c5aa993b
JM
797
798 s = find_pc_section (pc);
799
c906108c
SS
800 retval = (s != NULL
801 && s->the_bfd_section->name != NULL
6314a349 802 && strcmp (s->the_bfd_section->name, ".plt") == 0);
c5aa993b 803 return (retval);
c906108c 804}
7be570e7
JM
805
806/* Return nonzero if NAME is in the import list of OBJFILE. Else
807 return zero. */
808
809int
fba45db2 810is_in_import_list (char *name, struct objfile *objfile)
7be570e7 811{
52f0bd74 812 int i;
7be570e7
JM
813
814 if (!objfile || !name || !*name)
815 return 0;
816
817 for (i = 0; i < objfile->import_list_size; i++)
cb137aa5 818 if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
7be570e7
JM
819 return 1;
820 return 0;
821}
0d0e1a63
MK
822\f
823
824/* Keep a registry of per-objfile data-pointers required by other GDB
825 modules. */
826
827struct objfile_data
828{
829 unsigned index;
830};
831
832struct objfile_data_registration
833{
834 struct objfile_data *data;
835 struct objfile_data_registration *next;
836};
837
838struct objfile_data_registry
839{
840 struct objfile_data_registration *registrations;
841 unsigned num_registrations;
842};
843
844static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
845
846const struct objfile_data *
847register_objfile_data (void)
848{
849 struct objfile_data_registration **curr;
850
851 /* Append new registration. */
852 for (curr = &objfile_data_registry.registrations;
853 *curr != NULL; curr = &(*curr)->next);
7be570e7 854
0d0e1a63
MK
855 *curr = XMALLOC (struct objfile_data_registration);
856 (*curr)->next = NULL;
857 (*curr)->data = XMALLOC (struct objfile_data);
858 (*curr)->data->index = objfile_data_registry.num_registrations++;
859
860 return (*curr)->data;
861}
862
863static void
864objfile_alloc_data (struct objfile *objfile)
865{
866 gdb_assert (objfile->data == NULL);
867 objfile->num_data = objfile_data_registry.num_registrations;
868 objfile->data = XCALLOC (objfile->num_data, void *);
869}
870
871static void
872objfile_free_data (struct objfile *objfile)
873{
874 gdb_assert (objfile->data != NULL);
875 xfree (objfile->data);
876 objfile->data = NULL;
877}
878
7b097ae3
MK
879void
880clear_objfile_data (struct objfile *objfile)
881{
882 gdb_assert (objfile->data != NULL);
883 memset (objfile->data, 0, objfile->num_data * sizeof (void *));
884}
885
0d0e1a63
MK
886void
887set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
888 void *value)
889{
890 gdb_assert (data->index < objfile->num_data);
891 objfile->data[data->index] = value;
892}
893
894void *
895objfile_data (struct objfile *objfile, const struct objfile_data *data)
896{
897 gdb_assert (data->index < objfile->num_data);
898 return objfile->data[data->index];
899}
This page took 0.507064 seconds and 4 git commands to generate.