diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 74ac3e32b8b..b62f545e1e3 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -4901,9 +4901,8 @@ ada_lookup_simple_minsym (const char *name, struct objfile *objfile) symbol_name_matcher_ftype *match_name = ada_get_symbol_name_matcher (lookup_name); - gdbarch_iterate_over_objfiles_in_search_order - (objfile != NULL ? objfile->arch () : current_inferior ()->arch (), - [&result, lookup_name, match_name] (struct objfile *obj) + current_program_space->iterate_over_objfiles_in_search_order + ([&result, lookup_name, match_name] (struct objfile *obj) { for (minimal_symbol *msymbol : obj->msymbols ()) { diff --git a/gdb/cp-support.c b/gdb/cp-support.c index 8f5c0d1dd45..be66be95d61 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -1472,9 +1472,8 @@ add_symbol_overload_list_qualified (const char *func_name, ? selected_block->objfile () : nullptr); - gdbarch_iterate_over_objfiles_in_search_order - (current_objfile ? current_objfile->arch () : current_inferior ()->arch (), - [func_name, surrounding_static_block, &overload_list] + current_program_space->iterate_over_objfiles_in_search_order + ([func_name, surrounding_static_block, &overload_list] (struct objfile *obj) { /* Look through the partial symtabs for all symbols which diff --git a/gdb/elfread.c b/gdb/elfread.c index ae749780004..c8e976ace6f 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -776,9 +776,8 @@ elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p) To search other namespaces, we would need to provide context, e.g. in form of an objfile in that namespace. */ - gdbarch_iterate_over_objfiles_in_search_order - (current_inferior ()->arch (), - [name, &addr_p, &found] (struct objfile *objfile) + current_program_space->iterate_over_objfiles_in_search_order + ([name, &addr_p, &found] (struct objfile *objfile) { htab_t htab; elf_gnu_ifunc_cache *entry_p; @@ -830,9 +829,8 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p) To search other namespaces, we would need to provide context, e.g. in form of an objfile in that namespace. */ - gdbarch_iterate_over_objfiles_in_search_order - (current_inferior ()->arch (), - [name, name_got_plt, &addr_p, &found] (struct objfile *objfile) + current_program_space->iterate_over_objfiles_in_search_order + ([name, name_got_plt, &addr_p, &found] (struct objfile *objfile) { bfd *obfd = objfile->obfd.get (); struct gdbarch *gdbarch = objfile->arch (); diff --git a/gdb/findvar.c b/gdb/findvar.c index c5294fe449e..e1f0bcbaade 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -445,9 +445,8 @@ language_defn::read_var_value (struct symbol *var, struct obj_section *obj_section; bound_minimal_symbol bmsym; - gdbarch_iterate_over_objfiles_in_search_order - (var->arch (), - [var, &bmsym] (objfile *objfile) + current_program_space->iterate_over_objfiles_in_search_order + ([var, &bmsym] (objfile *objfile) { bmsym = lookup_minimal_symbol (current_program_space, var->linkage_name (), objfile); diff --git a/gdb/gdbarch-gen.c b/gdb/gdbarch-gen.c index 75956e206af..f4766e18d9a 100644 --- a/gdb/gdbarch-gen.c +++ b/gdb/gdbarch-gen.c @@ -240,7 +240,6 @@ struct gdbarch gdbarch_gen_return_address_ftype *gen_return_address = default_gen_return_address; gdbarch_info_proc_ftype *info_proc = nullptr; gdbarch_core_info_proc_ftype *core_info_proc = nullptr; - gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order = default_iterate_over_objfiles_in_search_order; struct ravenscar_arch_ops * ravenscar_ops = NULL; gdbarch_insn_is_call_ftype *insn_is_call = default_insn_is_call; gdbarch_insn_is_ret_ftype *insn_is_ret = default_insn_is_ret; @@ -513,7 +512,6 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of gen_return_address, invalid_p == 0. */ /* Skip verify of info_proc, has predicate. */ /* Skip verify of core_info_proc, has predicate. */ - /* Skip verify of iterate_over_objfiles_in_search_order, invalid_p == 0. */ /* Skip verify of ravenscar_ops, invalid_p == 0. */ /* Skip verify of insn_is_call, invalid_p == 0. */ /* Skip verify of insn_is_ret, invalid_p == 0. */ @@ -1337,9 +1335,6 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) gdb_printf (file, "gdbarch_dump: core_info_proc = <%s>\n", host_address_to_string (gdbarch->core_info_proc)); - gdb_printf (file, - "gdbarch_dump: iterate_over_objfiles_in_search_order = <%s>\n", - host_address_to_string (gdbarch->iterate_over_objfiles_in_search_order)); gdb_printf (file, "gdbarch_dump: ravenscar_ops = %s\n", host_address_to_string (gdbarch->ravenscar_ops)); @@ -5171,23 +5166,6 @@ set_gdbarch_core_info_proc (struct gdbarch *gdbarch, gdbarch->core_info_proc = core_info_proc; } -void -gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, struct objfile *current_objfile) -{ - gdb_assert (gdbarch != NULL); - gdb_assert (gdbarch->iterate_over_objfiles_in_search_order != NULL); - if (gdbarch_debug >= 2) - gdb_printf (gdb_stdlog, "gdbarch_iterate_over_objfiles_in_search_order called\n"); - gdbarch->iterate_over_objfiles_in_search_order (gdbarch, cb, current_objfile); -} - -void -set_gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, - gdbarch_iterate_over_objfiles_in_search_order_ftype iterate_over_objfiles_in_search_order) -{ - gdbarch->iterate_over_objfiles_in_search_order = iterate_over_objfiles_in_search_order; -} - struct ravenscar_arch_ops * gdbarch_ravenscar_ops (struct gdbarch *gdbarch) { diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h index fba62e13a80..cd998984ab7 100644 --- a/gdb/gdbarch-gen.h +++ b/gdb/gdbarch-gen.h @@ -1634,19 +1634,6 @@ typedef void (gdbarch_core_info_proc_ftype) (struct gdbarch *gdbarch, const char extern void gdbarch_core_info_proc (struct gdbarch *gdbarch, const char *args, enum info_proc_what what); extern void set_gdbarch_core_info_proc (struct gdbarch *gdbarch, gdbarch_core_info_proc_ftype *core_info_proc); -/* Iterate over all objfiles in the order that makes the most sense - for the architecture to make global symbol searches. - - CB is a callback function passed an objfile to be searched. The iteration stops - if this function returns nonzero. - - If not NULL, CURRENT_OBJFILE corresponds to the objfile being - inspected when the symbol search was requested. */ - -typedef void (gdbarch_iterate_over_objfiles_in_search_order_ftype) (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, struct objfile *current_objfile); -extern void gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, struct objfile *current_objfile); -extern void set_gdbarch_iterate_over_objfiles_in_search_order (struct gdbarch *gdbarch, gdbarch_iterate_over_objfiles_in_search_order_ftype *iterate_over_objfiles_in_search_order); - /* Ravenscar arch-dependent ops. */ extern struct ravenscar_arch_ops * gdbarch_ravenscar_ops (struct gdbarch *gdbarch); diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 6accbd2fd5e..20497612811 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -75,12 +75,6 @@ struct gdbarch_tdep_base using gdbarch_tdep_up = std::unique_ptr; -/* Callback type for the 'iterate_over_objfiles_in_search_order' - gdbarch method. */ - -using iterate_over_objfiles_in_search_order_cb_ftype - = gdb::function_view; - /* Callback type for regset section iterators. The callback usually invokes the REGSET's supply or collect method, to which it must pass a buffer - for collects this buffer will need to be created using diff --git a/gdb/gdbarch_components.py b/gdb/gdbarch_components.py index dac3ce17a0e..938fa5ab69c 100644 --- a/gdb/gdbarch_components.py +++ b/gdb/gdbarch_components.py @@ -2562,27 +2562,6 @@ one for live targets. predicate=True, ) -Method( - comment=""" -Iterate over all objfiles in the order that makes the most sense -for the architecture to make global symbol searches. - -CB is a callback function passed an objfile to be searched. The iteration stops -if this function returns nonzero. - -If not NULL, CURRENT_OBJFILE corresponds to the objfile being -inspected when the symbol search was requested. -""", - type="void", - name="iterate_over_objfiles_in_search_order", - params=[ - ("iterate_over_objfiles_in_search_order_cb_ftype", "cb"), - ("struct objfile *", "current_objfile"), - ], - predefault="default_iterate_over_objfiles_in_search_order", - invalid=False, -) - Value( comment=""" Ravenscar arch-dependent ops. diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 1cd6e8c0f4c..7a8b0ba3b8e 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -1154,24 +1154,6 @@ shared_objfile_contains_address_p (struct program_space *pspace, return false; } -/* The default implementation for the "iterate_over_objfiles_in_search_order" - gdbarch method. It is equivalent to use the objfiles iterable, - searching the objfiles in the order they are stored internally, - ignoring CURRENT_OBJFILE. - - On most platforms, 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 - (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, - objfile *current_objfile) -{ - for (objfile *objfile : current_program_space->objfiles ()) - if (cb (objfile)) - return; -} - /* See objfiles.h. */ const char * diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 4a3475862a9..bce85576e6c 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -1010,10 +1010,6 @@ in_plt_section (CORE_ADDR pc) extern scoped_restore_tmpl inhibit_section_map_updates (struct program_space *pspace); -extern void default_iterate_over_objfiles_in_search_order - (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, - objfile *current_objfile); - /* Reset the per-BFD storage area on OBJ. */ void set_objfile_per_bfd (struct objfile *obj); diff --git a/gdb/progspace.c b/gdb/progspace.c index 1c271657437..9928c16376f 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -145,6 +145,21 @@ program_space::free_all_objfiles () /* See progspace.h. */ +void +program_space::iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, objfile *current_objfile) +{ + if (m_solib_ops != nullptr) + return m_solib_ops->iterate_over_objfiles_in_search_order + (cb, current_objfile); + + for (const auto objfile : this->objfiles ()) + if (cb (objfile)) + return; +} + +/* See progspace.h. */ + void program_space::add_objfile (std::unique_ptr &&objfile, struct objfile *before) diff --git a/gdb/progspace.h b/gdb/progspace.h index a761e62b8cc..270a71d57c0 100644 --- a/gdb/progspace.h +++ b/gdb/progspace.h @@ -212,6 +212,18 @@ struct program_space (objfiles_range (objfiles_iterator (m_objfiles_list.begin ()))); } + /* Iterate over all objfiles of the program space in the order that makes the + most sense to make global symbol searches. + + CB is a callback function passed an objfile to be searched. The iteration stops + if this function returns true. + + If not nullptr, CURRENT_OBJFILE corresponds to the objfile being + inspected when the symbol search was requested. */ + void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile); + /* Add OBJFILE to the list of objfiles, putting it just before BEFORE. If BEFORE is nullptr, it will go at the end of the list. */ diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 1c6f5697302..8f92642d488 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -619,9 +619,8 @@ gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw) struct objfile *objfile = nullptr; if (by_build_id) - gdbarch_iterate_over_objfiles_in_search_order - (current_inferior ()->arch (), - [&objfile, name] (struct objfile *obj) + current_program_space->iterate_over_objfiles_in_search_order + ([&objfile, name] (struct objfile *obj) { /* Don't return separate debug files. */ if (obj->separate_debug_objfile_backlink != nullptr) @@ -642,9 +641,8 @@ gdbpy_lookup_objfile (PyObject *self, PyObject *args, PyObject *kw) return 1; }, gdbpy_current_objfile); else - gdbarch_iterate_over_objfiles_in_search_order - (current_inferior ()->arch (), - [&objfile, name] (struct objfile *obj) + current_program_space->iterate_over_objfiles_in_search_order + ([&objfile, name] (struct objfile *obj) { /* Don't return separate debug files. */ if (obj->separate_debug_objfile_backlink != nullptr) diff --git a/gdb/solib-rocm.c b/gdb/solib-rocm.c index 7c60ebc072c..4c59e8ac5da 100644 --- a/gdb/solib-rocm.c +++ b/gdb/solib-rocm.c @@ -211,6 +211,14 @@ struct rocm_solib_ops : public solib_ops std::vector get_solibs_in_ns (int nsid) const override { return m_host_ops->get_solibs_in_ns (nsid); } + void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const override + { + return m_host_ops->iterate_over_objfiles_in_search_order + (cb, current_objfile); + } + private: owning_intrusive_list solibs_from_rocm_sos (const std::vector &sos) const; diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index 0e4b030c6b9..7f103239b8c 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -49,10 +49,6 @@ static void svr4_relocate_main_executable (void); static void probes_table_remove_objfile_probes (struct objfile *objfile); -static void svr4_iterate_over_objfiles_in_search_order - (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, - objfile *current_objfile); - /* On SVR4 systems, a list of symbols in the dynamic linker where GDB can try to place a breakpoint to monitor shared library @@ -3444,8 +3440,6 @@ void set_solib_svr4_ops (gdbarch *gdbarch, gdbarch_make_solib_ops_ftype make_solib_ops) { set_gdbarch_make_solib_ops (gdbarch, make_solib_ops); - set_gdbarch_iterate_over_objfiles_in_search_order - (gdbarch, svr4_iterate_over_objfiles_in_search_order); } /* See solib-svr4.h. */ @@ -3598,10 +3592,10 @@ find_debug_base_for_solib (const solib *solib) stay in the same namespace as that file. Otherwise, we only consider the initial namespace. */ -static void -svr4_iterate_over_objfiles_in_search_order - (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, - objfile *current_objfile) +void +svr4_solib_ops::iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const { bool checked_current_objfile = false; if (current_objfile != nullptr) @@ -3611,11 +3605,14 @@ svr4_iterate_over_objfiles_in_search_order if (current_objfile->separate_debug_objfile_backlink != nullptr) current_objfile = current_objfile->separate_debug_objfile_backlink; - if (current_objfile == current_program_space->symfile_object_file) - abfd = current_program_space->exec_bfd (); + if (current_objfile == m_pspace->symfile_object_file) + abfd = m_pspace->exec_bfd (); else abfd = current_objfile->obfd.get (); + /* gdb_bfd_scan_elf_dyntag relies on the current program space. */ + gdb_assert (m_pspace == current_program_space); + if (abfd != nullptr && gdb_bfd_scan_elf_dyntag (DT_SYMBOLIC, abfd, nullptr, nullptr) == 1) { @@ -3625,6 +3622,9 @@ svr4_iterate_over_objfiles_in_search_order } } + /* elf_locate_base relies on the current program space. */ + gdb_assert (m_pspace == current_program_space); + /* The linker namespace to iterate identified by the address of its r_debug object, defaulting to the initial namespace. */ CORE_ADDR initial = elf_locate_base (); @@ -3633,7 +3633,7 @@ svr4_iterate_over_objfiles_in_search_order if (debug_base == 0) debug_base = initial; - for (objfile *objfile : current_program_space->objfiles ()) + for (objfile *objfile : m_pspace->objfiles ()) { if (checked_current_objfile && objfile == current_objfile) continue; diff --git a/gdb/solib-svr4.h b/gdb/solib-svr4.h index 70cb1d6374a..9a70c8f98bb 100644 --- a/gdb/solib-svr4.h +++ b/gdb/solib-svr4.h @@ -96,6 +96,9 @@ struct svr4_solib_ops : public solib_ops int find_solib_ns (const solib &so) const override; int num_active_namespaces () const override; std::vector get_solibs_in_ns (int nsid) const override; + void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const override; /* Return the appropriate link map offsets table for the architecture. */ virtual link_map_offsets *fetch_link_map_offsets () const = 0; diff --git a/gdb/solib.c b/gdb/solib.c index 440562e7e1e..9a2ef123ed9 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -473,6 +473,18 @@ solib_ops::bfd_open (const char *pathname) const return solib_bfd_open (pathname); } +/* See solib.h. */ + +void +solib_ops::iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const +{ + for (objfile *objfile : m_pspace->objfiles ()) + if (cb (objfile)) + return; +} + /* Given a pointer to one of the shared objects in our list of mapped objects, use the recorded name to open a bfd descriptor for the object, build a section table, relocate all the section addresses diff --git a/gdb/solib.h b/gdb/solib.h index a6e85ebeeaa..eb8bafef0bd 100644 --- a/gdb/solib.h +++ b/gdb/solib.h @@ -131,6 +131,12 @@ private: /* A unique pointer to an solib. */ using solib_up = std::unique_ptr; +/* Callback type for the 'iterate_over_objfiles_in_search_order' + methods. */ + +using iterate_over_objfiles_in_search_order_cb_ftype + = gdb::function_view; + struct solib_ops { explicit solib_ops (program_space *pspace) @@ -264,6 +270,18 @@ struct solib_ops virtual std::vector get_solibs_in_ns (int ns) const { gdb_assert_not_reached ("namespaces not supported"); } + /* Iterate over all objfiles of the program space in the order that makes the + most sense for the architecture to make global symbol searches. + + CB is a callback function passed an objfile to be searched. The iteration + stops if this function returns true. + + If not nullptr, CURRENT_OBJFILE corresponds to the objfile being inspected + when the symbol search was requested. */ + virtual void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const; + protected: /* The program space for which this solib_ops was created. */ program_space *m_pspace; diff --git a/gdb/symtab.c b/gdb/symtab.c index 0d110e4f2ec..b6bd0a48171 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2654,9 +2654,8 @@ lookup_global_or_static_symbol (const char *name, /* Do a global search (of global blocks, heh). */ if (result.symbol == NULL) - gdbarch_iterate_over_objfiles_in_search_order - (objfile != NULL ? objfile->arch () : current_inferior ()->arch (), - [&result, block_index, name, domain] (struct objfile *objfile_iter) + current_program_space->iterate_over_objfiles_in_search_order + ([&result, block_index, name, domain] (struct objfile *objfile_iter) { result = lookup_symbol_in_objfile (objfile_iter, block_index, name, domain); @@ -6575,9 +6574,8 @@ find_main_name (void) /* Try to find language for main in psymtabs. */ bool symbol_found_p = false; - gdbarch_iterate_over_objfiles_in_search_order - (current_inferior ()->arch (), - [&symbol_found_p, pspace] (objfile *obj) + current_program_space->iterate_over_objfiles_in_search_order + ([&symbol_found_p, pspace] (objfile *obj) { language lang = obj->lookup_global_symbol_language ("main", diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index b71fad16f79..9157ebe03b3 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -550,43 +550,6 @@ windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, xml += "\"/>"; } -/* Implement the "iterate_over_objfiles_in_search_order" gdbarch - method. It searches all objfiles, starting with CURRENT_OBJFILE - first (if not NULL). - - On Windows, the system behaves a little differently when two - objfiles each define a global symbol using the same name, compared - to other platforms such as GNU/Linux for instance. On GNU/Linux, - all instances of the symbol effectively get merged into a single - one, but on Windows, they remain distinct. - - As a result, it usually makes sense to start global symbol searches - with the current objfile before expanding it to all other objfiles. - This helps for instance when a user debugs some code in a DLL that - refers to a global variable defined inside that DLL. When trying - to print the value of that global variable, it would be unhelpful - to print the value of another global variable defined with the same - name, but in a different DLL. */ - -static void -windows_iterate_over_objfiles_in_search_order - (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, - objfile *current_objfile) -{ - if (current_objfile) - { - if (cb (current_objfile)) - return; - } - - for (objfile *objfile : current_program_space->objfiles ()) - if (objfile != current_objfile) - { - if (cb (objfile)) - return; - } -} - static void show_maint_show_all_tib (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) @@ -869,6 +832,9 @@ struct windows_solib_ops : target_solib_ops using target_solib_ops::target_solib_ops; void create_inferior_hook (int from_tty) const override; + void iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const override; }; /* Return a new solib_ops for Windows systems. */ @@ -927,6 +893,43 @@ windows_solib_ops::create_inferior_hook (int from_tty) const } } +/* Implement the "iterate_over_objfiles_in_search_order" gdbarch + method. It searches all objfiles, starting with CURRENT_OBJFILE + first (if not NULL). + + On Windows, the system behaves a little differently when two + objfiles each define a global symbol using the same name, compared + to other platforms such as GNU/Linux for instance. On GNU/Linux, + all instances of the symbol effectively get merged into a single + one, but on Windows, they remain distinct. + + As a result, it usually makes sense to start global symbol searches + with the current objfile before expanding it to all other objfiles. + This helps for instance when a user debugs some code in a DLL that + refers to a global variable defined inside that DLL. When trying + to print the value of that global variable, it would be unhelpful + to print the value of another global variable defined with the same + name, but in a different DLL. */ + +void +windows_solib_ops::iterate_over_objfiles_in_search_order + (iterate_over_objfiles_in_search_order_cb_ftype cb, + objfile *current_objfile) const +{ + if (current_objfile) + { + if (cb (current_objfile)) + return; + } + + for (objfile *objfile : m_pspace->objfiles ()) + if (objfile != current_objfile) + { + if (cb (objfile)) + return; + } +} + /* Common parts for gdbarch initialization for the Windows and Cygwin OS ABIs. */ @@ -940,9 +943,6 @@ windows_init_abi_common (struct gdbarch_info info, struct gdbarch *gdbarch) `c:\Program Files\Foo App\mydll.dll', for example. */ set_gdbarch_has_dos_based_file_system (gdbarch, 1); - set_gdbarch_iterate_over_objfiles_in_search_order - (gdbarch, windows_iterate_over_objfiles_in_search_order); - set_gdbarch_make_solib_ops (gdbarch, make_windows_solib_ops); set_gdbarch_get_siginfo_type (gdbarch, windows_get_siginfo_type);