ArrayList read_aranges()
{
ArrayList ranges = new ArrayList ();
if (debug_aranges_reader == null)
return ranges;
DwarfBinaryReader reader = new DwarfBinaryReader (
bfd, (TargetBlob) debug_aranges_reader.Data, Is64Bit);
while (!reader.IsEof) {
long length = reader.ReadInitialLength ();
long stop = reader.Position + length;
int version = reader.ReadInt16 ();
long offset = reader.ReadOffset ();
int address_size = reader.ReadByte ();
int segment_size = reader.ReadByte ();
if ((address_size != 4) && (address_size != 8))
throw new DwarfException (
bfd, "Unknown address size: {0}", address_size);
if (segment_size != 0)
throw new DwarfException (
bfd, "Segmented address mode not supported");
if (version != 2)
throw new DwarfException (
bfd, "Wrong version in .debug_aranges: {0}",
version);
if (AddressSize == 8)
reader.Position = ((reader.Position+15) >> 4) * 16;
else
reader.Position = ((reader.Position+7) >> 3) * 8;
while (reader.Position < stop) {
long address = reader.ReadAddress ();
long size = reader.ReadAddress ();
if ((address == 0) && (size == 0))
break;
TargetAddress taddress = GetAddress (address);
ranges.Add (new RangeEntry (this, offset, taddress, size));
}
}
return ranges;
}