1fe6060f1SDimitry Andric //===-- ThreadPostMortemTrace.cpp -----------------------------------------===// 2fe6060f1SDimitry Andric // 3fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fe6060f1SDimitry Andric // 7fe6060f1SDimitry Andric //===----------------------------------------------------------------------===// 8fe6060f1SDimitry Andric 9fe6060f1SDimitry Andric #include "ThreadPostMortemTrace.h" 10fe6060f1SDimitry Andric 11fe6060f1SDimitry Andric #include <memory> 12*bdd1243dSDimitry Andric #include <optional> 13fe6060f1SDimitry Andric 14fe6060f1SDimitry Andric #include "Plugins/Process/Utility/RegisterContextHistory.h" 15fe6060f1SDimitry Andric #include "lldb/Target/Process.h" 16fe6060f1SDimitry Andric #include "lldb/Target/RegisterContext.h" 17fe6060f1SDimitry Andric 18fe6060f1SDimitry Andric using namespace lldb; 19fe6060f1SDimitry Andric using namespace lldb_private; 2081ad6265SDimitry Andric using namespace llvm; 21fe6060f1SDimitry Andric RefreshStateAfterStop()22fe6060f1SDimitry Andricvoid ThreadPostMortemTrace::RefreshStateAfterStop() {} 23fe6060f1SDimitry Andric GetRegisterContext()24fe6060f1SDimitry AndricRegisterContextSP ThreadPostMortemTrace::GetRegisterContext() { 25fe6060f1SDimitry Andric if (!m_reg_context_sp) 26fe6060f1SDimitry Andric m_reg_context_sp = CreateRegisterContextForFrame(nullptr); 27fe6060f1SDimitry Andric 28fe6060f1SDimitry Andric return m_reg_context_sp; 29fe6060f1SDimitry Andric } 30fe6060f1SDimitry Andric 31fe6060f1SDimitry Andric RegisterContextSP CreateRegisterContextForFrame(StackFrame * frame)32fe6060f1SDimitry AndricThreadPostMortemTrace::CreateRegisterContextForFrame(StackFrame *frame) { 33fe6060f1SDimitry Andric // Eventually this will calculate the register context based on the current 34fe6060f1SDimitry Andric // trace position. 35fe6060f1SDimitry Andric return std::make_shared<RegisterContextHistory>( 36fe6060f1SDimitry Andric *this, 0, GetProcess()->GetAddressByteSize(), LLDB_INVALID_ADDRESS); 37fe6060f1SDimitry Andric } 38fe6060f1SDimitry Andric CalculateStopInfo()39fe6060f1SDimitry Andricbool ThreadPostMortemTrace::CalculateStopInfo() { return false; } 40fe6060f1SDimitry Andric GetTraceFile() const41*bdd1243dSDimitry Andricconst std::optional<FileSpec> &ThreadPostMortemTrace::GetTraceFile() const { 42fe6060f1SDimitry Andric return m_trace_file; 43fe6060f1SDimitry Andric } 44