Added a way to resolve an load address from a target:
bool
Address::SetLoadAddress (lldb::addr_t load_addr, Target *target);
Added an == and != operator to RegisterValue.
Modified the ThreadPlanTracer to use RegisterValue objects to store the
register values when single stepping. Also modified the output to be a bit
less wide.
Fixed the ABIMacOSX_arm to not overwrite stuff on the stack. Also made the
trivial function call be able to set the ARM/Thumbness of the target
correctly, and also sets the return value ARM/Thumbness.
Fixed the encoding on the arm s0-s31 and d16 - d31 registers when the default
register set from a standard GDB server register sets.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@131517 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Target/ThreadPlanTracer.cpp b/source/Target/ThreadPlanTracer.cpp
index 7ea16d4..a7003dd 100644
--- a/source/Target/ThreadPlanTracer.cpp
+++ b/source/Target/ThreadPlanTracer.cpp
@@ -137,21 +137,13 @@
RegisterContext *reg_ctx = m_thread.GetRegisterContext().get();
if (m_register_values.size() == 0)
- {
- for (uint32_t reg_index = 0, num_registers = reg_ctx->GetRegisterCount();
- reg_index < num_registers;
- ++reg_index)
- m_register_values.push_back(0);
- }
+ m_register_values.resize (reg_ctx->GetRegisterCount());
}
void
ThreadPlanAssemblyTracer::TracingEnded ()
{
- for (uint32_t reg_index = 0, num_registers = m_register_values.size();
- reg_index < num_registers;
- ++reg_index)
- m_register_values[reg_index] = 0;
+ m_register_values.clear();
}
static void
@@ -178,17 +170,10 @@
lldb::addr_t pc = reg_ctx->GetPC();
Address pc_addr;
bool addr_valid = false;
-
- StreamString desc;
-
- int desired_width = 0;
-
+
addr_valid = m_process.GetTarget().GetSectionLoadList().ResolveLoadAddress (pc, pc_addr);
- pc_addr.Dump(&desc, &m_thread, Address::DumpStyleResolvedDescription, Address::DumpStyleModuleWithFileAddress);
-
- desired_width += 64;
- PadOutTo(desc, desired_width);
+ pc_addr.Dump(stream, &m_thread, Address::DumpStyleResolvedDescription, Address::DumpStyleModuleWithFileAddress);
if (m_disassembler)
{
@@ -213,18 +198,17 @@
if (instruction_list.GetSize())
{
+ const bool show_bytes = true;
+ const bool show_address = true;
Instruction *instruction = instruction_list.GetInstructionAtIndex(0).get();
- instruction->Dump (&desc,
+ instruction->Dump (stream,
max_opcode_byte_size,
- false,
- false,
+ show_address,
+ show_bytes,
NULL,
true);
}
}
-
- desired_width += 32;
- PadOutTo(desc, desired_width);
}
if (m_abi && m_intptr_type.GetOpaqueQualType())
@@ -244,30 +228,35 @@
{
for (int arg_index = 0; arg_index < num_args; ++arg_index)
{
- desc.Printf("arg[%d]=%llx", arg_index, value_list.GetValueAtIndex(arg_index)->GetScalar().ULongLong());
+ stream->Printf("\n\targ[%d]=%llx", arg_index, value_list.GetValueAtIndex(arg_index)->GetScalar().ULongLong());
if (arg_index + 1 < num_args)
- desc.Printf(", ");
+ stream->PutCString (", ");
}
}
}
- desired_width += 20;
- PadOutTo(desc, desired_width);
- for (uint32_t reg_index = 0, num_registers = reg_ctx->GetRegisterCount();
- reg_index < num_registers;
- ++reg_index)
+ RegisterValue reg_value;
+ for (uint32_t reg_num = 0, num_registers = reg_ctx->GetRegisterCount();
+ reg_num < num_registers;
+ ++reg_num)
{
- uint64_t reg_value = reg_ctx->ReadRegisterAsUnsigned(reg_index, 0x0);
-
- if (reg_value != m_register_values[reg_index])
+ const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
+ if (reg_ctx->ReadRegister (reg_info, reg_value))
{
- desc.Printf ("%s:0x%llx->0x%llx ", reg_ctx->GetRegisterName(reg_index), m_register_values[reg_index], reg_value);
-
- m_register_values[reg_index] = 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->Printf ("Single-step: %s\n", desc.GetString().c_str());
+ stream->EOL();
}