diff options
author | Joel Brobecker <brobecker@gnat.com> | 2012-06-05 13:50:57 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2012-06-05 13:50:57 +0000 |
commit | a8e1bb344dad8bc875d9faf0c68d41bca8e142c1 (patch) | |
tree | 8fbfa55b7fa459dfb0aa52ffa166f8d200a5d94b /gdb/windows-tdep.c | |
parent | 19630284f570790ebf6d50bfb43caa1f125ee88a (diff) | |
download | gdb-a8e1bb344dad8bc875d9faf0c68d41bca8e142c1.zip gdb-a8e1bb344dad8bc875d9faf0c68d41bca8e142c1.tar.gz gdb-a8e1bb344dad8bc875d9faf0c68d41bca8e142c1.tar.bz2 |
Windows-specific iterate_over_objfiles_in_search_order
This patch sets the windows target to use their own version of
the iterate_over_objfiles_in_search_order gdbarch method, in
order to make global symbol searches sensitive to the current
objfile.
gdb/ChangeLog:
* windows-tdep.h (windows_iterate_over_objfiles_in_search_order):
Add declaration.
* windows-tdep.c: #include "objfiles.h".
(windows_iterate_over_objfiles_in_search_order): New function.
* amd64-windows-tdep.c (amd64_windows_init_abi): Set
iterate_over_objfiles_in_search_order gdbarch method to
windows_iterate_over_objfiles_in_search_order.
* i386-cygwin-tdep.c (i386_cygwin_init_abi): Likewise.
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 a704599..116525c 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) |