I've run into problems with Rotor's profiling interface while trying
some simple things, initially just replacing body of a tiny method
with an exact copy. I base my code on the sample profiler. I try the
same thing with the CLR and things work fine there. Here are the
problems:

- Some event mask combinations cause problem in Rotor (with just
  the straight sample profiler, none of my changes yet)
  + DN_PROFILER_MASK=0x20 causes a System.StackOverflowException
    somewhere in closing down the EE
  + DN_PROFILER_MASK=0x4f/0x8f cause an assertion failure at line
    401 in binder.cpp while the EE is trying to run some class
    finalisation
  + 0x40 and 0x80 work ok, I haven't tried others

- With my changes to replace the body of a tiny method with an
  exact copy as so:
  In JITComplicationStarted, if it's ok to block the EE,
      GetILFunctionBody
      If it's tiny
          GetILFunctionBodyAllocator
          Allocate buffer with given size
          Copy body to new buffer
          SetILFunctionBody
      Done.

  + This change works fine for the CLR

  + In Rotor, the new body is never picked up while the new RVA
    is properly set for both the metadata and the in memory
    MethodDesc*. Tracing it in the debugger, I found that the new
    RVA, being after the module, is out of range when checked
    against the values in the file headers. This result in
    Module::GetILCode(rva) returning the base of the file. Part of
    stack trace:
        sscoree.dll!Cor_RtlImageRvaToSection32(...)  Line 78
        sscoree.dll!Cor_RtlImageRvaToSection(...)  Line 110
        sscoree.dll!Cor_RtlImageRvaToOffset(...)  Line 203
        sscoree.dll!PEFile::RVAToPointer(...)  Line 110
        sscoree.dll!Module::ResolveILRVA(...)  Line 540
        sscoree.dll!Module::GetILCode(...)  Line 1760
    The module (after replacing a method's body) is not 'InMemory',
    I haven't come across the path where the module is an
    InMemoryModule yet.

Can anyone tell what I'm doing wrong and/or what else is wrong?

Thanks,
Nam

Reply via email to