@@ -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