diff options
Diffstat (limited to 'lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp')
-rw-r--r-- | lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp b/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp index 78907426c85..f359b52e129 100644 --- a/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp +++ b/lldb/source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp @@ -308,15 +308,14 @@ bool ABISysV_i386::GetArgumentValues(Thread &thread, ValueList &values) const { // Currently: Support for extracting values with Clang QualTypes only. CompilerType compiler_type(value->GetCompilerType()); - if (compiler_type) { + auto bit_size = compiler_type.GetBitSize(&thread); + if (bit_size) { bool is_signed; if (compiler_type.IsIntegerOrEnumerationType(is_signed)) { - ReadIntegerArgument(value->GetScalar(), - compiler_type.GetBitSize(&thread), is_signed, + ReadIntegerArgument(value->GetScalar(), *bit_size, is_signed, thread.GetProcess().get(), current_stack_argument); } else if (compiler_type.IsPointerType()) { - ReadIntegerArgument(value->GetScalar(), - compiler_type.GetBitSize(&thread), false, + ReadIntegerArgument(value->GetScalar(), *bit_size, false, thread.GetProcess().get(), current_stack_argument); } } @@ -514,7 +513,9 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( (type_flags & eTypeIsEnumeration)) //'Integral' + 'Floating Point' { value.SetValueType(Value::eValueTypeScalar); - const size_t byte_size = return_compiler_type.GetByteSize(nullptr); + auto byte_size = return_compiler_type.GetByteSize(nullptr); + if (!byte_size) + return return_valobj_sp; bool success = false; if (type_flags & eTypeIsInteger) // 'Integral' except enum @@ -528,7 +529,7 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( 0xffffffff) << 32; - switch (byte_size) { + switch (*byte_size) { default: break; @@ -584,7 +585,7 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( thread.GetStackFrameAtIndex(0).get(), value, ConstString("")); } else if (type_flags & eTypeIsFloat) // 'Floating Point' { - if (byte_size <= 12) // handles float, double, long double, __float80 + if (*byte_size <= 12) // handles float, double, long double, __float80 { const RegisterInfo *st0_info = reg_ctx->GetRegisterInfoByName("st0", 0); RegisterValue st0_value; @@ -595,21 +596,20 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( lldb::offset_t offset = 0; long double value_long_double = data.GetLongDouble(&offset); - if (byte_size == 4) // float is 4 bytes - { + // float is 4 bytes. + if (*byte_size == 4) { float value_float = (float)value_long_double; value.GetScalar() = value_float; success = true; - } else if (byte_size == 8) // double is 8 bytes - { + } else if (*byte_size == 8) { + // double is 8 bytes // On Android Platform: long double is also 8 bytes It will be // handled here only. double value_double = (double)value_long_double; value.GetScalar() = value_double; success = true; - } else if (byte_size == - 12) // long double and __float80 are 12 bytes on i386 - { + } else if (*byte_size == 12) { + // long double and __float80 are 12 bytes on i386. value.GetScalar() = value_long_double; success = true; } @@ -619,7 +619,7 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( if (success) return_valobj_sp = ValueObjectConstResult::Create( thread.GetStackFrameAtIndex(0).get(), value, ConstString("")); - } else if (byte_size == 16) // handles __float128 + } else if (*byte_size == 16) // handles __float128 { lldb::addr_t storage_addr = (uint32_t)( thread.GetRegisterContext()->ReadRegisterAsUnsigned(eax_id, 0) & @@ -637,18 +637,18 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( // ToDo: Yet to be implemented } else if (type_flags & eTypeIsVector) // 'Packed' { - const size_t byte_size = return_compiler_type.GetByteSize(nullptr); - if (byte_size > 0) { + auto byte_size = return_compiler_type.GetByteSize(nullptr); + if (byte_size && *byte_size > 0) { const RegisterInfo *vec_reg = reg_ctx->GetRegisterInfoByName("xmm0", 0); if (vec_reg == nullptr) vec_reg = reg_ctx->GetRegisterInfoByName("mm0", 0); if (vec_reg) { - if (byte_size <= vec_reg->byte_size) { + if (*byte_size <= vec_reg->byte_size) { ProcessSP process_sp(thread.GetProcess()); if (process_sp) { std::unique_ptr<DataBufferHeap> heap_data_ap( - new DataBufferHeap(byte_size, 0)); + new DataBufferHeap(*byte_size, 0)); const ByteOrder byte_order = process_sp->GetByteOrder(); RegisterValue reg_value; if (reg_ctx->ReadRegister(vec_reg, reg_value)) { @@ -665,14 +665,14 @@ ValueObjectSP ABISysV_i386::GetReturnValueObjectSimple( } } } - } else if (byte_size <= vec_reg->byte_size * 2) { + } else if (*byte_size <= vec_reg->byte_size * 2) { const RegisterInfo *vec_reg2 = reg_ctx->GetRegisterInfoByName("xmm1", 0); if (vec_reg2) { ProcessSP process_sp(thread.GetProcess()); if (process_sp) { std::unique_ptr<DataBufferHeap> heap_data_ap( - new DataBufferHeap(byte_size, 0)); + new DataBufferHeap(*byte_size, 0)); const ByteOrder byte_order = process_sp->GetByteOrder(); RegisterValue reg_value; RegisterValue reg_value2; |