Ejemplo n.º 1
0
        internal RhHeap(RhRuntime runtime, RhModule[] modules, TextWriter log)
            : base(runtime)
        {
            Log = log;
            m_runtime = runtime;
            m_modules = modules;
            m_mrtModule = FindMrtModule();

            CreateFreeType();
            InitSegments(runtime);
        }
Ejemplo n.º 2
0
        internal RhHeap(RhRuntime runtime, RhModule[] modules, TextWriter log)
            : base(runtime)
        {
            Log         = log;
            m_runtime   = runtime;
            m_modules   = modules;
            m_mrtModule = FindMrtModule();

            CreateFreeType();
            InitSegments(runtime);
        }
Ejemplo n.º 3
0
        public RhType(RhHeap heap, int index, RhModule module, string name, ulong eeType, Microsoft.Diagnostics.Runtime.Desktop.IMethodTableData mtData)
        {
            m_heap   = heap;
            m_module = module;
            m_name   = name;
            m_eeType = eeType;
            m_index  = index;

            m_baseSize         = mtData.BaseSize;
            m_componentSize    = mtData.ComponentSize;
            m_containsPointers = mtData.ContainsPointers;
        }
Ejemplo n.º 4
0
        public RhType(RhHeap heap, int index, RhModule module, string name, ulong eeType, Microsoft.Diagnostics.Runtime.Desktop.IMethodTableData mtData)
        {
            m_heap = heap;
            m_module = module;
            m_name = name;
            m_eeType = eeType;
            m_index = index;

            m_baseSize = mtData.BaseSize;
            m_componentSize = mtData.ComponentSize;
            m_containsPointers = mtData.ContainsPointers;
        }
Ejemplo n.º 5
0
        private RhModule[] ConvertModuleList(List <ModuleInfo> modules)
        {
            RhModule[] result = new RhModule[modules.Count];

            int i = 0;

            foreach (var module in modules)
            {
                result[i++] = new RhModule(this, module);
            }

            return(result);
        }
Ejemplo n.º 6
0
        private RhModule[] ConvertModuleList(List<ModuleInfo> modules)
        {
            RhModule[] result = new RhModule[modules.Count];

            int i = 0;
            foreach (var module in modules)
                result[i++] = new RhModule(this, module);

            return result;
        }
Ejemplo n.º 7
0
        private ClrType ConstructObjectType(ulong eeType)
        {
            IMethodTableData mtData = m_runtime.GetMethodTableData(eeType);

            if (mtData == null)
            {
                return(null);
            }

            ulong componentType = mtData.ElementTypeHandle;
            bool  isArray       = componentType != 0;

            // EEClass is the canonical method table.  I stuffed the pointer there instead of creating a new property.
            ulong canonType = isArray ? componentType : mtData.EEClass;

            if (!isArray && canonType != 0)
            {
                int index;
                if (!isArray && m_indices.TryGetValue(canonType, out index))
                {
                    m_indices[eeType] = index;  // Link the original eeType to its canonical GCHeapType.
                    return(m_types[index]);
                }

                ulong tmp = eeType;
                eeType    = canonType;
                canonType = tmp;
            }

            string name = m_runtime.ResolveSymbol(eeType);

            if (string.IsNullOrEmpty(name))
            {
                name = m_runtime.ResolveSymbol(canonType);
                if (name == null)
                {
                    name = string.Format("unknown type {0:x}", eeType);
                }
            }


            int len = name.Length;

            if (name.EndsWith("::`vftable'"))
            {
                len -= 11;
            }

            int i = name.IndexOf('!') + 1;

            name = name.Substring(i, len - i);

            if (isArray)
            {
                name += "[]";
            }

            RhModule module = FindContainingModule(eeType);

            if (module == null && canonType != 0)
            {
                module = FindContainingModule(canonType);
            }

            if (module == null)
            {
                module = m_mrtModule;
            }

            RhType type = new RhType(this, m_types.Count, module, name, eeType, mtData);

            m_indices[eeType] = m_types.Count;
            if (!isArray)
            {
                m_indices[canonType] = m_types.Count;
            }
            m_types.Add(type);

            return(type);
        }