diff options
author | Pierre Muller <muller@sourceware.org> | 2012-12-13 10:44:45 +0000 |
---|---|---|
committer | Pierre Muller <muller@sourceware.org> | 2012-12-13 10:44:45 +0000 |
commit | 3999122f0c8766df3a55462df626d607ebe5a735 (patch) | |
tree | f99bb7e8a0d4d18f6c6552450b9ca9c0856c2c77 /gdb/windows-tdep.c | |
parent | f87e3f15bf40520398a008e2514d1f5e0b3cf8f7 (diff) | |
download | gdb-3999122f0c8766df3a55462df626d607ebe5a735.zip gdb-3999122f0c8766df3a55462df626d607ebe5a735.tar.gz gdb-3999122f0c8766df3a55462df626d607ebe5a735.tar.bz2 |
* coff-pe-read.h (pe_text_section_offset): Declare new function.
* coff-pe-read.c (debug_coff_pe_read): New static variable.
(struct read_pe_section_data): Add section_name field.
(IMAGE_SCN_CNT_CODE): New macro, if not already defined.
(IMAGE_SCN_CNT_INITIALIZED_DATA): Ditto.
(IMAGE_SCN_CNT_UNINITIALIZED_DATA): Ditto.
(get_pe_section_index): New function.
(struct pe_sections_info): New type.
(get_section_vmas): Use new struct pe_sections_info.
(add_pe_exported_sym): Handle unnamed exported function.
(add_pe_forwarded_sym): New function.
(read_pe_truncate_name): Truncate at last dot.
(pe_as16): New function.
(read_pe_exported_syms): Use ordinal of function to
retrieve correct RVA address of function and handle
forwarded symbol.
(pe_text_section_offset): New function.
(show_debug_coff_pe_read): New function.
(_initialize_coff_pe_read): New function adding
'set/show debug coff_pe_read' commands.
* windows-tdep.c (windows_xfer_shared_library): Use
pe_text_section_offset function instead of possibly wrong
0x1000 constant for .text sextion offset.
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>"); } |