[Mono-devel-list] tramp-s390 changes

Neale.Ferguson at SoftwareAG-USA.com Neale.Ferguson at SoftwareAG-USA.com
Mon Dec 6 18:47:23 EST 2004

I followed the changes made by Zoltan in:

tramp-x86.c (mono_arch_create_jit_trampoline): Remove code which is
        now in the xp code.

Now, synchronized.exe fails:

Unhandled Exception: System.Threading.SynchronizationLockException: Not
in (unmanaged) (wrapper managed-to-native)
System.Threading.Monitor:Monitor_exit (object)
in <0x00000050> (wrapper managed-to-native)
System.Threading.Monitor:Monitor_exit (object)
in <0x0000006e> System.Threading.Monitor:Exit (object)
in <0x0000001c> Test:test ()
in <0x000000a6> Test:Main (string[])

I've backed out that change and it's working again. Are there any
implications keeping the code as it was?

--- tramp-s390.c        2004-12-06 18:38:35.131265460 -0500
+++ tramp-s390.c        2004-12-02 17:09:07.000000000 -0500
@@ -549,16 +549,10 @@
        guint8 *code, *buf;
        static guint8 *vc = NULL;
        gint32 displace;

-       if (method->info)
-               return (method->info);
-       if (method->iflags & METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED)
-               return (mono_arch_create_jit_trampoline
(mono_marshal_get_synchronized_wrapper (method)));
        vc = create_trampoline_code (MONO_TRAMPOLINE_GENERIC);

        /* This is the method-specific part of the trampoline. Its
purpose is
        to provide the generic part with the MonoMethod *method pointer.
        use r13 to keep that value, for instance. However, the generic
part of
@@ -577,13 +571,10 @@
        mono_arch_flush_icache (code, buf - code);

        /* Sanity check */
        g_assert ((buf - code) <= METHOD_TRAMPOLINE_SIZE);

-       method->info = code;
-       mono_jit_stats.method_trampolines++;
        return code;


More information about the Mono-devel-list mailing list