From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 4IE2DehdBWbUdhkAWB0awg (envelope-from ) for ; Thu, 28 Mar 2024 08:09:12 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=NfIJHP/g; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 2D1981E0C0; Thu, 28 Mar 2024 08:09:12 -0400 (EDT) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 1C81B1E030 for ; Thu, 28 Mar 2024 08:09:10 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C65853858D33 for ; Thu, 28 Mar 2024 12:09:09 +0000 (GMT) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) by sourceware.org (Postfix) with ESMTPS id DDB4E3858D34 for ; Thu, 28 Mar 2024 12:07:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DDB4E3858D34 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DDB4E3858D34 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.16 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711627631; cv=none; b=YVCzARsI6PI4wnUc2d/ifcMdasnT71ko2YBCrnGujNaJ/nmpmCgA5qATpcPbpC0/W1jUqY4D8jupBaIGJ80PPIqOan0WNdSU47EnuOczllUn/S6yT63BWQovnki7mG9bW4cp4VmG8KbBu9SN9h9IxUYEkvdYKd4GSgnKjrv49tI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711627631; c=relaxed/simple; bh=0INohvx21xGKPM5IvyDrC9MuBv9NvwSgnA85Rp0rCek=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=ur9RZ5HNrtcgjN922bgSCBdF2BJQ6jkxQGp8q2VMqEjm/25MPFp6O3Ca0fmGYH1xb9rl7MHWNE/xkhR5qrFQpWButBWLW1jG35pEOxW4PWgGFBWxaP4qc+j1e+jFNsPqn0475UqCOz3CKMGR7i5MRp9ZHXv+f8nPsjzODar18i0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1711627625; x=1743163625; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0INohvx21xGKPM5IvyDrC9MuBv9NvwSgnA85Rp0rCek=; b=NfIJHP/gU0CEX4CdtsjgKhfuPYSJGVMMGuQThjQS/ZB131mWIYqqKjg+ QE8wHHWJ/x/F/pubH1+l0dRaSx8L6zA1XpM29fEOZMkajVoTlRUMTWZvL 0Q+OvmS4RaGnAXM43hXnJVak+UtouZ1Y2gDR41zQydY3CDLytAaa0QQWz 8MfD/1mp2siSYPtJZER6TqqNW55KfQ1sVha9oVVHjRAcXDKjN+LZ1sGVO W+9k81eO7dDdrerOqBUxeZwv79PNqefWrOqHM7eZ1jbtiw+hVHYNoTuhH ZoqBuA8ZE0GwRHuHrd7pG7lvaM27FzMF0tXznwpKWZYZPX/95a7i966W6 g==; X-CSE-ConnectionGUID: /XpeTwkhSHeaJRsouquf+w== X-CSE-MsgGUID: e5MqZ1joQQezJWjRXBcLIA== X-IronPort-AV: E=McAfee;i="6600,9927,11026"; a="7374686" X-IronPort-AV: E=Sophos;i="6.07,161,1708416000"; d="scan'208";a="7374686" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Mar 2024 05:07:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,161,1708416000"; d="scan'208";a="21277844" Received: from abijaz-mobl2.ger.corp.intel.com (HELO localhost) ([10.246.42.1]) by ORVIESA003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Mar 2024 05:07:02 -0700 From: Abdul Basit Ijaz To: gdb-patches@sourceware.org Cc: abdul.b.ijaz@intel.com, JiniSusan.George@amd.com, tom@tromey.com, eliz@gnu.org Subject: [PATCH v6 09/10] gdb, mi: Skip trampoline functions for the -stack-list-arguments command. Date: Thu, 28 Mar 2024 13:05:27 +0100 Message-Id: <20240328120528.30382-10-abdul.b.ijaz@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240328120528.30382-1-abdul.b.ijaz@intel.com> References: <20240328120528.30382-1-abdul.b.ijaz@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP 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+public-inbox=simark.ca@sourceware.org From: "Ijaz, Abdul B" This change skips trampoline functions for the '-stack-list-arguments' command when the option 'skip-trampoline-functions' is set to 'on'. Before this change, GDB prints the arguments of frames indicated by the compiler with DIE "DW_AT_trampoline" in the backtrace for the mi command stack-list-arguments, but for better user experience, all such frames can be hidden from the user. In this example the IFX compiler emits "DW_AT_trampoline" tag for the 'first' and 'second' trampoline functions like following: function second (x, y) result(z) integer, intent(in) :: x, y integer :: z z = x * y ! breakpt-args end function second function first (num1, num2) result(total) integer, intent(in) :: num1, num2 integer :: total total = second (num1 + 4, num2 * 3) ! first-breakpt total = total + 30 end function first Related Dwarf: 0x0000013f: DW_TAG_subprogram DW_AT_low_pc (0x0000000000404350) DW_AT_high_pc (0x000000000040435f) DW_AT_frame_base (DW_OP_reg6 RBP) DW_AT_linkage_name ("second_.t74p.t75p") DW_AT_name ("second_.t74p.t75p") DW_AT_trampoline ("second_") 0x0000015a: DW_TAG_subprogram DW_AT_low_pc (0x00000000004044a0) DW_AT_high_pc (0x00000000004044af) DW_AT_frame_base (DW_OP_reg6 RBP) DW_AT_linkage_name ("first_.t104p.t105p") DW_AT_name ("first_.t104p.t105p") DW_AT_trampoline ("first_") Before this change, the -stack-list-arguments' command output looks like: ''' (gdb) -stack-list-arguments 0 ^done, stack-args=[ frame={level="0",args=[name="x",name="y"]}, frame={level="1",args=[]}, frame={level="2",args=[name="num1",name="num2"]}, frame={level="3",args=[]}, frame={level="4",args=[]}] ''' After change: ''' (gdb) -stack-list-arguments 0 ^done, stack-args=[ frame={level="0",args=[name="x",name="y"]}, frame={level="1",args=[name="num1",name="num2"]}, frame={level="2",args=[]}] ''' The test gdb.mi/mi-func-treampoline is updated for testing the change. 2024-03-28 Ijaz, Abdul B --- gdb/doc/gdb.texinfo | 4 ++++ gdb/mi/mi-cmd-stack.c | 7 +++++++ gdb/testsuite/gdb.mi/mi-func-trampoline.exp | 13 ++++++++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 90221e9b9c1..6b2f40c906c 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -35183,6 +35183,10 @@ variable object is updated, @value{GDBN} makes sure that the thread/frame combination the variable object is bound to still exists, and re-evaluates the variable object in context of that thread/frame. +If the option @code{skip-trampoline-functions} is set for the +@code{-stack-list-arguments}, @value{GDBN} will not show trampoline +functions in the stack. + The following is the complete set of @sc{gdb/mi} operations defined to access this functionality: diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c index 830edcb816e..9b288c3fe03 100644 --- a/gdb/mi/mi-cmd-stack.c +++ b/gdb/mi/mi-cmd-stack.c @@ -404,6 +404,13 @@ mi_cmd_stack_list_args (const char *command, const char *const *argv, int argc) i++, fi = get_prev_frame (fi)) { QUIT; + if (skip_trampoline_functions) + { + for (int j = 0; (SAFE_TRAMPOLINE_CHAIN (j, fi) + && in_trampoline_frame (fi)); ++j) + fi = get_prev_frame (fi); + } + ui_out_emit_tuple tuple_emitter (uiout, "frame"); uiout->field_signed ("level", i); list_args_or_locals (user_frame_print_options, diff --git a/gdb/testsuite/gdb.mi/mi-func-trampoline.exp b/gdb/testsuite/gdb.mi/mi-func-trampoline.exp index 34a2c464f21..44daba74cde 100644 --- a/gdb/testsuite/gdb.mi/mi-func-trampoline.exp +++ b/gdb/testsuite/gdb.mi/mi-func-trampoline.exp @@ -13,9 +13,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Test -stack-list-frames command for functions with trampoline -# calls. Also checks if trampoline frames are filtered while printing -# stack. +# Test -stack-list-frames and -stack-list-arguments command for functions +# with trampoline calls. Also checks if trampoline frames are filtered +# while printing stack. require allow_fortran_tests @@ -55,6 +55,10 @@ set frame1_regx "\{level=\"0\",addr=\"$hex\",func=\"second\",file=\".*func-tramp set frame2_regx "\{level=\"2\",addr=\"$hex\",func=\"first\",.*\}" set frame3_regx "\{level=\"4\",addr=\"$hex\",func=\"func_trampoline\",.*\}" +set arg1_regx "\{level=\"0\",args=\\\[name=\"x\",name=\"y\"\\\]\}" +set arg2_regx "\{level=\"1\",args=\\\[name=\"num1\",name=\"num2\"\\\]\}" +set arg3_regx "\{level=\"2\",args=\\\[\\\]\}" + # Set breakpoint inside the innermost function 'second'. mi_create_breakpoint "-t $srcfile:$inner_loc" \ "insert breakpoint at line $inner_loc " \ @@ -66,3 +70,6 @@ mi_expect_stop \ mi_gdb_test "100-stack-list-frames" \ "100\\^done,stack=\\\[frame=${frame1_regx},frame=${frame2_regx},frame=${frame3_regx}\\\]" + +mi_gdb_test "200-stack-list-arguments 0" \ + "200\\^done,stack-args=\\\[frame=${arg1_regx},frame=${arg2_regx},frame=${arg3_regx}\\\]" -- 2.34.1 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928