From patchwork Thu Dec 7 12:47:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Domani X-Patchwork-Id: 81670 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 38643385AC1B for ; Thu, 7 Dec 2023 12:48:34 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 CC65E385840D for ; Thu, 7 Dec 2023 12:48:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CC65E385840D 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 CC65E385840D 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=1701953302; cv=none; b=mfSseypQ6s0NJdn/L7rMPEuzOfOqBnfxyqVO/JmzJ5Cl4yg5+QHoNe9dZNyvJhkTL5F77m+7kdLiaXfo7RPjHV85A0iStsLE21sQnPf5aW3sGMcjCt3EYTkOjeg3Jx9vPsR5Vl0gWXXDQZDGDq4xBmwE8yDX2cAGEIQC4R9+FRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701953302; c=relaxed/simple; bh=AYDPyU6EDoyjGfQNr/dmSmQ0+GNeeCBm8zKW/EVWwRs=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=V/vdISDBN+4+WViypXbg8sqminUdK+9MASXemnr3rgSErto9jrvs53v4PhNkZNAUbqjLhZpPWJ7dEg7QQwP5Vbq9bFykADXRQcoVWwhCdWwUjy5vZlGC/p3+JFN6IL6umHTVpTyeRpFYmtYtPZKy46awlRcTPSnZBJpLUOX1KsE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1701953290; bh=+D9SIu2N3Otuurv6GzYUze91yc+E+LICzpOXLwVE998=; h=From:To:Subject:Date:References:From:Subject:Reply-To; b=KOnzzwha0YBRCD0S68TFUPj6QYLofHwphsMKtyApK9l3mFlWAyREXCusi2FzeHa1+K8mVPQdLZIkALZbGMyHh66uG7saV1mCXTT5uJ9lctCMA3BgCamJuN/JsaOM/QWGrKPFa+t8cJ1qrn1VyIg1JSZ1WvAuJcJuxccgeOHCHakjL2NHwJQ0yNZFqUNgdq3UbhxPGJ1i0Y1McEEpNeRVyHiPwegih3+C6kAlxw/b6UXj/4Voacqiigyd3YbFi1L7lGfL3ytz5ZZcelQuYwxRcZ3+/4m5GKdzBBN3LQA6T6ub/gUOhZv7BGli7yKF0N1r8XvpDCnx15Wzv1O1YSbBiQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1701953290; bh=REhzSLL3bTt9v2dESr9mSVR5AeBeIn9A2+DJCYKKbJc=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=OkoxpdcLuJ67gOlaarMbiuwbvn5OTwdAOEjhNad+zokaIrdte/Vq1JcPXEBmfQ0UJBmtrP0O7+TMiIeXLKFzdZzzDJNDnuNJ3uLSuGpUArF3qot/QElC8exyggsuMXW255GYtdIh255aOn/klznoG76QJGg+G+wM3fPq6qZdQc65dyrzBi58Rb3Ka80EBb1tneV3pwK9O9Z14zFqHwGFZlOpmBlsJ05rX4y/7OnLq+v3DatrRCDHDVLeJpLfYyHyU+m6NmaD+fBTXV3MdnG/A3MhAV3kKH+Q7Yp2YbjCBsgG5Af4KcRcLJFXIxUfhb7AwJ3/XSNuZvFuzrkBohlfLQ== X-YMail-OSG: gk1P.34VM1k6ni6i7qLHHujtzWeMNWsgrVSjnLgy.iEeH_0vtzPMgpyASAt8GAD ILN1RFeMAHUJrifFNrjmpUp6JlU4rf8SJaZIpuDnhO9yI7aGsn19i6k14vI4mPJpBx3NN_ryr539 O._PSxkdDC_DSWlqqONV12jB4slvbCIeYGCCnGGrhIwME5J8fUsL2se7U1Nl_3ePTsBmfNAGDKiD mVc5QIaFupkgX8K5qHAeLJxajRY9WqooJmg2sZWaLG2EtbjdfQBRVZgx5uoEhWDWCUmTP5ty5fwe sXF.LP6RAI8tNQBqPk2XYt3dhIkEKD1w5dz5JKMY0cLaJ__5KE7TTKIksNj7G7G6_dncNsdpt6sU zvsC7oOGr8DGQolHT4UzGSajJCpkiV5GiRqHO2MQ4cpANEnjzC5Kr8M7zI3nXr_tZH2hQknQptc3 LHOkQyrbCLB.5MJyUQqVRj0ppx6KkdjiJ7zIL05cMb5yBurCGgu4UPZ7cpXcGROEkv4jWe7_Dhuk ochBQmcYxGk.n7MvfIRAeNq_YsninMqbfSbx5L72ShQJjbrqt0KWp_SN5yCBEsYjyLNvubNjTuIJ WFCXXV058LtiTaX7osGUUgviqTSLTTAksAemPQivYyokeA_y.KHd2LOZCzV979Rv9AhnOiezV70n G7G1yxrzu1UyLYxEp5874rfJfzObY4Iz4A95owi8zBtamVJTDtx70WDyRUC4Uc7mOOumPE1funiG W8PL_6.ghfhZLEosBsdSczlQvT.hETcpNWSl22PMny9.RTLA_O2qzDl0EC7s51K2aeM_sScpVl.2 s.2ADKGA7GKxJmKLgs3cQVP7bRUpj5HztrXYGBAxTCAbrz6E_LLUjgJ.EYMVeKErRmrfRIPhUTuM P1qn5KBl2CF9E_2JowKF0_ZnnLPVwHyodwJPtJtmGQuqyFi.JfF_556Wes2vZUHmyR3J06EwTi5r od3id2INCky0r29O6fjIdXXiEZOL2Yl_yhooEElqlIOkVMPyaY9caB0HbNRvroxgLO5fj58Wx.SX hUi.dPOaFr2tVkdjhZVGOjj.nvOjkajwVkuY14yRMrjsamtzN_3paB0NxSh9x277uWH8QwC2a.0Q p9OambX2mOwhiv13NwwmKl6Q3vlUA3dHFBm6b01lJSs8f4TvHit1ymiE5Jz87dZWXchk43C1TwtA vZb8zX8D3P5HkqvcR9cyVZo1ZOeu8FK1Q5tC6ZkRWOdu7ycxdw48kIM_OJbs_vuv63reUS7tIpfg ixnFqQNYHKE8gvpVAveT0SeCaH5KZScC1ViQkRdqNnpJNvzXwSwFNv.fRirShpjy9JmaSbhUBUno ErkqE52pqrg3LsrjCcmO6WD1DlV4yNbRZb8I1vh6s4_vEUXt0dpsPIBLdzzVHuEsULkvP7UwF0tr bEn3s0DyHB8fGS.YpOCeRtqCIJCxQplib0ZHT_41e0INEYVX19iemcMXCWHi_tr6PC.Xh3voJwOx Db7RgWruODo.UqoR_KKLNg0rscrEoHjD62FVpR3xfXhXRRjQYz65609BWKY2.gzhAYoxAulZ22ra _4bfX8x5hbFTKNiFjg1tane6u.h8sLCcSVKmXWSGV0IxYN0dmYVzATQhyPe5L44dJxMaij7nKiub HM9c8r5Y.x0DOfm.PWhW0Tbjq2_zMDUsH80j8b_qshxqdyeuQ46x9PD5lg8w0lzC4FM9sXpZp3BK CpYWrYcMBk2DKFZiieY0PsK95.2ziyYHgqhdrnz9yheCVk6D0jUBQcS4C._Unk0NDGTmVOXjGazs rRjjDmi40HoL5KUg.Zj.WNW8kCIx1jTIAYq1V.OP6yKb0OCUMixUXAz3X9dfBHsbRc8wuQ35IHmC FbYzZAmdYW8aoOMs3KKyFz81qcOjNMn5IfTJDTaExabB5sEgWhRjH4Zye0PfmiRFZejnbMJnR7gY dS4Sxaj4upczqH744blKHhKhRQeUmlO5VGOVOxM_GFwxSDp7PWmmW18Fru7amyAX8RDOrq8a1xC6 ke2aDIRqbdZZqhnebiK0AgcipT1EJ5cegNI3ofyLybpBKVYS2hzsLX3kjQxK5oCAOhGBroYkeQ0r pujaPIMK3.5tev6g5rY8WTM1fL3_w1y3oTsYuU4I9bnZ2ds8ZD8c1v6OQTtoBoiX3dAnHtdeetu9 A7HuiHur7DQr3fiDGLHOePPtXWCtUkp__DriVqKsgzNfd5T18o6LKB9ro4qSu.fOvMpQVqCSjNBT J9rMqyqpq4.1mtrVRmLqND8yWvA-- X-Sonic-MF: X-Sonic-ID: 50520ec9-37e1-40d7-b3b8-c88a0913a69e Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Thu, 7 Dec 2023 12:48:10 +0000 Received: by hermes--production-ir2-95776f84c-ksczb (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e8c1ab7d92d829f464e702d8bf1e725a; Thu, 07 Dec 2023 12:48:05 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH] Use function entry point record only for entry values Date: Thu, 7 Dec 2023 13:47:44 +0100 Message-Id: <20231207124745.1362-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Antivirus: Avast (VPS 231206-16, 12/06/2023), Outbound message X-Antivirus-Status: Clean References: <20231207124745.1362-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-9.1 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 PR28987 notes that optimized code sometimes shows the wrong value of variables at the entry point of a function, if some code was optimized away and the variable has multiple values stored in the debug info for this location: ``` (gdb) info address i Symbol "i" is multi-location: Base address 0x140001600 Range 0x13fd41600-0x13fd41600: the constant 0 Range 0x13fd41600-0x13fd41600: the constant 1 Range 0x13fd41600-0x13fd41600: the constant 2 Range 0x13fd41600-0x13fd41600: the constant 3 Range 0x13fd41600-0x13fd41600: the constant 4 Range 0x13fd41600-0x13fd41600: the constant 5 Range 0x13fd41600-0x13fd41600: the constant 6 Range 0x13fd41600-0x13fd41600: the constant 7 Range 0x13fd41600-0x13fd4160f: the constant 8 (gdb) p i $1 = 0 ``` Currently, when at the entry point of a function, it will always show the initial value (here 0), while the user would expect the last value (here 8). This logic was introduced for showing the entry-values of function arguments if they are available, but for some reason this was added for non-entry-values as well. One of the tests of amd64-entry-value.exp shows the same problem for function arguments: ``` s1=s1@entry=11, s2=s2@entry=12, ..., d9=d9@entry=11.5, da=da@entry=12.5 ``` I've fixed this by only using the initial values when explicitely looking for entry values. Now the local variable is as expected: ``` (gdb) p i $1 = 8 ``` And the test of amd64-entry-value.exp shows the expected current and entry values of the function arguments: ``` s1=3, s1@entry=11, s2=4, s2@entry=12, ..., d9=3.5, d9@entry=11.5, da=4.5, da@entry=12.5 ``` Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28987 Tested-By: Guinevere Larsen --- gdb/dwarf2/loc.c | 7 ++++--- gdb/dwarf2/loc.h | 3 ++- gdb/testsuite/gdb.arch/amd64-entry-value.exp | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c index 5b2d58ab44e..c15221eb7a2 100644 --- a/gdb/dwarf2/loc.c +++ b/gdb/dwarf2/loc.c @@ -363,7 +363,8 @@ decode_debug_loc_dwo_addresses (dwarf2_per_cu_data *per_cu, const gdb_byte * dwarf2_find_location_expression (const dwarf2_loclist_baton *baton, - size_t *locexpr_length, const CORE_ADDR pc) + size_t *locexpr_length, const CORE_ADDR pc, + bool at_entry) { dwarf2_per_objfile *per_objfile = baton->per_objfile; struct objfile *objfile = per_objfile->objfile; @@ -456,7 +457,7 @@ dwarf2_find_location_expression (const dwarf2_loclist_baton *baton, loc_ptr += bytes_read; } - if (low == high && unrel_pc == low) + if (low == high && unrel_pc == low && at_entry) { /* This is entry PC record present only at entry point of a function. Verify it is really the function entry point. */ @@ -3920,7 +3921,7 @@ loclist_read_variable_at_entry (struct symbol *symbol, frame_info_ptr frame) if (frame == NULL || !get_frame_func_if_available (frame, &pc)) return value::allocate_optimized_out (symbol->type ()); - data = dwarf2_find_location_expression (dlbaton, &size, pc); + data = dwarf2_find_location_expression (dlbaton, &size, pc, true); if (data == NULL) return value::allocate_optimized_out (symbol->type ()); diff --git a/gdb/dwarf2/loc.h b/gdb/dwarf2/loc.h index 5cf824d3ae2..94e1fbe517e 100644 --- a/gdb/dwarf2/loc.h +++ b/gdb/dwarf2/loc.h @@ -39,7 +39,8 @@ extern unsigned int entry_values_debug; const gdb_byte *dwarf2_find_location_expression (const dwarf2_loclist_baton *baton, size_t *locexpr_length, - CORE_ADDR pc); + CORE_ADDR pc, + bool at_entry = false); /* Find the frame base information for FRAMEFUNC at PC. START is an out parameter which is set to point to the DWARF expression to diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value.exp b/gdb/testsuite/gdb.arch/amd64-entry-value.exp index 3c666acc117..c7fea226df7 100644 --- a/gdb/testsuite/gdb.arch/amd64-entry-value.exp +++ b/gdb/testsuite/gdb.arch/amd64-entry-value.exp @@ -77,7 +77,7 @@ gdb_continue_to_breakpoint "entry_stack: stacktest" gdb_test "bt" \ [multi_line \ - "^#0 +stacktest *\\(r1=r1@entry=1, r2=r2@entry=2, \[^\r\n\]+, s1=s1@entry=11, s2=s2@entry=12, \[^\r\n\]+, d9=d9@entry=11\\.5, da=da@entry=12\\.5\\) \[^\r\n\]*" \ + "^#0 +stacktest *\\(r1=r1@entry=1, r2=r2@entry=2, \[^\r\n\]+, s1=3, s1@entry=11, s2=4, s2@entry=12, \[^\r\n\]+, d9=3\\.5, d9@entry=11\\.5, da=4\\.5, da@entry=12\\.5\\) \[^\r\n\]*" \ "#1 +0x\[0-9a-f\]+ in main .*"] \ "entry_stack: bt at entry"