diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp')
| -rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp | 74 |
1 files changed, 12 insertions, 62 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp index 3fba8ccc86f..ce1683dcc55 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp @@ -93,60 +93,13 @@ static uint8_t g_form_sizes_addr8[] = { 8, // 0x20 DW_FORM_ref_sig8 }; -// Difference with g_form_sizes_addr8: -// DW_FORM_strp and DW_FORM_sec_offset are 8 instead of 4 -static uint8_t g_form_sizes_addr8_dwarf64[] = { - 0, // 0x00 unused - 8, // 0x01 DW_FORM_addr - 0, // 0x02 unused - 0, // 0x03 DW_FORM_block2 - 0, // 0x04 DW_FORM_block4 - 2, // 0x05 DW_FORM_data2 - 4, // 0x06 DW_FORM_data4 - 8, // 0x07 DW_FORM_data8 - 0, // 0x08 DW_FORM_string - 0, // 0x09 DW_FORM_block - 0, // 0x0a DW_FORM_block1 - 1, // 0x0b DW_FORM_data1 - 1, // 0x0c DW_FORM_flag - 0, // 0x0d DW_FORM_sdata - 8, // 0x0e DW_FORM_strp - 0, // 0x0f DW_FORM_udata - 0, // 0x10 DW_FORM_ref_addr (addr size for DWARF2 and earlier, 4 bytes for - // DWARF32, 8 bytes for DWARF32 in DWARF 3 and later - 1, // 0x11 DW_FORM_ref1 - 2, // 0x12 DW_FORM_ref2 - 4, // 0x13 DW_FORM_ref4 - 8, // 0x14 DW_FORM_ref8 - 0, // 0x15 DW_FORM_ref_udata - 0, // 0x16 DW_FORM_indirect - 8, // 0x17 DW_FORM_sec_offset - 0, // 0x18 DW_FORM_exprloc - 0, // 0x19 DW_FORM_flag_present - 0, // 0x1a - 0, // 0x1b - 0, // 0x1c - 0, // 0x1d - 0, // 0x1e - 0, // 0x1f - 8, // 0x20 DW_FORM_ref_sig8 -}; - DWARFFormValue::FixedFormSizes -DWARFFormValue::GetFixedFormSizesForAddressSize(uint8_t addr_size, - bool is_dwarf64) { - if (!is_dwarf64) { - switch (addr_size) { - case 4: - return FixedFormSizes(g_form_sizes_addr4, sizeof(g_form_sizes_addr4)); - case 8: - return FixedFormSizes(g_form_sizes_addr8, sizeof(g_form_sizes_addr8)); - } - } else { - if (addr_size == 8) - return FixedFormSizes(g_form_sizes_addr8_dwarf64, - sizeof(g_form_sizes_addr8_dwarf64)); - // is_dwarf64 && addr_size == 4 : no provider does this. +DWARFFormValue::GetFixedFormSizesForAddressSize(uint8_t addr_size) { + switch (addr_size) { + case 4: + return FixedFormSizes(g_form_sizes_addr4, sizeof(g_form_sizes_addr4)); + case 8: + return FixedFormSizes(g_form_sizes_addr8, sizeof(g_form_sizes_addr8)); } return FixedFormSizes(); } @@ -214,9 +167,7 @@ bool DWARFFormValue::ExtractValue(const DWARFDataExtractor &data, case DW_FORM_strp: case DW_FORM_line_strp: case DW_FORM_sec_offset: - assert(m_cu); - m_value.value.uval = - data.GetMaxU64(offset_ptr, DWARFUnit::IsDWARF64(m_cu) ? 8 : 4); + m_value.value.uval = data.GetMaxU64(offset_ptr, 4); break; case DW_FORM_addrx1: case DW_FORM_strx1: @@ -260,7 +211,7 @@ bool DWARFFormValue::ExtractValue(const DWARFDataExtractor &data, if (m_cu->GetVersion() <= 2) ref_addr_size = m_cu->GetAddressByteSize(); else - ref_addr_size = m_cu->IsDWARF64() ? 8 : 4; + ref_addr_size = 4; m_value.value.uval = data.GetMaxU64(offset_ptr, ref_addr_size); break; case DW_FORM_indirect: @@ -337,7 +288,7 @@ bool DWARFFormValue::SkipValue(dw_form_t form, if (cu->GetVersion() <= 2) ref_addr_size = cu->GetAddressByteSize(); else - ref_addr_size = cu->IsDWARF64() ? 8 : 4; + ref_addr_size = 4; *offset_ptr += ref_addr_size; return true; @@ -372,8 +323,7 @@ bool DWARFFormValue::SkipValue(dw_form_t form, // 32 bit for DWARF 32, 64 for DWARF 64 case DW_FORM_sec_offset: case DW_FORM_strp: - assert(cu); - *offset_ptr += (cu->IsDWARF64() ? 8 : 4); + *offset_ptr += 4; return true; // 4 byte values @@ -552,7 +502,7 @@ const char *DWARFFormValue::AsCString() const { if (!symbol_file) return nullptr; - uint32_t index_size = m_cu->IsDWARF64() ? 8 : 4; + uint32_t index_size = 4; lldb::offset_t offset = m_value.value.uval * index_size; dw_offset_t str_offset = symbol_file->get_debug_str_offsets_data().GetMaxU64(&offset, @@ -568,7 +518,7 @@ const char *DWARFFormValue::AsCString() const { if (!symbol_file) return nullptr; - uint32_t indexSize = m_cu->IsDWARF64() ? 8 : 4; + uint32_t indexSize = 4; lldb::offset_t offset = m_cu->GetStrOffsetsBase() + m_value.value.uval * indexSize; dw_offset_t strOffset = |

