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