diff options
Diffstat (limited to 'gdb/windows-tdep.c')
-rw-r--r-- | gdb/windows-tdep.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index a7045994e7d..116525c9fa2 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -26,6 +26,7 @@ #include "command.h" #include "gdbcmd.h" #include "gdbthread.h" +#include "objfiles.h" struct cmd_list_element *info_w32_cmdlist; @@ -398,6 +399,51 @@ windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, obstack_grow_str (obstack, "\"/></library>"); } +/* 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_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; + struct objfile *objfile; + + if (current_objfile) + { + stop = cb (current_objfile, cb_data); + if (stop) + return; + } + + ALL_OBJFILES (objfile) + { + if (objfile != current_objfile) + { + stop = cb (objfile, cb_data); + if (stop) + return; + } + } +} + static void show_maint_show_all_tib (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) |