summaryrefslogtreecommitdiff
path: root/gdb/windows-tdep.c
diff options
context:
space:
mode:
authorPierre Muller <muller@ics.u-strasbg.fr>2012-12-13 10:44:43 +0000
committerPierre Muller <muller@ics.u-strasbg.fr>2012-12-13 10:44:43 +0000
commit73e5ad654c61b5495a2284af91bdbf7580ded69d (patch)
tree947903c7103e87532afbd16796a889aa7b7be4d0 /gdb/windows-tdep.c
parent0d1c3ea4fe20776dfae9a83130582cbe13d8f3a5 (diff)
downloadgdb-73e5ad654c61b5495a2284af91bdbf7580ded69d.tar.gz
* 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.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c
index 9c89e920a24..56032f8d484 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>");
}