Wed Jun 16 14:33:22 CEST 2004 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Wed, 16 Jun 2004 11:48:32 +0000 (11:48 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Wed, 16 Jun 2004 11:48:32 +0000 (11:48 -0000)
* Makefile.am: removed monosn from compilation.
* appdomain.c, assembly.c, assembly.h, blob.h, class.c,
debug-helpers.c, debug-mono-symfile.c, domain.c, icall.c,
image.c, image.h, loader.c, marshal.c, metadata-internals.h,
metadata.c, metadata.h, mono-config.c, mono-debug-debugger.c,
mono-debug.c, object.c, opcodes.c, opcodes.h, pedump.c, process.c,
reflection.c, reflection.h, verify.c: more API cleanups and fixes.

svn path=/trunk/mono/; revision=29680

35 files changed:
mono/dis/meta.h
mono/metadata/ChangeLog
mono/metadata/Makefile.am
mono/metadata/appdomain.c
mono/metadata/assembly.c
mono/metadata/assembly.h
mono/metadata/blob.h
mono/metadata/class.c
mono/metadata/debug-helpers.c
mono/metadata/debug-mono-symfile.c
mono/metadata/domain.c
mono/metadata/icall.c
mono/metadata/image.c
mono/metadata/image.h
mono/metadata/loader.c
mono/metadata/marshal.c
mono/metadata/metadata-internals.h [new file with mode: 0644]
mono/metadata/metadata.c
mono/metadata/metadata.h
mono/metadata/mono-config.c
mono/metadata/mono-debug-debugger.c
mono/metadata/mono-debug.c
mono/metadata/object.c
mono/metadata/opcodes.c
mono/metadata/opcodes.h
mono/metadata/pedump.c
mono/metadata/process.c
mono/metadata/reflection.c
mono/metadata/reflection.h
mono/metadata/verify.c
mono/mini/aot.c
mono/mini/driver.c
mono/mini/mini.c
mono/mini/trace.c
mono/monograph/monograph.c

index e1de23c7003552d9ed23834734e1854cf59486a5..869b075905c950fe4702d8cf23eb1a6e23e0e61c 100644 (file)
@@ -3,5 +3,6 @@
 #include <mono/metadata/mono-endian.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/tokentype.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/blob.h>
 
index a2543b0b217340140d20ead866bcc32e522f16b6..f72afa6666d3943ee18ba9be58cbe6eea4f38b7d 100644 (file)
@@ -1,3 +1,14 @@
+
+Wed Jun 16 14:33:22 CEST 2004 Paolo Molaro <lupus@ximian.com>
+
+       * Makefile.am: removed monosn from compilation.
+       * appdomain.c, assembly.c, assembly.h, blob.h, class.c,
+       debug-helpers.c, debug-mono-symfile.c, domain.c, icall.c,
+       image.c, image.h, loader.c, marshal.c, metadata-internals.h,
+       metadata.c, metadata.h, mono-config.c, mono-debug-debugger.c,
+       mono-debug.c, object.c, opcodes.c, opcodes.h, pedump.c, process.c,
+       reflection.c, reflection.h, verify.c: more API cleanups and fixes.
+
 2004-06-15  Jackson Harper  <jackson@ximian.com>
 
        * assembly.c: Make locales lower case when searching the GAC for
index 1a282b31d2ef29f12ce0495f2dc6081bd52956a5..f3d6c350afb744cc751754fcdad21ef140386f94 100644 (file)
@@ -14,8 +14,6 @@ confdir = $(sysconfdir)
 endif
 
 bin_PROGRAMS = pedump
-# monosn is deprecated in favor of sn
-noinst_PROGRAMS = monosn
 
 noinst_LTLIBRARIES = libmetadata.la libmonoruntime.la
 
@@ -95,13 +93,18 @@ libmetadata_la_SOURCES = \
        domain-internals.h      \
        opcodes.c       \
        image.c         \
+       cil-coff.h      \
+       tabledefs.h     \
        metadata.c      \
+       metadata-internals.h    \
        verify.c        \
        mono-endian.c   \
+       mono-endian.h   \
        mono-config.c   \
        mono-config.h   \
        private.h       \
        rawbuffer.c     \
+       rawbuffer.h     \
        loader.c        \
        class.c         \
        mempool.c       \
@@ -117,22 +120,17 @@ libmonoruntimeinclude_HEADERS = \
        mono-debug-debugger.h   \
        debug-mono-symfile.h    \
        threads.h       \
-       environment.h   \
-       locales.h
+       environment.h
 
 libmetadatainclude_HEADERS = \
        assembly.h      \
        opcodes.h       \
        blob.h          \
-       cil-coff.h      \
-       mono-endian.h   \
        image.h         \
        metadata.h      \
        verify.h        \
-       rawbuffer.h     \
        reflection.h    \
        row-indexes.h   \
-       tabledefs.h     \
        tokentype.h     \
        loader.h        \
        class.h         \
@@ -141,8 +139,7 @@ libmetadatainclude_HEADERS = \
        profiler.h      \
        appdomain.h     \
        debug-helpers.h \
-       mempool.h       \
-       rand.h
+       mempool.h
 
 pedump_SOURCES =               \
        pedump.c
@@ -150,16 +147,6 @@ pedump_SOURCES =           \
 pedump_LDADD = libmetadata.la ../io-layer/libwapi.la ../utils/libmonoutils.la \
        $(LIBGC_LIBS) $(GLIB_LIBS) $(GMODULE_LIBS) -lm
 
-
-monosn_LDADD = \
-       libmetadata.la  \
-       ../io-layer/libwapi.la          \
-       ../utils/libmonoutils.la        \
-       $(LIBGC_LIBS)                   \
-       $(GLIB_LIBS)                    \
-       $(GMODULE_LIBS)                 \
-       -lm
-
 BUILT_SOURCES = $(bundle_srcs) libmetadata.la
 
 EXTRA_DIST = make-bundle.pl sample-bundle
index 7ddf4e3c05408739e9fa33881f98dec52635717f..fa5c6cd1ab903fcc2532bb5e32c9f0b4f9562cc4 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <mono/metadata/object.h>
 #include <mono/metadata/domain-internals.h>
+#include "mono/metadata/metadata-internals.h"
 #include <mono/metadata/assembly.h>
 #include <mono/metadata/exception.h>
 #include <mono/metadata/threads.h>
index 972279bbe746c2b3f01ae98a02c8e730cfe75da6..da7302d371a9aa7fd9b18377b627791165c02906 100644 (file)
@@ -6,8 +6,6 @@
  *
  * (C) 2001 Ximian, Inc.  http://www.ximian.com
  *
- * TODO:
- *   Implement big-endian versions of the reading routines.
  */
 #include <config.h>
 #include <stdio.h>
@@ -24,6 +22,7 @@
 #endif
 #include <mono/metadata/loader.h>
 #include <mono/metadata/tabledefs.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/io-layer/io-layer.h>
 #include <mono/utils/mono-uri.h>
 #include <mono/metadata/mono-config.h>
@@ -1063,4 +1062,9 @@ mono_assembly_get_main (void)
        return(main_assembly);
 }
 
+MonoImage*
+mono_assembly_get_image (MonoAssembly *assembly)
+{
+       return assembly->image;
+}
 
index b4aad28684ddb2b73d27cfb4a2512b48d4258579..a7b65dabd5653f9d767bcf3bf8f94aa583134af9 100644 (file)
@@ -25,6 +25,7 @@ G_CONST_RETURN gchar *mono_assembly_getrootdir (void);
 void         mono_assembly_foreach    (GFunc func, gpointer user_data);
 void          mono_assembly_set_main   (MonoAssembly *assembly);
 MonoAssembly *mono_assembly_get_main   (void);
+MonoImage    *mono_assembly_get_image  (MonoAssembly *assembly);
 gboolean      mono_assembly_fill_assembly_name (MonoImage *image, MonoAssemblyName *aname);
 
 /* Installs a function which is called each time a new assembly is loaded. */
index 98ea5693ed61db2613d78a95a9e2300b541334a7..df8c8edcc98e8264cfe780917f19d98a44a3324a 100644 (file)
@@ -5,10 +5,6 @@
 #ifndef _MONO_METADATA_BLOB_H_
 #define _MONO_METADATA_BLOB_H_
 
-#define SIGNATURE_HAS_THIS      0x20
-#define SIGNATURE_EXPLICIT_THIS 0x40
-#define SIGNATURE_VARARG        0x05
-
 /*
  * Encoding for type signatures used in the Metadata
  */
index 8c630fdf3b7c3d1fa8b06319edd230f567f3450c..513c63467ef991093ac03772b93dbff7fb67a286 100644 (file)
@@ -23,6 +23,7 @@
 #include <mono/metadata/assembly.h>
 #include <mono/metadata/cil-coff.h>
 #include <mono/metadata/metadata.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/tokentype.h>
 #include <mono/metadata/class.h>
index 4f129fcfcb2210bf260f1c1a4daf491f647342c2..13a03152292bfcc8a5b9065219850732d9029324 100644 (file)
@@ -285,9 +285,9 @@ mono_method_desc_search_in_image (MonoMethodDesc *desc, MonoImage *image)
                return mono_method_desc_search_in_class (desc, klass);
        }
 
-       tdef = &image->tables [MONO_TABLE_TYPEDEF];
-       methods = &image->tables [MONO_TABLE_METHOD];
-       for (i = 0; i < methods->rows; ++i) {
+       tdef = mono_image_get_table_info (image, MONO_TABLE_TYPEDEF);
+       methods = mono_image_get_table_info (image, MONO_TABLE_METHOD);
+       for (i = 0; i < mono_table_info_get_rows (methods); ++i) {
                guint32 token = mono_metadata_decode_row_col (methods, i, MONO_METHOD_NAME);
                const char *n = mono_metadata_string_heap (image, token);
 
@@ -301,7 +301,7 @@ mono_method_desc_search_in_image (MonoMethodDesc *desc, MonoImage *image)
 }
 
 static const unsigned char*
-dis_one (GString *str, MonoDisHelper *dh, MonoMethod *method, const unsigned char *ip)
+dis_one (GString *str, MonoDisHelper *dh, MonoMethod *method, const unsigned char *ip, const unsigned char *end)
 {
        MonoMethodHeader *header = ((MonoMethodNormal*)method)->header;
        const MonoOpcode *opcode;
@@ -318,7 +318,7 @@ dis_one (GString *str, MonoDisHelper *dh, MonoMethod *method, const unsigned cha
        if (dh->label_format)
                g_string_sprintfa (str, dh->label_format, label);
        
-       i = mono_opcode_value (&ip);
+       i = mono_opcode_value (&ip, end);
        ip++;
        opcode = &mono_opcodes [i];
        g_string_sprintfa (str, "%-10s", mono_opcode_names [i]);
@@ -440,7 +440,8 @@ mono_disasm_code_one (MonoDisHelper *dh, MonoMethod *method, const guchar *ip, c
 
        if (!dh)
                dh = &default_dh;
-       ip = dis_one (res, dh, method, ip);
+       /* set ip + 2 as the end: this is just a debugging method */
+       ip = dis_one (res, dh, method, ip, ip + 2);
        if (endp)
                *endp = ip;
        
@@ -458,7 +459,7 @@ mono_disasm_code (MonoDisHelper *dh, MonoMethod *method, const guchar *ip, const
        if (!dh)
                dh = &default_dh;
        while (ip < end) {
-               ip = dis_one (res, dh, method, ip);
+               ip = dis_one (res, dh, method, ip, end);
        }
        
        result = res->str;
index b5f107f13ef75ff80b1871ebd6e62430d4c0f3db..c13f6394ee9878df786a6e75cd7ee54a782033ff 100644 (file)
@@ -80,18 +80,19 @@ load_symfile (MonoDebugHandle *handle, MonoSymbolFile *symfile)
 static gconstpointer
 open_symfile (MonoImage *image, guint32 *size)
 {
-       MonoTableInfo *table = &image->tables [MONO_TABLE_MANIFESTRESOURCE];
-       guint32 i;
+       MonoTableInfo *table = mono_image_get_table_info (image, MONO_TABLE_MANIFESTRESOURCE);
+       guint32 i, num_rows;
        guint32 cols [MONO_MANIFEST_SIZE];
        const char *val;
 
-       for (i = 0; i < table->rows; ++i) {
+       num_rows = mono_table_info_get_rows (table);
+       for (i = 0; i < num_rows; ++i) {
                mono_metadata_decode_row (table, i, cols, MONO_MANIFEST_SIZE);
                val = mono_metadata_string_heap (image, cols [MONO_MANIFEST_NAME]);
                if (!strcmp (val, "MonoSymbolFile"))
                        break;
        }
-       if (i == table->rows)
+       if (i == num_rows)
                return NULL;
        g_assert (!cols [MONO_MANIFEST_IMPLEMENTATION]);
 
index c4d31ead65c170f63200283d6b2d624969ed458e..ccb57ce5c5c22002671dc8325c591847c2e5a2a5 100644 (file)
@@ -283,7 +283,7 @@ mono_init (const char *filename)
                
                exit (1);
        }
-       mono_defaults.corlib = ass->image;
+       mono_defaults.corlib = mono_assembly_get_image (ass);
 
        mono_defaults.object_class = mono_class_from_name (
                 mono_defaults.corlib, "System", "Object");
index e5901140734e925e5fdac252be43b7604ae69546..9d2d8aa9b305b4db65944585a5781049c75e5be4 100644 (file)
@@ -34,6 +34,7 @@
 #include <mono/metadata/tokentype.h>
 #include <mono/metadata/unicode.h>
 #include <mono/metadata/domain-internals.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/marshal.h>
 #include <mono/metadata/gc-internal.h>
 #include <mono/metadata/rand.h>
index 825e2a7d9b1def899e9e6a29bf2b6b28b264be30..1d3ed10052516c1e5fcf5d094044a4d7beeafa38 100644 (file)
@@ -22,6 +22,7 @@
 #include "private.h"
 #include "tabledefs.h"
 #include "tokentype.h"
+#include "metadata-internals.h"
 #include <mono/io-layer/io-layer.h>
 
 #define INVALID_ADDRESS 0xffffffff
@@ -1286,3 +1287,55 @@ mono_image_get_public_key (MonoImage *image, guint32 *size)
        return pubkey;
 }
 
+const char*
+mono_image_get_name (MonoImage *image)
+{
+       return image->name;
+}
+
+const char*
+mono_image_get_filename (MonoImage *image)
+{
+       return image->assembly_name;
+}
+
+const MonoTableInfo*
+mono_image_get_table_info (MonoImage *image, int table_id)
+{
+       if (table_id < 0 || table_id >= 64)
+               return NULL;
+       return &image->tables [table_id];
+}
+
+int
+mono_image_get_table_rows (MonoImage *image, int table_id)
+{
+       if (table_id < 0 || table_id >= 64)
+               return 0;
+       return image->tables [table_id].rows;
+}
+
+int
+mono_table_info_get_rows (MonoTableInfo *table)
+{
+       return table->rows;
+}
+
+MonoAssembly* 
+mono_image_get_assembly (MonoImage *image)
+{
+       return image->assembly;
+}
+
+gboolean
+mono_image_is_dynamic (MonoImage *image)
+{
+       return image->dynamic;
+}
+
+char*
+mono_image_rva_map (MonoImage *image, guint32 rva)
+{
+       return mono_cli_rva_map (image->image_info, rva);
+}
+
index a207d9697d042c06e096801395afdb09d053cd6c..841dcc4e854408992c63d0cd91e2bb5cb87e85cc 100644 (file)
@@ -6,6 +6,8 @@
 #include <gmodule.h>
 
 typedef struct _MonoImage MonoImage;
+typedef struct _MonoAssembly MonoAssembly;
+typedef struct _MonoTableInfo MonoTableInfo;
 
 typedef struct {
        const char *name;
@@ -19,146 +21,6 @@ typedef struct {
        guint16 major, minor, build, revision;
 } MonoAssemblyName;
 
-typedef struct {
-       int   ref_count;
-       char *basedir;
-       gboolean in_gac;
-       MonoAssemblyName aname;
-       GModule *aot_module;
-       MonoImage *image;
-       /* Load files here */
-       gboolean dynamic;
-} MonoAssembly;
-
-typedef struct {
-       const char* data;
-       guint32  size;
-} MonoStreamHeader;
-
-typedef struct {
-       guint32   rows, row_size;
-       const char *base;
-
-       /*
-        * Tables contain up to 9 columns and the possible sizes of the
-        * fields in the documentation are 1, 2 and 4 bytes.  So we
-        * can encode in 2 bits the size.
-        *
-        * A 32 bit value can encode the resulting size
-        *
-        * The top eight bits encode the number of columns in the table.
-        * we only need 4, but 8 is aligned no shift required. 
-        */
-       guint32   size_bitfield;
-} MonoTableInfo;
-
-struct _MonoImage {
-       int   ref_count;
-       FILE *f;
-       /* if f is NULL the image was loaded from raw data */
-       char *raw_data;
-       guint32 raw_data_len;
-       gboolean raw_data_allocated;
-       char *name;
-       const char *assembly_name;
-       const char *module_name;
-       const char *version;
-       char *guid;
-       void *image_info;
-
-       char                *raw_metadata;
-                           
-       gboolean             idx_string_wide, idx_guid_wide, idx_blob_wide;
-                           
-       MonoStreamHeader     heap_strings;
-       MonoStreamHeader     heap_us;
-       MonoStreamHeader     heap_blob;
-       MonoStreamHeader     heap_guid;
-       MonoStreamHeader     heap_tables;
-                           
-       const char          *tables_base;
-
-       MonoTableInfo        tables [64];
-
-       /*
-        * references is initialized only by using the mono_assembly_open
-        * function, and not by using the lowlevel mono_image_open.
-        *
-        * It is NULL terminated.
-        */
-       MonoAssembly **references;
-
-       MonoImage **modules;
-
-       MonoImage **files;
-
-       /*
-        * The Assembly this image was loaded from.
-        */
-       MonoAssembly *assembly;
-
-       /*
-        * Indexed by method tokens and typedef tokens.
-        */
-       GHashTable *method_cache;
-       GHashTable *class_cache;
-       /*
-        * Indexed by fielddef and memberref tokens
-        */
-       GHashTable *field_cache;
-
-       /* indexed by typespec tokens. */
-       GHashTable *typespec_cache;
-       /* indexed by token */
-       GHashTable *memberref_signatures;
-
-       /*
-        * Indexed by MonoGenericInst.
-        */
-       GHashTable *generic_inst_cache;
-
-       /*
-        * Indexes namespaces to hash tables that map class name to typedef token.
-        */
-       GHashTable *name_cache;
-
-       /*
-        * Indexed by ((rank << 24) | (typedef & 0xffffff)), which limits us to a
-        * maximal rank of 255
-        */
-       GHashTable *array_cache;
-
-       /*
-        * indexed by MonoMethodSignature 
-        */
-       GHashTable *delegate_begin_invoke_cache;
-       GHashTable *delegate_end_invoke_cache;
-       GHashTable *delegate_invoke_cache;
-
-       /*
-        * indexed by MonoMethod pointers 
-        */
-       GHashTable *runtime_invoke_cache;
-       GHashTable *managed_wrapper_cache;
-       GHashTable *native_wrapper_cache;
-       GHashTable *remoting_invoke_cache;
-       GHashTable *synchronized_cache;
-
-       void *reflection_info;
-
-       /*
-        * user_info is a public field and is not touched by the
-        * metadata engine
-        */
-       void *user_info;
-
-       /* dll map entries */
-       GHashTable *dll_map;
-
-       /* Whenever this is a dynamically emitted module */
-       gboolean dynamic;
-};
-
 typedef enum {
        MONO_IMAGE_OK,
        MONO_IMAGE_ERROR_ERRNO,
@@ -188,6 +50,16 @@ guint32       mono_image_get_entry_point    (MonoImage *image);
 const char   *mono_image_get_resource       (MonoImage *image, guint32 offset, guint32 *size);
 MonoImage*    mono_image_load_file_for_image (MonoImage *image, int fileidx);
 
+const char*   mono_image_get_name       (MonoImage *image);
+const char*   mono_image_get_filename   (MonoImage *image);
+MonoAssembly* mono_image_get_assembly   (MonoImage *image);
+gboolean      mono_image_is_dynamic     (MonoImage *image);
+char*         mono_image_rva_map        (MonoImage *image, guint32 rva);
+
+const MonoTableInfo *mono_image_get_table_info (MonoImage *image, int table_id);
+int                  mono_image_get_table_rows (MonoImage *image, int table_id);
+int                  mono_table_info_get_rows  (MonoTableInfo *table);
+
 /* This actually returns a MonoPEResourceDataEntry *, but declaring it
  * causes an include file loop.
  */
index 199cb15a1a892229b9ca5122d0d6851a3aa852ec..72c54079bb08efe137269bd8e34f259fb001b648 100644 (file)
@@ -28,6 +28,7 @@
 #include <mono/metadata/tokentype.h>
 #include <mono/metadata/cil-coff.h>
 #include <mono/metadata/tabledefs.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/loader.h>
 #include <mono/metadata/class.h>
 #include <mono/metadata/debug-helpers.h>
index 883d7d66fabb59265847ca90a45b1a9fe64f05ed..b6dcbfc5ff5420351a608940bb1cbccd50e9c0e1 100644 (file)
@@ -19,6 +19,7 @@
 #include "mono/metadata/threadpool.h"
 #include "mono/metadata/threads.h"
 #include "mono/metadata/monitor.h"
+#include "mono/metadata/metadata-internals.h"
 #include <string.h>
 #include <errno.h>
 
diff --git a/mono/metadata/metadata-internals.h b/mono/metadata/metadata-internals.h
new file mode 100644 (file)
index 0000000..a0bad55
--- /dev/null
@@ -0,0 +1,227 @@
+
+#ifndef __MONO_METADATA_INTERNALS_H__
+#define __MONO_METADATA_INTERNALS_H__
+
+#include "mono/metadata/image.h"
+#include "mono/utils/mono-hash.h"
+
+struct _MonoAssembly {
+       int   ref_count;
+       char *basedir;
+       gboolean in_gac;
+       MonoAssemblyName aname;
+       GModule *aot_module;
+       MonoImage *image;
+       /* Load files here */
+       gboolean dynamic;
+};
+
+typedef struct {
+       const char* data;
+       guint32  size;
+} MonoStreamHeader;
+
+struct _MonoTableInfo {
+       guint32   rows, row_size;
+       const char *base;
+
+       /*
+        * Tables contain up to 9 columns and the possible sizes of the
+        * fields in the documentation are 1, 2 and 4 bytes.  So we
+        * can encode in 2 bits the size.
+        *
+        * A 32 bit value can encode the resulting size
+        *
+        * The top eight bits encode the number of columns in the table.
+        * we only need 4, but 8 is aligned no shift required. 
+        */
+       guint32   size_bitfield;
+};
+
+struct _MonoImage {
+       int   ref_count;
+       FILE *f;
+       /* if f is NULL the image was loaded from raw data */
+       char *raw_data;
+       guint32 raw_data_len;
+       gboolean raw_data_allocated;
+       char *name;
+       const char *assembly_name;
+       const char *module_name;
+       const char *version;
+       char *guid;
+       void *image_info;
+
+       char                *raw_metadata;
+                           
+       gboolean             idx_string_wide, idx_guid_wide, idx_blob_wide;
+                           
+       MonoStreamHeader     heap_strings;
+       MonoStreamHeader     heap_us;
+       MonoStreamHeader     heap_blob;
+       MonoStreamHeader     heap_guid;
+       MonoStreamHeader     heap_tables;
+                           
+       const char          *tables_base;
+
+       MonoTableInfo        tables [64];
+
+       /*
+        * references is initialized only by using the mono_assembly_open
+        * function, and not by using the lowlevel mono_image_open.
+        *
+        * It is NULL terminated.
+        */
+       MonoAssembly **references;
+
+       MonoImage **modules;
+
+       MonoImage **files;
+
+       /*
+        * The Assembly this image was loaded from.
+        */
+       MonoAssembly *assembly;
+
+       /*
+        * Indexed by method tokens and typedef tokens.
+        */
+       GHashTable *method_cache;
+       GHashTable *class_cache;
+       /*
+        * Indexed by fielddef and memberref tokens
+        */
+       GHashTable *field_cache;
+
+       /* indexed by typespec tokens. */
+       GHashTable *typespec_cache;
+       /* indexed by token */
+       GHashTable *memberref_signatures;
+
+       /*
+        * Indexed by MonoGenericInst.
+        */
+       GHashTable *generic_inst_cache;
+
+       /*
+        * Indexes namespaces to hash tables that map class name to typedef token.
+        */
+       GHashTable *name_cache;
+
+       /*
+        * Indexed by ((rank << 24) | (typedef & 0xffffff)), which limits us to a
+        * maximal rank of 255
+        */
+       GHashTable *array_cache;
+
+       /*
+        * indexed by MonoMethodSignature 
+        */
+       GHashTable *delegate_begin_invoke_cache;
+       GHashTable *delegate_end_invoke_cache;
+       GHashTable *delegate_invoke_cache;
+
+       /*
+        * indexed by MonoMethod pointers 
+        */
+       GHashTable *runtime_invoke_cache;
+       GHashTable *managed_wrapper_cache;
+       GHashTable *native_wrapper_cache;
+       GHashTable *remoting_invoke_cache;
+       GHashTable *synchronized_cache;
+
+       void *reflection_info;
+
+       /*
+        * user_info is a public field and is not touched by the
+        * metadata engine
+        */
+       void *user_info;
+
+       /* dll map entries */
+       GHashTable *dll_map;
+
+       /* Whenever this is a dynamically emitted module */
+       gboolean dynamic;
+};
+
+enum {
+       MONO_SECTION_TEXT,
+       MONO_SECTION_RSRC,
+       MONO_SECTION_RELOC,
+       MONO_SECTION_MAX
+};
+
+typedef struct {
+       GHashTable *hash;
+       char *data;
+       guint32 alloc_size; /* malloced bytes */
+       guint32 index;
+       guint32 offset; /* from start of metadata */
+} MonoDynamicStream;
+
+typedef struct {
+       guint32 alloc_rows;
+       guint32 rows;
+       guint32 row_size; /*  calculated later with column_sizes */
+       guint32 columns;
+       guint32 column_sizes [9]; 
+       guint32 *values; /* rows * columns */
+       guint32 next_idx;
+} MonoDynamicTable;
+
+struct _MonoDynamicAssembly {
+       MonoAssembly assembly;
+       gboolean run;
+       gboolean save;
+       char *strong_name;
+       guint32 strong_name_size;
+};
+
+struct _MonoDynamicImage {
+       MonoImage image;
+       guint32 meta_size;
+       guint32 text_rva;
+       guint32 metadata_rva;
+       guint32 image_base;
+       guint32 cli_header_offset;
+       guint32 iat_offset;
+       guint32 idt_offset;
+       guint32 ilt_offset;
+       guint32 imp_names_offset;
+       struct {
+               guint32 rva;
+               guint32 size;
+               guint32 offset;
+               guint32 attrs;
+       } sections [MONO_SECTION_MAX];
+       GHashTable *typespec;
+       GHashTable *typeref;
+       GHashTable *handleref;
+       MonoGHashTable *tokens;
+       MonoGHashTable *blob_cache;
+       GList *array_methods;
+       MonoGHashTable *token_fixups;
+       MonoGHashTable *method_to_table_idx;
+       MonoGHashTable *field_to_table_idx;
+       MonoGHashTable *method_aux_hash;
+       gboolean run;
+       gboolean save;
+       char *strong_name;
+       guint32 strong_name_size;
+       char *win32_res;
+       guint32 win32_res_size;
+       MonoDynamicStream pefile;
+       MonoDynamicStream sheap;
+       MonoDynamicStream code; /* used to store method headers and bytecode */
+       MonoDynamicStream resources; /* managed embedded resources */
+       MonoDynamicStream us;
+       MonoDynamicStream blob;
+       MonoDynamicStream tstream;
+       MonoDynamicStream guid;
+       MonoDynamicTable tables [64];
+};
+
+
+#endif /* __MONO_METADATA_INTERNALS_H__ */
+
index a8ccb2a06e411f2c5aa00c445c4144cdc74cae19..21bd6433974b2a0cdf1b7cc33d4afabf71f9f372 100644 (file)
@@ -17,6 +17,7 @@
 #include "mono-endian.h"
 #include "cil-coff.h"
 #include "tokentype.h"
+#include "metadata-internals.h"
 #include "private.h"
 #include "class.h"
 
index 0a7a5fcb24b13a66d52f1b4a8e8c96244a7ad0d3..3be2ef96df9a959bfd72ed738682986898d9a5a7 100644 (file)
@@ -226,7 +226,7 @@ guint32     mono_metadata_properties_from_typedef (MonoImage *meta, guint32 tabl
 guint32     mono_metadata_methods_from_property   (MonoImage *meta, guint32 table_index, guint *end);
 guint32     mono_metadata_packing_from_typedef    (MonoImage *meta, guint32 table_index, guint32 *packing, guint32 *size);
 const char* mono_metadata_get_marshal_info        (MonoImage *meta, guint32 idx, gboolean is_field);
-guint32     mono_metadata_custom_attrs_from_index (MonoImage *meta, guint32 index);
+guint32     mono_metadata_custom_attrs_from_index (MonoImage *meta, guint32 cattr_index);
 
 MonoMarshalSpec *mono_metadata_parse_marshal_spec (MonoImage *image, const char *ptr);
 
index 8ed58ecc98adcccedba949c67a164ccffc5b0208..5c4ed3dadc82de99588bd8093d9de29fcd130ab0 100644 (file)
@@ -256,7 +256,7 @@ get_assembly_filename (MonoImage *image, int state)
 {
        switch (state) {
        case 0:
-               return g_strdup (image->assembly_name);
+               return g_strdup (mono_image_get_name (image));
        default:
                return NULL;
        }
@@ -271,11 +271,11 @@ mono_config_for_assembly (MonoImage *assembly)
        const char *home;
        
        state.assembly = assembly;
-       cfg_name = g_strdup_printf ("%s.config", assembly->name);
+       cfg_name = g_strdup_printf ("%s.config", mono_image_get_filename (assembly));
        mono_config_parse_file_with_context (&state, cfg_name);
        g_free (cfg_name);
 
-       cfg_name = g_strdup_printf ("%s.config", assembly->assembly_name);
+       cfg_name = g_strdup_printf ("%s.config", mono_image_get_name (assembly));
 
        home = g_get_home_dir ();
 
index 11a6a184b1f37eed40896eddf08c7aa43962e34c..dbafc9816a321d760e0267072f23a3f60f3c798e 100644 (file)
@@ -967,7 +967,7 @@ ves_icall_MonoDebugger_GetMethod (MonoReflectionAssembly *assembly, guint32 toke
 {
        MonoMethod *method;
 
-       method = mono_get_method (assembly->assembly->image, token, NULL);
+       method = mono_get_method (mono_assembly_get_image (assembly->assembly), token, NULL);
 
        return mono_method_get_object (mono_domain_get (), method, NULL);
 }
@@ -983,7 +983,7 @@ ves_icall_MonoDebugger_GetType (MonoReflectionAssembly *assembly, guint32 token)
 {
        MonoClass *klass;
 
-       klass = mono_class_get (assembly->assembly->image, token);
+       klass = mono_class_get (mono_assembly_get_image (assembly->assembly), token);
        if (!klass) {
                g_warning (G_STRLOC ": %x", token);
                return NULL;
@@ -1005,7 +1005,7 @@ ves_icall_MonoDebugger_GetLocalTypeFromSignature (MonoReflectionAssembly *assemb
        MONO_CHECK_ARG_NULL (signature);
 
        domain = mono_domain_get();
-       image = assembly->assembly->image;
+       image = mono_assembly_get_image (assembly->assembly);
 
        ptr = mono_array_addr (signature, char, 0);
        g_assert (*ptr++ == 0x07);
index 8cf61e5719d668a249d97867fafb92396d114695..a6cb66da7a83cdc9a11aea99b00d4156ff1ee80e 100644 (file)
@@ -64,8 +64,11 @@ mono_debug_init (MonoDomain *domain, MonoDebugFormat format)
        mono_install_assembly_load_hook (mono_debug_add_assembly, NULL);
 
        mono_debug_open_image (mono_defaults.corlib);
+       /*
+        * FIXME: Ugh: what is this code supposed to do? corlib has no references.
        for (ass = mono_defaults.corlib->references; ass && *ass; ass++)
                mono_debug_open_image ((*ass)->image);
+       */
 }
 
 /*
@@ -78,7 +81,7 @@ mono_debug_init_2 (MonoAssembly *assembly)
 {
        MonoDebugHandle *handle;
 
-       mono_debug_open_image (assembly->image);
+       mono_debug_open_image (mono_assembly_get_image (assembly));
 
        handle = _mono_debug_get_image (mono_defaults.corlib);
        g_assert (handle);
@@ -111,13 +114,13 @@ mono_debug_open_image (MonoImage *image)
 
        handle = g_new0 (MonoDebugHandle, 1);
        handle->image = image;
-       handle->image->ref_count++;
-       handle->image_file = g_strdup (image->name);
+       mono_image_addref (image);
+       handle->image_file = g_strdup (mono_image_get_filename (image));
        handle->_priv = g_new0 (MonoDebugHandlePriv, 1);
 
        g_hash_table_insert (mono_debug_handles, image, handle);
 
-       if (image->assembly->dynamic)
+       if (mono_image_is_dynamic (image))
                return handle;
 
        handle->symfile = mono_debug_open_mono_symbol_file (handle, in_the_mono_debugger);
@@ -135,7 +138,9 @@ mono_debug_close_image (MonoDebugHandle *handle)
 {
        if (handle->symfile)
                mono_debug_close_mono_symbol_file (handle->symfile);
-       handle->image->ref_count--;
+       /* decrease the refcount added with mono_image_addref () */
+       mono_image_close (handle->image);
+       /* FIXME: should also free handle->image_file? */
        g_free (handle->_priv);
        g_free (handle);
 }
@@ -144,7 +149,7 @@ static void
 mono_debug_add_assembly (MonoAssembly *assembly, gpointer user_data)
 {
        mono_debugger_lock ();
-       mono_debug_open_image (assembly->image);
+       mono_debug_open_image (mono_assembly_get_image (assembly));
        mono_debugger_unlock ();
 }
 
index aa32f23815b4188f494cc301d7c42a4833f86142..f34fdf59b391519d15a69c166a288846a3261ca8 100644 (file)
@@ -20,6 +20,7 @@
 #include <mono/metadata/gc-internal.h>
 #include <mono/metadata/exception.h>
 #include <mono/metadata/domain-internals.h>
+#include "mono/metadata/metadata-internals.h"
 #include <mono/metadata/assembly.h>
 #include <mono/metadata/threadpool.h>
 #include <mono/metadata/marshal.h>
index cbf00514f8d613035a9925fef6f348d1f030f939..b9b3b540f829d1577325b257e17fee4ce31df831 100644 (file)
@@ -32,20 +32,27 @@ mono_opcode_names [MONO_CEE_LAST + 1] = {
 };
 
 MonoOpcodeEnum
-mono_opcode_value (const guint8 **ip)
+mono_opcode_value (const guint8 **ip, const guint8 *end)
 {
        MonoOpcodeEnum res;
-
-       if (**ip == 0xfe) {
-               ++*ip;
-               res = **ip + MONO_PREFIX1_OFFSET;
-       } else if (**ip == MONO_CUSTOM_PREFIX) {
-               ++*ip;
-               res = **ip + MONO_CUSTOM_PREFIX_OFFSET;
+       const guint8 *p = *ip;
+
+       if (p >= end)
+               return -1;
+       if (*p == 0xfe) {
+               ++p;
+               if (p >= end)
+                       return -1;
+               res = *p + MONO_PREFIX1_OFFSET;
+       } else if (*p == MONO_CUSTOM_PREFIX) {
+               ++p;
+               if (p >= end)
+                       return -1;
+               res = *p + MONO_CUSTOM_PREFIX_OFFSET;
        } else {
-               res = **ip;
+               res = *p;
        }
-       
+       *ip = p;
        return res;
 }
 
index dec47adc7020e9089c66fdd5bb51f9f248dc8a5b..f83cd614450771e5f0f0b4381a88d8e283d03034 100644 (file)
@@ -64,6 +64,6 @@ extern const MonoOpcode mono_opcodes [];
 extern const char* const mono_opcode_names [];
 
 MonoOpcodeEnum
-mono_opcode_value (const guint8 **ip);
+mono_opcode_value (const guint8 **ip, const guint8 *end);
 
 #endif /* __MONO_METADATA_OPCODES_H__ */
index 5a01e8f733f3da74920c7cf630f480a8c61d35a4..c288a990dab89a9b451f325e4bcdbfad683ea5af 100644 (file)
@@ -21,6 +21,7 @@
 #include <mono/metadata/tokentype.h>
 #include <mono/metadata/appdomain.h>
 #include <mono/metadata/assembly.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/rawbuffer.h>
 #include "mono/utils/mono-digest.h"
 
index b7f94a97437640996400cb2ef4e94121243af3c6..66b48f7e148ca0646a2a4a02fb182e1d4506b435 100644 (file)
@@ -513,7 +513,7 @@ static void process_get_fileversion (MonoObject *filever, MonoImage *image)
                return;
        }
        
-       data=mono_cli_rva_map (image->image_info,
+       data=mono_image_rva_map (image,
                               version_info->rde_data_offset);
        if(data==NULL) {
                return;
@@ -611,6 +611,7 @@ static void process_add_module (GPtrArray *modules, MonoAssembly *ass)
        MonoObject *item, *filever;
        MonoDomain *domain=mono_domain_get ();
        gchar *modulename;
+       const char* filename;
        
        /* Build a System.Diagnostics.ProcessModule with the data.
         * Leave BaseAddress and EntryPointAddress set to NULL,
@@ -632,13 +633,14 @@ static void process_add_module (GPtrArray *modules, MonoAssembly *ass)
        g_message (G_GNUC_PRETTY_FUNCTION ": recording assembly: FileName [%s] FileVersionInfo [%d.%d.%d.%d], ModuleName [%s]", ass->image->name, ass->aname.major, ass->aname.minor, ass->aname.build, ass->aname.revision, ass->image->name);
 #endif
 
-       process_get_fileversion (filever, ass->image);
+       process_get_fileversion (filever, mono_assembly_get_image (ass));
 
-       process_set_field_string_utf8 (filever, "filename", ass->image->name);
-       process_set_field_string_utf8 (item, "filename", ass->image->name);
+       filename = mono_image_get_filename (mono_assembly_get_image (ass));
+       process_set_field_string_utf8 (filever, "filename", filename);
+       process_set_field_string_utf8 (item, "filename", filename);
        process_set_field_object (item, "version_info", filever);
 
-       modulename=g_path_get_basename (ass->image->name);
+       modulename=g_path_get_basename (filename);
        process_set_field_string_utf8 (item, "modulename", modulename);
        g_free (modulename);
 
@@ -717,7 +719,7 @@ void ves_icall_System_Diagnostics_FileVersionInfo_GetVersionInfo_internal (MonoO
        }
        
        process_get_fileversion (this, image);
-       process_set_field_string_utf8 (this, "filename", image->name);
+       process_set_field_string_utf8 (this, "filename", mono_image_get_filename (image));
        
        mono_image_close (image);
 }
index 145bc35ee4953dbd60542cd567cdb73f9e0ec1d1..3c04218168055e57573080d16767b9dfb79a158a 100644 (file)
@@ -11,6 +11,7 @@
 #include "mono/utils/mono-digest.h"
 #include "mono/metadata/reflection.h"
 #include "mono/metadata/tabledefs.h"
+#include "mono/metadata/metadata-internals.h"
 #include "mono/metadata/tokentype.h"
 #include "mono/metadata/domain-internals.h"
 #include "mono/metadata/opcodes.h"
index c71afaa98dc8fdd549d2b7a656408f24e6bb2adf..0fe37d4af9d644e4c262bf39231392e635868eac 100644 (file)
@@ -7,24 +7,6 @@
 #include <mono/metadata/object.h>
 #include <mono/utils/mono-hash.h>
 
-typedef struct {
-       GHashTable *hash;
-       char *data;
-       guint32 alloc_size; /* malloced bytes */
-       guint32 index;
-       guint32 offset; /* from start of metadata */
-} MonoDynamicStream;
-
-typedef struct {
-       guint32 alloc_rows;
-       guint32 rows;
-       guint32 row_size; /*  calculated later with column_sizes */
-       guint32 columns;
-       guint32 column_sizes [9]; 
-       guint32 *values; /* rows * columns */
-       guint32 next_idx;
-} MonoDynamicTable;
-
 /*
  * The followinbg structure must match the C# implementation in our corlib.
  */
@@ -250,64 +232,8 @@ typedef struct {
        guint32 call_conv;
 } MonoReflectionArrayMethod;
 
-enum {
-       MONO_SECTION_TEXT,
-       MONO_SECTION_RSRC,
-       MONO_SECTION_RELOC,
-       MONO_SECTION_MAX
-};
-
-typedef struct {
-       MonoAssembly assembly;
-       gboolean run;
-       gboolean save;
-       char *strong_name;
-       guint32 strong_name_size;
-} MonoDynamicAssembly;
-
-typedef struct {
-       MonoImage image;
-       guint32 meta_size;
-       guint32 text_rva;
-       guint32 metadata_rva;
-       guint32 image_base;
-       guint32 cli_header_offset;
-       guint32 iat_offset;
-       guint32 idt_offset;
-       guint32 ilt_offset;
-       guint32 imp_names_offset;
-       struct {
-               guint32 rva;
-               guint32 size;
-               guint32 offset;
-               guint32 attrs;
-       } sections [MONO_SECTION_MAX];
-       GHashTable *typespec;
-       GHashTable *typeref;
-       GHashTable *handleref;
-       MonoGHashTable *tokens;
-       MonoGHashTable *blob_cache;
-       GList *array_methods;
-       MonoGHashTable *token_fixups;
-       MonoGHashTable *method_to_table_idx;
-       MonoGHashTable *field_to_table_idx;
-       MonoGHashTable *method_aux_hash;
-       gboolean run;
-       gboolean save;
-       char *strong_name;
-       guint32 strong_name_size;
-       char *win32_res;
-       guint32 win32_res_size;
-       MonoDynamicStream pefile;
-       MonoDynamicStream sheap;
-       MonoDynamicStream code; /* used to store method headers and bytecode */
-       MonoDynamicStream resources; /* managed embedded resources */
-       MonoDynamicStream us;
-       MonoDynamicStream blob;
-       MonoDynamicStream tstream;
-       MonoDynamicStream guid;
-       MonoDynamicTable tables [64];
-} MonoDynamicImage;
+typedef struct _MonoDynamicAssembly MonoDynamicAssembly;
+typedef struct _MonoDynamicImage MonoDynamicImage;
 
 typedef struct {
        MonoArray *data;
index 8133551f44f9247799fbf566e0e5fc25e5063279..ebafe2e0b38dd0fff51a53b1aecf423a77387e70 100644 (file)
@@ -7,6 +7,7 @@
 #include <mono/metadata/debug-helpers.h>
 #include <mono/metadata/mono-endian.h>
 #include <mono/metadata/metadata.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/tokentype.h>
 #include <string.h>
 #include <signal.h>
index 87113a12f51c2667d77ea2cd81068a9df05eac6e..8d97893486ade3d5e0d9f41fc668dd78ab295fad 100644 (file)
@@ -30,6 +30,7 @@
 #include <mono/metadata/appdomain.h>
 #include <mono/metadata/debug-helpers.h>
 #include <mono/metadata/assembly.h>
+#include <mono/metadata/metadata-internals.h>
 #include <mono/metadata/marshal.h>
 #include <mono/os/gc_wrapper.h>
 
index ca2beb1ab1e9446e9df5909de666ff91a092031a..4e0ea2f90c279794eeb81c1b31cb66d2d14da0f1 100644 (file)
@@ -270,7 +270,7 @@ mini_regression (MonoImage *image, int verbose, int *total_run) {
        }
 
        /* load the metadata */
-       for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+       for (i = 0; i < mono_image_get_table_rows (image, MONO_TABLE_METHOD); ++i) {
                        method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                mono_class_init (method->klass);
 
@@ -291,13 +291,13 @@ mini_regression (MonoImage *image, int verbose, int *total_run) {
                opt_flags = opt_sets [opt];
                mono_set_defaults (verbose, opt_flags);
                n = opt_descr (opt_flags);
-               g_print ("Test run: image=%s, opts=%s\n", image->name, n);
+               g_print ("Test run: image=%s, opts=%s\n", mono_image_get_filename (image), n);
                g_free (n);
                cfailed = failed = run = code_size = 0;
                comp_time = elapsed = 0.0;
 
                /* fixme: ugly hack - delete all previously compiled methods */
-               for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+               for (i = 0; i < mono_image_get_table_rows (image, MONO_TABLE_METHOD); ++i) {
                        method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                        method->info = NULL;
                }
@@ -305,7 +305,7 @@ mini_regression (MonoImage *image, int verbose, int *total_run) {
                g_timer_start (timer);
                if (mini_stats_fd)
                        fprintf (mini_stats_fd, "[");
-               for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+               for (i = 0; i < mono_image_get_table_rows (image, MONO_TABLE_METHOD); ++i) {
                        method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                        if (strncmp (method->name, "test_", 5) == 0) {
                                expected = atoi (method->name + 5);
@@ -376,7 +376,7 @@ mini_regression_list (int verbose, int count, char *images [])
                        g_warning ("failed to load assembly: %s", images [i]);
                        continue;
                }
-               total += mini_regression (ass->image, verbose, &run);
+               total += mini_regression (mono_assembly_get_image (ass), verbose, &run);
                total_run += run;
                mono_assembly_close (ass);
        }
@@ -403,11 +403,11 @@ compile_all_methods_thread_main (CompileAllThreadArgs *args)
 {
        MonoAssembly *ass = args->ass;
        int verbose = args->verbose;
-       MonoImage *image = ass->image;
+       MonoImage *image = mono_assembly_get_image (ass);
        MonoMethod *method;
        int i, count = 0;
 
-       for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+       for (i = 0; i < mono_image_get_table_rows (image, MONO_TABLE_METHOD); ++i) {
                method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                if (method->flags & METHOD_ATTRIBUTE_ABSTRACT)
                        continue;
@@ -453,12 +453,12 @@ compile_all_methods (MonoAssembly *ass, int verbose)
 int 
 mono_jit_exec (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[])
 {
-       MonoImage *image = assembly->image;
+       MonoImage *image = mono_assembly_get_image (assembly);
        MonoMethod *method;
        guint32 entry = mono_image_get_entry_point (image);
 
        if (!entry) {
-               g_print ("Assembly '%s' doesn't have an entry point.\n", image->name);
+               g_print ("Assembly '%s' doesn't have an entry point.\n", mono_image_get_filename (image));
                /* FIXME: remove this silly requirement. */
                mono_environment_exitcode_set (1);
                return 1;
@@ -635,7 +635,7 @@ mono_main (int argc, char* argv[])
                                const guchar *clibpath;
                                mono_init ("mono");
                                cerror = mono_check_corlib_version ();
-                               clibpath = mono_defaults.corlib? mono_defaults.corlib->name: "unknown";
+                               clibpath = mono_defaults.corlib? mono_image_get_filename (mono_defaults.corlib): "unknown";
                                if (cerror) {
                                        g_print ("The currently installed mscorlib doesn't match this runtime version.\n");
                                        g_print ("The error is: %s\n", cerror);
@@ -815,7 +815,7 @@ mono_main (int argc, char* argv[])
                mini_cleanup (domain);
                return 3;
        }
-       method = mono_method_desc_search_in_image (desc, assembly->image);
+       method = mono_method_desc_search_in_image (desc, mono_assembly_get_image (assembly));
        if (!method) {
                g_print ("Cannot find method %s\n", mname);
                mini_cleanup (domain);
index f8d35f943a9057d37a7247db9ab07f37cdf5859c..deb9ee754471e0a008dc5fcb7ba0cfa2e38c4b2d 100644 (file)
@@ -2527,7 +2527,9 @@ get_basic_blocks (MonoCompile *cfg, GHashTable *bbhash, MonoMethodHeader* header
 
        while (ip < end) {
                cli_addr = ip - start;
-               i = mono_opcode_value ((const guint8 **)&ip);
+               i = mono_opcode_value ((const guint8 **)&ip, end);
+               if (i < 0)
+                       goto unverified;
                opcode = &mono_opcodes [i];
                switch (opcode->argument) {
                case MonoInlineNone:
@@ -8534,14 +8536,14 @@ mono_set_defaults (int verbose_level, guint32 opts)
 static void
 mono_precompile_assembly (MonoAssembly *ass, void *user_data)
 {
-       MonoImage *image = ass->image;
+       MonoImage *image = mono_assembly_get_image (ass);
        MonoMethod *method, *invoke;
        int i, count = 0;
 
        if (mini_verbose > 0)
-               printf ("PRECOMPILE: %s.\n", ass->image->name);
+               printf ("PRECOMPILE: %s.\n", mono_image_get_filename (image));
 
-       for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+       for (i = 0; i < mono_image_get_table_rows (image, MONO_TABLE_METHOD); ++i) {
                method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                if (method->flags & METHOD_ATTRIBUTE_ABSTRACT)
                        continue;
index 1b2e76ed234ae37b4ae8a2465e63141ffda99e9d..49c9d86d636b3c80e2dfd6d6b79d912375908b08 100644 (file)
@@ -14,6 +14,7 @@
 #include <string.h>
 #include "mini.h"
 #include <mono/metadata/debug-helpers.h>
+#include <mono/metadata/assembly.h>
 #include "trace.h"
 
 static MonoTraceSpec trace_spec;
@@ -32,7 +33,7 @@ mono_trace_eval (MonoMethod *method)
                case MONO_TRACEOP_ALL:
                        inc = 1; break;
                case MONO_TRACEOP_PROGRAM:
-                       if (method->klass->image == trace_spec.assembly->image)
+                       if (method->klass->image == mono_assembly_get_image (trace_spec.assembly))
                                inc = 1; break;
                case MONO_TRACEOP_METHOD:
                        if (mono_method_desc_match ((MonoMethodDesc *) op->data, method))
@@ -43,7 +44,7 @@ mono_trace_eval (MonoMethod *method)
                                        inc = 1;
                        break;
                case MONO_TRACEOP_ASSEMBLY:
-                       if (strcmp (method->klass->image->assembly_name, op->data) == 0)
+                       if (strcmp (mono_image_get_name (method->klass->image), op->data) == 0)
                                inc = 1; break;
                case MONO_TRACEOP_NAMESPACE:
                        if (strcmp (method->klass->name_space, op->data) == 0)
index 2f5d6efafe0fda9b4435eede01b03f330764393b..9bf06e11e2532221c2fcf698286009762abb2097 100644 (file)
@@ -32,14 +32,14 @@ print_subtypes (MonoImage *image, MonoClass *class, int depth) {
        if (depth++ > max_depth)
                return;
 
-       t = &image->tables [MONO_TABLE_TYPEDEF];
+       t = mono_image_get_table_info (image, MONO_TABLE_TYPEDEF);
        
        token = mono_metadata_token_index (class->type_token);
        token <<= TYPEDEFORREF_BITS;
        token |= TYPEDEFORREF_TYPEDEF;
 
        /* use a subgraph? */
-       for (i = 0; i < t->rows; ++i) {
+       for (i = 0; i < mono_table_info_get_rows (t); ++i) {
                if (token == mono_metadata_decode_row_col (t, i, MONO_TYPEDEF_EXTENDS)) {
                        child = mono_class_get (image, MONO_TOKEN_TYPE_DEF | (i + 1));
                        output_type_edge (class, child);
@@ -91,7 +91,7 @@ interface_graph (MonoImage *image, const char* cname) {
        char *p;
        guint32 cols [MONO_INTERFACEIMPL_SIZE];
        guint32 token, i, count = 0;
-       MonoTableInfo *intf = &image->tables [MONO_TABLE_INTERFACEIMPL];
+       MonoTableInfo *intf = mono_image_get_table_info (image, MONO_TABLE_INTERFACEIMPL);
 
        cname = g_strdup (cname);
        p = strrchr (cname, '.');
@@ -114,7 +114,7 @@ interface_graph (MonoImage *image, const char* cname) {
        token = mono_metadata_token_index (class->type_token);
        token <<= TYPEDEFORREF_BITS;
        token |= TYPEDEFORREF_TYPEDEF;
-       for (i = 0; i < intf->rows; ++i) {
+       for (i = 0; i < mono_table_info_get_rows (intf); ++i) {
                mono_metadata_decode_row (intf, i, cols, MONO_INTERFACEIMPL_SIZE);
                /*g_print ("index: %d [%d implements %d]\n", index, cols [MONO_INTERFACEIMPL_CLASS], cols [MONO_INTERFACEIMPL_INTERFACE]);*/
                if (token == cols [MONO_INTERFACEIMPL_INTERFACE]) {
@@ -431,16 +431,16 @@ stats (MonoImage *image, const char *name) {
        MonoMethod *method;
        MonoClass *klass;
        
-       for (i = 0; i < image->tables [MONO_TABLE_METHOD].rows; ++i) {
+       num_methods = mono_image_get_table_rows (image, MONO_TABLE_METHOD);
+       for (i = 0; i < num_methods; ++i) {
                method = mono_get_method (image, MONO_TOKEN_METHOD_DEF | (i + 1), NULL);
                method_stats (method);
        }
-       num_methods = image->tables [MONO_TABLE_METHOD].rows;
-       for (i = 0; i < image->tables [MONO_TABLE_TYPEDEF].rows; ++i) {
+       num_types = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);
+       for (i = 0; i < num_types; ++i) {
                klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | (i + 1));
                type_stats (klass);
        }
-       num_types = image->tables [MONO_TABLE_TYPEDEF].rows;
 
        g_print ("Methods and code stats:\n");
        g_print ("back branch waste: %d\n", back_branch_waste);
@@ -608,7 +608,7 @@ method_graph (MonoImage *image, const char *name) {
        if (!name) {
                guint32 token = mono_image_get_entry_point (image);
                if (!token || !(method = mono_get_method (image, token, NULL))) {
-                       g_print ("Cannot find entry point in %s: specify an explict method name.\n", image->name);
+                       g_print ("Cannot find entry point in %s: specify an explict method name.\n", mono_image_get_filename (image));
                        exit (1);
                }
        } else {
@@ -919,7 +919,7 @@ method_cfg (MonoImage *image, const char *name) {
        if (!name) {
                guint32 token = mono_image_get_entry_point (image);
                if (!token || !(method = mono_get_method (image, token, NULL))) {
-                       g_print ("Cannot find entry point in %s: specify an explict method name.\n", image->name);
+                       g_print ("Cannot find entry point in %s: specify an explict method name.\n", mono_image_get_filename (image));
                        exit (1);
                }
        } else {
@@ -999,6 +999,7 @@ enum {
 int
 main (int argc, char *argv[]) {
        MonoAssembly *assembly;
+       MonoImage *image;
        const char *cname = NULL;
        const char *aname = NULL;
        char *outputfile = NULL;
@@ -1080,21 +1081,22 @@ main (int argc, char *argv[]) {
        if (cname && strchr (cname, ':') && graphtype == GRAPH_TYPES)
                graphtype = GRAPH_CALL;
 
+       image = mono_assembly_get_image (assembly);
        switch (graphtype) {
        case GRAPH_TYPES:
-               type_graph (assembly->image, cname);
+               type_graph (image, cname);
                break;
        case GRAPH_CALL:
-               method_graph (assembly->image, cname);
+               method_graph (image, cname);
                break;
        case GRAPH_INTERFACE:
-               interface_graph (assembly->image, cname);
+               interface_graph (image, cname);
                break;
        case GRAPH_CONTROL_FLOW:
-               method_cfg (assembly->image, cname);
+               method_cfg (image, cname);
                break;
        case GRAPH_STATS:
-               stats (assembly->image, cname);
+               stats (image, cname);
                break;
        default:
                g_error ("wrong graph type");