X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fobjfiles.c;h=34b271e86de2b9e2fa392e9815e8aea291b29c09;hb=b669c95337903d39aa2254e8ea0405c0ac117d24;hp=6e66a8e51fe97176f57fd0f9a8f68837cc332e9a;hpb=9c37b5aed98e5996a9777a366bfcc371c0e1a92d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 6e66a8e51f..34b271e86d 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -1,6 +1,6 @@ /* GDB routines for manipulating objfiles. - Copyright (C) 1992-2016 Free Software Foundation, Inc. + Copyright (C) 1992-2019 Free Software Foundation, Inc. Contributed by Cygnus Support, using pieces from other GDB modules. @@ -46,12 +46,13 @@ #include "addrmap.h" #include "arch-utils.h" #include "exec.h" -#include "observer.h" +#include "observable.h" #include "complaints.h" #include "psymtab.h" #include "solist.h" #include "gdb_bfd.h" #include "btrace.h" +#include "common/pathstuff.h" #include @@ -142,18 +143,20 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd) { storage = ((struct objfile_per_bfd_storage *) - bfd_zalloc (abfd, sizeof (struct objfile_per_bfd_storage))); + bfd_alloc (abfd, sizeof (struct objfile_per_bfd_storage))); + /* objfile_per_bfd_storage is not trivially constructible, must + call the ctor manually. */ + storage = new (storage) objfile_per_bfd_storage (); set_bfd_data (abfd, objfiles_bfd_data, storage); } else - storage = OBSTACK_ZALLOC (&objfile->objfile_obstack, - struct objfile_per_bfd_storage); + storage + = obstack_new (&objfile->objfile_obstack); /* Look up the gdbarch associated with the BFD. */ if (abfd != NULL) storage->gdbarch = gdbarch_from_bfd (abfd); - obstack_init (&storage->storage_obstack); storage->filename_cache = bcache_xmalloc (NULL, NULL); storage->macro_cache = bcache_xmalloc (NULL, NULL); storage->language_of_main = language_unknown; @@ -171,7 +174,7 @@ free_objfile_per_bfd_storage (struct objfile_per_bfd_storage *storage) bcache_xfree (storage->macro_cache); if (storage->demangled_names_hash) htab_delete (storage->demangled_names_hash); - obstack_free (&storage->storage_obstack, 0); + storage->~objfile_per_bfd_storage (); } /* A wrapper for free_objfile_per_bfd_storage that can be passed as a @@ -262,8 +265,7 @@ objfile_register_static_link (struct objfile *objfile, slot = htab_find_slot (objfile->static_links, &lookup_entry, INSERT); gdb_assert (*slot == NULL); - entry = (struct static_link_htab_entry *) obstack_alloc - (&objfile->objfile_obstack, sizeof (*entry)); + entry = XOBNEW (&objfile->objfile_obstack, static_link_htab_entry); entry->block = block; entry->static_link = static_link; *slot = (void *) entry; @@ -351,10 +353,9 @@ build_objfile_section_table (struct objfile *objfile) add_to_objfile_sections_full (objfile->obfd, bfd_ind_section_ptr, objfile, 1); } -/* Given a pointer to an initialized bfd (ABFD) and some flag bits - allocate a new objfile struct, fill it in as best we can, link it - into the list of all known objfiles, and return a pointer to the - new objfile struct. +/* Given a pointer to an initialized bfd (ABFD) and some flag bits, + initialize the new objfile as best we can and link it into the list + of all known objfiles. NAME should contain original non-canonicalized filename or other identifier as entered by user. If there is no better source use @@ -365,69 +366,61 @@ build_objfile_section_table (struct objfile *objfile) requests for specific operations. Other bits like OBJF_SHARED are simply copied through to the new objfile flags member. */ -struct objfile * -allocate_objfile (bfd *abfd, const char *name, int flags) +objfile::objfile (bfd *abfd, const char *name, objfile_flags flags_) + : flags (flags_), + pspace (current_program_space), + partial_symtabs (new psymtab_storage ()), + obfd (abfd) { - struct objfile *objfile; - char *expanded_name; + const char *expanded_name; - objfile = XCNEW (struct objfile); - objfile->psymbol_cache = psymbol_bcache_init (); /* We could use obstack_specify_allocation here instead, but gdb_obstack.h specifies the alloc/dealloc functions. */ - obstack_init (&objfile->objfile_obstack); + obstack_init (&objfile_obstack); - objfile_alloc_data (objfile); + objfile_alloc_data (this); + gdb::unique_xmalloc_ptr name_holder; if (name == NULL) { gdb_assert (abfd == NULL); gdb_assert ((flags & OBJF_NOT_FILENAME) != 0); - expanded_name = xstrdup ("<>"); + expanded_name = "<>"; } else if ((flags & OBJF_NOT_FILENAME) != 0 || is_target_filename (name)) - expanded_name = xstrdup (name); + expanded_name = name; else - expanded_name = gdb_abspath (name); - objfile->original_name - = (char *) obstack_copy0 (&objfile->objfile_obstack, + { + name_holder = gdb_abspath (name); + expanded_name = name_holder.get (); + } + original_name + = (char *) obstack_copy0 (&objfile_obstack, expanded_name, strlen (expanded_name)); - xfree (expanded_name); /* Update the per-objfile information that comes from the bfd, ensuring that any data that is reference is saved in the per-objfile data region. */ - objfile->obfd = abfd; gdb_bfd_ref (abfd); if (abfd != NULL) { - objfile->mtime = bfd_get_mtime (abfd); + mtime = bfd_get_mtime (abfd); /* Build section table. */ - build_objfile_section_table (objfile); + build_objfile_section_table (this); } - objfile->per_bfd = get_objfile_bfd_data (objfile, abfd); - objfile->pspace = current_program_space; - - terminate_minimal_symbol_table (objfile); + per_bfd = get_objfile_bfd_data (this, abfd); - /* Initialize the section indexes for this objfile, so that we can - later detect if they are used w/o being properly assigned to. */ - - objfile->sect_index_text = -1; - objfile->sect_index_data = -1; - objfile->sect_index_bss = -1; - objfile->sect_index_rodata = -1; + terminate_minimal_symbol_table (this); /* Add this file onto the tail of the linked list of other such files. */ - objfile->next = NULL; if (object_files == NULL) - object_files = objfile; + object_files = this; else { struct objfile *last_one; @@ -435,16 +428,11 @@ allocate_objfile (bfd *abfd, const char *name, int flags) for (last_one = object_files; last_one->next; last_one = last_one->next); - last_one->next = objfile; + last_one->next = this; } - /* Save passed in flag bits. */ - objfile->flags |= flags; - /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (objfile->pspace)->new_objfiles_available = 1; - - return objfile; + get_objfile_pspace_data (pspace)->new_objfiles_available = 1; } /* Retrieve the gdbarch associated with OBJFILE. */ @@ -526,7 +514,7 @@ objfile_separate_debug_iterate (const struct objfile *parent, /* Put one object file before a specified on in the global list. This can be used to make sure an object file is destroyed before - another when using ALL_OBJFILES_SAFE to free all objfiles. */ + another when using objfiles_safe to free all objfiles. */ void put_objfile_before (struct objfile *objfile, struct objfile *before_this) { @@ -599,7 +587,7 @@ add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent) parent->separate_debug_objfile = objfile; /* Put the separate debug object before the normal one, this is so that - usage of the ALL_OBJFILES_SAFE macro will stay safe. */ + usage of objfiles_safe will stay safe. */ put_objfile_before (objfile, parent); } @@ -614,45 +602,44 @@ free_objfile_separate_debug (struct objfile *objfile) for (child = objfile->separate_debug_objfile; child;) { struct objfile *next_child = child->separate_debug_objfile_link; - free_objfile (child); + delete child; child = next_child; } } /* Destroy an objfile and all the symtabs and psymtabs under it. */ -void -free_objfile (struct objfile *objfile) +objfile::~objfile () { /* First notify observers that this objfile is about to be freed. */ - observer_notify_free_objfile (objfile); + gdb::observers::free_objfile.notify (this); /* Free all separate debug objfiles. */ - free_objfile_separate_debug (objfile); + free_objfile_separate_debug (this); - if (objfile->separate_debug_objfile_backlink) + if (separate_debug_objfile_backlink) { /* We freed the separate debug file, make sure the base objfile doesn't reference it. */ struct objfile *child; - child = objfile->separate_debug_objfile_backlink->separate_debug_objfile; + child = separate_debug_objfile_backlink->separate_debug_objfile; - if (child == objfile) + if (child == this) { - /* OBJFILE is the first child. */ - objfile->separate_debug_objfile_backlink->separate_debug_objfile = - objfile->separate_debug_objfile_link; + /* THIS is the first child. */ + separate_debug_objfile_backlink->separate_debug_objfile = + separate_debug_objfile_link; } else { - /* Find OBJFILE in the list. */ + /* Find THIS in the list. */ while (1) { - if (child->separate_debug_objfile_link == objfile) + if (child->separate_debug_objfile_link == this) { child->separate_debug_objfile_link = - objfile->separate_debug_objfile_link; + separate_debug_objfile_link; break; } child = child->separate_debug_objfile_link; @@ -660,17 +647,17 @@ free_objfile (struct objfile *objfile) } } } - + /* Remove any references to this objfile in the global value lists. */ - preserve_values (objfile); + preserve_values (this); /* It still may reference data modules have associated with the objfile and the symbol file data. */ - forget_cached_source_info_for_objfile (objfile); + forget_cached_source_info_for_objfile (this); - breakpoint_free_objfile (objfile); - btrace_free_objfile (objfile); + breakpoint_free_objfile (this); + btrace_free_objfile (this); /* First do any symbol file specific actions required when we are finished with a particular symbol file. Note that if the objfile @@ -679,25 +666,23 @@ free_objfile (struct objfile *objfile) freeing things which are valid only during this particular gdb execution, or leaving them to be reused during the next one. */ - if (objfile->sf != NULL) - { - (*objfile->sf->sym_finish) (objfile); - } + if (sf != NULL) + (*sf->sym_finish) (this); /* Discard any data modules have associated with the objfile. The function - still may reference objfile->obfd. */ - objfile_free_data (objfile); + still may reference obfd. */ + objfile_free_data (this); - if (objfile->obfd) - gdb_bfd_unref (objfile->obfd); + if (obfd) + gdb_bfd_unref (obfd); else - free_objfile_per_bfd_storage (objfile->per_bfd); + free_objfile_per_bfd_storage (per_bfd); /* Remove it from the chain of all objfiles. */ - unlink_objfile (objfile); + unlink_objfile (this); - if (objfile == symfile_objfile) + if (this == symfile_objfile) symfile_objfile = NULL; /* Before the symbol table code was redone to make it easier to @@ -715,7 +700,7 @@ free_objfile (struct objfile *objfile) FIXME: It's not clear which of these are supposed to persist between expressions and which ought to be reset each time. */ expression_context_block = NULL; - innermost_block = NULL; + innermost_block.reset (); /* Check to see if the current_source_symtab belongs to this objfile, and if so, call clear_current_source_symtab_and_line. */ @@ -723,40 +708,20 @@ free_objfile (struct objfile *objfile) { struct symtab_and_line cursal = get_current_source_symtab_and_line (); - if (cursal.symtab && SYMTAB_OBJFILE (cursal.symtab) == objfile) + if (cursal.symtab && SYMTAB_OBJFILE (cursal.symtab) == this) clear_current_source_symtab_and_line (); } - if (objfile->global_psymbols.list) - xfree (objfile->global_psymbols.list); - if (objfile->static_psymbols.list) - xfree (objfile->static_psymbols.list); /* Free the obstacks for non-reusable objfiles. */ - psymbol_bcache_free (objfile->psymbol_cache); - obstack_free (&objfile->objfile_obstack, 0); + obstack_free (&objfile_obstack, 0); /* Rebuild section map next time we need it. */ - get_objfile_pspace_data (objfile->pspace)->section_map_dirty = 1; + get_objfile_pspace_data (pspace)->section_map_dirty = 1; /* Free the map for static links. There's no need to free static link themselves since they were allocated on the objstack. */ - if (objfile->static_links != NULL) - htab_delete (objfile->static_links); - - /* The last thing we do is free the objfile struct itself. */ - xfree (objfile); -} - -static void -do_free_objfile_cleanup (void *obj) -{ - free_objfile ((struct objfile *) obj); -} - -struct cleanup * -make_cleanup_free_objfile (struct objfile *obj) -{ - return make_cleanup (do_free_objfile_cleanup, obj); + if (static_links != NULL) + htab_delete (static_links); } /* Free all the object files at once and clean up their users. */ @@ -764,17 +729,14 @@ make_cleanup_free_objfile (struct objfile *obj) void free_all_objfiles (void) { - struct objfile *objfile, *temp; struct so_list *so; /* Any objfile referencewould become stale. */ for (so = master_so_list (); so; so = so->next) gdb_assert (so->objfile == NULL); - ALL_OBJFILES_SAFE (objfile, temp) - { - free_objfile (objfile); - } + for (objfile *objfile : current_program_space->objfiles_safe ()) + delete objfile; clear_symtab_users (0); } @@ -807,15 +769,13 @@ static int objfile_relocate1 (struct objfile *objfile, const struct section_offsets *new_offsets) { - struct obj_section *s; struct section_offsets *delta = ((struct section_offsets *) alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections))); - int i; int something_changed = 0; - for (i = 0; i < objfile->num_sections; ++i) + for (int i = 0; i < objfile->num_sections; ++i) { delta->offsets[i] = ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i); @@ -827,54 +787,66 @@ objfile_relocate1 (struct objfile *objfile, /* OK, get all the symtabs. */ { - struct compunit_symtab *cust; - struct symtab *s; - - ALL_OBJFILE_FILETABS (objfile, cust, s) - { - struct linetable *l; - int i; - - /* First the line table. */ - l = SYMTAB_LINETABLE (s); - if (l) - { - for (i = 0; i < l->nitems; ++i) - l->item[i].pc += ANOFFSET (delta, - COMPUNIT_BLOCK_LINE_SECTION - (cust)); - } - } - - ALL_OBJFILE_COMPUNITS (objfile, cust) - { - const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust); - int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust); - - if (BLOCKVECTOR_MAP (bv)) - addrmap_relocate (BLOCKVECTOR_MAP (bv), - ANOFFSET (delta, block_line_section)); - - for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i) - { - struct block *b; - struct symbol *sym; - struct dict_iterator iter; - - b = BLOCKVECTOR_BLOCK (bv, i); - BLOCK_START (b) += ANOFFSET (delta, block_line_section); - BLOCK_END (b) += ANOFFSET (delta, block_line_section); + for (compunit_symtab *cust : objfile->compunits ()) + { + for (symtab *s : compunit_filetabs (cust)) + { + struct linetable *l; + + /* First the line table. */ + l = SYMTAB_LINETABLE (s); + if (l) + { + for (int i = 0; i < l->nitems; ++i) + l->item[i].pc += ANOFFSET (delta, + COMPUNIT_BLOCK_LINE_SECTION + (cust)); + } + } + } - /* 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); - } - } - } + for (compunit_symtab *cust : objfile->compunits ()) + { + const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust); + int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust); + + if (BLOCKVECTOR_MAP (bv)) + addrmap_relocate (BLOCKVECTOR_MAP (bv), + ANOFFSET (delta, block_line_section)); + + for (int i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i) + { + struct block *b; + struct symbol *sym; + struct mdict_iterator miter; + + b = BLOCKVECTOR_BLOCK (bv, i); + BLOCK_START (b) += ANOFFSET (delta, block_line_section); + BLOCK_END (b) += ANOFFSET (delta, block_line_section); + + if (BLOCK_RANGES (b) != nullptr) + for (int j = 0; j < BLOCK_NRANGES (b); j++) + { + BLOCK_RANGE_START (b, j) + += ANOFFSET (delta, block_line_section); + BLOCK_RANGE_END (b, j) += ANOFFSET (delta, + block_line_section); + } + + /* We only want to iterate over the local symbols, not any + symbols in included symtabs. */ + ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym) + { + relocate_one_symbol (sym, objfile, delta); + } + } + } } + /* This stores relocated addresses and so must be cleared. This + will cause it to be recreated on demand. */ + objfile->psymbol_map.clear (); + /* Relocate isolated symbols. */ { struct symbol *iter; @@ -883,13 +855,6 @@ objfile_relocate1 (struct objfile *objfile, relocate_one_symbol (iter, objfile, delta); } - if (objfile->psymtabs_addrmap) - addrmap_relocate (objfile->psymtabs_addrmap, - ANOFFSET (delta, SECT_OFF_TEXT (objfile))); - - if (objfile->sf) - objfile->sf->qf->relocate (objfile, new_offsets, delta); - { int i; @@ -901,6 +866,7 @@ objfile_relocate1 (struct objfile *objfile, get_objfile_pspace_data (objfile->pspace)->section_map_dirty = 1; /* Update the table in exec_ops, used to read memory. */ + struct obj_section *s; ALL_OBJFILE_OSECTIONS (objfile, s) { int idx = s - objfile->sections; @@ -935,16 +901,13 @@ objfile_relocate (struct objfile *objfile, debug_objfile; debug_objfile = objfile_separate_debug_iterate (objfile, debug_objfile)) { - struct section_addr_info *objfile_addrs; - struct cleanup *my_cleanups; - - objfile_addrs = build_section_addr_info_from_objfile (objfile); - my_cleanups = make_cleanup (xfree, objfile_addrs); + section_addr_info objfile_addrs + = build_section_addr_info_from_objfile (objfile); /* Here OBJFILE_ADDRS contain the correct absolute addresses, the relative ones must be already created according to debug_objfile. */ - addr_info_make_relative (objfile_addrs, debug_objfile->obfd); + addr_info_make_relative (&objfile_addrs, debug_objfile->obfd); gdb_assert (debug_objfile->num_sections == gdb_bfd_count_sections (debug_objfile->obfd)); @@ -955,8 +918,6 @@ objfile_relocate (struct objfile *objfile, objfile_addrs); changed |= objfile_relocate1 (debug_objfile, new_debug_offsets.data ()); - - do_cleanups (my_cleanups); } /* Relocate breakpoints as necessary, after things are relocated. */ @@ -1052,13 +1013,11 @@ objfile_has_symbols (struct objfile *objfile) int have_partial_symbols (void) { - struct objfile *ofp; - - ALL_OBJFILES (ofp) - { - if (objfile_has_partial_symbols (ofp)) - return 1; - } + for (objfile *ofp : current_program_space->objfiles ()) + { + if (objfile_has_partial_symbols (ofp)) + return 1; + } return 0; } @@ -1069,13 +1028,11 @@ have_partial_symbols (void) int have_full_symbols (void) { - struct objfile *ofp; - - ALL_OBJFILES (ofp) - { - if (objfile_has_full_symbols (ofp)) - return 1; - } + for (objfile *ofp : current_program_space->objfiles ()) + { + if (objfile_has_full_symbols (ofp)) + return 1; + } return 0; } @@ -1087,17 +1044,14 @@ have_full_symbols (void) void objfile_purge_solibs (void) { - struct objfile *objf; - struct objfile *temp; - - ALL_OBJFILES_SAFE (objf, temp) - { - /* We assume that the solib package has been purged already, or will - be soon. */ + for (objfile *objf : current_program_space->objfiles_safe ()) + { + /* We assume that the solib package has been purged already, or will + be soon. */ - if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED)) - free_objfile (objf); - } + if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED)) + delete objf; + } } @@ -1108,15 +1062,13 @@ objfile_purge_solibs (void) int have_minimal_symbols (void) { - struct objfile *ofp; - - ALL_OBJFILES (ofp) - { - if (ofp->per_bfd->minimal_symbol_count > 0) - { - return 1; - } - } + for (objfile *ofp : current_program_space->objfiles ()) + { + if (ofp->per_bfd->minimal_symbol_count > 0) + { + return 1; + } + } return 0; } @@ -1181,9 +1133,7 @@ qsort_cmp (const void *a, const void *b) { /* Sort on sequence number of the objfile in the chain. */ - const struct objfile *objfile; - - ALL_OBJFILES (objfile) + for (objfile *objfile : current_program_space->objfiles ()) if (objfile == objfile1) return -1; else if (objfile == objfile2) @@ -1323,8 +1273,7 @@ filter_overlapping_sections (struct obj_section **map, int map_size) struct gdbarch *const gdbarch = get_objfile_arch (objf1); - complaint (&symfile_complaints, - _("unexpected overlap between:\n" + complaint (_("unexpected overlap between:\n" " (A) section `%s' from `%s' [%s, %s)\n" " (B) section `%s' from `%s' [%s, %s).\n" "Will ignore section B"), @@ -1359,7 +1308,6 @@ update_section_map (struct program_space *pspace, struct objfile_pspace_info *pspace_info; int alloc_size, map_size, i; struct obj_section *s, **map; - struct objfile *objfile; pspace_info = get_objfile_pspace_data (pspace); gdb_assert (pspace_info->section_map_dirty != 0 @@ -1369,7 +1317,7 @@ update_section_map (struct program_space *pspace, xfree (map); alloc_size = 0; - ALL_PSPACE_OBJFILES (pspace, objfile) + for (objfile *objfile : pspace->objfiles ()) ALL_OBJFILE_OSECTIONS (objfile, s) if (insert_section_p (objfile->obfd, s->the_bfd_section)) alloc_size += 1; @@ -1385,7 +1333,7 @@ update_section_map (struct program_space *pspace, map = XNEWVEC (struct obj_section *, alloc_size); i = 0; - ALL_PSPACE_OBJFILES (pspace, objfile) + for (objfile *objfile : pspace->objfiles ()) ALL_OBJFILE_OSECTIONS (objfile, s) if (insert_section_p (objfile->obfd, s->the_bfd_section)) map[i++] = s; @@ -1469,7 +1417,7 @@ find_pc_section (CORE_ADDR pc) /* Return non-zero if PC is in a section called NAME. */ int -pc_in_section (CORE_ADDR pc, char *name) +pc_in_section (CORE_ADDR pc, const char *name) { struct obj_section *s; int retval = 0; @@ -1495,26 +1443,11 @@ objfiles_changed (void) /* See comments in objfiles.h. */ -void +scoped_restore_tmpl inhibit_section_map_updates (struct program_space *pspace) { - get_objfile_pspace_data (pspace)->inhibit_updates = 1; -} - -/* See comments in objfiles.h. */ - -void -resume_section_map_updates (struct program_space *pspace) -{ - get_objfile_pspace_data (pspace)->inhibit_updates = 0; -} - -/* See comments in objfiles.h. */ - -void -resume_section_map_updates_cleanup (void *arg) -{ - resume_section_map_updates ((struct program_space *) arg); + return scoped_restore_tmpl + (&get_objfile_pspace_data (pspace)->inhibit_updates, 1); } /* Return 1 if ADDR maps into one of the sections of OBJFILE and 0 @@ -1544,9 +1477,7 @@ int shared_objfile_contains_address_p (struct program_space *pspace, CORE_ADDR address) { - struct objfile *objfile; - - ALL_PSPACE_OBJFILES (pspace, objfile) + for (objfile *objfile : pspace->objfiles ()) { if ((objfile->flags & OBJF_SHARED) != 0 && is_addr_in_objfile (address, objfile)) @@ -1557,7 +1488,7 @@ shared_objfile_contains_address_p (struct program_space *pspace, } /* The default implementation for the "iterate_over_objfiles_in_search_order" - gdbarch method. It is equivalent to use the ALL_OBJFILES macro, + gdbarch method. It is equivalent to use the objfiles iterable, searching the objfiles in the order they are stored internally, ignoring CURRENT_OBJFILE. @@ -1571,9 +1502,8 @@ default_iterate_over_objfiles_in_search_order void *cb_data, struct objfile *current_objfile) { int stop = 0; - struct objfile *objfile; - ALL_OBJFILES (objfile) + for (objfile *objfile : current_program_space->objfiles ()) { stop = cb (objfile, cb_data); if (stop) @@ -1621,9 +1551,6 @@ objfile_flavour_name (struct objfile *objfile) return NULL; } -/* Provide a prototype to silence -Wmissing-prototypes. */ -extern initialize_file_ftype _initialize_objfiles; - void _initialize_objfiles (void) {