From patchwork Mon Dec 11 18:14:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 81929 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 76FC53858407 for ; Mon, 11 Dec 2023 18:15:21 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from sonic312-26.consmr.mail.ir2.yahoo.com (sonic312-26.consmr.mail.ir2.yahoo.com [77.238.178.97]) by sourceware.org (Postfix) with ESMTPS id B2BCC3858D38 for ; Mon, 11 Dec 2023 18:15:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B2BCC3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B2BCC3858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=77.238.178.97 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702318508; cv=none; b=doEXOMqUipkNdnZ+B1I7bGYchCSCO8GWtyx+WryX2+9qZfCPAUlkKacUCIQi7BCKuMQgqo+e6ov/5eLyHL2XAxlm+2C5p7WKtBuPEueHo2Ah59djrRR9xRjriFCyBzyjMvRdg44srMZRq97PRdsoVtMvAoEYRM/B6zTh/+FofGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702318508; c=relaxed/simple; bh=ibGDTZmELDXvJZp4ASB8xA9gGj+ZhqvejOjup8Ojkz0=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=uVnoHr7qXms4rwgJIMZm5q1ThjCnQIYK0N3QFtArVRSkndiet8sNGLOUiB3DdEBnOgvv9eWJi02Rsb4jhnmxBS6/nJPEgPca08vG+YgFVupBBfiDumTdCyQie2v77CvSifOyUZAhwCgma7Vyxd1N+++FwJs14OQiVTUQIYJeyrM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1702318502; bh=jYJIjGOnb0AH4p0rOiqabps7rjyrvrRjhp3d/UmaUww=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=kVLyA2KtnyO52HDt0SOXS6iZVKvroTZlz4s0kAIBPka7O5j/zI0h0MygWNQtYwbXXanYsZjWiJtYxsRQrUsP51TlOL3D7YAcUxBxPvgPSb+38pQWQqdc4NiQV0GPIpPCdAlTIYztPQBBmyU36uy7DXIBBJzvlTWR21XP+IUbaSubeBgh5MEcasilvt7lcet5iY3yE4FUe13sXWXqWCt2MbHyzg0ZzA2cA9iwA306OzuQp92gmZuyTD86Cduyvq0rgXhI6fcUVPNO/1qyG5euThGBHqm3VL7jGguHeY5yx0zLTkhYP7OkkOVM7+YgAwebGLnRfGT6brgEdmE2jNpAgw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1702318502; bh=rxm1Z6OLUG87x2lYQclkfp/LqKIzTvoTJxA5K8jhkvR=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=WfqL8vg7c8O4N/Zly5Q/PCg7kAU/VGs1/Pd4jMq5BuiB52gN8I3noOZ6ylDtbi0ZsSF8QmZf0gnGPUQTKyCEhJH/eP9xQL1X4BNH8t3DLLi7yU43mChyQR+7ef7Geg7iBSKYk+ni3cec2Y2rhB/puSq9jyueQuyxFJar6WWT/zOOsVWbYMbkt098OEuUljYjUoh+H92Mz4OTW53rAKcqU/RfeZi3pLOoJ3AarJdpbQVZu2Tmbp8Zw4J+63qLBg27CUFPt1Gbo9sKBjWfWA2GcwPKjh0rR4tZ9/Cklnje2pESWD/CGu7kySffEmVNz/cqIUFmqa1fifWDeEtsOu+5zA== X-YMail-OSG: _KW_zR0VM1mAInrzSGCM_AUiR2vr0cmrnYsTYUJfG4sGEqqDit4LqXMDomeji0A ecMCMfbA4lFdxujnqPjdrJBP6Ptkc3IpjQrI4mi8tPo.xJEvL3yaWWfEW5DTQhP.Qp9jeFbiCyK5 MZrjuGXb_cxk7UbuJ55QyD47KK82eIORydolCwGdIENiOfkdcfOwAKdMY0taTRkVTejuJaCNufNG lK3ooEn9mPLFS85gBREYhFNHjSgGrg7QW0Akmfamzn7AHz3_Scv8H6aYRM5b8K8ZgwytnzHh6aEG TBxiKB9E6YRfwfXlyX4OzoUVK2qF7BYm7Hy5LIpg3B3J63ZtGXFiWJYaM7FUsNvMi7EKVKjgGnd5 RX2E8LHY3d9quPowrTVIdrB5SzW0NE5jPto8wHKeXUZ7OY73Po3LpWxg_SyGIh0Wjo9KWEqUMhgs TjTOqSntCXd1YpD9Wo6LDEPAmUpev52k8Gr7cBGI1HR1iDzPg1riUE6m_mUOuy_mM5S_9qMKZPYO .IShr625QGTgPSi.gTAoMbq3acfRMxr_j1lboA3AOSOlkvExYpvxojVxH_WXsyhg97.ay6j9qtK_ 9Df7Bh1KC9Rh9NXu1W5YvdHZawE2W55PcHuYjEF.DB8DtYZFVtqIg6QT7jkbNWVZV5cHfdAe03h_ Sb6HRqY5eCJFPUmfRtnYIyvu92WeFwa1gHhiXwYb852gM4vuTv2lZd3xC6jLlA7Z2lfhdv.WohNI M3kLFtrS81lrGpVEoTls6v7k7eF4DVMsDyV84F3Smj.WaL7IjRZf4VLQQHKDflwjbLbL6a7AY27e re.TVFXEpF2uwuB30oAkoQHlI3O2qp6RTNKvk42PZZ381R7.6BvKId7tm_05q_S0Cc0T1xzBLur7 fJOzugovFsf1TO2N9aQUCDJ.wHu3w2hZMG8o0NgyqJSkqBvp52EiQRahz4c6_b2QRWozm6ERkuaM Wl1rmoRspSb7uj7aZK0jIf2byE8M8X1UA6YwaJDgGL5HGyPipgrlxZgt0Wq3bNhrH_5I5ejFdpjx sKVJ9Yc5kCBsDEeo5fhcLP0MtuvqU.67tZTGoc51LwWyo6Sa8OKaFK4bAze0tjgJfG.cvgnCSZPR nmUo0rlHQYrwjrYZyGb61_LsxwKfaadidsUoB.LKRtAraCswYppj.Qv.hQJoN5nf1UTmv0OWK1RY QV9peK0eADlnxC4IBLwMxQCXV_zMhgf6l7uQzuPEz1N4s3amFYaLje2uJtDRlU23AZyk5UzPCUDZ r08iuTkitELwC9rOXFI6U0oAAJZwsXX.DvZdGOHT5sToUW3u2p3xLH2ydBV0eTfhuO.vphwqB9pO I_J3bWiG.4emb0oiuKRmYfMtkVHLYCz3cdsgx31xBNLoifFFEcFCInOzTMPzLBDyF_pU1iDCGhry 28uzKA7NQQpmhl5PMSrEOt8oax3Vi7pHDllNv0bt736V72WvAAX_7zgXVXTT.J6rNVoyJ1.Lz45N hzovjw2XrkMb8yFVG1ylUXOWJTF5KNU9.Zco0qUVDOxOQlOZk5YJz9_ezX9fpM9qKO4jHRU4vCM3 YjOXL7.lNuwu3gjA7SDKLRBobAin1AeQOaLKkAccRu5KEQ3RQh2WEtZmHCVi3IaMyxf.4zf_GrLK f74SILCv_GALCWhIonExanCaEhDfWzLMeMYe50M3WuBXd9JUbge_0bGfh4BzpRlL9uErRt100eXY F.tl3CqQDSHKrdFcvJ1wm0hkiPw5Imf9gnhjnKYig1CJuoxJLpChkSbKHUqxrDul4yCOO1Br_tBf EdH85DpE6cX0trxubsX_MJ7N6UwUuYE6HW4hnOOpLit2a4ACOxgWSczTt1TfoN5SdHyGujU2ADLg .4Lie4UHqogNmJzSEIfG2cqW..cA6luLzCLT8T47mB.HS30jk2S9ftotz3y8ZoaZOUsDDJWcTs77 Aq8jOhmJRpDHzZAR5ZQpntdEJwHzY_S3b6wDb4PUe3jutBly72CgssBGzAxFoJenVfLmmSrH6pGx azShrZtxzabcQYAP.pBcgS9Pz36RU5CMGpDLJPcmrM2CTqpiBMGB4DSd2P8VcnYjq1F0T6jDSKZn 1mJQ5nno1iuQAl2mkGF.74LFjNrZuzKSjMsZvu9EukYrtOYvJAog8RKz7mJ7ajIQyRs6QLDiFlBM PYSL.4KxZxc0Tdfd7C89oZA8HcQ8miHdih.xMR6KKzIHigK6GpPaGbR8l3boO.31K6r6zC.eWcmU E3Khm7.wgwhLCeAmcbibbInUQ2yM8IWM4Ggw- X-Sonic-MF: X-Sonic-ID: a4833eeb-a64f-4109-a87c-d9dd7338926b Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Mon, 11 Dec 2023 18:15:02 +0000 Received: by hermes--production-ir2-95776f84c-mmkhn (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 509e5bc1efd0807dd2f6577b7fb9396a; Mon, 11 Dec 2023 18:15:01 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH] Fix gdb.FinishBreakpoint when returning to an inlined function Date: Mon, 11 Dec 2023 19:14:38 +0100 Message-Id: <20231211181438.2851-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Antivirus: Avast (VPS 231211-0, 12/11/2023), Outbound message X-Antivirus-Status: Clean References: <20231211181438.2851-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Currently, when creating a gdb.FinishBreakpoint in a function called from an inline frame, it will never be hit: ``` (gdb) py fb=gdb.FinishBreakpoint() Temporary breakpoint 1 at 0x13f1917b4: file C:/src/repos/binutils-gdb.git/gdb/testsuite/gdb.python/py-finish-breakpoint.c, line 47. (gdb) c Continuing. Thread-specific breakpoint 1 deleted - thread 1 no longer in the thread list. [Inferior 1 (process 1208) exited normally] ``` The reason is that the frame_id of a breakpoint has to be the ID of a real frame, ignoring any inline frames. With this fixed, it's working correctly: ``` (gdb) py fb=gdb.FinishBreakpoint() Temporary breakpoint 1 at 0x13f5617b4: file C:/src/repos/binutils-gdb.git/gdb/testsuite/gdb.python/py-finish-breakpoint.c, line 47. (gdb) c Continuing. Breakpoint 1, increase_inlined (a=0x40fa5c) at C:/src/repos/binutils-gdb.git/gdb/testsuite/gdb.python/py-finish-breakpoint.c:47 (gdb) py print(fb.return_value) -8 ``` --- gdb/python/py-finishbreakpoint.c | 3 ++- .../gdb.python/py-finish-breakpoint.c | 14 +++++++++++ .../gdb.python/py-finish-breakpoint.exp | 25 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c index 627eb297542..7f3658decb3 100644 --- a/gdb/python/py-finishbreakpoint.c +++ b/gdb/python/py-finishbreakpoint.c @@ -212,7 +212,8 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs) "be set on a dummy frame.")); } else - frame_id = get_frame_id (prev_frame); + /* Get the real calling frame ID, ignoring inline frames. */ + frame_id = frame_unwind_caller_id (frame); } } catch (const gdb_exception &except) diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint.c b/gdb/testsuite/gdb.python/py-finish-breakpoint.c index 4ae2d1889cd..76552a64b16 100644 --- a/gdb/testsuite/gdb.python/py-finish-breakpoint.c +++ b/gdb/testsuite/gdb.python/py-finish-breakpoint.c @@ -34,6 +34,19 @@ void increase (int *a) increase_1 (a); } +int increase_2 (int *a) +{ + *a += 10; + return -8; +} + +inline void __attribute__((always_inline)) +increase_inlined (int *a) +{ + increase_2 (a); + *a += 5; +} + int test_1 (int i, int j) { @@ -85,6 +98,7 @@ int main (int argc, char *argv[]) increase (&i); increase (&i); increase (&i); + increase_inlined (&i); for (i = 0; i < 10; i++) { diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp b/gdb/testsuite/gdb.python/py-finish-breakpoint.exp index e5a46874afd..a6efd241e31 100644 --- a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp +++ b/gdb/testsuite/gdb.python/py-finish-breakpoint.exp @@ -85,6 +85,31 @@ with_test_prefix "normal conditions" { "check FinishBP not allowed in main" } +# +# Test FinishBreakpoint returning to an inlined function +# + +with_test_prefix "return to inlined function" { + clean_restart ${testfile} + gdb_load_shlib ${lib_sl} + + gdb_test "source $python_file" "Python script imported.*" \ + "import python scripts" + + if {![runto_main]} { + return 0 + } + + gdb_breakpoint "increase_2" + gdb_test "continue" "Breakpoint .*at.*" "continue to the function to finish" + + gdb_test "python finishbp_inline = MyFinishBreakpoint (gdb.parse_and_eval ('a'), gdb.newest_frame ())" \ + "Temporary breakpoint.*" "set FinishBreakpoint returning to inlined frame" + gdb_test "continue" "MyFinishBreakpoint stop with.*return_value is: -8.*#0.*increase_inlined.*" \ + "check MyFinishBreakpoint hit" + gdb_test "python print (finishbp_inline.return_value)" "-8.*" "check return_value" +} + # # Test FinishBreakpoint with no debug symbol #