Skip to content

Commit 67aaa9f

Browse files
authored
[lldb] Refactor ResolveLoadAddress to return an llvm::Expected (NFC) (#94558)
1 parent a76290d commit 67aaa9f

File tree

1 file changed

+17
-31
lines changed

1 file changed

+17
-31
lines changed

lldb/source/Expression/DWARFExpression.cpp

Lines changed: 17 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,6 @@ void UpdateValueTypeFromLocationDescription(Log *log, const DWARFUnit *dwarf_cu,
769769
///
770770
/// \param exe_ctx Pointer to the execution context
771771
/// \param module_sp shared_ptr contains the module if we have one
772-
/// \param error_ptr pointer to Status object if we have one
773772
/// \param dw_op_type C-style string used to vary the error output
774773
/// \param file_addr the file address we are trying to resolve and turn into a
775774
/// load address
@@ -780,32 +779,22 @@ void UpdateValueTypeFromLocationDescription(Log *log, const DWARFUnit *dwarf_cu,
780779
/// the load address succeed or an empty Optinal otherwise. If
781780
/// check_sectionoffset is true we consider LLDB_INVALID_ADDRESS a
782781
/// success if so_addr.IsSectionOffset() is true.
783-
static std::optional<lldb::addr_t>
782+
static llvm::Expected<lldb::addr_t>
784783
ResolveLoadAddress(ExecutionContext *exe_ctx, lldb::ModuleSP &module_sp,
785-
Status *error_ptr, const char *dw_op_type,
786-
lldb::addr_t file_addr, Address &so_addr,
787-
bool check_sectionoffset = false) {
788-
if (!module_sp) {
789-
if (error_ptr)
790-
error_ptr->SetErrorStringWithFormat(
791-
"need module to resolve file address for %s", dw_op_type);
792-
return {};
793-
}
784+
const char *dw_op_type, lldb::addr_t file_addr,
785+
Address &so_addr, bool check_sectionoffset = false) {
786+
if (!module_sp)
787+
return llvm::createStringError("need module to resolve file address for %s",
788+
dw_op_type);
794789

795-
if (!module_sp->ResolveFileAddress(file_addr, so_addr)) {
796-
if (error_ptr)
797-
error_ptr->SetErrorString("failed to resolve file address in module");
798-
return {};
799-
}
790+
if (!module_sp->ResolveFileAddress(file_addr, so_addr))
791+
return llvm::createStringError("failed to resolve file address in module");
800792

801-
addr_t load_addr = so_addr.GetLoadAddress(exe_ctx->GetTargetPtr());
793+
const addr_t load_addr = so_addr.GetLoadAddress(exe_ctx->GetTargetPtr());
802794

803795
if (load_addr == LLDB_INVALID_ADDRESS &&
804-
(check_sectionoffset && !so_addr.IsSectionOffset())) {
805-
if (error_ptr)
806-
error_ptr->SetErrorString("failed to resolve load address");
807-
return {};
808-
}
796+
(check_sectionoffset && !so_addr.IsSectionOffset()))
797+
return llvm::createStringError("failed to resolve load address");
809798

810799
return load_addr;
811800
}
@@ -975,12 +964,11 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
975964
LLDB_INVALID_ADDRESS);
976965

977966
Address so_addr;
978-
Status load_err;
979967
auto maybe_load_addr = ResolveLoadAddress(
980-
exe_ctx, module_sp, &load_err, "DW_OP_deref", file_addr, so_addr);
968+
exe_ctx, module_sp, "DW_OP_deref", file_addr, so_addr);
981969

982970
if (!maybe_load_addr)
983-
return load_err.ToError();
971+
return maybe_load_addr.takeError();
984972

985973
stack.back().GetScalar() = *maybe_load_addr;
986974
// Fall through to load address promotion code below.
@@ -1092,14 +1080,12 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
10921080
auto file_addr =
10931081
stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
10941082
Address so_addr;
1095-
Status resolve_err;
1096-
auto maybe_load_addr =
1097-
ResolveLoadAddress(exe_ctx, module_sp, &resolve_err,
1098-
"DW_OP_deref_size", file_addr, so_addr,
1099-
/*check_sectionoffset=*/true);
1083+
auto maybe_load_addr = ResolveLoadAddress(
1084+
exe_ctx, module_sp, "DW_OP_deref_size", file_addr, so_addr,
1085+
/*check_sectionoffset=*/true);
11001086

11011087
if (!maybe_load_addr)
1102-
return resolve_err.ToError();
1088+
return maybe_load_addr.takeError();
11031089

11041090
addr_t load_addr = *maybe_load_addr;
11051091

0 commit comments

Comments
 (0)