[Mono-dev] Mixed Mode Assemblies

Robert Jordan robertj at gmx.net
Wed Jul 20 18:45:48 EDT 2011


Hi Tom!

On 20.07.2011 23:41, Tom Spink wrote:

>>> * Rewrite each stub after first call to call the function pointer
>>>   proper, and hence bypass the NULL test.

> Well, I went ahead and did it before I got your reply... Let me know what
> you think.  It's most certainly non-portable, which is a /bad thing/.

So GCC lets you take the address of a... label? :)

https://github.com/tspink/sogen/blob/master/test.dll.c#L23

>>> * Think about multiple loaded assemblies, and the impact that will have
>>>    on loading the runtime/appdomain twice.
>>
>> Maybe we should propose a mono_jit_is_initialized() for libmono,
>> unless there is already a way to detect this, that we're not aware of.
>>
>
> Yes - this is a good idea.  I'm also wondering if the support library should
> actually be linked in as a shared library, in which case it can simply hold
> a flag about whether or not the JIT has been loaded.

That would work, too.

>
> Looking at mono_jit_init(), it would be very easy to add a
> mono_jit_is_initialized() function, by simply setting a flag in mono itself.
>
> I think I remember seeing a discussion about multiple invocations of
> mono_jit_init() somewhere - was there ever a resolution to that?

I believe it was about non-interleaved mono_jit_init() and 
mono_jit_cleanup() sequences. The latter is still unable to clean
up properly. An interleaved mono_jit_init() is something that will
probably never work, apart from a trivial implementation that
does nothing when interleaved.

>>> * Think about multi-threading, and how to invoke mono_thread_attach.
>>
>> IIRC, when I wrote the thunk support, I've reused a method
>> wrapper type that already performs mono_thread_attach()
>> on managed/unmanaged boundaries. I even wanted to introduce a
>> new wrapper type to get rid of mono_thread_attach() for performance
>> reasons, but never did it.
>
>
> Interesting!  That's quite clever actually - calling attach when actually
> calling into the runtime via a thunk, from a thread that hasn't been
> attached.  Let me know your thoughts on getting rid of mono_thread_attach().

Do you mean getting rid of mono_thread_attach() from the current
thunk implementation? I'm afraid it's too late for this, because
the thunks became a public API.

Robert



More information about the Mono-devel-list mailing list