aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp190
1 files changed, 13 insertions, 177 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index 70f954c..dfff473 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -11,7 +11,6 @@
#include "Plugins/Process/Utility/RegisterContextDarwin_arm.h"
#include "Plugins/Process/Utility/RegisterContextDarwin_arm64.h"
-#include "Plugins/Process/Utility/RegisterContextDarwin_i386.h"
#include "Plugins/Process/Utility/RegisterContextDarwin_riscv32.h"
#include "Plugins/Process/Utility/RegisterContextDarwin_x86_64.h"
#include "lldb/Core/Debugger.h"
@@ -81,9 +80,6 @@
#ifdef CPU_TYPE_ARM64_32
#undef CPU_TYPE_ARM64_32
#endif
-#ifdef CPU_TYPE_I386
-#undef CPU_TYPE_I386
-#endif
#ifdef CPU_TYPE_X86_64
#undef CPU_TYPE_X86_64
#endif
@@ -358,122 +354,6 @@ protected:
}
};
-class RegisterContextDarwin_i386_Mach : public RegisterContextDarwin_i386 {
-public:
- RegisterContextDarwin_i386_Mach(lldb_private::Thread &thread,
- const DataExtractor &data)
- : RegisterContextDarwin_i386(thread, 0) {
- SetRegisterDataFrom_LC_THREAD(data);
- }
-
- void InvalidateAllRegisters() override {
- // Do nothing... registers are always valid...
- }
-
- void SetRegisterDataFrom_LC_THREAD(const DataExtractor &data) {
- lldb::offset_t offset = 0;
- SetError(GPRRegSet, Read, -1);
- SetError(FPURegSet, Read, -1);
- SetError(EXCRegSet, Read, -1);
- bool done = false;
-
- while (!done) {
- int flavor = data.GetU32(&offset);
- if (flavor == 0)
- done = true;
- else {
- uint32_t i;
- uint32_t count = data.GetU32(&offset);
- switch (flavor) {
- case GPRRegSet:
- for (i = 0; i < count; ++i)
- (&gpr.eax)[i] = data.GetU32(&offset);
- SetError(GPRRegSet, Read, 0);
- done = true;
-
- break;
- case FPURegSet:
- // TODO: fill in FPU regs....
- // SetError (FPURegSet, Read, -1);
- done = true;
-
- break;
- case EXCRegSet:
- exc.trapno = data.GetU32(&offset);
- exc.err = data.GetU32(&offset);
- exc.faultvaddr = data.GetU32(&offset);
- SetError(EXCRegSet, Read, 0);
- done = true;
- break;
- case 7:
- case 8:
- case 9:
- // fancy flavors that encapsulate of the above flavors...
- break;
-
- default:
- done = true;
- break;
- }
- }
- }
- }
-
- static bool Create_LC_THREAD(Thread *thread, Stream &data) {
- RegisterContextSP reg_ctx_sp(thread->GetRegisterContext());
- if (reg_ctx_sp) {
- RegisterContext *reg_ctx = reg_ctx_sp.get();
-
- data.PutHex32(GPRRegSet); // Flavor
- data.PutHex32(GPRWordCount);
- PrintRegisterValue(reg_ctx, "eax", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "ebx", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "ecx", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "edx", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "edi", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "esi", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "ebp", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "esp", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "ss", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "eflags", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "eip", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "cs", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "ds", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "es", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "fs", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "gs", nullptr, 4, data);
-
- // Write out the EXC registers
- data.PutHex32(EXCRegSet);
- data.PutHex32(EXCWordCount);
- PrintRegisterValue(reg_ctx, "trapno", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "err", nullptr, 4, data);
- PrintRegisterValue(reg_ctx, "faultvaddr", nullptr, 4, data);
- return true;
- }
- return false;
- }
-
-protected:
- int DoReadGPR(lldb::tid_t tid, int flavor, GPR &gpr) override { return 0; }
-
- int DoReadFPU(lldb::tid_t tid, int flavor, FPU &fpu) override { return 0; }
-
- int DoReadEXC(lldb::tid_t tid, int flavor, EXC &exc) override { return 0; }
-
- int DoWriteGPR(lldb::tid_t tid, int flavor, const GPR &gpr) override {
- return 0;
- }
-
- int DoWriteFPU(lldb::tid_t tid, int flavor, const FPU &fpu) override {
- return 0;
- }
-
- int DoWriteEXC(lldb::tid_t tid, int flavor, const EXC &exc) override {
- return 0;
- }
-};
-
class RegisterContextDarwin_arm_Mach : public RegisterContextDarwin_arm {
public:
RegisterContextDarwin_arm_Mach(lldb_private::Thread &thread,
@@ -491,12 +371,11 @@ public:
SetError(GPRRegSet, Read, -1);
SetError(FPURegSet, Read, -1);
SetError(EXCRegSet, Read, -1);
- bool done = false;
- while (!done) {
+ while (offset < data.GetByteSize()) {
int flavor = data.GetU32(&offset);
uint32_t count = data.GetU32(&offset);
- lldb::offset_t next_thread_state = offset + (count * 4);
+ offset_t next_thread_state = offset + (count * 4);
switch (flavor) {
case GPRAltRegSet:
case GPRRegSet: {
@@ -510,9 +389,7 @@ public:
SetError(GPRRegSet, Read, 0);
}
- }
- offset = next_thread_state;
- break;
+ } break;
case FPURegSet: {
uint8_t *fpu_reg_buf = (uint8_t *)&fpu.floats;
@@ -522,12 +399,8 @@ public:
offset += fpu_reg_buf_size;
fpu.fpscr = data.GetU32(&offset);
SetError(FPURegSet, Read, 0);
- } else {
- done = true;
}
- }
- offset = next_thread_state;
- break;
+ } break;
case EXCRegSet:
if (count == 3) {
@@ -536,14 +409,11 @@ public:
exc.far = data.GetU32(&offset);
SetError(EXCRegSet, Read, 0);
}
- done = true;
- offset = next_thread_state;
break;
- // Unknown register set flavor, stop trying to parse.
default:
- done = true;
}
+ offset = next_thread_state;
}
}
@@ -626,11 +496,10 @@ public:
SetError(GPRRegSet, Read, -1);
SetError(FPURegSet, Read, -1);
SetError(EXCRegSet, Read, -1);
- bool done = false;
- while (!done) {
+ while (offset < data.GetByteSize()) {
int flavor = data.GetU32(&offset);
uint32_t count = data.GetU32(&offset);
- lldb::offset_t next_thread_state = offset + (count * 4);
+ offset_t next_thread_state = offset + (count * 4);
switch (flavor) {
case GPRRegSet:
// x0-x29 + fp + lr + sp + pc (== 33 64-bit registers) plus cpsr (1
@@ -645,7 +514,6 @@ public:
gpr.cpsr = data.GetU32(&offset);
SetError(GPRRegSet, Read, 0);
}
- offset = next_thread_state;
break;
case FPURegSet: {
uint8_t *fpu_reg_buf = (uint8_t *)&fpu.v[0];
@@ -654,12 +522,8 @@ public:
data.ExtractBytes(offset, fpu_reg_buf_size, eByteOrderLittle,
fpu_reg_buf) == fpu_reg_buf_size) {
SetError(FPURegSet, Read, 0);
- } else {
- done = true;
}
- }
- offset = next_thread_state;
- break;
+ } break;
case EXCRegSet:
if (count == 4) {
exc.far = data.GetU64(&offset);
@@ -667,12 +531,10 @@ public:
exc.exception = data.GetU32(&offset);
SetError(EXCRegSet, Read, 0);
}
- offset = next_thread_state;
break;
default:
- done = true;
- break;
}
+ offset = next_thread_state;
}
}
@@ -775,11 +637,10 @@ public:
SetError(FPURegSet, Read, -1);
SetError(EXCRegSet, Read, -1);
SetError(CSRRegSet, Read, -1);
- bool done = false;
- while (!done) {
+ while (offset < data.GetByteSize()) {
int flavor = data.GetU32(&offset);
uint32_t count = data.GetU32(&offset);
- lldb::offset_t next_thread_state = offset + (count * 4);
+ offset_t next_thread_state = offset + (count * 4);
switch (flavor) {
case GPRRegSet:
// x0-x31 + pc
@@ -789,7 +650,6 @@ public:
gpr.pc = data.GetU32(&offset);
SetError(GPRRegSet, Read, 0);
}
- offset = next_thread_state;
break;
case FPURegSet: {
// f0-f31 + fcsr
@@ -799,9 +659,7 @@ public:
fpr.fcsr = data.GetU32(&offset);
SetError(FPURegSet, Read, 0);
}
- }
- offset = next_thread_state;
- break;
+ } break;
case EXCRegSet:
if (count == 3) {
exc.exception = data.GetU32(&offset);
@@ -809,12 +667,10 @@ public:
exc.far = data.GetU32(&offset);
SetError(EXCRegSet, Read, 0);
}
- offset = next_thread_state;
break;
default:
- done = true;
- break;
}
+ offset = next_thread_state;
}
}
@@ -5408,16 +5264,6 @@ lldb_private::Address ObjectFileMachO::GetEntryPointAddress() {
done = true;
}
break;
- case llvm::MachO::CPU_TYPE_I386:
- if (flavor ==
- 1) // x86_THREAD_STATE32 from mach/i386/thread_status.h
- {
- offset += 40; // This is the offset of eip in the GPR thread state
- // data structure.
- start_address = m_data.GetU32(&offset);
- done = true;
- }
- break;
case llvm::MachO::CPU_TYPE_X86_64:
if (flavor ==
4) // x86_THREAD_STATE64 from mach/i386/thread_status.h
@@ -5897,11 +5743,6 @@ ObjectFileMachO::GetThreadContextAtIndex(uint32_t idx,
std::make_shared<RegisterContextDarwin_arm_Mach>(thread, data);
break;
- case llvm::MachO::CPU_TYPE_I386:
- reg_ctx_sp =
- std::make_shared<RegisterContextDarwin_i386_Mach>(thread, data);
- break;
-
case llvm::MachO::CPU_TYPE_X86_64:
reg_ctx_sp =
std::make_shared<RegisterContextDarwin_x86_64_Mach>(thread, data);
@@ -6769,11 +6610,6 @@ bool ObjectFileMachO::SaveCore(const lldb::ProcessSP &process_sp,
thread_sp.get(), LC_THREAD_datas[thread_idx]);
break;
- case llvm::MachO::CPU_TYPE_I386:
- RegisterContextDarwin_i386_Mach::Create_LC_THREAD(
- thread_sp.get(), LC_THREAD_datas[thread_idx]);
- break;
-
case llvm::MachO::CPU_TYPE_X86_64:
RegisterContextDarwin_x86_64_Mach::Create_LC_THREAD(
thread_sp.get(), LC_THREAD_datas[thread_idx]);