Lines Matching +full:form +full:- +full:data
1 //===-- DWARFFormValue.cpp ------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
31 bool DWARFFormValue::ExtractValue(const DWARFDataExtractor &data,
38 m_value.data = nullptr;
40 // Read the value for the form into value and follow and DW_FORM_indirect
48 data.GetMaxU64(offset_ptr, DWARFUnit::GetAddressByteSize(m_unit));
51 m_value.uval = data.GetU8(offset_ptr);
55 m_value.uval = data.GetU16(offset_ptr);
59 m_value.uval = data.GetU32(offset_ptr);
68 m_value.uval = data.GetULEB128(offset_ptr);
72 m_value.cstr = data.GetCStr(offset_ptr);
75 m_value.sval = data.GetSLEB128(offset_ptr);
80 m_value.uval = data.GetMaxU64(offset_ptr, 4);
87 m_value.uval = data.GetU8(offset_ptr);
93 m_value.uval = data.GetU16(offset_ptr);
97 m_value.uval = data.GetMaxU64(offset_ptr, 3);
103 m_value.uval = data.GetU32(offset_ptr);
108 m_value.uval = data.GetU64(offset_ptr);
118 m_value.uval = data.GetULEB128(offset_ptr);
122 if (m_unit->GetVersion() <= 2)
123 ref_addr_size = m_unit->GetAddressByteSize();
126 m_value.uval = data.GetMaxU64(offset_ptr, ref_addr_size);
129 m_form = static_cast<dw_form_t>(data.GetULEB128(offset_ptr));
141 m_value.data = data.PeekData(*offset_ptr, m_value.uval);
142 if (m_value.data != nullptr) {
190 std::optional<uint8_t> DWARFFormValue::GetFixedSize(dw_form_t form,
192 if (form <= DW_FORM_ref_sig8 && g_form_sizes[form].valid)
193 return static_cast<uint8_t>(g_form_sizes[form].size);
194 if (form == DW_FORM_addr && u)
195 return u->GetAddressByteSize();
208 bool DWARFFormValue::SkipValue(dw_form_t form,
213 switch (form) {
214 // Blocks if inlined data that have a length field and the data bytes inlined
238 // Inlined NULL terminated C-strings
252 if (unit->GetVersion() <= 2)
253 ref_addr_size = unit->GetAddressByteSize();
390 const uint8_t *data_ptr = m_value.data;
422 if (m_unit->GetVersion() <= 2)
461 s.Printf("{0x%8.8" PRIx64 "}", uvalue + m_unit->GetOffset());
466 DWARFContext &context = m_unit->GetSymbolFileDWARF().GetDWARFContext();
478 m_unit->GetStringOffsetSectionItem(m_value.uval);
491 SymbolFileDWARF &symbol_file = m_unit->GetSymbolFileDWARF();
501 uint32_t index_size = m_unit->GetAddressByteSize();
502 dw_offset_t addr_base = m_unit->GetAddrBase();
519 value += m_unit->GetOffset();
520 if (!m_unit->ContainsDIEOffset(value)) {
521 m_unit->GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
529 m_unit->GetSymbolFileDWARF().DebugInfo().GetUnitContainingDIEOffset(
532 m_unit->GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError(
541 m_unit->GetSymbolFileDWARF().DebugInfo().GetTypeUnitForHash(value);
544 return {tu, tu->GetTypeOffset()};
554 return unit ? unit->GetDIE(offset) : DWARFDIE();
602 const uint8_t *DWARFFormValue::BlockData() const { return m_value.data; }
604 bool DWARFFormValue::IsBlockForm(const dw_form_t form) {
605 switch (form) {
619 bool DWARFFormValue::IsDataForm(const dw_form_t form) {
620 switch (form) {
634 bool DWARFFormValue::FormIsSupported(dw_form_t form) {
635 switch (form) {