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 885F1393C89E for ; Thu, 11 Jun 2020 22:56:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 885F1393C89E Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 11 Jun 2020 15:55:51 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 11 Jun 2020 15:56:37 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 11 Jun 2020 15:56:37 -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; Thu, 11 Jun 2020 22:56:37 +0000 From: Victor Collod To: Subject: [PATCH v2 1/2] Add i386 support for endbr skipping Date: Thu, 11 Jun 2020 15:54:54 -0700 Message-ID: <20200611225455.9354-2-vcollod@nvidia.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200611225455.9354-1-vcollod@nvidia.com> References: <0c2e7c13-3a10-0f83-955b-e08dcd628d17@simark.ca> <20200611225455.9354-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=-10.2 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: Thu, 11 Jun 2020 22:56:39 -0000 2020-06-11 Victor Collod * i386-tdep.c (i386_skip_endbr): Add a helper function to skip endbr. (i386_analyze_prologue): Call i386_skip_endbr. --- gdb/i386-tdep.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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); --=20 2.20.1