summaryrefslogtreecommitdiff
path: root/lldb/source/Target/ThreadPlanTracer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/ThreadPlanTracer.cpp')
-rw-r--r--lldb/source/Target/ThreadPlanTracer.cpp280
1 files changed, 0 insertions, 280 deletions
diff --git a/lldb/source/Target/ThreadPlanTracer.cpp b/lldb/source/Target/ThreadPlanTracer.cpp
deleted file mode 100644
index cbe68a22451c..000000000000
--- a/lldb/source/Target/ThreadPlanTracer.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-//===-- ThreadPlan.cpp ------------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "lldb/Target/ThreadPlan.h"
-
-// C Includes
-#include <string.h>
-// C++ Includes
-// Other libraries and framework includes
-// Project includes
-#include "lldb/Core/ArchSpec.h"
-#include "lldb/Core/DataBufferHeap.h"
-#include "lldb/Core/Debugger.h"
-#include "lldb/Core/Disassembler.h"
-#include "lldb/Core/Log.h"
-#include "lldb/Core/State.h"
-#include "lldb/Core/Value.h"
-#include "lldb/Symbol/TypeList.h"
-#include "lldb/Target/RegisterContext.h"
-#include "lldb/Target/Thread.h"
-#include "lldb/Target/Process.h"
-#include "lldb/Target/Target.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-#pragma mark ThreadPlanTracer
-
-ThreadPlanTracer::ThreadPlanTracer (Thread &thread, lldb::StreamSP &stream_sp) :
- m_thread (thread),
- m_single_step(true),
- m_enabled (false),
- m_stream_sp (stream_sp)
-{
-}
-
-ThreadPlanTracer::ThreadPlanTracer (Thread &thread) :
- m_thread (thread),
- m_single_step(true),
- m_enabled (false),
- m_stream_sp ()
-{
-}
-
-Stream *
-ThreadPlanTracer::GetLogStream ()
-{
-
- if (m_stream_sp.get())
- return m_stream_sp.get();
- else
- {
- TargetSP target_sp (m_thread.CalculateTarget());
- if (target_sp)
- return &target_sp->GetDebugger().GetOutputStream();
- }
- return NULL;
-}
-
-void
-ThreadPlanTracer::Log()
-{
- SymbolContext sc;
- bool show_frame_index = false;
- bool show_fullpaths = false;
-
- Stream *stream = GetLogStream();
- m_thread.GetStackFrameAtIndex(0)->Dump (stream, show_frame_index, show_fullpaths);
- stream->Printf("\n");
- stream->Flush();
-
-}
-
-bool
-ThreadPlanTracer::TracerExplainsStop ()
-{
- if (m_enabled && m_single_step)
- {
- lldb::StopInfoSP stop_info = m_thread.GetStopInfo();
- if (stop_info->GetStopReason() == eStopReasonTrace)
- return true;
- else
- return false;
- }
- else
- return false;
-}
-
-#pragma mark ThreadPlanAssemblyTracer
-
-ThreadPlanAssemblyTracer::ThreadPlanAssemblyTracer (Thread &thread, lldb::StreamSP &stream_sp) :
- ThreadPlanTracer (thread, stream_sp),
- m_disassembler_ap (),
- m_intptr_type (),
- m_register_values ()
-{
-}
-
-ThreadPlanAssemblyTracer::ThreadPlanAssemblyTracer (Thread &thread) :
- ThreadPlanTracer (thread),
- m_disassembler_ap (),
- m_intptr_type (),
- m_register_values ()
-{
-}
-
-Disassembler *
-ThreadPlanAssemblyTracer::GetDisassembler ()
-{
- if (m_disassembler_ap.get() == NULL)
- m_disassembler_ap.reset(Disassembler::FindPlugin(m_thread.GetProcess()->GetTarget().GetArchitecture(), NULL));
- return m_disassembler_ap.get();
-}
-
-TypeFromUser
-ThreadPlanAssemblyTracer::GetIntPointerType()
-{
- if (!m_intptr_type.IsValid ())
- {
- TargetSP target_sp (m_thread.CalculateTarget());
- if (target_sp)
- {
- Module *exe_module = target_sp->GetExecutableModulePointer();
-
- if (exe_module)
- {
- m_intptr_type = TypeFromUser(exe_module->GetClangASTContext().GetBuiltinTypeForEncodingAndBitSize(eEncodingUint, target_sp->GetArchitecture().GetAddressByteSize() * 8),
- exe_module->GetClangASTContext().getASTContext());
- }
- }
- }
- return m_intptr_type;
-}
-
-
-
-ThreadPlanAssemblyTracer::~ThreadPlanAssemblyTracer()
-{
-}
-
-void
-ThreadPlanAssemblyTracer::TracingStarted ()
-{
- RegisterContext *reg_ctx = m_thread.GetRegisterContext().get();
-
- if (m_register_values.size() == 0)
- m_register_values.resize (reg_ctx->GetRegisterCount());
-}
-
-void
-ThreadPlanAssemblyTracer::TracingEnded ()
-{
- m_register_values.clear();
-}
-
-static void
-PadOutTo (StreamString &stream, int target)
-{
- stream.Flush();
-
- int length = stream.GetString().length();
-
- if (length + 1 < target)
- stream.Printf("%*s", target - (length + 1) + 1, "");
-}
-
-void
-ThreadPlanAssemblyTracer::Log ()
-{
- Stream *stream = GetLogStream ();
-
- if (!stream)
- return;
-
- RegisterContext *reg_ctx = m_thread.GetRegisterContext().get();
-
- lldb::addr_t pc = reg_ctx->GetPC();
- ProcessSP process_sp (m_thread.GetProcess());
- Address pc_addr;
- bool addr_valid = false;
- uint8_t buffer[16] = {0}; // Must be big enough for any single instruction
- addr_valid = process_sp->GetTarget().GetSectionLoadList().ResolveLoadAddress (pc, pc_addr);
-
- pc_addr.Dump(stream, &m_thread, Address::DumpStyleResolvedDescription, Address::DumpStyleModuleWithFileAddress);
- stream->PutCString (" ");
-
- Disassembler *disassembler = GetDisassembler();
- if (disassembler)
- {
- Error err;
- process_sp->ReadMemory(pc, buffer, sizeof(buffer), err);
-
- if (err.Success())
- {
- DataExtractor extractor(buffer, sizeof(buffer),
- process_sp->GetByteOrder(),
- process_sp->GetAddressByteSize());
-
- if (addr_valid)
- disassembler->DecodeInstructions (pc_addr, extractor, 0, 1, false);
- else
- disassembler->DecodeInstructions (Address (pc), extractor, 0, 1, false);
-
- InstructionList &instruction_list = disassembler->GetInstructionList();
- const uint32_t max_opcode_byte_size = instruction_list.GetMaxOpcocdeByteSize();
-
- if (instruction_list.GetSize())
- {
- const bool show_bytes = true;
- const bool show_address = true;
- Instruction *instruction = instruction_list.GetInstructionAtIndex(0).get();
- instruction->Dump (stream,
- max_opcode_byte_size,
- show_address,
- show_bytes,
- NULL,
- true);
- }
- }
- }
-
- const ABI *abi = process_sp->GetABI().get();
- TypeFromUser intptr_type = GetIntPointerType();
-
- if (abi && intptr_type.IsValid())
- {
- ValueList value_list;
- const int num_args = 1;
-
- for (int arg_index = 0; arg_index < num_args; ++arg_index)
- {
- Value value;
- value.SetValueType (Value::eValueTypeScalar);
- value.SetContext (Value::eContextTypeClangType, intptr_type.GetOpaqueQualType());
- value_list.PushValue (value);
- }
-
- if (abi->GetArgumentValues (m_thread, value_list))
- {
- for (int arg_index = 0; arg_index < num_args; ++arg_index)
- {
- stream->Printf("\n\targ[%d]=%llx", arg_index, value_list.GetValueAtIndex(arg_index)->GetScalar().ULongLong());
-
- if (arg_index + 1 < num_args)
- stream->PutCString (", ");
- }
- }
- }
-
-
- RegisterValue reg_value;
- for (uint32_t reg_num = 0, num_registers = reg_ctx->GetRegisterCount();
- reg_num < num_registers;
- ++reg_num)
- {
- const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
- if (reg_ctx->ReadRegister (reg_info, reg_value))
- {
- assert (reg_num < m_register_values.size());
- if (m_register_values[reg_num].GetType() == RegisterValue::eTypeInvalid ||
- reg_value != m_register_values[reg_num])
- {
- if (reg_value.GetType() != RegisterValue::eTypeInvalid)
- {
- stream->PutCString ("\n\t");
- reg_value.Dump(stream, reg_info, true, false, eFormatDefault);
- }
- }
- m_register_values[reg_num] = reg_value;
- }
- }
- stream->EOL();
- stream->Flush();
-}