From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by sourceware.org (Postfix) with ESMTPS id 6BA243938C2E for ; Wed, 16 Jun 2021 07:46:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6BA243938C2E IronPort-SDR: ZaFsIV0022MFE5l77eZIQYv3EAXBrVtnFJMhmS/4MU7VMcGa/o+xzliVcmfWSii8CAJzDyVps/ iUc+JEEQNREw== X-IronPort-AV: E=McAfee;i="6200,9189,10016"; a="193252761" X-IronPort-AV: E=Sophos;i="5.83,277,1616482800"; d="scan'208";a="193252761" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2021 00:46:15 -0700 IronPort-SDR: bgTE154NQ3UlZ5QTfmpwEfAuJA6KGPHFbStbZi+Sjnke2oZyifI/EeeImi0qYmh2P1gptZl3p6 nIGymDfmoMYA== X-IronPort-AV: E=Sophos;i="5.83,277,1616482800"; d="scan'208";a="471931869" Received: from mulvlfelix.iul.intel.com (HELO localhost) ([172.28.48.31]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2021 00:46:12 -0700 From: Felix Willgerodt To: markus.t.metzger@intel.com, gdb-patches@sourceware.org Subject: [PATCH v3 03/12] btrace: Enable auxiliary instructions in record function-call-history. Date: Wed, 16 Jun 2021 09:41:56 +0200 Message-Id: <20210616074205.1129553-4-felix.willgerodt@intel.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20210616074205.1129553-1-felix.willgerodt@intel.com> References: <20210616074205.1129553-1-felix.willgerodt@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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: Wed, 16 Jun 2021 07:46:22 -0000 Print the auxiliary data when a btrace_insn of type BTRACE_INSN_AUX is encountered in the function-call-history. Printing is active by default, it can be silenced with the /a modifier. This patch is in preparation for the new ptwrite feature, which is based on auxiliary instructions. gdb/ChangeLog: 2021-06-14 Felix Willgerodt * btrace.h (btrace_function_flag): Add BFUN_AUX_DECODED. * record-btrace.c (btrace_print_aux_insn): New function. (btrace_call_history): Handle BTRACE_INSN_AUX. * record.c: (get_call_history_modifiers): Add /a modifier. * record.h (record_print_flag): New value RECORD_DONT_PRINT_AUX. gdb/doc/ChangeLog: 2021-06-14 Felix Willgerodt * gdb.texinfo (record function-call-history): Document /a modifier. --- gdb/btrace.h | 6 +++++- gdb/doc/gdb.texinfo | 5 +++-- gdb/record-btrace.c | 21 +++++++++++++++++++++ gdb/record.c | 5 +++++ gdb/record.h | 5 ++++- 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/gdb/btrace.h b/gdb/btrace.h index 670c182505d..e6694551c70 100644 --- a/gdb/btrace.h +++ b/gdb/btrace.h @@ -105,7 +105,11 @@ enum btrace_function_flag /* The 'up' link points to a tail call. This obviously only makes sense if bfun_up_links_to_ret is clear. */ - BFUN_UP_LINKS_TO_TAILCALL = (1 << 1) + BFUN_UP_LINKS_TO_TAILCALL = (1 << 1), + + /* Indicates that at least one auxiliary instruction is in the current + function segment. */ + BFUN_AUX_DECODED = (1 << 2) }; DEF_ENUM_FLAGS_TYPE (enum btrace_function_flag, btrace_function_flags); diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 8f49a91347f..5e4f8e73b7d 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -7940,8 +7940,9 @@ for this instruction sequence (if the @code{/l} modifier is specified), and the instructions numbers that form the sequence (if the @code{/i} modifier is specified). The function names are indented to reflect the call stack depth if the @code{/c} modifier is -specified. The @code{/l}, @code{/i}, and @code{/c} modifiers can be -given together. +specified. Printing auxiliary information is enabled by default and can be +omitted with the @code{/a} modifier. The @code{/l}, @code{/i}, @code{/a} and +@code{/c} modifiers can be given together. @smallexample (@value{GDBP}) @b{list 1, 10} diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 96c1b69cb0f..2fc273ca229 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -1152,6 +1152,23 @@ btrace_get_bfun_name (const struct btrace_function *bfun) return "??"; } +static void +btrace_print_aux_insn (struct ui_out *uiout, + const struct btrace_function *bfun, + const struct btrace_thread_info *btinfo) +{ + for (const auto &i : bfun->insn) + { + if (i.iclass == BTRACE_INSN_AUX) + { + uiout->text ("\t\t["); + uiout->field_fmt ("aux-data", "%s", + btinfo->aux_data[i.aux_data_index].c_str ()); + uiout->text ("]\n"); + } + } +} + /* Disassemble a section of the recorded function trace. */ static void @@ -1227,6 +1244,10 @@ btrace_call_history (struct ui_out *uiout, } uiout->text ("\n"); + + if (((flags & RECORD_DONT_PRINT_AUX) == 0) + && ((bfun->flags & BFUN_AUX_DECODED) != 0)) + btrace_print_aux_insn(uiout, bfun, btinfo); } } diff --git a/gdb/record.c b/gdb/record.c index 084c8a12c16..17a3585a1a5 100644 --- a/gdb/record.c +++ b/gdb/record.c @@ -636,6 +636,9 @@ get_call_history_modifiers (const char **arg) case 'c': modifiers |= RECORD_PRINT_INDENT_CALLS; break; + case 'a': + modifiers |= RECORD_DONT_PRINT_AUX; + break; default: error (_("Invalid modifier: %c."), *args); } @@ -881,6 +884,8 @@ Without modifiers, it prints the function name.\n\ With a /l modifier, the source file and line number range is included.\n\ With a /i modifier, the instruction number range is included.\n\ With a /c modifier, the output is indented based on the call stack depth.\n\ +With a /a modifier, omits output of auxiliary data, which is enabled \ +by default.\n\ With no argument, prints ten more lines after the previous ten-line print.\n\ \"record function-call-history -\" prints ten lines before a previous ten-line \ print.\n\ diff --git a/gdb/record.h b/gdb/record.h index ac3c84d20ea..3213387920b 100644 --- a/gdb/record.h +++ b/gdb/record.h @@ -62,7 +62,10 @@ enum record_print_flag RECORD_PRINT_INSN_RANGE = (1 << 1), /* Indent based on call stack depth (if applicable). */ - RECORD_PRINT_INDENT_CALLS = (1 << 2) + RECORD_PRINT_INDENT_CALLS = (1 << 2), + + /* Deactivate printing auxiliary data (if applicable). */ + RECORD_DONT_PRINT_AUX = (1 << 3) }; DEF_ENUM_FLAGS_TYPE (enum record_print_flag, record_print_flags); -- 2.25.4 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