From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12079 invoked by alias); 14 Feb 2020 14:07:11 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 12066 invoked by uid 89); 14 Feb 2020 14:07:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=H*x:5.0 X-HELO: sonic305-20.consmr.mail.ir2.yahoo.com Received: from sonic305-20.consmr.mail.ir2.yahoo.com (HELO sonic305-20.consmr.mail.ir2.yahoo.com) (77.238.177.82) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Feb 2020 14:07:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1581689226; bh=wdg0allk9rRZPzLQf1yUK1ZtkIqdM6Rh2dpXpcealZE=; h=Date:From:To:In-Reply-To:References:Subject:From:Subject; b=L3mZrMJZCPYvQ3OCGBpN5U3z0aoeMgRKfmEYJM05R8Cgq6Mi03w+/ziINrLknnbjgaoOLdmiDs3he1QUmkMA36yGGndaJo+KMIbddvf+FQRvu5TF/ESpDSe9U8gAEIVEwB/wotrCsOPrVuDndfcLh01T7cqrcaNJTtXuZpb21tKGJ1BxiK3Ty30Y0iqvddsKJd/37YiUOn64DHQCvnNKcnJFN8E4OCrd0pQWK3zHPHFqUaMAckn5udYo9MOyiM4Btg1hIIBk1bH6CwIVHv9c2eUN94kGzrsO8Mb6atGXlISUNGLkIm9mhu+Q/rvqV7Eaoi8JFY2ITi0xX7hwRH+ahg== Received: from sonic.gate.mail.ne1.yahoo.com by sonic305.consmr.mail.ir2.yahoo.com with HTTP; Fri, 14 Feb 2020 14:07:06 +0000 Date: Fri, 14 Feb 2020 14:07:00 -0000 From: "Hannes Domani via gdb-patches" Reply-To: Hannes Domani To: Gdb-patches Message-ID: <854900713.5159847.1581689224439@mail.yahoo.com> In-Reply-To: <3df92ab1-e080-1cac-7500-9333714cbd58@linaro.org> References: <20200213181430.11259-1-ssbssa.ref@yahoo.de> <20200213181430.11259-1-ssbssa@yahoo.de> <4854af6a-e0c4-7714-6ed4-20697e0282c0@linaro.org> <578612266.5100822.1581683522459@mail.yahoo.com> <3df92ab1-e080-1cac-7500-9333714cbd58@linaro.org> Subject: Re: [PATCH v2] Rebase executable to match relocated base address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00563.txt.bz2 Am Freitag, 14. Februar 2020, 14:50:07 MEZ hat Luis Machado Folgendes geschrieben: > On 2/14/20 9:32 AM, Hannes Domani via gdb-patches wrote: > >=C2=A0 Am Freitag, 14. Februar 2020, 12:02:03 MEZ hat Luis Machado Folgendes geschrieben: > > > >> Hi, > >> > >> On 2/13/20 3:14 PM, Hannes Domani via gdb-patches wrote: > >>> Windows executables linked with -dynamicbase get a new base address > >>> when loaded, which makes debugging impossible if the executable isn't > >>> also rebased in gdb. > >>> > >>> The new base address is read from the Process Environment Block. > >>> --- > >>> v2: > >>> This version now no longer needs the fake auxv entry. > >>> --- > >>>=C2=A0=C2=A0=C2=A0 gdb/windows-tdep.c | 49 +++++++++++++++++++++++++++= +++++++++++++++++++ > >>>=C2=A0=C2=A0=C2=A0 1 file changed, 49 insertions(+) > >>> > >> > >> Thanks. This version looks better. > >> > >>> diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c > >>> index 6eef3fbd96..29c0a828a7 100644 > >>> --- a/gdb/windows-tdep.c > >>> +++ b/gdb/windows-tdep.c > >>> @@ -34,6 +34,9 @@ > >>>=C2=A0=C2=A0=C2=A0 #include "solib.h" > >>>=C2=A0=C2=A0=C2=A0 #include "solib-target.h" > >>>=C2=A0=C2=A0=C2=A0 #include "gdbcore.h" > >>> +#include "coff/internal.h" > >>> +#include "libcoff.h" > >>> +#include "solist.h" > >>> > >>>=C2=A0=C2=A0=C2=A0 /* Windows signal numbers differ between MinGW flav= ors and between > >>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 those and Cygwin.=C2=A0 The= below enumeration was gleaned from the > >>> @@ -812,6 +815,50 @@ windows_get_siginfo_type (struct gdbarch *gdbarc= h) > >>>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return siginfo_type; > >>>=C2=A0=C2=A0=C2=A0 } > >>> > >>> +/* Implement the "solib_create_inferior_hook" target_so_ops method.= =C2=A0 */ > >>> + > >>> +static void > >>> +windows_solib_create_inferior_hook (int from_tty) > >>> +{ > >>> +=C2=A0 CORE_ADDR exec_base =3D 0; > >>> + > >>> +=C2=A0 /* Find base address of main executable in > >>> +=C2=A0=C2=A0=C2=A0 TIB->process_environment_block->image_base_addres= s.=C2=A0 */ > >>> +=C2=A0 struct gdbarch *gdbarch =3D target_gdbarch (); > >>> +=C2=A0 enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > >>> +=C2=A0 int ptr_bytes; > >>> +=C2=A0 int peb_offset;=C2=A0 /* Offset of process_environment_block = in TIB.=C2=A0 */ > >>> +=C2=A0 int base_offset; /* Offset of image_base_address in PEB.=C2= =A0 */ > >>> +=C2=A0 if (gdbarch_ptr_bit (gdbarch) =3D=3D 32) > >>> +=C2=A0=C2=A0=C2=A0 { > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ptr_bytes =3D 4; > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 peb_offset =3D 48; > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 base_offset =3D 8; > >>> +=C2=A0=C2=A0=C2=A0 } > >>> +=C2=A0 else > >>> +=C2=A0=C2=A0=C2=A0 { > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ptr_bytes =3D 8; > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 peb_offset =3D 96; > >>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 base_offset =3D 16; > >>> +=C2=A0=C2=A0=C2=A0 } > >> > >> How about stashing the above offsets in windows_gdbarch_data, and then > >> using them here? > > > > To be honest, that would seem a bit weird for me, since they are just t= hese > > simple numbers, and aren't used anywhere else. > > > > > > Fair enough. I don't have a strong opinion on this, but i usually try to > avoid having these magic numbers in the code without some pointers to > where those came from. Folks dealing with this code in the future may > try to understand what it is doing and how they came to be. > > Having them at a single place, with some explanation, helps with that. > That's my take on it, at least. Then I guess I need to make better comments than this: =C2=A0 /* Find base address of main executable in =C2=A0=C2=A0=C2=A0=C2=A0 TIB->process_environment_block->image_base_address= .=C2=A0 */ =C2=A0 int peb_offset;=C2=A0 /* Offset of process_environment_block in TIB.= =C2=A0 */ =C2=A0 int base_offset; /* Offset of image_base_address in PEB.=C2=A0 */