@@ -77,10 +77,9 @@ bool DWARFFormValue::ExtractValue(const DWARFDataExtractor &data,
7777 case DW_FORM_strp:
7878 case DW_FORM_line_strp:
7979 case DW_FORM_sec_offset:
80- if (m_unit->GetFormat () == DwarfFormat::DWARF32)
81- m_value.uval = data.GetMaxU64 (offset_ptr, 4 );
82- else if (m_unit->GetFormat () == DwarfFormat::DWARF64)
83- m_value.uval = data.GetMaxU64 (offset_ptr, 8 );
80+ assert (m_unit); // Unit must be valid
81+ ref_addr_size = m_unit->GetFormParams ().getDwarfOffsetByteSize ();
82+ m_value.uval = data.GetMaxU64 (offset_ptr, ref_addr_size);
8483 break ;
8584 case DW_FORM_addrx1:
8685 case DW_FORM_strx1:
@@ -122,14 +121,7 @@ bool DWARFFormValue::ExtractValue(const DWARFDataExtractor &data,
122121 break ;
123122 case DW_FORM_ref_addr:
124123 assert (m_unit);
125- if (m_unit->GetVersion () <= 2 )
126- ref_addr_size = m_unit->GetAddressByteSize ();
127- else {
128- if (m_unit->GetFormat () == DwarfFormat::DWARF32)
129- ref_addr_size = 4 ;
130- else if (m_unit->GetFormat () == DwarfFormat::DWARF64)
131- ref_addr_size = 8 ;
132- }
124+ ref_addr_size = m_unit->GetFormParams ().getRefAddrByteSize ();
133125 m_value.uval = data.GetMaxU64 (offset_ptr, ref_addr_size);
134126 break ;
135127 case DW_FORM_indirect:
@@ -176,12 +168,12 @@ static FormSize g_form_sizes[] = {
176168 {0 , 0 }, // 0x0f DW_FORM_udata
177169 {0 , 0 }, // 0x10 DW_FORM_ref_addr (addr size for DWARF2 and earlier, 4 bytes
178170 // for DWARF32, 8 bytes for DWARF32 in DWARF 3 and later
179- {1 , 1 }, // 0x11 DW_FORM_ref1
180- {1 , 2 }, // 0x12 DW_FORM_ref2
181- {1 , 4 }, // 0x13 DW_FORM_ref4
182- {1 , 8 }, // 0x14 DW_FORM_ref8
183- {0 , 0 }, // 0x15 DW_FORM_ref_udata
184- {0 , 0 }, // 0x16 DW_FORM_indirect
171+ {1 , 1 }, // 0x11 DW_FORM_ref1
172+ {1 , 2 }, // 0x12 DW_FORM_ref2
173+ {1 , 4 }, // 0x13 DW_FORM_ref4
174+ {1 , 8 }, // 0x14 DW_FORM_ref8
175+ {0 , 0 }, // 0x15 DW_FORM_ref_udata
176+ {0 , 0 }, // 0x16 DW_FORM_indirect
185177 {0 ,
186178 0 }, // 0x17 DW_FORM_sec_offset (4 bytes for DWARF32, 8 bytes for DWARF64)
187179 {0 , 0 }, // 0x18 DW_FORM_exprloc
@@ -192,7 +184,7 @@ static FormSize g_form_sizes[] = {
192184 {0 , 0 }, // 0x1d DW_FORM_strp_sup (4 bytes for DWARF32, 8 bytes for DWARF64)
193185 {1 , 16 }, // 0x1e DW_FORM_data16
194186 {0 , 0 }, // 0x1f DW_FORM_line_strp (4 bytes for DWARF32, 8 bytes for DWARF64)
195- {1 , 8 }, // 0x20 DW_FORM_ref_sig8
187+ {1 , 8 }, // 0x20 DW_FORM_ref_sig8
196188};
197189
198190std::optional<uint8_t > DWARFFormValue::GetFixedSize (dw_form_t form,
@@ -254,17 +246,9 @@ bool DWARFFormValue::SkipValue(dw_form_t form,
254246 return true ;
255247
256248 case DW_FORM_ref_addr:
257- ref_addr_size = 4 ;
258249 assert (unit); // Unit must be valid for DW_FORM_ref_addr objects or we will
259250 // get this wrong
260- if (unit->GetVersion () <= 2 )
261- ref_addr_size = unit->GetAddressByteSize ();
262- else {
263- if (unit->GetFormat () == DwarfFormat::DWARF32)
264- ref_addr_size = 4 ;
265- else if (unit->GetFormat () == DwarfFormat::DWARF64)
266- ref_addr_size = 8 ;
267- }
251+ ref_addr_size = unit->GetFormParams ().getRefAddrByteSize ();
268252 *offset_ptr += ref_addr_size;
269253 return true ;
270254
@@ -300,10 +284,9 @@ bool DWARFFormValue::SkipValue(dw_form_t form,
300284 case DW_FORM_sec_offset:
301285 case DW_FORM_strp:
302286 case DW_FORM_line_strp:
303- if (unit->GetFormat () == DwarfFormat::DWARF32)
304- *offset_ptr += 4 ;
305- else if (unit->GetFormat () == DwarfFormat::DWARF64)
306- *offset_ptr += 8 ;
287+ assert (unit); // Unit must be valid
288+ ref_addr_size = unit->GetFormParams ().getDwarfOffsetByteSize ();
289+ *offset_ptr += ref_addr_size;
307290 return true ;
308291
309292 // 4 byte values
0 commit comments