public DwarfReader(Bfd bfd, Module module)
{
this.bfd = bfd;
this.module = module;
this.filename = bfd.FileName;
this.target_info = bfd.TargetMemoryInfo;
debug_info_reader = create_reader (".debug_info", false);
DwarfBinaryReader reader = DebugInfoReader;
reader.ReadInitialLength (out is64bit);
int version = reader.ReadInt16 ();
if (version < 2)
throw new DwarfException (
bfd, "Wrong DWARF version: {0}", version);
reader.ReadOffset ();
address_size = reader.ReadByte ();
if ((address_size != 4) && (address_size != 8))
throw new DwarfException (
bfd, "Unknown address size: {0}", address_size);
debug_abbrev_reader = create_reader (".debug_abbrev", false);
debug_line_reader = create_reader (".debug_line", false);
debug_aranges_reader = create_reader (".debug_aranges", true);
debug_pubnames_reader = create_reader (".debug_pubnames", true);
debug_pubtypes_reader = create_reader (".debug_pubtypes", true);
debug_str_reader = create_reader (".debug_str", true);
debug_loc_reader = create_reader (".debug_loc", false);
debug_ranges_reader = create_reader (".debug_ranges", true);
compile_unit_hash = Hashtable.Synchronized (new Hashtable ());
method_source_hash = Hashtable.Synchronized (new Hashtable ());
method_hash = Hashtable.Synchronized (new Hashtable ());
source_file_hash = Hashtable.Synchronized (new Hashtable ());
if (bfd.IsLoaded) {
aranges = ArrayList.Synchronized (read_aranges ());
symtab = new DwarfSymbolTable (this, aranges);
pubnames = read_pubnames ();
// pubtypes = read_pubtypes ();
}
long offset = 0;
while (offset < reader.Size) {
CompileUnitBlock block = new CompileUnitBlock (this, offset);
compile_unit_hash.Add (offset, block);
offset += block.length;
}
}