Author: Alex Langford Date: 2023-07-10T11:17:25-07:00 New Revision: 1e7101a3d95884c791d566b7b6192fbac55f55e0
URL: https://github.com/llvm/llvm-project/commit/1e7101a3d95884c791d566b7b6192fbac55f55e0 DIFF: https://github.com/llvm/llvm-project/commit/1e7101a3d95884c791d566b7b6192fbac55f55e0.diff LOG: [lldb][NFCI] TestEmulation should take a Stream ref `Instruction::TestEmulation` takes a `Stream *` and checks it for validity. However, this is unnecessary as we can always ensure that we never pass `nullptr` for the `Stream` argument. The only use of `Instruction::TestEmulation` currently is `SBInstruction::TestEmulation` which gets the `Stream` from an `SBStream`, and `SBStream::ref` can return a `Stream &` guaranteed. Differential Revision: https://reviews.llvm.org/D154757 Added: Modified: lldb/include/lldb/Core/Disassembler.h lldb/include/lldb/Core/EmulateInstruction.h lldb/source/API/SBInstruction.cpp lldb/source/Core/Disassembler.cpp lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.h lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.h lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.cpp lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h Removed: ################################################################################ diff --git a/lldb/include/lldb/Core/Disassembler.h b/lldb/include/lldb/Core/Disassembler.h index b9ac0a5bca39c4..181d0b5d0e2902 100644 --- a/lldb/include/lldb/Core/Disassembler.h +++ b/lldb/include/lldb/Core/Disassembler.h @@ -176,14 +176,14 @@ class Instruction { virtual void SetDescription(llvm::StringRef) { } // May be overridden in sub-classes that have descriptions. - lldb::OptionValueSP ReadArray(FILE *in_file, Stream *out_stream, + lldb::OptionValueSP ReadArray(FILE *in_file, Stream &out_stream, OptionValue::Type data_type); - lldb::OptionValueSP ReadDictionary(FILE *in_file, Stream *out_stream); + lldb::OptionValueSP ReadDictionary(FILE *in_file, Stream &out_stream); bool DumpEmulation(const ArchSpec &arch); - virtual bool TestEmulation(Stream *stream, const char *test_file_name); + virtual bool TestEmulation(Stream &stream, const char *test_file_name); bool Emulate(const ArchSpec &arch, uint32_t evaluate_options, void *baton, EmulateInstruction::ReadMemoryCallback read_mem_callback, diff --git a/lldb/include/lldb/Core/EmulateInstruction.h b/lldb/include/lldb/Core/EmulateInstruction.h index 6d76380ce65927..93c16537adba12 100644 --- a/lldb/include/lldb/Core/EmulateInstruction.h +++ b/lldb/include/lldb/Core/EmulateInstruction.h @@ -375,7 +375,7 @@ class EmulateInstruction : public PluginInterface { return UnconditionalCondition; } - virtual bool TestEmulation(Stream *out_stream, ArchSpec &arch, + virtual bool TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) = 0; virtual std::optional<RegisterInfo> diff --git a/lldb/source/API/SBInstruction.cpp b/lldb/source/API/SBInstruction.cpp index 46da6e18b6b2b7..ea14e90abfd23d 100644 --- a/lldb/source/API/SBInstruction.cpp +++ b/lldb/source/API/SBInstruction.cpp @@ -345,6 +345,6 @@ bool SBInstruction::TestEmulation(lldb::SBStream &output_stream, lldb::InstructionSP inst_sp(GetOpaque()); if (inst_sp) - return inst_sp->TestEmulation(output_stream.get(), test_file); + return inst_sp->TestEmulation(output_stream.ref(), test_file); return false; } diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp index 5e79aa40cb33e8..104e9100e38830 100644 --- a/lldb/source/Core/Disassembler.cpp +++ b/lldb/source/Core/Disassembler.cpp @@ -687,7 +687,7 @@ bool Instruction::HasDelaySlot() { return false; } -OptionValueSP Instruction::ReadArray(FILE *in_file, Stream *out_stream, +OptionValueSP Instruction::ReadArray(FILE *in_file, Stream &out_stream, OptionValue::Type data_type) { bool done = false; char buffer[1024]; @@ -697,7 +697,7 @@ OptionValueSP Instruction::ReadArray(FILE *in_file, Stream *out_stream, int idx = 0; while (!done) { if (!fgets(buffer, 1023, in_file)) { - out_stream->Printf( + out_stream.Printf( "Instruction::ReadArray: Error reading file (fgets).\n"); option_value_sp.reset(); return option_value_sp; @@ -746,7 +746,7 @@ OptionValueSP Instruction::ReadArray(FILE *in_file, Stream *out_stream, return option_value_sp; } -OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream *out_stream) { +OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream &out_stream) { bool done = false; char buffer[1024]; @@ -757,7 +757,7 @@ OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream *out_stream) { while (!done) { // Read the next line in the file if (!fgets(buffer, 1023, in_file)) { - out_stream->Printf( + out_stream.Printf( "Instruction::ReadDictionary: Error reading file (fgets).\n"); option_value_sp.reset(); return option_value_sp; @@ -792,8 +792,8 @@ OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream *out_stream) { key = matches[1].str(); value = matches[2].str(); } else { - out_stream->Printf("Instruction::ReadDictionary: Failure executing " - "regular expression.\n"); + out_stream.Printf("Instruction::ReadDictionary: Failure executing " + "regular expression.\n"); option_value_sp.reset(); return option_value_sp; } @@ -848,32 +848,29 @@ OptionValueSP Instruction::ReadDictionary(FILE *in_file, Stream *out_stream) { return option_value_sp; } -bool Instruction::TestEmulation(Stream *out_stream, const char *file_name) { - if (!out_stream) - return false; - +bool Instruction::TestEmulation(Stream &out_stream, const char *file_name) { if (!file_name) { - out_stream->Printf("Instruction::TestEmulation: Missing file_name."); + out_stream.Printf("Instruction::TestEmulation: Missing file_name."); return false; } FILE *test_file = FileSystem::Instance().Fopen(file_name, "r"); if (!test_file) { - out_stream->Printf( + out_stream.Printf( "Instruction::TestEmulation: Attempt to open test file failed."); return false; } char buffer[256]; if (!fgets(buffer, 255, test_file)) { - out_stream->Printf( + out_stream.Printf( "Instruction::TestEmulation: Error reading first line of test file.\n"); fclose(test_file); return false; } if (strncmp(buffer, "InstructionEmulationState={", 27) != 0) { - out_stream->Printf("Instructin::TestEmulation: Test file does not contain " - "emulation state dictionary\n"); + out_stream.Printf("Instructin::TestEmulation: Test file does not contain " + "emulation state dictionary\n"); fclose(test_file); return false; } @@ -883,7 +880,7 @@ bool Instruction::TestEmulation(Stream *out_stream, const char *file_name) { OptionValueSP data_dictionary_sp(ReadDictionary(test_file, out_stream)); if (!data_dictionary_sp) { - out_stream->Printf( + out_stream.Printf( "Instruction::TestEmulation: Error reading Dictionary Object.\n"); fclose(test_file); return false; @@ -899,8 +896,8 @@ bool Instruction::TestEmulation(Stream *out_stream, const char *file_name) { OptionValueSP value_sp = data_dictionary->GetValueForKey(description_key); if (!value_sp) { - out_stream->Printf("Instruction::TestEmulation: Test file does not " - "contain description string.\n"); + out_stream.Printf("Instruction::TestEmulation: Test file does not " + "contain description string.\n"); return false; } @@ -908,7 +905,7 @@ bool Instruction::TestEmulation(Stream *out_stream, const char *file_name) { value_sp = data_dictionary->GetValueForKey(triple_key); if (!value_sp) { - out_stream->Printf( + out_stream.Printf( "Instruction::TestEmulation: Test file does not contain triple.\n"); return false; } @@ -925,9 +922,9 @@ bool Instruction::TestEmulation(Stream *out_stream, const char *file_name) { insn_emulator_up->TestEmulation(out_stream, arch, data_dictionary); if (success) - out_stream->Printf("Emulation test succeeded."); + out_stream.Printf("Emulation test succeeded."); else - out_stream->Printf("Emulation test failed."); + out_stream.Printf("Emulation test failed."); return success; } diff --git a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp index 1a67c1676482ad..ff5c79aa2455b0 100644 --- a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp +++ b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp @@ -14345,10 +14345,10 @@ EmulateInstructionARM::GetInstructionCondition() { return cond; } -bool EmulateInstructionARM::TestEmulation(Stream *out_stream, ArchSpec &arch, +bool EmulateInstructionARM::TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) { if (!test_data) { - out_stream->Printf("TestEmulation: Missing test data.\n"); + out_stream.Printf("TestEmulation: Missing test data.\n"); return false; } @@ -14361,7 +14361,7 @@ bool EmulateInstructionARM::TestEmulation(Stream *out_stream, ArchSpec &arch, uint32_t test_opcode; if ((value_sp.get() == nullptr) || (value_sp->GetType() != OptionValue::eTypeUInt64)) { - out_stream->Printf("TestEmulation: Error reading opcode from test file.\n"); + out_stream.Printf("TestEmulation: Error reading opcode from test file.\n"); return false; } test_opcode = value_sp->GetValueAs<uint64_t>().value_or(0); @@ -14377,7 +14377,7 @@ bool EmulateInstructionARM::TestEmulation(Stream *out_stream, ArchSpec &arch, m_opcode_mode = eModeARM; m_opcode.SetOpcode32(test_opcode, endian::InlHostByteOrder()); } else { - out_stream->Printf("TestEmulation: Invalid arch.\n"); + out_stream.Printf("TestEmulation: Invalid arch.\n"); return false; } @@ -14387,26 +14387,26 @@ bool EmulateInstructionARM::TestEmulation(Stream *out_stream, ArchSpec &arch, value_sp = test_data->GetValueForKey(before_key); if ((value_sp.get() == nullptr) || (value_sp->GetType() != OptionValue::eTypeDictionary)) { - out_stream->Printf("TestEmulation: Failed to find 'before' state.\n"); + out_stream.Printf("TestEmulation: Failed to find 'before' state.\n"); return false; } OptionValueDictionary *state_dictionary = value_sp->GetAsDictionary(); if (!before_state.LoadStateFromDictionary(state_dictionary)) { - out_stream->Printf("TestEmulation: Failed loading 'before' state.\n"); + out_stream.Printf("TestEmulation: Failed loading 'before' state.\n"); return false; } value_sp = test_data->GetValueForKey(after_key); if ((value_sp.get() == nullptr) || (value_sp->GetType() != OptionValue::eTypeDictionary)) { - out_stream->Printf("TestEmulation: Failed to find 'after' state.\n"); + out_stream.Printf("TestEmulation: Failed to find 'after' state.\n"); return false; } state_dictionary = value_sp->GetAsDictionary(); if (!after_state.LoadStateFromDictionary(state_dictionary)) { - out_stream->Printf("TestEmulation: Failed loading 'after' state.\n"); + out_stream.Printf("TestEmulation: Failed loading 'after' state.\n"); return false; } @@ -14418,14 +14418,14 @@ bool EmulateInstructionARM::TestEmulation(Stream *out_stream, ArchSpec &arch, bool success = EvaluateInstruction(eEmulateInstructionOptionAutoAdvancePC); if (!success) { - out_stream->Printf("TestEmulation: EvaluateInstruction() failed.\n"); + out_stream.Printf("TestEmulation: EvaluateInstruction() failed.\n"); return false; } success = before_state.CompareState(after_state, out_stream); if (!success) - out_stream->Printf( - "TestEmulation: State after emulation does not match 'after' state.\n"); + out_stream.Printf("TestEmulation: State after emulation does not match " + "'after' state.\n"); return success; } diff --git a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h index 1260b45b9d97b6..9eca0288607c10 100644 --- a/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h +++ b/lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.h @@ -132,7 +132,7 @@ class EmulateInstructionARM : public EmulateInstruction { InstructionCondition GetInstructionCondition() override; - bool TestEmulation(Stream *out_stream, ArchSpec &arch, + bool TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) override; std::optional<RegisterInfo> GetRegisterInfo(lldb::RegisterKind reg_kind, diff --git a/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp b/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp index c11d4c68c1d416..75dcb6ee6dcf64 100644 --- a/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp +++ b/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp @@ -215,44 +215,43 @@ bool EmulationStateARM::WritePseudoRegister( } bool EmulationStateARM::CompareState(EmulationStateARM &other_state, - Stream *out_stream) { + Stream &out_stream) { bool match = true; for (int i = 0; match && i < 17; ++i) { if (m_gpr[i] != other_state.m_gpr[i]) { match = false; - out_stream->Printf("r%d: 0x%x != 0x%x\n", i, m_gpr[i], - other_state.m_gpr[i]); + out_stream.Printf("r%d: 0x%x != 0x%x\n", i, m_gpr[i], + other_state.m_gpr[i]); } } for (int i = 0; match && i < 32; ++i) { if (m_vfp_regs.s_regs[i] != other_state.m_vfp_regs.s_regs[i]) { match = false; - out_stream->Printf("s%d: 0x%x != 0x%x\n", i, m_vfp_regs.s_regs[i], - other_state.m_vfp_regs.s_regs[i]); + out_stream.Printf("s%d: 0x%x != 0x%x\n", i, m_vfp_regs.s_regs[i], + other_state.m_vfp_regs.s_regs[i]); } } for (int i = 0; match && i < 16; ++i) { if (m_vfp_regs.d_regs[i] != other_state.m_vfp_regs.d_regs[i]) { match = false; - out_stream->Printf("d%d: 0x%" PRIx64 " != 0x%" PRIx64 "\n", i + 16, - m_vfp_regs.d_regs[i], - other_state.m_vfp_regs.d_regs[i]); + out_stream.Printf("d%d: 0x%" PRIx64 " != 0x%" PRIx64 "\n", i + 16, + m_vfp_regs.d_regs[i], other_state.m_vfp_regs.d_regs[i]); } } // other_state is the expected state. If it has memory, check it. if (!other_state.m_memory.empty() && m_memory != other_state.m_memory) { match = false; - out_stream->Printf("memory does not match\n"); - out_stream->Printf("got memory:\n"); + out_stream.Printf("memory does not match\n"); + out_stream.Printf("got memory:\n"); for (auto p : m_memory) - out_stream->Printf("0x%08" PRIx64 ": 0x%08x\n", p.first, p.second); - out_stream->Printf("expected memory:\n"); + out_stream.Printf("0x%08" PRIx64 ": 0x%08x\n", p.first, p.second); + out_stream.Printf("expected memory:\n"); for (auto p : other_state.m_memory) - out_stream->Printf("0x%08" PRIx64 ": 0x%08x\n", p.first, p.second); + out_stream.Printf("0x%08" PRIx64 ": 0x%08x\n", p.first, p.second); } return match; diff --git a/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h b/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h index bf322f5b1a9109..6cf842aec18dc2 100644 --- a/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h +++ b/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h @@ -35,7 +35,7 @@ class EmulationStateARM { bool LoadStateFromDictionary(lldb_private::OptionValueDictionary *test_data); bool CompareState(EmulationStateARM &other_state, - lldb_private::Stream *out_stream); + lldb_private::Stream &out_stream); static size_t ReadPseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton, diff --git a/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.h b/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.h index b4b107fc267b69..749fc633ea8de7 100644 --- a/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.h +++ b/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.h @@ -60,7 +60,7 @@ class EmulateInstructionARM64 : public lldb_private::EmulateInstruction { bool EvaluateInstruction(uint32_t evaluate_options) override; - bool TestEmulation(lldb_private::Stream *out_stream, + bool TestEmulation(lldb_private::Stream &out_stream, lldb_private::ArchSpec &arch, lldb_private::OptionValueDictionary *test_data) override { return false; diff --git a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp index adfd57dff07c0a..37f08592d62b98 100644 --- a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp +++ b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp @@ -187,7 +187,7 @@ bool EmulateInstructionLoongArch::SetTargetTriple(const ArchSpec &arch) { } bool EmulateInstructionLoongArch::TestEmulation( - Stream *out_stream, ArchSpec &arch, OptionValueDictionary *test_data) { + Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) { return false; } diff --git a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h index e03356244b4764..47fe454fcd88c8 100644 --- a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h +++ b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h @@ -52,7 +52,7 @@ class EmulateInstructionLoongArch : public EmulateInstruction { bool SetTargetTriple(const ArchSpec &arch) override; bool ReadInstruction() override; bool EvaluateInstruction(uint32_t options) override; - bool TestEmulation(Stream *out_stream, ArchSpec &arch, + bool TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) override; std::optional<RegisterInfo> GetRegisterInfo(lldb::RegisterKind reg_kind, diff --git a/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h b/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h index ab30be6a8f0d3a..01692c65ae30ba 100644 --- a/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h +++ b/lldb/source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h @@ -75,7 +75,7 @@ class EmulateInstructionMIPS : public lldb_private::EmulateInstruction { const lldb_private::Address &inst_addr, lldb_private::Target *target) override; - bool TestEmulation(lldb_private::Stream *out_stream, + bool TestEmulation(lldb_private::Stream &out_stream, lldb_private::ArchSpec &arch, lldb_private::OptionValueDictionary *test_data) override { return false; diff --git a/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h b/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h index e94269e52f837f..6becdf5e3c44e9 100644 --- a/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h +++ b/lldb/source/Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h @@ -67,7 +67,7 @@ class EmulateInstructionMIPS64 : public lldb_private::EmulateInstruction { bool EvaluateInstruction(uint32_t evaluate_options) override; - bool TestEmulation(lldb_private::Stream *out_stream, + bool TestEmulation(lldb_private::Stream &out_stream, lldb_private::ArchSpec &arch, lldb_private::OptionValueDictionary *test_data) override { return false; diff --git a/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.h b/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.h index 7b63819e51312a..a9424f16b0ad01 100644 --- a/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.h +++ b/lldb/source/Plugins/Instruction/PPC64/EmulateInstructionPPC64.h @@ -57,7 +57,7 @@ class EmulateInstructionPPC64 : public EmulateInstruction { bool EvaluateInstruction(uint32_t evaluate_options) override; - bool TestEmulation(Stream *out_stream, ArchSpec &arch, + bool TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) override { return false; } diff --git a/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.cpp b/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.cpp index 414e53fef73425..6c46618b337c23 100644 --- a/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.cpp +++ b/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.cpp @@ -1748,7 +1748,7 @@ bool EmulateInstructionRISCV::SetTargetTriple(const ArchSpec &arch) { return SupportsThisArch(arch); } -bool EmulateInstructionRISCV::TestEmulation(Stream *out_stream, ArchSpec &arch, +bool EmulateInstructionRISCV::TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) { return false; } diff --git a/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h b/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h index c3997b89466b98..8bca73a7f589df 100644 --- a/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h +++ b/lldb/source/Plugins/Instruction/RISCV/EmulateInstructionRISCV.h @@ -61,7 +61,7 @@ class EmulateInstructionRISCV : public EmulateInstruction { bool SetTargetTriple(const ArchSpec &arch) override; bool ReadInstruction() override; bool EvaluateInstruction(uint32_t options) override; - bool TestEmulation(Stream *out_stream, ArchSpec &arch, + bool TestEmulation(Stream &out_stream, ArchSpec &arch, OptionValueDictionary *test_data) override; std::optional<RegisterInfo> GetRegisterInfo(lldb::RegisterKind reg_kind, uint32_t reg_num) override; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits