0, // 0x18 DW_FORM_exprloc
0, // 0x19 DW_FORM_flag_present
8, // 0x20 DW_FORM_ref_sig8
+ 4, // 0x1f01 DW_FORM_GNU_addr_index
+ 4, // 0x1f02 DW_FORM_GNU_str_index
};
static const uint8_t form_sizes_addr8[] = {
0, // 0x18 DW_FORM_exprloc
0, // 0x19 DW_FORM_flag_present
8, // 0x20 DW_FORM_ref_sig8
+ 8, // 0x1f01 DW_FORM_GNU_addr_index
+ 8, // 0x1f01 DW_FORM_GNU_str_index
};
const uint8_t *
switch (Form) {
case DW_FORM_addr:
case DW_FORM_ref_addr: {
- bool InRelocMap = false;
- if (const RelocAddrMap *RelocMap = cu->getContext().relocMap()) {
- RelocAddrMap::const_iterator AI = RelocMap->find(*offset_ptr);
- if (AI != RelocMap->end()) {
- const std::pair<uint8_t, int64_t> &R = AI->second;
- Value.uval = R.second;
- *offset_ptr += R.first;
- InRelocMap = true;
- }
- }
- if (!InRelocMap)
+ RelocAddrMap::const_iterator AI
+ = cu->getContext().relocMap().find(*offset_ptr);
+ if (AI != cu->getContext().relocMap().end()) {
+ const std::pair<uint8_t, int64_t> &R = AI->second;
+ Value.uval = R.second;
+ *offset_ptr += R.first;
+ } else
Value.uval = data.getUnsigned(offset_ptr, cu->getAddressByteSize());
break;
}
Value.sval = data.getSLEB128(offset_ptr);
break;
case DW_FORM_strp: {
- bool InRelocMap = false;
- if (const RelocAddrMap *RelocMap = cu->getContext().relocMap()) {
- RelocAddrMap::const_iterator AI = RelocMap->find(*offset_ptr);
- if (AI != RelocMap->end()) {
- const std::pair<uint8_t, int64_t> &R = AI->second;
- Value.uval = R.second;
- *offset_ptr += R.first;
- InRelocMap = true;
- }
- }
- if (!InRelocMap)
+ RelocAddrMap::const_iterator AI
+ = cu->getContext().relocMap().find(*offset_ptr);
+ if (AI != cu->getContext().relocMap().end()) {
+ const std::pair<uint8_t, int64_t> &R = AI->second;
+ Value.uval = R.second;
+ *offset_ptr += R.first;
+ } else
Value.uval = data.getU32(offset_ptr);
break;
}
case DW_FORM_ref_sig8:
Value.uval = data.getU64(offset_ptr);
break;
+ case DW_FORM_GNU_addr_index:
+ Value.uval = data.getULEB128(offset_ptr);
+ break;
+ case DW_FORM_GNU_str_index:
+ Value.uval = data.getULEB128(offset_ptr);
+ break;
default:
return false;
}