[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)
https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/94556 None >From b20884bc0db2a0cb0bb928beb629670d8c86369f Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Wed, 5 Jun 2024 19:36:39 -0700 Subject: [PATCH] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) --- lldb/source/Expression/DWARFExpression.cpp | 130 + 1 file changed, 56 insertions(+), 74 deletions(-) diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index 80d03c84fadbd..50426ab5003dc 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -94,51 +94,38 @@ void DWARFExpression::SetRegisterKind(RegisterKind reg_kind) { m_reg_kind = reg_kind; } - -static bool ReadRegisterValueAsScalar(RegisterContext *reg_ctx, - lldb::RegisterKind reg_kind, - uint32_t reg_num, Status *error_ptr, - Value &value) { - if (reg_ctx == nullptr) { -if (error_ptr) - error_ptr->SetErrorString("No register context in frame.\n"); - } else { -uint32_t native_reg = -reg_ctx->ConvertRegisterKindToRegisterNumber(reg_kind, reg_num); -if (native_reg == LLDB_INVALID_REGNUM) { - if (error_ptr) -error_ptr->SetErrorStringWithFormat("Unable to convert register " -"kind=%u reg_num=%u to a native " -"register number.\n", -reg_kind, reg_num); -} else { - const RegisterInfo *reg_info = - reg_ctx->GetRegisterInfoAtIndex(native_reg); - RegisterValue reg_value; - if (reg_ctx->ReadRegister(reg_info, reg_value)) { -if (reg_value.GetScalarValue(value.GetScalar())) { - value.SetValueType(Value::ValueType::Scalar); - value.SetContext(Value::ContextType::RegisterInfo, - const_cast(reg_info)); - if (error_ptr) -error_ptr->Clear(); - return true; -} else { - // If we get this error, then we need to implement a value buffer in - // the dwarf expression evaluation function... - if (error_ptr) -error_ptr->SetErrorStringWithFormat( -"register %s can't be converted to a scalar value", -reg_info->name); -} - } else { -if (error_ptr) - error_ptr->SetErrorStringWithFormat("register %s is not available", - reg_info->name); - } +static llvm::Error ReadRegisterValueAsScalar(RegisterContext *reg_ctx, + lldb::RegisterKind reg_kind, + uint32_t reg_num, Value &value) { + if (reg_ctx == nullptr) +return llvm::createStringError("no register context in frame"); + + const uint32_t native_reg = + reg_ctx->ConvertRegisterKindToRegisterNumber(reg_kind, reg_num); + if (native_reg == LLDB_INVALID_REGNUM) +return llvm::createStringError( +"unable to convert register kind=%u reg_num=%u to a native " +"register number", +reg_kind, reg_num); + + const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(native_reg); + RegisterValue reg_value; + if (reg_ctx->ReadRegister(reg_info, reg_value)) { +if (reg_value.GetScalarValue(value.GetScalar())) { + value.SetValueType(Value::ValueType::Scalar); + value.SetContext(Value::ContextType::RegisterInfo, + const_cast(reg_info)); + return llvm::Error::success(); } + +// If we get this error, then we need to implement a value buffer in +// the dwarf expression evaluation function... +return llvm::createStringError( +"register %s can't be converted to a scalar value", reg_info->name); } - return false; + + return llvm::createStringError("register %s is not available", + reg_info->name); } /// Return the length in bytes of the set of operands for \p op. No guarantees @@ -1839,11 +1826,10 @@ llvm::Expected DWARFExpression::Evaluate( dwarf4_location_description_kind = Register; reg_num = op - DW_OP_reg0; - Status read_err; - if (ReadRegisterValueAsScalar(reg_ctx, reg_kind, reg_num, &read_err, tmp)) -stack.push_back(tmp); - else -return read_err.ToError(); + if (llvm::Error err = + ReadRegisterValueAsScalar(reg_ctx, reg_kind, reg_num, tmp)) +return err; + stack.push_back(tmp); } break; // OPCODE: DW_OP_regx // OPERANDS: @@ -1853,10 +1839,10 @@ llvm::Expected DWARFExpression::Evaluate( dwarf4_location_description_kind = Register; reg_num = opcodes.GetULEB128(&offset); Status read_err; - if (ReadRegisterValu
[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)
llvmbot wrote: @llvm/pr-subscribers-lldb Author: Jonas Devlieghere (JDevlieghere) Changes --- Full diff: https://github.com/llvm/llvm-project/pull/94556.diff 1 Files Affected: - (modified) lldb/source/Expression/DWARFExpression.cpp (+56-74) ``diff diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp index 80d03c84fadbd..50426ab5003dc 100644 --- a/lldb/source/Expression/DWARFExpression.cpp +++ b/lldb/source/Expression/DWARFExpression.cpp @@ -94,51 +94,38 @@ void DWARFExpression::SetRegisterKind(RegisterKind reg_kind) { m_reg_kind = reg_kind; } - -static bool ReadRegisterValueAsScalar(RegisterContext *reg_ctx, - lldb::RegisterKind reg_kind, - uint32_t reg_num, Status *error_ptr, - Value &value) { - if (reg_ctx == nullptr) { -if (error_ptr) - error_ptr->SetErrorString("No register context in frame.\n"); - } else { -uint32_t native_reg = -reg_ctx->ConvertRegisterKindToRegisterNumber(reg_kind, reg_num); -if (native_reg == LLDB_INVALID_REGNUM) { - if (error_ptr) -error_ptr->SetErrorStringWithFormat("Unable to convert register " -"kind=%u reg_num=%u to a native " -"register number.\n", -reg_kind, reg_num); -} else { - const RegisterInfo *reg_info = - reg_ctx->GetRegisterInfoAtIndex(native_reg); - RegisterValue reg_value; - if (reg_ctx->ReadRegister(reg_info, reg_value)) { -if (reg_value.GetScalarValue(value.GetScalar())) { - value.SetValueType(Value::ValueType::Scalar); - value.SetContext(Value::ContextType::RegisterInfo, - const_cast(reg_info)); - if (error_ptr) -error_ptr->Clear(); - return true; -} else { - // If we get this error, then we need to implement a value buffer in - // the dwarf expression evaluation function... - if (error_ptr) -error_ptr->SetErrorStringWithFormat( -"register %s can't be converted to a scalar value", -reg_info->name); -} - } else { -if (error_ptr) - error_ptr->SetErrorStringWithFormat("register %s is not available", - reg_info->name); - } +static llvm::Error ReadRegisterValueAsScalar(RegisterContext *reg_ctx, + lldb::RegisterKind reg_kind, + uint32_t reg_num, Value &value) { + if (reg_ctx == nullptr) +return llvm::createStringError("no register context in frame"); + + const uint32_t native_reg = + reg_ctx->ConvertRegisterKindToRegisterNumber(reg_kind, reg_num); + if (native_reg == LLDB_INVALID_REGNUM) +return llvm::createStringError( +"unable to convert register kind=%u reg_num=%u to a native " +"register number", +reg_kind, reg_num); + + const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(native_reg); + RegisterValue reg_value; + if (reg_ctx->ReadRegister(reg_info, reg_value)) { +if (reg_value.GetScalarValue(value.GetScalar())) { + value.SetValueType(Value::ValueType::Scalar); + value.SetContext(Value::ContextType::RegisterInfo, + const_cast(reg_info)); + return llvm::Error::success(); } + +// If we get this error, then we need to implement a value buffer in +// the dwarf expression evaluation function... +return llvm::createStringError( +"register %s can't be converted to a scalar value", reg_info->name); } - return false; + + return llvm::createStringError("register %s is not available", + reg_info->name); } /// Return the length in bytes of the set of operands for \p op. No guarantees @@ -1839,11 +1826,10 @@ llvm::Expected DWARFExpression::Evaluate( dwarf4_location_description_kind = Register; reg_num = op - DW_OP_reg0; - Status read_err; - if (ReadRegisterValueAsScalar(reg_ctx, reg_kind, reg_num, &read_err, tmp)) -stack.push_back(tmp); - else -return read_err.ToError(); + if (llvm::Error err = + ReadRegisterValueAsScalar(reg_ctx, reg_kind, reg_num, tmp)) +return err; + stack.push_back(tmp); } break; // OPCODE: DW_OP_regx // OPERANDS: @@ -1853,10 +1839,10 @@ llvm::Expected DWARFExpression::Evaluate( dwarf4_location_description_kind = Register; reg_num = opcodes.GetULEB128(&offset); Status read_err; - if (ReadRegisterValueAsScalar(reg_ctx, reg_kind, reg_num, &read_err, tmp)) -stack.push_back(tmp); - else -return read_err.ToError(); + if (llvm::Error err = +
[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)
https://github.com/DavidSpickett approved this pull request. LGTM Thanks for working on this. Last time I tried to do this sort of conversion I went for llvm::Expected, and it quickly spiraled into a mountain of changes that I gave up on in the end. https://github.com/llvm/llvm-project/pull/94556 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)
https://github.com/DavidSpickett edited https://github.com/llvm/llvm-project/pull/94556 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)
https://github.com/JDevlieghere closed https://github.com/llvm/llvm-project/pull/94556 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits