[Mono-dev] Method attributes in Full-AOT code

Martin Däumler mdae at cs.tu-chemnitz.de
Fri May 13 03:49:53 EDT 2011


On 11.05.11 11:29, Martin Daeumler wrote:

> I'm diving into the Full-AOT code of Mono 2.6.1 and I want to know
> the meaning of several MonoMethod attributes and how these methods
> are called, please. The Full-AOT code skips the AOT compilation of
> methods with the flags:
>
> METHOD_ATTRIBUTE_ABSTRACT
> METHOD_ATTRIBUTE_PINVOKE_IMPL
>
> and methods with the implementation flags
>
> METHOD_IMPL_ATTRIBUTE_RUNTIME
> METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL
>
> Skipping abstract methods is clear. PInvoke and internal call
> methods are called through wrappers, aren't they? But I don't
> know the difference between both types.

Hello,

I learned that PInvoke and Internal Call methods are
quite the same. Internal Calls are internal PInvokes that
are used to implement some C# methods as C functions within
the system library. These internal calls are registered in
"mono/metadata/icall_def.h" and they are called through a
wrapper that is generated in "mono_marshal_get_native_wrapper()".
I was confused by internal JIT calls that are called by
a wrapper generated in "mono_icall_get_wrapper_full()".

As I can see, all methods with the attribute
"METHOD_IMPL_ATTRIBUTE_RUNTIME" are delegates. That is,
they are initialized at runtime? Do they need a special
wrapper to be called?


With kind regards,
Martin Däumler


More information about the Mono-devel-list mailing list