64-Bit DWARF support for .debug_aranges and .debug_pubnames
llvm-svn: 193250
This commit is contained in:
@@ -183,9 +183,20 @@ DWARFDebugArangeSet::Extract(const DataExtractor &data, lldb::offset_t *offset_p
|
||||
// descriptor on the target system. This header is followed by a series
|
||||
// of tuples. Each tuple consists of an address and a length, each in
|
||||
// the size appropriate for an address on the target architecture.
|
||||
size_t dwarf_offset_size = 4;
|
||||
m_header.length = data.GetU32(offset_ptr);
|
||||
if (m_header.length == 0xffffffff)
|
||||
{
|
||||
dwarf_offset_size = 8;
|
||||
m_header.length = data.GetU64(offset_ptr);
|
||||
}
|
||||
else if (m_header.length >= 0xffffff00)
|
||||
{
|
||||
// Reserved.
|
||||
return false;
|
||||
}
|
||||
m_header.version = data.GetU16(offset_ptr);
|
||||
m_header.cu_offset = data.GetU32(offset_ptr);
|
||||
m_header.cu_offset = data.GetMaxU64(offset_ptr, dwarf_offset_size);
|
||||
m_header.addr_size = data.GetU8(offset_ptr);
|
||||
m_header.seg_size = data.GetU8(offset_ptr);
|
||||
|
||||
|
||||
@@ -84,15 +84,26 @@ DWARFDebugPubnamesSet::Extract(const DataExtractor& data, lldb::offset_t *offset
|
||||
{
|
||||
m_descriptors.clear();
|
||||
m_offset = *offset_ptr;
|
||||
size_t dwarf_offset_size = 4;
|
||||
m_header.length = data.GetU32(offset_ptr);
|
||||
if (m_header.length == 0xffffffff)
|
||||
{
|
||||
dwarf_offset_size = 8;
|
||||
m_header.length = data.GetU64(offset_ptr);
|
||||
}
|
||||
else if (m_header.length >= 0xffffff00)
|
||||
{
|
||||
// Reserved.
|
||||
return false;
|
||||
}
|
||||
m_header.version = data.GetU16(offset_ptr);
|
||||
m_header.die_offset = data.GetU32(offset_ptr);
|
||||
m_header.die_length = data.GetU32(offset_ptr);
|
||||
m_header.die_offset = data.GetMaxU64(offset_ptr, dwarf_offset_size);
|
||||
m_header.die_length = data.GetMaxU64(offset_ptr, dwarf_offset_size);
|
||||
|
||||
Descriptor pubnameDesc;
|
||||
while (data.ValidOffset(*offset_ptr))
|
||||
{
|
||||
pubnameDesc.offset = data.GetU32(offset_ptr);
|
||||
pubnameDesc.offset = data.GetMaxU64(offset_ptr, dwarf_offset_size);
|
||||
|
||||
if (pubnameDesc.offset)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user