From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hqnvemgate25.nvidia.com (hqnvemgate25.nvidia.com [216.228.121.64]) by sourceware.org (Postfix) with ESMTPS id 61A4B395BC12 for ; Wed, 24 Jun 2020 01:29:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 61A4B395BC12 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 23 Jun 2020 18:28:23 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Tue, 23 Jun 2020 18:29:08 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Tue, 23 Jun 2020 18:29:08 -0700 Received: from nvbus.nvidia.com (10.124.1.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 24 Jun 2020 01:29:08 +0000 From: Victor Collod To: Subject: [PATCH v3 1/7] Add i386 support for endbr skipping Date: Tue, 23 Jun 2020 18:28:51 -0700 Message-ID: <20200624012857.31849-2-vcollod@nvidia.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624012857.31849-1-vcollod@nvidia.com> References: <0cc93067-1313-6434-4330-61a21736376f@simark.ca> <20200624012857.31849-1-vcollod@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-Originating-IP: [10.124.1.5] X-ClientProxiedBy: HQMAIL101.nvidia.com (172.20.187.10) To HQMAIL107.nvidia.com (172.20.187.13) X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jun 2020 01:29:11 -0000 2020-06-11 Victor Collod gdb/ChangeLog: * i386-tdep.c (i386_skip_endbr): Add a helper function to skip endbr. (i386_analyze_prologue): Call i386_skip_endbr. gdb/testsuite/ChangeLog: * gdb.arch/amd64-prologue-skip-cf-protection.exp: Make the test compatible with i386, and move it to... * gdb.arch/i386-prologue-skip-cf-protection.exp: ... here. * gdb.arch/amd64-prologue-skip-cf-protection.c: Move to... * gdb.arch/i386-prologue-skip-cf-protection.c: ... here. --- gdb/i386-tdep.c | 19 +++++++++++++++++++ ...n.c =3D> i386-prologue-skip-cf-protection.c} | 0 ...p =3D> i386-prologue-skip-cf-protection.exp} | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) rename gdb/testsuite/gdb.arch/{amd64-prologue-skip-cf-protection.c =3D> i3= 86-prologue-skip-cf-protection.c} (100%) rename gdb/testsuite/gdb.arch/{amd64-prologue-skip-cf-protection.exp =3D> = i386-prologue-skip-cf-protection.exp} (97%) diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 9b905c1996a..263a3fd452e 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -1537,6 +1537,24 @@ struct i386_insn i386_frame_setup_skip_insns[] =3D { 0 } }; =20 +/* Check whether PC points to an endbr32 instruction. */ +static CORE_ADDR +i386_skip_endbr (CORE_ADDR pc) +{ + static const gdb_byte endbr32[] =3D { 0xf3, 0x0f, 0x1e, 0xfb }; + + gdb_byte buf[sizeof (endbr32)]; + + /* Stop there if we can't read the code */ + if (target_read_code (pc, buf, sizeof (endbr32))) + return pc; + + /* If the instruction isn't an endbr32, stop */ + if (memcmp (buf, endbr32, sizeof (endbr32)) !=3D 0) + return pc; + + return pc + sizeof (endbr32); +} =20 /* Check whether PC points to a no-op instruction. */ static CORE_ADDR @@ -1814,6 +1832,7 @@ i386_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache) { + pc =3D i386_skip_endbr (pc); pc =3D i386_skip_noop (pc); pc =3D i386_follow_jump (gdbarch, pc); pc =3D i386_analyze_struct_return (pc, current_pc, cache); diff --git a/gdb/testsuite/gdb.arch/amd64-prologue-skip-cf-protection.c b/g= db/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c similarity index 100% rename from gdb/testsuite/gdb.arch/amd64-prologue-skip-cf-protection.c rename to gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.c diff --git a/gdb/testsuite/gdb.arch/amd64-prologue-skip-cf-protection.exp b= /gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp similarity index 97% rename from gdb/testsuite/gdb.arch/amd64-prologue-skip-cf-protection.exp rename to gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp index 3c51fd30352..612c6edf9f1 100644 --- a/gdb/testsuite/gdb.arch/amd64-prologue-skip-cf-protection.exp +++ b/gdb/testsuite/gdb.arch/i386-prologue-skip-cf-protection.exp @@ -22,7 +22,7 @@ standard_testfile .c set binfile ${binfile} =20 -if { ![istarget x86_64-*-* ] || ![is_lp64_target] } { +if { ![istarget x86_64-*-*] && ![istarget i?86-*-*] } { verbose "Skipping ${testfile}." return } --=20 2.20.1