================
@@ -677,73 +712,143 @@ Status NativeRegisterContextWindows_arm64::WriteRegister(
Status NativeRegisterContextWindows_arm64::ReadAllRegisterValues(
lldb::WritableDataBufferSP &data_sp) {
- const size_t data_size = REG_CONTEXT_SIZE;
- data_sp = std::make_shared<DataBufferHeap>(data_size, 0);
- ::CONTEXT tls_context;
- Status error =
- GetThreadContextHelper(GetThreadHandle(), &tls_context, CONTEXT_ALL);
+ Log *log = GetLog(WindowsLog::Registers);
+
+ Status error = CacheAllRegisterValues();
if (error.Fail())
return error;
- uint8_t *dst = data_sp->GetBytes();
- ::memcpy(dst, &tls_context, data_size);
+ if (!m_context_buffer) {
+ error = Status::FromErrorString("register context buffer is not
available");
+ LLDB_LOG(log, "{0} {1}", __FUNCTION__, error);
+ return error;
+ }
+
+ const size_t data_size = m_context_buffer->GetByteSize();
+ data_sp = std::make_shared<DataBufferHeap>(data_size, 0);
+
+ if (!data_sp) {
+ error = Status::FromErrorString("failed to allocate register data buffer");
+ LLDB_LOG(log, "{0} {1}", __FUNCTION__, error);
+ return error;
+ }
+
+ ::memcpy(data_sp->GetBytes(), m_context_buffer->GetBytes(), data_size);
+
return error;
}
Status NativeRegisterContextWindows_arm64::WriteAllRegisterValues(
const lldb::DataBufferSP &data_sp) {
+ auto cleanup = llvm::make_scope_exit([&]() { m_context = nullptr; });
+
+ Log *log = GetLog(WindowsLog::Registers);
Status error;
- const size_t data_size = REG_CONTEXT_SIZE;
+
if (!data_sp) {
- error = Status::FromErrorStringWithFormat(
- "NativeRegisterContextWindows_arm64::%s invalid data_sp provided",
- __FUNCTION__);
+ error = Status::FromErrorString("invalid data_sp");
+ LLDB_LOG(log, "{0} {1}", __FUNCTION__, error);
+ return error;
+ }
+
+ DWORD context_flags = CONTEXT_ALL;
+
+ DWORD context_length = 0;
+ if (InitializeContext(nullptr, context_flags, nullptr, &context_length)) {
+ error = Status::FromErrorString("InitializeContext succeeded
unexpectedly");
+ LLDB_LOG(log, "{0} {1}", __FUNCTION__, error);
return error;
}
- if (data_sp->GetByteSize() != data_size) {
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+ error = Status(GetLastError(), eErrorTypeWin32);
+ LLDB_LOG(log, "{0} InitializeContext failed with error {1}", __FUNCTION__,
----------------
DavidSpickett wrote:
"failed with error {}, expected ERROR_..."
https://github.com/llvm/llvm-project/pull/197385
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits