[Lldb-commits] [lldb] [lldb] Refactor ReadRegisterValueAsScalar to return an llvm::Error (NFC) (PR #94556)

2024-06-05 Thread Jonas Devlieghere via lldb-commits

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)

2024-06-05 Thread via lldb-commits

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)

2024-06-06 Thread David Spickett via lldb-commits

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)

2024-06-06 Thread David Spickett via lldb-commits

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)

2024-06-06 Thread Jonas Devlieghere via lldb-commits

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