• Home
  • Raw
  • Download

Lines Matching +full:form +full:- +full:data

1 //===-- DWARFFormValue.cpp ------------------------------------------------===//
8 //===----------------------------------------------------------------------===//
87 // --- These can be FC_SectionOffset in DWARF3 and below:
90 // ---
112 // First, check DWARF4 form classes. in isFormClass()
113 if (Form < makeArrayRef(DWARF4FormClasses).size() && in isFormClass()
114 DWARF4FormClasses[Form] == FC) in isFormClass()
117 switch (Form) { in isFormClass()
130 return (Form == DW_FORM_data4 || Form == DW_FORM_data8) && in isFormClass()
134 bool DWARFFormValue::extractValue(DataExtractor data, uint32_t *offset_ptr, in extractValue() argument
138 Value.data = nullptr; in extractValue()
139 // Read the value for the form into value and follow and DW_FORM_indirect in extractValue()
143 switch (Form) { in extractValue()
149 (Form == DW_FORM_addr) in extractValue()
150 ? cu->getAddressByteSize() in extractValue()
151 : getRefAddrSize(cu->getAddressByteSize(), cu->getVersion()); in extractValue()
152 RelocAddrMap::const_iterator AI = cu->getRelocMap()->find(*offset_ptr); in extractValue()
153 if (AI != cu->getRelocMap()->end()) { in extractValue()
154 const std::pair<uint8_t, int64_t> &R = AI->second; in extractValue()
155 Value.uval = data.getUnsigned(offset_ptr, AddrSize) + R.second; in extractValue()
157 Value.uval = data.getUnsigned(offset_ptr, AddrSize); in extractValue()
162 Value.uval = data.getULEB128(offset_ptr); in extractValue()
166 Value.uval = data.getU8(offset_ptr); in extractValue()
170 Value.uval = data.getU16(offset_ptr); in extractValue()
174 Value.uval = data.getU32(offset_ptr); in extractValue()
180 Value.uval = data.getU8(offset_ptr); in extractValue()
184 Value.uval = data.getU16(offset_ptr); in extractValue()
188 Value.uval = data.getU32(offset_ptr); in extractValue()
191 RelocAddrMap::const_iterator AI = cu->getRelocMap()->find(*offset_ptr-4); in extractValue()
192 if (AI != cu->getRelocMap()->end()) in extractValue()
193 Value.uval += AI->second.second; in extractValue()
198 Value.uval = data.getU64(offset_ptr); in extractValue()
201 Value.sval = data.getSLEB128(offset_ptr); in extractValue()
205 Value.uval = data.getULEB128(offset_ptr); in extractValue()
208 Value.cstr = data.getCStr(offset_ptr); in extractValue()
211 Form = data.getULEB128(offset_ptr); in extractValue()
218 // FIXME: This is 64-bit for DWARF64. in extractValue()
219 Value.uval = data.getU32(offset_ptr); in extractValue()
223 cu->getRelocMap()->find(*offset_ptr - 4); in extractValue()
224 if (AI != cu->getRelocMap()->end()) in extractValue()
225 Value.uval += AI->second.second; in extractValue()
232 Value.uval = data.getU64(offset_ptr); in extractValue()
236 Value.uval = data.getULEB128(offset_ptr); in extractValue()
244 StringRef str = data.getData().substr(*offset_ptr, Value.uval); in extractValue()
245 Value.data = nullptr; in extractValue()
247 Value.data = reinterpret_cast<const uint8_t *>(str.data()); in extractValue()
258 return DWARFFormValue::skipValue(Form, debug_info_data, offset_ptr, cu); in skipValue()
262 DWARFFormValue::skipValue(uint16_t form, DataExtractor debug_info_data, in skipValue() argument
264 return skipValue(form, debug_info_data, offset_ptr, cu->getVersion(), in skipValue()
265 cu->getAddressByteSize()); in skipValue()
267 bool DWARFFormValue::skipValue(uint16_t form, DataExtractor debug_info_data, in skipValue() argument
272 switch (form) { in skipValue()
273 // Blocks if inlined data that have a length field and the data bytes in skipValue()
297 // Inlined NULL terminated C-strings in skipValue()
310 // 0 byte values - implied from the form. in skipValue()
352 form = debug_info_data.getULEB128(offset_ptr); in skipValue()
375 switch (Form) { in dump()
380 if (cu->getAddrOffsetSectionItem(uvalue, Address)) in dump()
404 switch (Form) { in dump()
413 const uint8_t* data_ptr = Value.data; in dump()
477 // Should be formatted to 64-bit for DWARF64. in dump()
483 OS << format("DW_FORM(0x%4.4x)", Form); in dump()
490 << format("0x%8.8" PRIx64, uvalue + (cu ? cu->getOffset() : 0)); in dump()
508 if (Form == DW_FORM_string) in getAsCString()
511 if (Form == DW_FORM_GNU_strp_alt || U == nullptr) in getAsCString()
514 if (Form == DW_FORM_GNU_str_index) { in getAsCString()
516 if (!U->getStringOffsetSectionItem(Offset, StrOffset)) in getAsCString()
520 if (const char *Str = U->getStringExtractor().getCStr(&Offset)) { in getAsCString()
529 if (Form == DW_FORM_GNU_addr_index) { in getAsAddress()
532 if (!U || !U->getAddrOffsetSectionItem(Index, Result)) in getAsAddress()
542 switch (Form) { in getAsReference()
550 return Value.uval + U->getOffset(); in getAsReference()
567 || Form == DW_FORM_sdata) in getAsUnsignedConstant()
574 (Form == DW_FORM_udata && uint64_t(std::numeric_limits<int64_t>::max()) < Value.uval)) in getAsSignedConstant()
576 switch (Form) { in getAsSignedConstant()
593 return makeArrayRef(Value.data, Value.uval); in getAsBlock()