From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic308-17.consmr.mail.ir2.yahoo.com (sonic308-17.consmr.mail.ir2.yahoo.com [77.238.178.145]) by sourceware.org (Postfix) with ESMTPS id ADE0A3858D20 for ; Sat, 6 Jan 2024 14:18:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ADE0A3858D20 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 ADE0A3858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=77.238.178.145 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704550686; cv=none; b=pAF1WlWCDbQCSR2pz3/7yhLoIZapuA0LPT/Bm7ZlD1Pn1qR75aZOsqrKljWhgq6iQOdCAwShjplacufHlGgZo7Y4dHtMFUs2EFG2xYYdJc6pHSEmf+rPmTTjIaRxadxWqLLfX2RfHYhbBpcCIBCMkQbxyAt0lvsH7iGE9sCJUmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704550686; c=relaxed/simple; bh=2CyVpbEXvkxvNNCxSiOHBGOeJB+QnsyVHwodv1DoGdI=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=Pe0dhWiBGCEcmtCiX1MsQzzrQ1FDNwS6kBZjm5Ks5/0R++ezofWgL18cliz5An3oNK+8T1vy1EVfVVCQfhM2C7EjhD/qHJedVUJZTKH/CNYVb8iWR5qYaTmBRZ044l+Qm6ytYVy4yIciLn/hIHc5+er7eD6Zgwg1qdfmSoPi0/0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1704550683; bh=jTJn4Jxy8UKWosWYnSBg5QEjC4dGRUPLDQlbMWgxuos=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=B/pkkiC+TOM5M1R/jiTfLDXWzRML2cewkatOXNK4wxIrBNEHj+WUuN973FAojImtIHUm8RcgKRVYLp85AddzFo9yjw11oJpGUA4j2f9ikrCeexlWuerqJ1uZ1pVd7mAJvawUu9nSPG9vR82dX9BVxZnR/eboM+4MKGbwynCPhx+bTbjWOOjsVeeXlwBnsLa1F7/FnJ++Ier2sTGp72ZlCwG1nI5+4kbMOC14CZS0D/v9b5V7b3lVAPOtq/hl2RDSgEUMYqUOI650bSLDwp14QceLIN9lrFGlhDr551dbmopF14H9qkkZH9aKh8RFJjYY1HbzseMY2g+1aCzOk11wIA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1704550683; bh=G8DVspZLJjMcIcxRLd7G4bpEKsaHY4oo4UTjrBT6fWT=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=tJtdHMW21phBafJyh6Hhsvs8wA5pE1Rkx2tStNV/8VuQdl5twnggB7qLcpkC+YxNgDCUCXZUgsXqbJqjqCcQHNcwNdZV0to4us9dRf205HKy6DBzcSGJlHZ3w22BH0BO9n3SZI7kIb7VpiCYoCEFL1nYVTAr2D6QJpyuxFYi0v7LZr5661ZPyHI1vn/N4ASx1X4XRzVtAC1pETqEkLWpQC7WTVoAWvAdcjJaEsJLk/dg526zNFMH0LsUncVDeWdztMCSrtyU1vGe13wrA3RlVnRx5IrryiILP2hzikn41VgMbtc9zvkQtb9FQHyr13hYFuYKxDuH14MTKNGqnm2OUw== X-YMail-OSG: gdH9bXEVM1n7pSbBSCVNnWXcWaBMXancy_Cwr8086UNQ5QsmkH6rjoOTu2u0blA atjTlX6F6.VNqVetkrnkvXF6nl2vVKoX.vEb2LOHBfl3OU4EmvV.SvKo4OSwyyqd0xTUbANfnQYG yRImEqaR8DgJ_mx8i7iYZtZd4mcw_ALHLfSWcScFlanIjCMRQNFC_DraSrvdblzGjVZbZ404f3me UM1LsZeG62PlkcR_d.A.JNOtfMIP2qfE9hxMv.cmuOBhkENDP0rVOyxso.jOiyYeMyUnGdX9xt3x gB0llTsi.U0niR1zhL1nfae2Padn75DG9_uHWhrlgWqTecFxHI2eQxe4M_JhC65aejDM.85zXfmD Qwg5hEmhIqsppGL14rjqnknJhbBO_FkSOEoNvBv7NpVJrcLJjem3qZApP2m9Sx_2mu.ncavPckCn swPTRoAwE3RnjDhlf0Csryhpfn8zzS0XSQME7XD71OCRlnp.Y9pFe_N5Rov5qkhQazKKRh8SNtTp i2UiUeB4IEJo7K_JGx0EpPhBHvDD4tCnKEOnNT_WAX9wqGY10LLZyKzK8WKWd41Udy4mb.8MSvWq SrlV6QUoOmLejFU2wbq1ox5AB1HcCny4QY3JLvCBqpQJmCG6b_ipFYxMPgibFqxXI.6xRwpEU8sl HMhG.Qv74qYkEjylYiz9Mji.DGWXEEzS.mUuEN0M_jGuSeYUq6HhAqLOHEJjQDzI2yYGhw06tez0 _uNxnikiZcA4AG.UI3UhP8f9cYfRwm7cE9ZBverou7cv1KXiM.Wf_y6_332_FZuH6z9djW690Hv0 CTXA6HfFtv7MM4V1cT5cmJ5WCizpA3Y0BjsR0xvjLeG2jvLRoZQsSGqJJ6WxCif8mdVVoZCqvEct WwUHv.VjuuBrl9_k1Ot.n.WA3NORyF15rnCxxhKC1DIjWt.464Sh1ErtVm134cq74ZYmg9NdxtlV TutAZtnkC6YE22n_abN5DqkLIsFARKE4qf1PA19e2hleJqvjypVGyieW3U_dIGiyCj59z0dwRwzy H49Blc0KKXW2E.XQYVPhs_7cRkMaefWFuHoJlcfOrl9vRIdCJfXFOquXi4a3iKjCphF2kmOquve4 DUcJd71V6u0KHrv1.eTIE34tJNYmuOECqdu7sK7sBZVM0dRIyhG5SElZOe2OGv.7YAGEW29Cr6vW dg5Zsbr_5rG0t4IEIZTOo_aq7KtIwdKML84EVL8sXiIKCHkq1jurayqOe6CgjN6QUZzuh9wMox21 FWlanq8ngiP61MlsfFAU9JSYh9AEsMxvuow6q8ATnMRa9iOhrhoSkujUmwR6UnLhzF.iOGKecSEM QaC_EDfd7R2SY9kyv9goN4e9LDfEdU_vEx_SSGWBXZcBIYI8ML.ULbJGt22Lid8dlw2ncLVls997 S6Dko7zRslmZ1hZFMshF8wsZJbW39p1Si1MfCp8IlNwxvXjyHJUFTtss.vabbq3ob8CA04XtV2_U 9D8hd8lPg8Vd7QMbL.LlbjOmwMiuAtPtyqgfxhcRUh5GYaqReXiAfbQYwudrUMBftb7RqhncWatF gfbcv_sgOQf2UJfdfavNTIcY5QxC5O.xowfT9z3w.JlP98hlfnMRo24YM3U1YtwoWy1JzFP8TU31 TQUan07oUTnNtisE4B0LibyQnhvxbs9zqTY1bxTVgfIcEPVpq_7dtZkOb0KaLgNv3NHz_76PVR1s TzqfuvhdUEszD8bzeX0jsvAAjnocg5bNUtn3vHN4sijIwgGfVVNoTtrNVTsH9rRHHk4RCTAj2F9l H_Y4nZy0ypUBDFo0Fh34Qg5ar14TMbe2VW1W_e.dOxlGQXcaTOu0hFvzcpVzvMn6tKK7Gd5uDYFA AnsP_b.Vtz.K1KHvYzAMoYA3EV5gpf0CwF9mpRgZBMdnMKRGJqYsnRMyYazA6JcvEkNhHhREv7c9 BkrXxtPYYlh.NDYir_KIAlZqeeR_Vv8B0RyG5peBl3l5vmLKEAiULQsobk4VjUI9PcXdPvsdyaLU XzuVT6VzF_.loFJ0xxVNuOsHmVAQS8ZRD7zhVRcsNwqtRJpGizuhOXaI6sT3gcshlb4KRiKHwJwh EmmzBjt4iOwE6HaxY.ZthBkLmdG7JpPFERtTi7qwmLS9EnEukQjTQ3_MLzLJCQ.l1x7UAA7HhfsV dTOS6j7eyPgswq7DE47ncDYb1eRay92IPi0gyEAw3AJj7AkP.Ywfeo.YDrC7za_pR0i0Q.RTgh2h lR.QbiaMYBght6XMbNxOfrJSvDnEUsQ-- X-Sonic-MF: X-Sonic-ID: 676cce36-31de-420a-bc9f-25306cc7a77f Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Sat, 6 Jan 2024 14:18:03 +0000 Received: by hermes--production-ir2-6488884f6f-l69zv (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 9fccaf8a41151909ac9c067f7a8b7de1; Sat, 06 Jan 2024 14:17:59 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH] Fix backtrace limit stopping on inline frame Date: Sat, 6 Jan 2024 15:17:35 +0100 Message-Id: <20240106141735.2330-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 240106-0, 01/06/2024), Outbound message X-Antivirus-Status: Clean References: <20240106141735.2330-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-9.2 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 List-Id: If you have set up a backtrace limit, and the backtrace stops because of this in an inline frame with arguments, you get an assertion failure: ``` (gdb) bt #0 normal_frame (i=0) at gdb-29865.c:4 #1 0x000000013fe3162a in inline_frame (i=0) at gdb-29865.c:9 #2 main () at gdb-29865.c:14 (gdb) set backtrace limit 2 (gdb) bt #0 normal_frame (i=0) at gdb-29865.c:4 #1 0x000000013fe3162a in inline_frame ( C:/src/repos/binutils-gdb.git/gdb/frame.c:3346: internal-error: reinflate: Assertion `m_cached_level >= -1' failed. ``` And if this one if fixed, there is another one as well: ``` (gdb) bt #0 normal_frame (i=0) at gdb-29865.c:4 #1 0x000000013fdf162a in inline_frame ( C:/src/repos/binutils-gdb.git/gdb/dwarf2/loc.c:1160: internal-error: dwarf_expr_reg_to_entry_parameter: Assertion `frame != NULL' failed. ``` The reason for both of them is this kind of loop: ``` while (get_frame_type (frame) == INLINE_FRAME) frame = get_prev_frame (frame); ``` Since get_prev_frame respects the backtrace limit, it will return NULL, and from there on you can't continue. This changes these loops to use get_prev_frame_always instead, so you always get a non-inline frame in the end. With this backtrace works: ``` (gdb) bt #0 normal_frame (i=0) at gdb-29865.c:4 #1 0x000000013fd4162a in inline_frame (i=0) at gdb-29865.c:9 (gdb) ``` Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29865 --- gdb/dwarf2/frame.c | 2 +- gdb/dwarf2/loc.c | 2 +- gdb/testsuite/gdb.opt/inline-bt.c | 8 ++++---- gdb/testsuite/gdb.opt/inline-bt.exp | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c index d3d1ecdf1f5..143b934e5ef 100644 --- a/gdb/dwarf2/frame.c +++ b/gdb/dwarf2/frame.c @@ -1423,7 +1423,7 @@ dwarf2_frame_cfa (frame_info_ptr this_frame) _("cfa not available for record btrace target")); while (get_frame_type (this_frame) == INLINE_FRAME) - this_frame = get_prev_frame (this_frame); + this_frame = get_prev_frame_always (this_frame); if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE) throw_error (NOT_AVAILABLE_ERROR, _("can't compute CFA for this frame: " diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c index c15221eb7a2..b1f188bf9c5 100644 --- a/gdb/dwarf2/loc.c +++ b/gdb/dwarf2/loc.c @@ -1156,7 +1156,7 @@ dwarf_expr_reg_to_entry_parameter (frame_info_ptr frame, while (get_frame_type (frame) == INLINE_FRAME) { - frame = get_prev_frame (frame); + frame = get_prev_frame_always (frame); gdb_assert (frame != NULL); } diff --git a/gdb/testsuite/gdb.opt/inline-bt.c b/gdb/testsuite/gdb.opt/inline-bt.c index 8dac8d30300..0dad0f47e6e 100644 --- a/gdb/testsuite/gdb.opt/inline-bt.c +++ b/gdb/testsuite/gdb.opt/inline-bt.c @@ -28,15 +28,15 @@ volatile int result; void bar(void); -inline ATTR int func1(void) +inline ATTR int func1(int s) { bar (); - return x * y; + return x * y + s; } inline ATTR int func2(void) { - return x * func1 (); + return x * func1 (1); } int main (void) @@ -47,7 +47,7 @@ int main (void) y = 8; bar (); - val = func1 (); + val = func1 (2); result = val; val = func2 (); diff --git a/gdb/testsuite/gdb.opt/inline-bt.exp b/gdb/testsuite/gdb.opt/inline-bt.exp index 501b24109e3..b0e5f61a5c7 100644 --- a/gdb/testsuite/gdb.opt/inline-bt.exp +++ b/gdb/testsuite/gdb.opt/inline-bt.exp @@ -65,3 +65,4 @@ gdb_test "up" "#1 .*func1.*" "up from bar (4)" gdb_test "info frame" ".*in func1.*" "info frame still works" # Verify the user visible limit works as expected. gdb_test "up" "Initial frame selected; you cannot go up." "up hits limit" +gdb_test "backtrace" "#0 bar.*#1 .*func1.*" "backtrace hits limit" -- 2.35.1