diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index f64cdb88986c..d7e5db1d3d0c 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -6996,6 +6996,7 @@ SymbolFileDWARF::ParseVariableDIE bool is_external = false; bool is_artificial = false; bool location_is_const_value_data = false; + bool has_explicit_location = false; //AccessType accessibility = eAccessNone; for (i=0; iGetAddressByteSize()); + uint32_t data_offset = attributes.DIEOffsetAtIndex(i); + uint32_t data_length = fixed_form_sizes[form_value.Form()]; + location.CopyOpcodeData(debug_info_data, data_offset, data_length); + } + else + { + // Retrieve the value as a string expression. + if (form_value.Form() == DW_FORM_strp) + { + const uint8_t *fixed_form_sizes = DWARFFormValue::GetFixedFormSizesForAddressSize (dwarf_cu->GetAddressByteSize()); + uint32_t data_offset = attributes.DIEOffsetAtIndex(i); + uint32_t data_length = fixed_form_sizes[form_value.Form()]; + location.CopyOpcodeData(debug_info_data, data_offset, data_length); + } + else + { + const char *str = form_value.AsCString(&debug_info_data); + uint32_t string_offset = str - (const char *)debug_info_data.GetDataStart(); + uint32_t string_length = strlen(str) + 1; + location.CopyOpcodeData(debug_info_data, string_offset, string_length); + } + } + } + break; case DW_AT_location: { + location_is_const_value_data = false; + has_explicit_location = true; if (form_value.BlockData()) { const DataExtractor& debug_info_data = get_debug_info_data();