Tue Nov 9 17:30:20 CET 2004 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Tue, 9 Nov 2004 15:08:48 +0000 (15:08 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Tue, 9 Nov 2004 15:08:48 +0000 (15:08 -0000)
* aot.c, mini.c, exceptions-ppc.c, exceptions-s390.c, exceptions-s390x.c,
mini-exceptions.c: update to exception clause structure changes.

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

mono/mini/ChangeLog
mono/mini/aot.c
mono/mini/exceptions-ppc.c
mono/mini/exceptions-s390.c
mono/mini/exceptions-s390x.c
mono/mini/mini-exceptions.c
mono/mini/mini.c

index 25bf89b1acd769bfc9365ee0d951f59a5479f1d5..f934d0fb590b1b379ef7588d56038f38f1bbaf80 100644 (file)
@@ -1,3 +1,9 @@
+
+Tue Nov 9 17:30:20 CET 2004 Paolo Molaro <lupus@ximian.com>
+
+       * aot.c, mini.c, exceptions-ppc.c, exceptions-s390.c, exceptions-s390x.c,
+       mini-exceptions.c: update to exception clause structure changes.
+
 2004-11-08  Zoltan Varga  <vargaz@freemail.hu>
 
        * exceptions-x86.c (throw_exception): Fix warnings.
index ee5d0df17c2da10d0566403dfae6713d18fe4d2e..202bb6459e8fc8db3738d1654dde0255720934a7 100644 (file)
@@ -469,6 +469,8 @@ mono_aot_get_method_inner (MonoDomain *domain, MonoMethod *method)
 
                                        if (ei->flags == MONO_EXCEPTION_CLAUSE_FILTER)
                                                ei->data.filter = (guint8*)ei->data.filter + offset;
+                                       else
+                                               ei->data.catch_class = header->clauses [i].data.catch_class;
                                        ei->try_start = (guint8*)ei->try_start + offset;
                                        ei->try_end = (guint8*)ei->try_end + offset;
                                        ei->handler_start = (guint8*)ei->handler_start + offset;
@@ -560,7 +562,7 @@ mono_aot_load_method (MonoDomain *domain, MonoAotModule *aot_module, MonoMethod
                        if (ei->flags == MONO_EXCEPTION_CLAUSE_FILTER)
                                ei->data.filter = code + *(guint32*)info;
                        else
-                               ei->data.token = *(guint32*)info;
+                               ei->data.catch_class = ec->data.catch_class;
                        info += 4;
                        ei->try_start = code + *(guint32*)info;
                        info += 4;
@@ -1065,8 +1067,8 @@ emit_method (MonoAotCompile *acfg, MonoCompile *cfg)
                        if (ei->flags == MONO_EXCEPTION_CLAUSE_FILTER)
                                fprintf (tmpfp, "\t.long %d\n", (gint)((guint8*)ei->data.filter - code));
                        else
-                               /* fixme: tokens are not global */
-                               fprintf (tmpfp, "\t.long %d\n", ei->data.token);
+                               /* the class is loaded from the header: optimize away later */
+                               fprintf (tmpfp, "\t.long %d\n", 0);
 
                        fprintf (tmpfp, "\t.long %d\n", (gint)((guint8*)ei->try_start - code));
                        fprintf (tmpfp, "\t.long %d\n", (gint)((guint8*)ei->try_end - code));
index 11a41f73bdbd0e1d16bc1e4a513c0ca18d93f87e..1e174f67e61c65e58403c9a42fdd569c265a6876 100644 (file)
@@ -941,7 +941,7 @@ arch_handle_exception (MonoContext *ctx, gpointer obj, gboolean test_only)
                                                        filtered = call_filter (ctx, ei->data.filter, mono_ex);
 
                                                if ((ei->flags == MONO_EXCEPTION_CLAUSE_NONE && 
-                                                    mono_object_isinst (obj, mono_class_get (ji->method->klass->image, ei->data.token))) || filtered) {
+                                                    mono_object_isinst (obj, ei->data.catch_class)) || filtered) {
                                                        if (test_only) {
                                                                if (mono_ex) {
                                                                        trace_ips = g_list_reverse (trace_ips);
index 6b39cb2ceaa492104825f8ccf4c4ed970bab9d9d..5bad94fdde05ead7076589cf8222f13e46d910ba 100644 (file)
@@ -870,7 +870,7 @@ mono_arch_handle_exception (void *uc, gpointer obj, gboolean test_only)
                                                      filtered = call_filter (ctx, ei->data.filter, obj);
 
                                                if ((ei->flags == MONO_EXCEPTION_CLAUSE_NONE) &&
-                                                   (mono_object_isinst (obj, mono_class_get (ji->method->klass->image, ei->data.token))) || 
+                                                   (mono_object_isinst (obj, ei->data.catch_class)) || 
                                                    (filtered)) {
                                                        if (test_only) {
                                                                if (mono_ex) {
index 90ecb01b18644148a0621ba85da529ed914530b3..a25373c0ddd8979cb449a4e8d295e0c2dd76d3d2 100644 (file)
@@ -1030,7 +1030,7 @@ mono_arch_handle_exception (void *uc, gpointer obj, gboolean test_only)
                                            MONO_CONTEXT_GET_IP (ctx) <= ei->try_end) { 
                                                /* catch block */
                                                if ((ei->flags == MONO_EXCEPTION_CLAUSE_NONE && 
-                                                    mono_object_isinst (obj, mono_class_get (ji->method->klass->image, ei->data.token))) ||
+                                                    mono_object_isinst (obj, ei->data.catch_class)) ||
                                                    ((ei->flags == MONO_EXCEPTION_CLAUSE_FILTER &&
                                                      call_filter (ctx, ei->data.filter, obj)))) {
                                                        if (test_only) {
index 9dacf48b291bafd5c393b3d150e6c2fc5509e448..2bdc60c90f0b3d4bcb32fc9664831cccf3d206eb 100644 (file)
@@ -440,7 +440,7 @@ mono_handle_exception (MonoContext *ctx, gpointer obj, gpointer original_ip, gbo
                                                }
 
                                                if ((ei->flags == MONO_EXCEPTION_CLAUSE_NONE && 
-                                                    mono_object_isinst (obj, mono_class_get (ji->method->klass->image, ei->data.token))) || filtered) {
+                                                    mono_object_isinst (obj, ei->data.catch_class)) || filtered) {
                                                        if (test_only) {
                                                                if (mono_ex) {
                                                                        trace_ips = g_list_reverse (trace_ips);
index 12b3eed0d82bb272f5313eba454004784a0b7df8..9ebed693c183244f3e7548be0bc8f4970e25dd5c 100644 (file)
@@ -686,8 +686,8 @@ mono_find_block_region (MonoCompile *cfg, int offset, int *filter_lengths)
        /* first search for handlers and filters */
        for (i = 0; i < header->num_clauses; ++i) {
                clause = &header->clauses [i];
-               if ((clause->flags & MONO_EXCEPTION_CLAUSE_FILTER) && (offset >= clause->token_or_filter) &&
-                   (offset < (clause->token_or_filter + filter_lengths [i])))
+               if ((clause->flags == MONO_EXCEPTION_CLAUSE_FILTER) && (offset >= clause->data.filter_offset) &&
+                   (offset < (clause->data.filter_offset + filter_lengths [i])))
                        return ((i + 1) << 8) | MONO_REGION_FILTER | clause->flags;
                           
                if (MONO_OFFSET_IN_HANDLER (clause, offset)) {
@@ -2883,8 +2883,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                tblock->in_stack [0] = cfg->exvar;
                                
                                if (clause->flags == MONO_EXCEPTION_CLAUSE_FILTER) {
-                                       GET_BBLOCK (cfg, bbhash, tblock, ip + clause->token_or_filter);
-                                       tblock->real_offset = clause->token_or_filter;
+                                       GET_BBLOCK (cfg, bbhash, tblock, ip + clause->data.filter_offset);
+                                       tblock->real_offset = clause->data.filter_offset;
                                        tblock->in_scount = 1;
                                        tblock->in_stack = mono_mempool_alloc (cfg->mempool, sizeof (MonoInst*));
                                        tblock->in_stack [0] = cfg->exvar;
@@ -5585,13 +5585,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                for (cc = 0; cc < header->num_clauses; ++cc) {
                                        clause = &header->clauses [cc];
                                        if ((clause->flags & MONO_EXCEPTION_CLAUSE_FILTER) &&
-                                           (!nearest || (clause->token_or_filter > nearest->token_or_filter))) {
+                                           (!nearest || (clause->data.filter_offset > nearest->data.filter_offset))) {
                                                nearest = clause;
                                                nearest_num = cc;
                                        }
                                }
                                g_assert (nearest);
-                               filter_lengths [nearest_num] = (ip - header->code) -  nearest->token_or_filter;
+                               filter_lengths [nearest_num] = (ip - header->code) -  nearest->data.filter_offset;
 
                                break;
                        }
@@ -7849,11 +7849,11 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, gbool
                        ei->flags = ec->flags;
 
                        if (ei->flags == MONO_EXCEPTION_CLAUSE_FILTER) {
-                               tblock = g_hash_table_lookup (cfg->bb_hash, ip + ec->token_or_filter);
+                               tblock = g_hash_table_lookup (cfg->bb_hash, ip + ec->data.filter_offset);
                                g_assert (tblock);
                                ei->data.filter = cfg->native_code + tblock->native_offset;
                        } else {
-                               ei->data.token = ec->token_or_filter;
+                               ei->data.catch_class = ec->data.catch_class;
                        }
 
                        tblock = g_hash_table_lookup (cfg->bb_hash, ip + ec->try_offset);