diff options
Diffstat (limited to 'gdb/windows-tdep.c')
-rw-r--r-- | gdb/windows-tdep.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c index 9c89e92..56032f8 100644 --- a/gdb/windows-tdep.c +++ b/gdb/windows-tdep.c @@ -27,6 +27,10 @@ #include "gdbcmd.h" #include "gdbthread.h" #include "objfiles.h" +#include "symfile.h" +#include "coff-pe-read.h" +#include "gdb_bfd.h" +#include "complaints.h" struct cmd_list_element *info_w32_cmdlist; @@ -387,15 +391,21 @@ windows_xfer_shared_library (const char* so_name, CORE_ADDR load_addr, struct gdbarch *gdbarch, struct obstack *obstack) { char *p; + struct bfd * dll; + CORE_ADDR text_offset; + obstack_grow_str (obstack, "<library name=\""); p = xml_escape_text (so_name); obstack_grow_str (obstack, p); xfree (p); obstack_grow_str (obstack, "\"><segment address=\""); - /* The symbols in a dll are offset by 0x1000, which is the - offset from 0 of the first byte in an image - because of the file - header and the section alignment. */ - obstack_grow_str (obstack, paddress (gdbarch, load_addr + 0x1000)); + dll = gdb_bfd_open_maybe_remote (so_name); + /* The following calls are OK even if dll is NULL. + The default value 0x1000 is returned by pe_text_section_offset + in that case. */ + text_offset = pe_text_section_offset (dll); + gdb_bfd_unref (dll); + obstack_grow_str (obstack, paddress (gdbarch, load_addr + text_offset)); obstack_grow_str (obstack, "\"/></library>"); } |