* Makefile.in (install-only): Use $(SHELL) when running
[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
SS
615 struct section_offsets *delta =
616 (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
c906108c
SS
617
618 {
619 int i;
620 int something_changed = 0;
621 for (i = 0; i < objfile->num_sections; ++i)
622 {
a4c8257b 623 delta->offsets[i] =
c906108c
SS
624 ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
625 if (ANOFFSET (delta, i) != 0)
626 something_changed = 1;
627 }
628 if (!something_changed)
629 return;
630 }
631
632 /* OK, get all the symtabs. */
633 {
634 struct symtab *s;
635
636 ALL_OBJFILE_SYMTABS (objfile, s)
c5aa993b
JM
637 {
638 struct linetable *l;
639 struct blockvector *bv;
640 int i;
641
642 /* First the line table. */
643 l = LINETABLE (s);
644 if (l)
645 {
646 for (i = 0; i < l->nitems; ++i)
647 l->item[i].pc += ANOFFSET (delta, s->block_line_section);
648 }
c906108c 649
c5aa993b
JM
650 /* Don't relocate a shared blockvector more than once. */
651 if (!s->primary)
652 continue;
c906108c 653
c5aa993b
JM
654 bv = BLOCKVECTOR (s);
655 for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
656 {
657 struct block *b;
e88c90f2 658 struct symbol *sym;
c5aa993b
JM
659 int j;
660
661 b = BLOCKVECTOR_BLOCK (bv, i);
662 BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
663 BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
664
e88c90f2 665 ALL_BLOCK_SYMBOLS (b, j, sym)
c5aa993b 666 {
7a78d0ee
KB
667 fixup_symbol_section (sym, objfile);
668
c5aa993b
JM
669 /* The RS6000 code from which this was taken skipped
670 any symbols in STRUCT_NAMESPACE or UNDEF_NAMESPACE.
671 But I'm leaving out that test, on the theory that
672 they can't possibly pass the tests below. */
673 if ((SYMBOL_CLASS (sym) == LOC_LABEL
674 || SYMBOL_CLASS (sym) == LOC_STATIC
675 || SYMBOL_CLASS (sym) == LOC_INDIRECT)
676 && SYMBOL_SECTION (sym) >= 0)
677 {
678 SYMBOL_VALUE_ADDRESS (sym) +=
679 ANOFFSET (delta, SYMBOL_SECTION (sym));
680 }
c906108c 681#ifdef MIPS_EFI_SYMBOL_NAME
c5aa993b 682 /* Relocate Extra Function Info for ecoff. */
c906108c 683
c5aa993b
JM
684 else if (SYMBOL_CLASS (sym) == LOC_CONST
685 && SYMBOL_NAMESPACE (sym) == LABEL_NAMESPACE
22abf04a 686 && strcmp (DEPRECATED_SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0)
c5aa993b 687 ecoff_relocate_efi (sym, ANOFFSET (delta,
c906108c
SS
688 s->block_line_section));
689#endif
c5aa993b
JM
690 }
691 }
692 }
c906108c
SS
693 }
694
695 {
696 struct partial_symtab *p;
697
698 ALL_OBJFILE_PSYMTABS (objfile, p)
c5aa993b 699 {
b8fbeb18
EZ
700 p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
701 p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c5aa993b 702 }
c906108c
SS
703 }
704
705 {
706 struct partial_symbol **psym;
707
708 for (psym = objfile->global_psymbols.list;
709 psym < objfile->global_psymbols.next;
710 psym++)
7a78d0ee
KB
711 {
712 fixup_psymbol_section (*psym, objfile);
713 if (SYMBOL_SECTION (*psym) >= 0)
714 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
715 SYMBOL_SECTION (*psym));
716 }
c906108c
SS
717 for (psym = objfile->static_psymbols.list;
718 psym < objfile->static_psymbols.next;
719 psym++)
7a78d0ee
KB
720 {
721 fixup_psymbol_section (*psym, objfile);
722 if (SYMBOL_SECTION (*psym) >= 0)
723 SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
724 SYMBOL_SECTION (*psym));
725 }
c906108c
SS
726 }
727
728 {
729 struct minimal_symbol *msym;
730 ALL_OBJFILE_MSYMBOLS (objfile, msym)
731 if (SYMBOL_SECTION (msym) >= 0)
c5aa993b 732 SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
c906108c
SS
733 }
734 /* Relocating different sections by different amounts may cause the symbols
735 to be out of order. */
736 msymbols_sort (objfile);
737
738 {
739 int i;
740 for (i = 0; i < objfile->num_sections; ++i)
a4c8257b 741 (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
c906108c
SS
742 }
743
36b0c0e0
PS
744 if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
745 {
746 /* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
747 only as a fallback. */
748 struct obj_section *s;
749 s = find_pc_section (objfile->ei.entry_point);
750 if (s)
751 objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
752 else
753 objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
754 }
755
c906108c
SS
756 {
757 struct obj_section *s;
758 bfd *abfd;
759
760 abfd = objfile->obfd;
761
96baa820 762 ALL_OBJFILE_OSECTIONS (objfile, s)
c906108c 763 {
78f0949b
KB
764 int idx = s->the_bfd_section->index;
765
766 s->addr += ANOFFSET (delta, idx);
767 s->endaddr += ANOFFSET (delta, idx);
c906108c
SS
768 }
769 }
770
c906108c
SS
771 if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
772 {
b8fbeb18
EZ
773 objfile->ei.entry_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
774 objfile->ei.entry_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
775 }
776
777 if (objfile->ei.entry_file_lowpc != INVALID_ENTRY_LOWPC)
778 {
b8fbeb18
EZ
779 objfile->ei.entry_file_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
780 objfile->ei.entry_file_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
781 }
782
783 if (objfile->ei.main_func_lowpc != INVALID_ENTRY_LOWPC)
784 {
b8fbeb18
EZ
785 objfile->ei.main_func_lowpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
786 objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
c906108c
SS
787 }
788
789 /* Relocate breakpoints as necessary, after things are relocated. */
790 breakpoint_re_set ();
791}
792\f
793/* Many places in gdb want to test just to see if we have any partial
794 symbols available. This function returns zero if none are currently
795 available, nonzero otherwise. */
796
797int
fba45db2 798have_partial_symbols (void)
c906108c
SS
799{
800 struct objfile *ofp;
801
802 ALL_OBJFILES (ofp)
c5aa993b
JM
803 {
804 if (ofp->psymtabs != NULL)
805 {
806 return 1;
807 }
808 }
c906108c
SS
809 return 0;
810}
811
812/* Many places in gdb want to test just to see if we have any full
813 symbols available. This function returns zero if none are currently
814 available, nonzero otherwise. */
815
816int
fba45db2 817have_full_symbols (void)
c906108c
SS
818{
819 struct objfile *ofp;
820
821 ALL_OBJFILES (ofp)
c5aa993b
JM
822 {
823 if (ofp->symtabs != NULL)
824 {
825 return 1;
826 }
827 }
c906108c
SS
828 return 0;
829}
830
831
832/* This operations deletes all objfile entries that represent solibs that
833 weren't explicitly loaded by the user, via e.g., the add-symbol-file
834 command.
c5aa993b 835 */
c906108c 836void
fba45db2 837objfile_purge_solibs (void)
c906108c 838{
c5aa993b
JM
839 struct objfile *objf;
840 struct objfile *temp;
c906108c
SS
841
842 ALL_OBJFILES_SAFE (objf, temp)
843 {
844 /* We assume that the solib package has been purged already, or will
845 be soon.
c5aa993b 846 */
2df3850c 847 if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
c906108c
SS
848 free_objfile (objf);
849 }
850}
851
852
853/* Many places in gdb want to test just to see if we have any minimal
854 symbols available. This function returns zero if none are currently
855 available, nonzero otherwise. */
856
857int
fba45db2 858have_minimal_symbols (void)
c906108c
SS
859{
860 struct objfile *ofp;
861
862 ALL_OBJFILES (ofp)
c5aa993b 863 {
15831452 864 if (ofp->minimal_symbol_count > 0)
c5aa993b
JM
865 {
866 return 1;
867 }
868 }
c906108c
SS
869 return 0;
870}
871
872#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
873
874/* Given the name of a mapped symbol file in SYMSFILENAME, and the timestamp
875 of the corresponding symbol file in MTIME, try to open an existing file
876 with the name SYMSFILENAME and verify it is more recent than the base
877 file by checking it's timestamp against MTIME.
878
879 If SYMSFILENAME does not exist (or can't be stat'd), simply returns -1.
880
881 If SYMSFILENAME does exist, but is out of date, we check to see if the
882 user has specified creation of a mapped file. If so, we don't issue
883 any warning message because we will be creating a new mapped file anyway,
884 overwriting the old one. If not, then we issue a warning message so that
885 the user will know why we aren't using this existing mapped symbol file.
886 In either case, we return -1.
887
888 If SYMSFILENAME does exist and is not out of date, but can't be opened for
889 some reason, then prints an appropriate system error message and returns -1.
890
891 Otherwise, returns the open file descriptor. */
892
893static int
fba45db2 894open_existing_mapped_file (char *symsfilename, long mtime, int flags)
c906108c
SS
895{
896 int fd = -1;
897 struct stat sbuf;
898
899 if (stat (symsfilename, &sbuf) == 0)
900 {
901 if (sbuf.st_mtime < mtime)
902 {
2df3850c 903 if (!(flags & OBJF_MAPPED))
c906108c
SS
904 {
905 warning ("mapped symbol file `%s' is out of date, ignored it",
906 symsfilename);
907 }
908 }
909 else if ((fd = open (symsfilename, O_RDWR)) < 0)
910 {
911 if (error_pre_print)
912 {
913 printf_unfiltered (error_pre_print);
914 }
915 print_sys_errmsg (symsfilename, errno);
916 }
917 }
918 return (fd);
919}
920
921/* Look for a mapped symbol file that corresponds to FILENAME and is more
922 recent than MTIME. If MAPPED is nonzero, the user has asked that gdb
923 use a mapped symbol file for this file, so create a new one if one does
924 not currently exist.
925
926 If found, then return an open file descriptor for the file, otherwise
927 return -1.
928
929 This routine is responsible for implementing the policy that generates
930 the name of the mapped symbol file from the name of a file containing
931 symbols that gdb would like to read. Currently this policy is to append
932 ".syms" to the name of the file.
933
934 This routine is also responsible for implementing the policy that
935 determines where the mapped symbol file is found (the search path).
936 This policy is that when reading an existing mapped file, a file of
937 the correct name in the current directory takes precedence over a
938 file of the correct name in the same directory as the symbol file.
939 When creating a new mapped file, it is always created in the current
940 directory. This helps to minimize the chances of a user unknowingly
941 creating big mapped files in places like /bin and /usr/local/bin, and
942 allows a local copy to override a manually installed global copy (in
943 /bin for example). */
944
945static int
fba45db2 946open_mapped_file (char *filename, long mtime, int flags)
c906108c
SS
947{
948 int fd;
949 char *symsfilename;
950
951 /* First try to open an existing file in the current directory, and
952 then try the directory where the symbol file is located. */
953
bdda63b0 954 symsfilename = concat ("./", lbasename (filename), ".syms", (char *) NULL);
2df3850c 955 if ((fd = open_existing_mapped_file (symsfilename, mtime, flags)) < 0)
c906108c 956 {
b8c9b27d 957 xfree (symsfilename);
c906108c 958 symsfilename = concat (filename, ".syms", (char *) NULL);
2fc18c15 959 fd = open_existing_mapped_file (symsfilename, mtime, flags);
c906108c
SS
960 }
961
962 /* If we don't have an open file by now, then either the file does not
963 already exist, or the base file has changed since it was created. In
964 either case, if the user has specified use of a mapped file, then
965 create a new mapped file, truncating any existing one. If we can't
966 create one, print a system error message saying why we can't.
967
968 By default the file is rw for everyone, with the user's umask taking
969 care of turning off the permissions the user wants off. */
970
2fc18c15 971 if ((fd < 0) && (flags & OBJF_MAPPED))
c906108c 972 {
b8c9b27d 973 xfree (symsfilename);
bdda63b0 974 symsfilename = concat ("./", lbasename (filename), ".syms",
c906108c
SS
975 (char *) NULL);
976 if ((fd = open (symsfilename, O_RDWR | O_CREAT | O_TRUNC, 0666)) < 0)
977 {
978 if (error_pre_print)
979 {
980 printf_unfiltered (error_pre_print);
981 }
982 print_sys_errmsg (symsfilename, errno);
983 }
984 }
985
b8c9b27d 986 xfree (symsfilename);
c906108c
SS
987 return (fd);
988}
989
4efb68b1 990static void *
fba45db2 991map_to_file (int fd)
c906108c 992{
4efb68b1 993 void *md;
c906108c
SS
994 CORE_ADDR mapto;
995
4efb68b1 996 md = mmalloc_attach (fd, 0);
c906108c
SS
997 if (md != NULL)
998 {
999 mapto = (CORE_ADDR) mmalloc_getkey (md, 1);
1000 md = mmalloc_detach (md);
1001 if (md != NULL)
1002 {
1003 /* FIXME: should figure out why detach failed */
1004 md = NULL;
1005 }
1006 else if (mapto != (CORE_ADDR) NULL)
1007 {
1008 /* This mapping file needs to be remapped at "mapto" */
4efb68b1 1009 md = mmalloc_attach (fd, mapto);
c906108c
SS
1010 }
1011 else
1012 {
1013 /* This is a freshly created mapping file. */
1014 mapto = (CORE_ADDR) mmalloc_findbase (20 * 1024 * 1024);
1015 if (mapto != 0)
1016 {
1017 /* To avoid reusing the freshly created mapping file, at the
c5aa993b
JM
1018 address selected by mmap, we must truncate it before trying
1019 to do an attach at the address we want. */
c906108c 1020 ftruncate (fd, 0);
4efb68b1 1021 md = mmalloc_attach (fd, mapto);
c906108c
SS
1022 if (md != NULL)
1023 {
4efb68b1 1024 mmalloc_setkey (md, 1, mapto);
c906108c
SS
1025 }
1026 }
1027 }
1028 }
1029 return (md);
1030}
1031
c5aa993b 1032#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
c906108c
SS
1033
1034/* Returns a section whose range includes PC and SECTION,
1035 or NULL if none found. Note the distinction between the return type,
1036 struct obj_section (which is defined in gdb), and the input type
1037 struct sec (which is a bfd-defined data type). The obj_section
1038 contains a pointer to the bfd struct sec section. */
1039
1040struct obj_section *
fba45db2 1041find_pc_sect_section (CORE_ADDR pc, struct sec *section)
c906108c
SS
1042{
1043 struct obj_section *s;
1044 struct objfile *objfile;
c5aa993b 1045
96baa820 1046 ALL_OBJSECTIONS (objfile, s)
c5aa993b
JM
1047 if ((section == 0 || section == s->the_bfd_section) &&
1048 s->addr <= pc && pc < s->endaddr)
c5aa993b 1049 return (s);
c906108c 1050
c5aa993b 1051 return (NULL);
c906108c
SS
1052}
1053
1054/* Returns a section whose range includes PC or NULL if none found.
1055 Backward compatibility, no section. */
1056
1057struct obj_section *
fba45db2 1058find_pc_section (CORE_ADDR pc)
c906108c
SS
1059{
1060 return find_pc_sect_section (pc, find_pc_mapped_section (pc));
1061}
c5aa993b 1062
c906108c
SS
1063
1064/* In SVR4, we recognize a trampoline by it's section name.
1065 That is, if the pc is in a section named ".plt" then we are in
1066 a trampoline. */
1067
1068int
fba45db2 1069in_plt_section (CORE_ADDR pc, char *name)
c906108c
SS
1070{
1071 struct obj_section *s;
1072 int retval = 0;
c5aa993b
JM
1073
1074 s = find_pc_section (pc);
1075
c906108c
SS
1076 retval = (s != NULL
1077 && s->the_bfd_section->name != NULL
1078 && STREQ (s->the_bfd_section->name, ".plt"));
c5aa993b 1079 return (retval);
c906108c 1080}
7be570e7
JM
1081
1082/* Return nonzero if NAME is in the import list of OBJFILE. Else
1083 return zero. */
1084
1085int
fba45db2 1086is_in_import_list (char *name, struct objfile *objfile)
7be570e7
JM
1087{
1088 register int i;
1089
1090 if (!objfile || !name || !*name)
1091 return 0;
1092
1093 for (i = 0; i < objfile->import_list_size; i++)
1094 if (objfile->import_list[i] && STREQ (name, objfile->import_list[i]))
1095 return 1;
1096 return 0;
1097}
1098
This page took 0.346668 seconds and 4 git commands to generate.