This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC-v5] Fix .text section offset for windows DLL (was Calling __stdcall functions in the inferior)
- From: Pedro Alves <palves at redhat dot com>
- Cc: Pierre Muller <pierre dot muller at ics-cnrs dot unistra dot fr>, "'asmwarrior'" <asmwarrior at gmail dot com>, "'Joel Brobecker'" <brobecker at adacore dot com>, "'Eli Zaretskii'" <eliz at gnu dot org>, gdb-patches at sourceware dot org
- Date: Fri, 07 Dec 2012 17:49:20 +0000
- Subject: Re: [RFC-v5] Fix .text section offset for windows DLL (was Calling __stdcall functions in the inferior)
- References: <20121024194517.GK3555@adacore.com> <011901cdb2ab$48076b90$d81642b0$@muller@ics-cnrs.unistra.fr> <20121105171121.GA2972@adacore.com> <50991f5f.8382440a.1100.ffff82abSMTPIN_ADDED@mx.google.com> <509ABA17.30507@redhat.com> <000301cdbd96$f5cd9f10$e168dd30$@muller@ics-cnrs.unistra.fr> <20121122173019.GF9964@adacore.com> <15690.5992342674$1353883881@news.gmane.org> <87624si9ur.fsf@fleche.redhat.com> <001501cdccaf$ad85e9b0$0891bd10$@muller@ics-cnrs.unistra.fr> <20121207071035.GG31477@adacore.com> <50C20A66.70002@gmail.com> <29545.4593528577$1354894901@news.gmane.org> <50C21696.7040006@gmail.com> <50c21914.a750420a.2ec3.ffffe4ffSMTPIN_ADDED_BROKEN@mx.google.com> <50C222D5.4000802@redhat.com>
On 12/07/2012 05:09 PM, Pedro Alves wrote:
> I haven't tried to grok the patch, but Kai tells me that a section name in PE headers
> are stored in 8 character arrays, and are not necessarily zero-terminated.
> He was wondering, and now I am too, if it wouldn't be possible to make use
> of bfd routines to get at the necessary info, like the .text section offset.
> E.g., bfd handles the long section name PE extension to coff (see coffcode.h in
> bfd), though I'm not sure that needs to apply here.
Hmm, looking at:
> @@ -387,15 +391,21 @@ windows_xfer_shared_library (const char*
> 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);
I notice that this only handles native debugging. GDBserver also does
the 0x1000 add, see win32-low.c:handle_load_dll. So I'm now actually
thinking if the opposite direction may be better. That is, make
pe_text_section_offset completely independent of bfd (which it almost is),
and put it in a file under common/ so that gdbserver can use it too.
--
Pedro Alves