[Lldb-commits] [PATCH] D121408: Fixing DWARFExpression handling of ValueType::FileAddress case for DW_OP_deref_size
Adrian Prantl via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Mar 10 14:32:05 PST 2022
aprantl added a comment.
This is nice, I have a few mostly stylistic comments inline.
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:947
+llvm::Optional<lldb::addr_t>
+ResolveAndLoadFileAddress(ExecutionContext *exe_ctx, lldb::ModuleSP module_sp,
----------------
Maybe add a Doxygen comment explaining what this function does?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:948
+llvm::Optional<lldb::addr_t>
+ResolveAndLoadFileAddress(ExecutionContext *exe_ctx, lldb::ModuleSP module_sp,
+ Status *error_ptr, const char *dw_op_type,
----------------
Should this also be in the anonymous namespace?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:964
+
+ addr_t load_Addr = so_addr.GetLoadAddress(exe_ctx->GetTargetPtr());
+
----------------
`return so_addr.GetLoadAddress(exe_ctx->GetTargetPtr();`
or `load_addr`
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:977
+ return addr_data.GetU8(&addr_data_offset);
+ break;
+ case 2:
----------------
the `break` is redundant after the `return`.
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:990
+ }
+ llvm_unreachable("Fell out of a switch with a default, shouldn't happen!");
+}
----------------
This shouldn't be necessary, or does clang warn about the function not having a return on this otherwise?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1141
Address so_addr;
- if (!module_sp->ResolveFileAddress(file_addr, so_addr)) {
- if (error_ptr)
- error_ptr->SetErrorString(
- "failed to resolve file address in module");
+ auto load_Addr_optional = ResolveAndLoadFileAddress(
+ exe_ctx, module_sp, error_ptr, "DW_OP_deref", file_addr, so_addr);
----------------
why is `Addr` captialized?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1141
Address so_addr;
- if (!module_sp->ResolveFileAddress(file_addr, so_addr)) {
- if (error_ptr)
- error_ptr->SetErrorString(
- "failed to resolve file address in module");
+ auto load_Addr_optional = ResolveAndLoadFileAddress(
+ exe_ctx, module_sp, error_ptr, "DW_OP_deref", file_addr, so_addr);
----------------
aprantl wrote:
> why is `Addr` captialized?
we sometimes call these `maybe_load_addr` or `load_addr_or_err` not sure if that's better :-)
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1149
+
if (load_Addr == LLDB_INVALID_ADDRESS) {
if (error_ptr)
----------------
should we sink this check into `ResolveAndLoadFileAddress`, too?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1278
+
+ if (load_Addr == LLDB_INVALID_ADDRESS && so_addr.IsSectionOffset()) {
+ uint8_t addr_bytes[size];
----------------
Comment what this case handles? It's unintuitive that we go into a case where `load_Addr == LLDB_INVALID_ADDRESS`
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1282
+
+ const bool force_live_memory = true;
+ if (exe_ctx->GetTargetRef().ReadMemory(so_addr, &addr_bytes, size,
----------------
Why do we need to force live memory?
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1293
+ } else {
+ if (error_ptr)
+ error_ptr->SetErrorStringWithFormat(
----------------
It would be nice to invert the if and have an early exit instead.
================
Comment at: lldb/source/Expression/DWARFExpression.cpp:1299
+ }
+ } else if (load_Addr == LLDB_INVALID_ADDRESS) {
+ if (error_ptr)
----------------
same here, but maybe we can just sink this into the helper.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D121408/new/
https://reviews.llvm.org/D121408
More information about the lldb-commits
mailing list