Skip to content

Commit 55f8a20

Browse files
committed
Review feedback - Evaluate_DW_OP_deref_size cleanup
1 parent ff687e5 commit 55f8a20

File tree

1 file changed

+38
-49
lines changed

1 file changed

+38
-49
lines changed

lldb/source/Expression/DWARFExpression.cpp

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -884,25 +884,23 @@ static llvm::Error Evaluate_DW_OP_deref_size(DWARFExpression::Stack &stack,
884884
lldb::ModuleSP module_sp,
885885
Process *process, Target *target,
886886
uint8_t size) {
887-
if (stack.empty()) {
887+
if (stack.empty())
888888
return llvm::createStringError(
889889
"expression stack empty for DW_OP_deref_size");
890-
}
891890

892-
if (size > 8) {
891+
if (size > 8)
893892
return llvm::createStringError(
894893
"Invalid address size for DW_OP_deref_size: %d\n", size);
895-
}
894+
896895
Value::ValueType value_type = stack.back().GetValueType();
897896
switch (value_type) {
898897
case Value::ValueType::HostAddress: {
899898
void *src = (void *)stack.back().GetScalar().ULongLong();
900899
intptr_t ptr;
901900
::memcpy(&ptr, src, sizeof(void *));
902901
// I can't decide whether the size operand should apply to the bytes in
903-
// their
904-
// lldb-host endianness or the target endianness.. I doubt this'll ever
905-
// come up but I'll opt for assuming big endian regardless.
902+
// their lldb-host endianness or the target endianness.. I doubt this'll
903+
// ever come up but I'll opt for assuming big endian regardless.
906904
switch (size) {
907905
case 1:
908906
ptr = ptr & 0xff;
@@ -916,10 +914,9 @@ static llvm::Error Evaluate_DW_OP_deref_size(DWARFExpression::Stack &stack,
916914
case 4:
917915
ptr = ptr & 0xffffffff;
918916
break;
919-
// the casts are added to work around the case where intptr_t is a 32
920-
// bit quantity;
921-
// presumably we won't hit the 5..7 cases if (void*) is 32-bits in this
922-
// program.
917+
// The casts are added to work around the case where intptr_t is a 32-bit
918+
// quantity. Presumably we won't hit the 5..7 cases if (void*) is 32-bits in
919+
// this program.
923920
case 5:
924921
ptr = (intptr_t)ptr & 0xffffffffffULL;
925922
break;
@@ -951,20 +948,19 @@ static llvm::Error Evaluate_DW_OP_deref_size(DWARFExpression::Stack &stack,
951948
uint8_t addr_bytes[8];
952949
Status error;
953950

954-
if (target && target->ReadMemory(so_addr, &addr_bytes, size, error,
955-
/*force_live_memory=*/false) == size) {
956-
ObjectFile *objfile = module_sp->GetObjectFile();
957-
958-
stack.back().GetScalar() = DerefSizeExtractDataHelper(
959-
addr_bytes, size, objfile->GetByteOrder(), size);
960-
stack.back().ClearContext();
961-
break;
962-
} else {
951+
if (!target || target->ReadMemory(so_addr, &addr_bytes, size, error,
952+
/*force_live_memory=*/false) != size)
963953
return llvm::createStringError(
964-
"Failed to dereference pointer for DW_OP_deref_size: "
954+
"failed to dereference pointer for DW_OP_deref_size: "
965955
"%s\n",
966956
error.AsCString());
967-
}
957+
958+
ObjectFile *objfile = module_sp->GetObjectFile();
959+
960+
stack.back().GetScalar() = DerefSizeExtractDataHelper(
961+
addr_bytes, size, objfile->GetByteOrder(), size);
962+
stack.back().ClearContext();
963+
break;
968964
}
969965
stack.back().GetScalar() = load_addr;
970966
// Fall through to load address promotion code below.
@@ -975,37 +971,30 @@ static llvm::Error Evaluate_DW_OP_deref_size(DWARFExpression::Stack &stack,
975971
// Promote Scalar to LoadAddress and fall through.
976972
stack.back().SetValueType(Value::ValueType::LoadAddress);
977973
[[fallthrough]];
978-
case Value::ValueType::LoadAddress:
979-
if (exe_ctx) {
980-
if (process) {
981-
lldb::addr_t pointer_addr =
982-
stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
983-
uint8_t addr_bytes[sizeof(lldb::addr_t)];
984-
Status error;
985-
if (process->ReadMemory(pointer_addr, &addr_bytes, size, error) ==
986-
size) {
987-
988-
stack.back().GetScalar() = DerefSizeExtractDataHelper(
989-
addr_bytes, sizeof(addr_bytes), process->GetByteOrder(), size);
990-
stack.back().ClearContext();
991-
} else {
992-
return llvm::createStringError(
993-
"Failed to dereference pointer from 0x%" PRIx64
994-
" for DW_OP_deref: %s\n",
995-
pointer_addr, error.AsCString());
996-
}
997-
} else {
974+
case Value::ValueType::LoadAddress: {
975+
if (!exe_ctx)
976+
return llvm::createStringError(
977+
"no execution context for DW_OP_deref_size");
978+
if (!process)
979+
return llvm::createStringError("no process for DW_OP_deref_size");
998980

999-
return llvm::createStringError("NULL process for DW_OP_deref_size");
1000-
}
1001-
} else {
981+
lldb::addr_t pointer_addr =
982+
stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
983+
uint8_t addr_bytes[sizeof(lldb::addr_t)];
984+
Status error;
985+
986+
if (process->ReadMemory(pointer_addr, &addr_bytes, size, error) != size)
1002987
return llvm::createStringError(
1003-
"NULL execution context for DW_OP_deref_size");
1004-
}
1005-
break;
988+
"failed to dereference pointer from 0x%" PRIx64
989+
" for DW_OP_deref_size: %s\n",
990+
pointer_addr, error.AsCString());
1006991

1007-
case Value::ValueType::Invalid:
992+
stack.back().GetScalar() = DerefSizeExtractDataHelper(
993+
addr_bytes, sizeof(addr_bytes), process->GetByteOrder(), size);
994+
stack.back().ClearContext();
995+
} break;
1008996

997+
case Value::ValueType::Invalid:
1009998
return llvm::createStringError("invalid value for DW_OP_deref_size");
1010999
}
10111000

0 commit comments

Comments
 (0)