[Lldb-commits] [lldb] [lldb][Mach-O] Fix several bugs in x86_64 Mach-O corefile (PR #146460)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Jun 30 20:57:39 PDT 2025
================
@@ -184,46 +184,32 @@ class RegisterContextDarwin_x86_64_Mach : public RegisterContextDarwin_x86_64 {
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);
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.rax)[i] = data.GetU64(&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.GetU64(&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;
- }
+ break;
+ uint32_t count = data.GetU32(&offset);
+ switch (flavor) {
+ case GPRRegSet: {
+ uint32_t *gpr_data = reinterpret_cast<uint32_t *>(&gpr.rax);
+ for (uint32_t i = 0; i < count; ++i)
+ gpr_data[i] = data.GetU32(&offset);
----------------
JDevlieghere wrote:
This should probably be resilient against a bogus count, and check that `offset < data.GetByteSize()`
```suggestion
for (uint32_t i = 0; i < count && offset < data.GetByteSize(); ++i)
gpr_data[i] = data.GetU32(&offset);
```
https://github.com/llvm/llvm-project/pull/146460
More information about the lldb-commits
mailing list