| Index: gdb/objfiles.c
|
| diff --git a/gdb/objfiles.c b/gdb/objfiles.c
|
| index afe4fb4322bcdfe0e660bcf0f91839fe4f2f2818..f5e5c75b86f4f64acdc91eb6c8d3c90ab27a150c 100644
|
| --- a/gdb/objfiles.c
|
| +++ b/gdb/objfiles.c
|
| @@ -105,13 +105,6 @@ get_objfile_pspace_data (struct program_space *pspace)
|
| return info;
|
| }
|
|
|
| -/* Records whether any objfiles appeared or disappeared since we last updated
|
| - address to obj section map. */
|
| -
|
| -/* Locate all mappable sections of a BFD file.
|
| - objfile_p_char is a char * to get it through
|
| - bfd_map_over_sections; we cast it back to its proper type. */
|
| -
|
| /* Called via bfd_map_over_sections to build up the section table that
|
| the objfile references. The objfile contains pointers to the start
|
| of the table (objfile->sections) and to the first location after
|
| @@ -119,19 +112,18 @@ get_objfile_pspace_data (struct program_space *pspace)
|
|
|
| static void
|
| add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
|
| - void *objfile_p_char)
|
| + void *objfilep)
|
| {
|
| - struct objfile *objfile = (struct objfile *) objfile_p_char;
|
| + struct objfile *objfile = (struct objfile *) objfilep;
|
| struct obj_section section;
|
| flagword aflag;
|
|
|
| aflag = bfd_get_section_flags (abfd, asect);
|
| -
|
| if (!(aflag & SEC_ALLOC))
|
| return;
|
| -
|
| - if (0 == bfd_section_size (abfd, asect))
|
| + if (bfd_section_size (abfd, asect) == 0)
|
| return;
|
| +
|
| section.objfile = objfile;
|
| section.the_bfd_section = asect;
|
| section.ovly_mapped = 0;
|
| @@ -142,11 +134,9 @@ add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
|
| }
|
|
|
| /* Builds a section table for OBJFILE.
|
| - Returns 0 if OK, 1 on error (in which case bfd_error contains the
|
| - error).
|
|
|
| Note that while we are building the table, which goes into the
|
| - psymbol obstack, we hijack the sections_end pointer to instead hold
|
| + objfile obstack, we hijack the sections_end pointer to instead hold
|
| a count of the number of sections. When bfd_map_over_sections
|
| returns, this count is used to compute the pointer to the end of
|
| the sections table, which then overwrites the count.
|
| @@ -154,10 +144,10 @@ add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
|
| Also note that the OFFSET and OVLY_MAPPED in each table entry
|
| are initialized to zero.
|
|
|
| - Also note that if anything else writes to the psymbol obstack while
|
| + Also note that if anything else writes to the objfile obstack while
|
| we are building the table, we're pretty much hosed. */
|
|
|
| -int
|
| +void
|
| build_objfile_section_table (struct objfile *objfile)
|
| {
|
| objfile->sections_end = 0;
|
| @@ -165,7 +155,6 @@ build_objfile_section_table (struct objfile *objfile)
|
| add_to_objfile_sections, (void *) objfile);
|
| objfile->sections = obstack_finish (&objfile->objfile_obstack);
|
| objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
|
| - return (0);
|
| }
|
|
|
| /* Given a pointer to an initialized bfd (ABFD) and some flag bits
|
| @@ -216,12 +205,7 @@ allocate_objfile (bfd *abfd, int flags)
|
| objfile->mtime = bfd_get_mtime (abfd);
|
|
|
| /* Build section table. */
|
| -
|
| - if (build_objfile_section_table (objfile))
|
| - {
|
| - error (_("Can't find the file sections in `%s': %s"),
|
| - objfile->name, bfd_errmsg (bfd_get_error ()));
|
| - }
|
| + build_objfile_section_table (objfile);
|
| }
|
| else
|
| {
|
| @@ -342,29 +326,6 @@ entry_point_address (void)
|
| return retval;
|
| }
|
|
|
| -/* Create the terminating entry of OBJFILE's minimal symbol table.
|
| - If OBJFILE->msymbols is zero, allocate a single entry from
|
| - OBJFILE->objfile_obstack; otherwise, just initialize
|
| - OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
|
| -void
|
| -terminate_minimal_symbol_table (struct objfile *objfile)
|
| -{
|
| - if (! objfile->msymbols)
|
| - objfile->msymbols = ((struct minimal_symbol *)
|
| - obstack_alloc (&objfile->objfile_obstack,
|
| - sizeof (objfile->msymbols[0])));
|
| -
|
| - {
|
| - struct minimal_symbol *m
|
| - = &objfile->msymbols[objfile->minimal_symbol_count];
|
| -
|
| - memset (m, 0, sizeof (*m));
|
| - /* Don't rely on these enumeration values being 0's. */
|
| - MSYMBOL_TYPE (m) = mst_unknown;
|
| - SYMBOL_SET_LANGUAGE (m, language_unknown);
|
| - }
|
| -}
|
| -
|
| /* Iterator on PARENT and every separate debug objfile of PARENT.
|
| The usage pattern is:
|
| for (objfile = parent;
|
| @@ -769,7 +730,9 @@ objfile_relocate1 (struct objfile *objfile,
|
| BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
|
| BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
|
|
|
| - ALL_BLOCK_SYMBOLS (b, iter, sym)
|
| + /* We only want to iterate over the local symbols, not any
|
| + symbols in included symtabs. */
|
| + ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
|
| {
|
| relocate_one_symbol (sym, objfile, delta);
|
| }
|
| @@ -834,6 +797,11 @@ objfile_relocate1 (struct objfile *objfile,
|
| obj_section_addr (s));
|
| }
|
|
|
| + /* Relocating probes. */
|
| + if (objfile->sf && objfile->sf->sym_probe_fns)
|
| + objfile->sf->sym_probe_fns->sym_relocate_probe (objfile,
|
| + new_offsets, delta);
|
| +
|
| /* Data changed. */
|
| return 1;
|
| }
|
| @@ -1115,7 +1083,7 @@ insert_section_p (const struct bfd *abfd,
|
| {
|
| const bfd_vma lma = bfd_section_lma (abfd, section);
|
|
|
| - if (lma != 0 && lma != bfd_section_vma (abfd, section)
|
| + if (overlay_debugging && lma != 0 && lma != bfd_section_vma (abfd, section)
|
| && (bfd_get_file_flags (abfd) & BFD_IN_MEMORY) == 0)
|
| /* This is an overlay section. IN_MEMORY check is needed to avoid
|
| discarding sections from the "system supplied DSO" (aka vdso)
|
| @@ -1557,6 +1525,31 @@ gdb_bfd_unref (struct bfd *abfd)
|
| xfree (name);
|
| }
|
|
|
| +/* The default implementation for the "iterate_over_objfiles_in_search_order"
|
| + gdbarch method. It is equivalent to use the ALL_OBJFILES macro,
|
| + searching the objfiles in the order they are stored internally,
|
| + ignoring CURRENT_OBJFILE.
|
| +
|
| + On most platorms, it should be close enough to doing the best
|
| + we can without some knowledge specific to the architecture. */
|
| +
|
| +void
|
| +default_iterate_over_objfiles_in_search_order
|
| + (struct gdbarch *gdbarch,
|
| + iterate_over_objfiles_in_search_order_cb_ftype *cb,
|
| + void *cb_data, struct objfile *current_objfile)
|
| +{
|
| + int stop = 0;
|
| + struct objfile *objfile;
|
| +
|
| + ALL_OBJFILES (objfile)
|
| + {
|
| + stop = cb (objfile, cb_data);
|
| + if (stop)
|
| + return;
|
| + }
|
| +}
|
| +
|
| /* Provide a prototype to silence -Wmissing-prototypes. */
|
| extern initialize_file_ftype _initialize_objfiles;
|
|
|
|
|