示例#1
0
        public void ModuleLoaded()
        {
            if (aranges != null)
                return;

            aranges = ArrayList.Synchronized (read_aranges ());
            symtab = new DwarfSymbolTable (this, aranges);

            pubnames = read_pubnames ();
            // pubtypes = read_pubtypes ();
        }
示例#2
0
        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;
            }
        }