]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
btrace: Enable auxiliary instructions in record instruction-history.
authorFelix Willgerodt <felix.willgerodt@intel.com>
Wed, 6 Jun 2018 12:27:21 +0000 (14:27 +0200)
committerFelix Willgerodt <felix.willgerodt@intel.com>
Wed, 14 Aug 2024 09:20:55 +0000 (11:20 +0200)
Print the auxiliary data when a btrace_insn of type BTRACE_INSN_AUX
is encountered in the instruction-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.

Approved-By: Markus Metzger <markus.t.metzger@intel.com>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
gdb/disasm-flags.h
gdb/doc/gdb.texinfo
gdb/record-btrace.c
gdb/record.c

index 4f7112594537c0de159cd142b23b047740b8bf85..10cb95d3c17631b1729eaf7cf9fc38c4581edf29 100644 (file)
@@ -34,6 +34,7 @@ enum gdb_disassembly_flag : unsigned
     DISASSEMBLY_SOURCE = (0x1 << 5),
     DISASSEMBLY_SPECULATIVE = (0x1 << 6),
     DISASSEMBLY_RAW_BYTES = (0x1 << 7),
+    DISASSEMBLY_OMIT_AUX_INSN = (0x1 << 8),
   };
 DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
 
index 9bbaffea7f315222351d6bdd0c077645dbe8e73e..8d86823f8c11815de159d73466b3ea15fd1d2944 100644 (file)
@@ -8202,6 +8202,9 @@ To better align the printed instructions when the trace contains
 instructions from more than one function, the function name may be
 omitted by specifying the @code{/f} modifier.
 
+Printing auxiliary information is enabled by default and can be
+omitted with the @code{/a} modifier.
+
 Speculatively executed instructions are prefixed with @samp{?}.  This
 feature is not available for all recording formats.
 
index 9fec6112755447295fc9fdbf4909ba05d690ad0f..54c761d09847904aac86f5285508a04a0db14ef5 100644 (file)
@@ -827,6 +827,22 @@ btrace_insn_history (struct ui_out *uiout,
          btrace_ui_out_decode_error (uiout, btrace_insn_get_error (&it),
                                      conf->format);
        }
+      else if (insn->iclass == BTRACE_INSN_AUX)
+       {
+         if ((flags & DISASSEMBLY_OMIT_AUX_INSN) != 0)
+           continue;
+
+         uiout->field_fmt ("insn-number", "%u", btrace_insn_number (&it));
+         uiout->text ("\t");
+         /* Add 3 spaces to match the instructions and 2 to indent the aux
+            string to make it more visible.  */
+         uiout->spaces (5);
+         uiout->text ("[");
+         uiout->field_fmt ("aux-data", "%s",
+                           it.btinfo->aux_data.at
+                            (insn->aux_data_index).c_str ());
+         uiout->text ("]\n");
+       }
       else
        {
          struct disasm_insn dinsn;
index b25445713fd727ef9fb47955cfda98f32323c288..55e136e75f4e3d192278060165dd50c9cfc3bee2 100644 (file)
@@ -491,6 +491,9 @@ get_insn_history_modifiers (const char **arg)
 
          switch (*args)
            {
+           case 'a':
+             modifiers |= DISASSEMBLY_OMIT_AUX_INSN;
+             break;
            case 'm':
            case 's':
              modifiers |= DISASSEMBLY_SOURCE;
@@ -859,6 +862,8 @@ With a /m or /s modifier, source lines are included (if available).\n\
 With a /r modifier, raw instructions in hex are included.\n\
 With a /f modifier, function names are omitted.\n\
 With a /p modifier, current position markers are omitted.\n\
+With a /a modifier, omits output of auxiliary data, which is enabled \
+by default.\n\
 With no argument, disassembles ten more instructions after the previous \
 disassembly.\n\
 \"record instruction-history -\" disassembles ten instructions before a \