jj10306 created this revision.
jj10306 added reviewers: wallace, persona0220.
Herald added a project: All.
jj10306 requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

D128477 <https://reviews.llvm.org/D128477> adds a '-k' flag which displays each 
instruction's control flow in the `thread trace dump instructions` command's 
non-json  output (ie no '-j' or '-J' flag)
This diff adds the instruction control flow kind to the `thread trace dump 
instructions` command's JSON output (ie '-j' or '-J' flag)

Test Plan:
Confirm "controlFlowKind" is present in JSON when '-k' is provided

  (lldb) thread trace dump instructions -J -k
  [
    {                                                                           
                                                                                
                                                                                
                                      [141/1952]
      "id": 7755,
      "loadAddress": "0x400868",
      "module": "test.out",
      "symbol": "main",
      "mnemonic": "jmp",
      "controlFlowKind": "jump",
      "source": "/home/jakobjohnson/jakob-dev/test.cpp",
      "line": 41,
      "column": 29
    },
    {
      "id": 7753,
      "loadAddress": "0x7ffff7b54dab",
      "module": "libstdc++.so.6",
      "symbol": "std::ostream::flush()",
      "mnemonic": "retq",
      "controlFlowKind": "return"
    },
    {
      "id": 7752,
      "loadAddress": "0x7ffff7b54daa",
      "module": "libstdc++.so.6",
      "symbol": "std::ostream::flush()",
      "mnemonic": "popq",
      "controlFlowKind": "other"
    },
    ...
  ]

Confirm "controlFlowKind" is not present when '-k' isn't provided

  (lldb) thread trace dump instructions -J
  [
    {
      "id": 7755,
      "loadAddress": "0x400868",
      "module": "test.out",
      "symbol": "main",
      "mnemonic": "jmp",
      "source": "/home/jakobjohnson/jakob-dev/test.cpp",
      "line": 41,
      "column": 29
    },
    {
      "id": 7753,
      "loadAddress": "0x7ffff7b54dab",
      "module": "libstdc++.so.6",
      "symbol": "std::ostream::flush()",
      "mnemonic": "retq"
    },
    {
      "id": 7752,
      "loadAddress": "0x7ffff7b54daa",
      "module": "libstdc++.so.6",
      "symbol": "std::ostream::flush()",
      "mnemonic": "popq"
    },


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D130607

Files:
  lldb/source/Target/TraceDumper.cpp


Index: lldb/source/Target/TraceDumper.cpp
===================================================================
--- lldb/source/Target/TraceDumper.cpp
+++ lldb/source/Target/TraceDumper.cpp
@@ -199,6 +199,7 @@
       "column"?: decimal,
       "source"?: string,
       "mnemonic"?: string,
+      "controlFlowKind"?: string,
     }
   */
 public:
@@ -234,10 +235,18 @@
           "symbol",
           
ToOptionalString(item.symbol_info->sc.GetFunctionName().AsCString()));
 
-      if (item.symbol_info->instruction) {
+      if (lldb::InstructionSP instruction = item.symbol_info->instruction) {
+        ExecutionContext exe_ctx = item.symbol_info->exe_ctx;
         m_j.attribute("mnemonic",
-                      
ToOptionalString(item.symbol_info->instruction->GetMnemonic(
-                          &item.symbol_info->exe_ctx)));
+                      ToOptionalString(instruction->GetMnemonic(&exe_ctx)));
+        if (m_options.show_control_flow_kind) {
+          lldb::InstructionControlFlowKind instruction_control_flow_kind =
+              instruction->GetControlFlowKind(&exe_ctx);
+          m_j.attribute("controlFlowKind",
+                        ToOptionalString(
+                            Instruction::GetNameForInstructionControlFlowKind(
+                                instruction_control_flow_kind)));
+        }
       }
 
       if (IsLineEntryValid(item.symbol_info->sc.line_entry)) {


Index: lldb/source/Target/TraceDumper.cpp
===================================================================
--- lldb/source/Target/TraceDumper.cpp
+++ lldb/source/Target/TraceDumper.cpp
@@ -199,6 +199,7 @@
       "column"?: decimal,
       "source"?: string,
       "mnemonic"?: string,
+      "controlFlowKind"?: string,
     }
   */
 public:
@@ -234,10 +235,18 @@
           "symbol",
           ToOptionalString(item.symbol_info->sc.GetFunctionName().AsCString()));
 
-      if (item.symbol_info->instruction) {
+      if (lldb::InstructionSP instruction = item.symbol_info->instruction) {
+        ExecutionContext exe_ctx = item.symbol_info->exe_ctx;
         m_j.attribute("mnemonic",
-                      ToOptionalString(item.symbol_info->instruction->GetMnemonic(
-                          &item.symbol_info->exe_ctx)));
+                      ToOptionalString(instruction->GetMnemonic(&exe_ctx)));
+        if (m_options.show_control_flow_kind) {
+          lldb::InstructionControlFlowKind instruction_control_flow_kind =
+              instruction->GetControlFlowKind(&exe_ctx);
+          m_j.attribute("controlFlowKind",
+                        ToOptionalString(
+                            Instruction::GetNameForInstructionControlFlowKind(
+                                instruction_control_flow_kind)));
+        }
       }
 
       if (IsLineEntryValid(item.symbol_info->sc.line_entry)) {
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to