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