Flush
authorMiguel de Icaza <miguel@gnome.org>
Wed, 20 Jun 2001 04:39:52 +0000 (04:39 -0000)
committerMiguel de Icaza <miguel@gnome.org>
Wed, 20 Jun 2001 04:39:52 +0000 (04:39 -0000)
svn path=/trunk/mono/; revision=16

mono/metadata/assembly.c
mono/metadata/metadata.c
mono/metadata/metadata.h
mono/metadata/pedump.c

index 9eb96f80b070565728d089cbc1a7ea4652eadab7..38aff042bf007ff6837f36abaf71581d6ce9d590 100644 (file)
@@ -112,7 +112,7 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
 {
        metadata_t *metadata = &iinfo->dn_metadata;
        guint32 offset, size;
-       guint16 records;
+       guint16 streams;
        int i;
        char *ptr;
        
@@ -125,12 +125,7 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
 
        ptr = metadata->raw_metadata;
 
-       /*
-        * Handle Beta 1 and ECMA versions of the metadata root
-        */
-       if (strncmp (ptr, "COM+", 4) == 0){
-               ptr += 10;
-       } else if (strncmp (ptr, "BSJB", 4) == 0){
+       if (strncmp (ptr, "BSJB", 4) == 0){
                guint32 version_string_len;
 
                ptr += 12;
@@ -139,15 +134,16 @@ load_metadata_ptrs (MonoAssembly *assembly, dotnet_image_info_t *iinfo)
                ptr += version_string_len;
                if (((guint32) ptr) % 4)
                        ptr += 4 - (((guint32) ptr) %4);
-       }
+       } else
+               return FALSE;
 
        /* skip over flags */
        ptr += 2;
        
-       records = read16 (ptr);
+       streams = read16 (ptr);
        ptr += 2;
 
-       for (i = 0; i < records; i++){
+       for (i = 0; i < streams; i++){
                if (strncmp (ptr + 8, "#~", 3) == 0){
                        metadata->heap_tables.sh_offset = read32 (ptr);
                        metadata->heap_tables.sh_size = read32 (ptr + 4);
index 420c77d42f142b44a325d53e6e0c5f467d7f2d2a..03dc047259260506b9a39416fb6d9a63cb4f117c 100644 (file)
@@ -23,7 +23,8 @@
  * Aliased table for example is `CustomAttributeType' which depending on the
  * information might refer to different tables.
  */
-static MonoMetaTable AssemblyTable [] = {
+
+static MonoMetaTable AssemblySchema [] = {
        { MONO_MT_UINT32,     "HashId" },
        { MONO_MT_UINT16,     "Major" },  
        { MONO_MT_UINT16,     "Minor" },
@@ -36,19 +37,19 @@ static MonoMetaTable AssemblyTable [] = {
        { MONO_MT_END, NULL }
 };
        
-static MonoMetaTable AssemblyOSTable [] = {
+static MonoMetaTable AssemblyOSSchema [] = {
        { MONO_MT_UINT32,     "OSPlatformID" },
        { MONO_MT_UINT32,     "OSMajor" },
        { MONO_MT_UINT32,     "OSMinor" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable AssemblyProcessorTable [] = {
+static MonoMetaTable AssemblyProcessorSchema [] = {
        { MONO_MT_UINT32,     "Processor" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable AssemblyRefTable [] = {
+static MonoMetaTable AssemblyRefSchema [] = {
        { MONO_MT_UINT16,     "Major" },
        { MONO_MT_UINT16,     "Minor" },
        { MONO_MT_UINT16,     "Build" },
@@ -61,7 +62,7 @@ static MonoMetaTable AssemblyRefTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable AssemblyRefOSTable [] = {
+static MonoMetaTable AssemblyRefOSSchema [] = {
        { MONO_MT_UINT32,     "OSPlatformID" },
        { MONO_MT_UINT32,     "OSMajorVersion" },
        { MONO_MT_UINT32,     "OSMinorVersion" },
@@ -69,55 +70,55 @@ static MonoMetaTable AssemblyRefOSTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable AssemblyRefProcessorTable [] = {
+static MonoMetaTable AssemblyRefProcessorSchema [] = {
        { MONO_MT_UINT32,     "Processor" },
        { MONO_MT_TABLE_IDX,  "AssemblyRef:AssemblyRef" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable ClassLayoutTable [] = {
+static MonoMetaTable ClassLayoutSchema [] = {
        { MONO_MT_UINT16,     "PackingSize" },
        { MONO_MT_UINT32,     "ClassSize" },
        { MONO_MT_TABLE_IDX,  "Parent:TypeDef" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ConstantTable [] = {
+static MonoMetaTable ConstantSchema [] = {
        { MONO_MT_UINT8,      "Type" },
        { MONO_MT_UINT8,      "PaddingZero" },
-       { MONO_MT_TABLE_IDX,  "Parent" },
+       { MONO_MT_CONST_IDX,  "Parent" },
        { MONO_MT_BLOB_IDX,   "Value" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable CustomAttributeTable [] = {
+static MonoMetaTable CustomAttributeSchema [] = {
        { MONO_MT_TABLE_IDX,  "Parent" },
        { MONO_MT_TABLE_IDX,  "Type=CustomAttributeType" },
        { MONO_MT_BLOB_IDX,   "Value" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable DeclSecurityTable [] = {
+static MonoMetaTable DeclSecuritySchema [] = {
        { MONO_MT_UINT16,     "Action" },
        { MONO_MT_TABLE_IDX,  "Parent=HasDeclSecurity" },
        { MONO_MT_BLOB_IDX,   "PermissionSet" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable EventMapTable [] = {
+static MonoMetaTable EventMapSchema [] = {
        { MONO_MT_TABLE_IDX,  "Parent:TypeDef" },
        { MONO_MT_TABLE_IDX,  "EventList:Event" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable EventTable [] = {
+static MonoMetaTable EventSchema [] = {
        { MONO_MT_UINT16,     "EventFlags#EventAttribute" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_TABLE_IDX,  "EventType" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable ExportedTypeTable [] = {
+static MonoMetaTable ExportedTypeSchema [] = {
        { MONO_MT_UINT32,     "Flags" },
        { MONO_MT_TABLE_IDX,  "TypeDefId" },
        { MONO_MT_STRING_IDX, "TypeName" },
@@ -126,37 +127,37 @@ static MonoMetaTable ExportedTypeTable [] = {
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable FieldTable [] = {
+static MonoMetaTable FieldSchema [] = {
        { MONO_MT_UINT16,     "Flags" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_BLOB_IDX,   "Signature" },
        { MONO_MT_END, NULL }   
 };
-static MonoMetaTable FieldLayoutTable [] = {
+static MonoMetaTable FieldLayoutSchema [] = {
        { MONO_MT_UINT32,     "Offset" },
        { MONO_MT_TABLE_IDX,  "Field:Field" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable FieldMarshalTable [] = {
+static MonoMetaTable FieldMarshalSchema [] = {
        { MONO_MT_TABLE_IDX,  "Parent" },
        { MONO_MT_BLOB_IDX,   "NativeType" },
        { MONO_MT_END, NULL }   
 };
-static MonoMetaTable FieldRVATable [] = {
+static MonoMetaTable FieldRVASchema [] = {
        { MONO_MT_UINT32,     "RVA" },
        { MONO_MT_TABLE_IDX,  "Field:Field" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable FileTable [] = {
+static MonoMetaTable FileSchema [] = {
        { MONO_MT_UINT32,     "Flags" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_BLOB_IDX,   "Value" }, 
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ImplMapTable [] = {
+static MonoMetaTable ImplMapSchema [] = {
        { MONO_MT_UINT16,     "MappingFlag" },
        { MONO_MT_TABLE_IDX,  "MemberForwarded=MemberForwardedCodedIndex" },
        { MONO_MT_STRING_IDX, "ImportName" },
@@ -164,13 +165,13 @@ static MonoMetaTable ImplMapTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable InterfaceImplTable [] = {
+static MonoMetaTable InterfaceImplSchema [] = {
        { MONO_MT_TABLE_IDX,  "Class:TypeDef" },
        { MONO_MT_TABLE_IDX,  "Interface=TypeDefOrRef" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ManifestResourceTable [] = {
+static MonoMetaTable ManifestResourceSchema [] = {
        { MONO_MT_UINT32,     "Offset" },
        { MONO_MT_UINT32,     "Flags" },
        { MONO_MT_STRING_IDX, "Name" },
@@ -178,14 +179,14 @@ static MonoMetaTable ManifestResourceTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable MemberRefTable [] = {
+static MonoMetaTable MemberRefSchema [] = {
        { MONO_MT_TABLE_IDX,  "Class=MemberRefParent" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_BLOB_IDX,   "Signature" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable MethodTable [] = {
+static MonoMetaTable MethodSchema [] = {
        { MONO_MT_UINT32,     "RVA" },
        { MONO_MT_UINT16,     "ImplFlags#MethodImplAttributes" },
        { MONO_MT_UINT16,     "Flags#MethodAttribute" },
@@ -195,21 +196,21 @@ static MonoMetaTable MethodTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable MethodImplTable [] = {
+static MonoMetaTable MethodImplSchema [] = {
        { MONO_MT_TABLE_IDX,  "Class:TypeDef" },
        { MONO_MT_TABLE_IDX,  "MethodBody=MethodDefOrRef" },
        { MONO_MT_TABLE_IDX,  "MethodDeclaration=MethodDefOrRef" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable MethodSemanticsTable [] = {
+static MonoMetaTable MethodSemanticsSchema [] = {
        { MONO_MT_UINT16,     "MethodSemantic" },
        { MONO_MT_TABLE_IDX,  "Method:Method" },
        { MONO_MT_TABLE_IDX,  "Association=HasSemantic" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ModuleTable [] = {
+static MonoMetaTable ModuleSchema [] = {
        { MONO_MT_UINT16,     "Generation" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_GUID_IDX,   "MVID" },
@@ -218,43 +219,43 @@ static MonoMetaTable ModuleTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ModuleRefTable [] = {
+static MonoMetaTable ModuleRefSchema [] = {
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable NestedClassTable [] = {
+static MonoMetaTable NestedClassSchema [] = {
        { MONO_MT_TABLE_IDX,  "NestedClass:TypeDef" },
        { MONO_MT_TABLE_IDX,  "EnclosingClass:TypeDef" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable ParamTable [] = {
+static MonoMetaTable ParamSchema [] = {
        { MONO_MT_UINT16,     "Flags" },
        { MONO_MT_UINT16,     "Sequence" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable PropertyTable [] = {
+static MonoMetaTable PropertySchema [] = {
        { MONO_MT_UINT16,     "Flags" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_BLOB_IDX,   "Type" },
        { MONO_MT_END, NULL }   
 };
 
-static MonoMetaTable PropertyMapTable [] = {
+static MonoMetaTable PropertyMapSchema [] = {
        { MONO_MT_TABLE_IDX,  "Parent:TypeDef" },
        { MONO_MT_TABLE_IDX,  "PropertyList:Property" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable StandaloneSigTable [] = {
+static MonoMetaTable StandaloneSigSchema [] = {
        { MONO_MT_BLOB_IDX,   "Signature" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable TypeDefTable [] = {
+static MonoMetaTable TypeDefSchema [] = {
        { MONO_MT_UINT32,     "Flags" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_STRING_IDX, "Namespace" },
@@ -264,14 +265,14 @@ static MonoMetaTable TypeDefTable [] = {
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable TypeRefTable [] = {
+static MonoMetaTable TypeRefSchema [] = {
        { MONO_MT_TABLE_IDX,  "ResolutionScope=ResolutionScope" },
        { MONO_MT_STRING_IDX, "Name" },
        { MONO_MT_STRING_IDX, "Namespace" },
        { MONO_MT_END, NULL }
 };
 
-static MonoMetaTable TypeSpecTable [] = {
+static MonoMetaTable TypeSpecSchema [] = {
        { MONO_MT_BLOB_IDX,   "Signature" },
        { MONO_MT_END, NULL }
 };
@@ -280,50 +281,50 @@ static struct {
        MonoMetaTable *table;
        const char    *name;
 } tables [] = {
-       /*  0 */ { ModuleTable,               "Module" },
-       /*  1 */ { TypeRefTable,              "TypeRef" },
-       /*  2 */ { TypeDefTable,              "TypeDef" },
-       /*  3 */ { NULL,                      NULL },
-       /*  4 */ { FieldTable,                "Field" },
-       /*  5 */ { NULL,                      NULL },
-       /*  6 */ { MethodTable,               "Method" },
-       /*  7 */ { NULL,                      NULL },
-       /*  8 */ { ParamTable,                "Param" },
-       /*  9 */ { InterfaceImplTable,        "InterfaceImpl" },
-       /*  A */ { MemberRefTable,            "MemberRef" },
-       /*  B */ { ConstantTable,             "Constant" },
-       /*  C */ { CustomAttributeTable,      "CustomAttribute" },
-       /*  D */ { FieldMarshalTable,         "FieldMarshal" },
-       /*  E */ { DeclSecurityTable,         "DeclSecurity" },
-       /*  F */ { ClassLayoutTable,          "ClassLayout" },
-       /* 10 */ { FieldLayoutTable,          "FieldLayout" },
-       /* 11 */ { StandaloneSigTable,        "StandaloneSig" },
-       /* 12 */ { EventMapTable,             "EventMap" },
-       /* 13 */ { NULL,                      NULL },
-       /* 14 */ { EventTable,                "Event" },
-       /* 15 */ { PropertyMapTable,          "PropertyMap" },
-       /* 16 */ { NULL,                      NULL },
-       /* 17 */ { PropertyTable,             "PropertyTable" },
-       /* 18 */ { MethodSemanticsTable,      "MethodSemantics" },
-       /* 19 */ { MethodImplTable,           "MethodImpl" },
-       /* 1A */ { ModuleRefTable,            "ModuleRef" },
-       /* 1B */ { TypeSpecTable,             "TypeSpec" },
-       /* 1C */ { ImplMapTable,              "ImplMap" },
-       /* 1D */ { FieldRVATable,             "FieldRVA" },
-       /* 1E */ { NULL,                      NULL },
-       /* 1F */ { NULL,                      NULL },
-       /* 20 */ { AssemblyTable,             "Assembly" },
-       /* 21 */ { AssemblyProcessorTable,    "AssemblyProcessor" },
-       /* 22 */ { AssemblyOSTable,           "AssemblyOS" },
-       /* 23 */ { AssemblyRefTable,          "AssemblyRef" },
-       /* 24 */ { AssemblyRefProcessorTable, "AssemblyRefProcessor" },
-       /* 25 */ { AssemblyRefOSTable,        "AssemblyRefOS" },
-       /* 26 */ { FileTable,                 "File" },
-       /* 27 */ { ExportedTypeTable,         "ExportedType" },
-       /* 28 */ { ManifestResourceTable,     "ManifestResource" },
-       /* 29 */ { NestedClassTable,          "NestedClass" },
-       /* 2A */ { NULL,                      NULL },
-       /* 2B */ { NULL,                      NULL },
+       /*  0 */ { ModuleSchema,               "Module" },
+       /*  1 */ { TypeRefSchema,              "TypeRef" },
+       /*  2 */ { TypeDefSchema,              "TypeDef" },
+       /*  3 */ { NULL,                       NULL },
+       /*  4 */ { FieldSchema,                "Field" },
+       /*  5 */ { NULL,                       NULL },
+       /*  6 */ { MethodSchema,               "Method" },
+       /*  7 */ { NULL,                       NULL },
+       /*  8 */ { ParamSchema,                "Param" },
+       /*  9 */ { InterfaceImplSchema,        "InterfaceImpl" },
+       /*  A */ { MemberRefSchema,            "MemberRef" },
+       /*  B */ { ConstantSchema,             "Constant" },
+       /*  C */ { CustomAttributeSchema,      "CustomAttribute" },
+       /*  D */ { FieldMarshalSchema,         "FieldMarshal" },
+       /*  E */ { DeclSecuritySchema,         "DeclSecurity" },
+       /*  F */ { ClassLayoutSchema,          "ClassLayout" },
+       /* 10 */ { FieldLayoutSchema,          "FieldLayout" },
+       /* 11 */ { StandaloneSigSchema,        "StandaloneSig" },
+       /* 12 */ { EventMapSchema,             "EventMap" },
+       /* 13 */ { NULL,                       NULL },
+       /* 14 */ { EventSchema,                "Event" },
+       /* 15 */ { PropertyMapSchema,          "PropertyMap" },
+       /* 16 */ { NULL,                       NULL },
+       /* 17 */ { PropertySchema,             "PropertyTable" },
+       /* 18 */ { MethodSemanticsSchema,      "MethodSemantics" },
+       /* 19 */ { MethodImplSchema,           "MethodImpl" },
+       /* 1A */ { ModuleRefSchema,            "ModuleRef" },
+       /* 1B */ { TypeSpecSchema,             "TypeSpec" },
+       /* 1C */ { ImplMapSchema,              "ImplMap" },
+       /* 1D */ { FieldRVASchema,             "FieldRVA" },
+       /* 1E */ { NULL,                       NULL },
+       /* 1F */ { NULL,                       NULL },
+       /* 20 */ { AssemblySchema,             "Assembly" },
+       /* 21 */ { AssemblyProcessorSchema,    "AssemblyProcessor" },
+       /* 22 */ { AssemblyOSSchema,           "AssemblyOS" },
+       /* 23 */ { AssemblyRefSchema,          "AssemblyRef" },
+       /* 24 */ { AssemblyRefProcessorSchema, "AssemblyRefProcessor" },
+       /* 25 */ { AssemblyRefOSSchema,        "AssemblyRefOS" },
+       /* 26 */ { FileSchema,                 "File" },
+       /* 27 */ { ExportedTypeSchema,         "ExportedType" },
+       /* 28 */ { ManifestResourceSchema,     "ManifestResource" },
+       /* 29 */ { NestedClassSchema,          "NestedClass" },
+       /* 2A */ { NULL,                       NULL },
+       /* 2B */ { NULL,                       NULL },
 };
 
 const char *
index 89ddf7ec16b4f20ddb40df5064df4ab2ee02781b..24f9dea631e68200c5772313c91140d7380dd40a 100644 (file)
@@ -18,18 +18,31 @@ typedef struct {
 
 enum {
        MONO_MT_END,
+
+       /* Sized elements */
        MONO_MT_UINT32,
        MONO_MT_UINT16,
        MONO_MT_UINT8,
+
+       /* Index into Blob heap */
        MONO_MT_BLOB_IDX,
+
+       /* Index into String heap */
        MONO_MT_STRING_IDX,
+
+       /* GUID index */
+       MONO_MT_GUID_IDX,
+
+       /* Pointer into a table */
        MONO_MT_TABLE_IDX,
-       MONO_MT_GUID_IDX
+
+       /* Constant:Parent pointer (Param, Field or Property) */
+       MONO_MT_CONST_IDX, 
 };
 
 typedef struct {
        int   code;
        char *def;
-} MonoMetaTable;
+} MonoMetaSchema;
 
 const char *mono_meta_table_name (int table);
index f00175fb541855b00fa563d71ec1be2cd9bf47d0..79d4b62908067f585ebd22badb0ea2c47450726e 100644 (file)
@@ -216,6 +216,12 @@ dump_metadata_ptrs (dotnet_image_info_t *iinfo)
        dsh ("\t       GUID", iinfo, &meta->heap_guid);
 }
 
+static void
+dump_table (metadata_t *meta, int table)
+{
+       
+}
+
 static void
 dump_metadata (dotnet_image_info_t *iinfo)
 {
@@ -229,6 +235,7 @@ dump_metadata (dotnet_image_info_t *iinfo)
                if (meta->rows [table] == 0)
                        continue;
                printf ("Table %s (%d): %d rows\n", mono_meta_table_name (table), table, meta->rows [table]);
+               dump_table (meta, table);
        }
 }
 
@@ -270,6 +277,10 @@ main (int argc, char *argv [])
                usage ();
 
        assembly = mono_assembly_open (file, NULL);
+       if (!assembly){
+               fprintf (stderr, "Can not open assembly %s\n", file);
+               exit (1);
+       }
        iinfo = assembly->image_info;
 
        dump_dotnet_iinfo (iinfo);