Hi,
 actually i stepped through the code and put breaks at JIT_New.. calls,
printfs in compileCEE_NEWOBJ function.
referringto the disassembled code below, i get a call to compileCEE_NEWOBJ
just before ldstr stmt(marked by an arrow). and that is followed by a
series of calls to
SlowAllocateString(..) corresponding to ldstr.
this i got by the way you (Jan) had explained the other day by call
SOS("IP2MD..").
after this the next stop happens at the Alloc call of size 236 which i
found to be the Random object constructor. so when and how is the Test
constructor executed? it surely is not calling GCHeap::Alloc(),
so the only left option is emitCore, and that what i am not able to
figure out how?
pls help.


 .method public hidebysig static int32
            Main() cil managed
    {
      .entrypoint
      // Code size       22 (0x16)
      .maxstack  1
      .locals init (class DefaultNamespace.Test V_0,
               int32 V_1)
----> IL_0000:  ldstr      "first stmt"
      IL_0005:  call       void
[mscorlib]System.Console::WriteLine(string)
      IL_000a:  newobj     instance void DefaultNamespace.Test::.ctor()
      IL_000f:  stloc.0
      IL_0010:  ldc.i4.0
      IL_0011:  stloc.1
      IL_0012:  br.s       IL_0014

      IL_0014:  ldloc.1
      IL_0015:  ret
    } // end of method mainclass::Main

On Sat, 10 Jul 2004, Jan Kotas wrote:

> compileCEE_NEWOBJ is hit for both allocations points for me. Are you
> setting your breakpoints before Main is jitted?
>
> -Jan
>
> -----Original Message-----
> From: Discussion of the Rotor Shared Source CLI implementation
> [mailto:[EMAIL PROTECTED] On Behalf Of Archana
> Sent: Saturday, July 10, 2004 5:31 AM
> To: [EMAIL PROTECTED]
> Subject: [DOTNET-ROTOR] How does the jit handle an alloc-stmt?
>
> Hi,
>  wrt the following test program, i am trying to find out how exactly the
> jit manages alloc-stmts,
>
> namespace DefaultNamespace {
> using System;
> public class Test {
>  int x;
>  public Test() {
> 1->  Random r=new Random(1234);
>  }
> }
> public class mainclass {
>     public static int Main() {
>      Console.WriteLine("first stmt");
> 2->     Test t=new Test();
>      return 0;
> }
>
> referring to allocation point 1, a call to compileCEE_NEWOBJ is made,
> which ultimately calls JIT_NewArr1 that can be captured by a break. but
> wrt alloc point 2, no such call is
> made. but if we disassemble the code, both the allocations have
> corresponding newobj opcodes-
> IL_000b: newobj     instance void [mscorlib]System.Random::.ctor(int32)
> and
> IL_000a: newobj     instance void DefaultNamespace.Test::.ctor()
> respectively.
> could someone pls explain what happens to the second alloc call, how is
> it
> handled? is it handled thru emitCore(..)? if yes, how does the control
> flow to that function, and can we track it somehow?
>
> Thanks & regards
> archana
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
> ASP.NET courses you may be interested in:
>
> Guerrilla ASP.NET
> 15 March 2004, in Boston, MA
> 17 May 2004 in Torrance, CA
> 7 June 2004, London, UK
>
> http://www.develop.com/courses/gaspdotnetls
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentorŪ  http://www.develop.com
> ASP.NET courses you may be interested in:
>
> Guerrilla ASP.NET
> 15 March 2004, in Boston, MA
> 17 May 2004 in Torrance, CA
> 7 June 2004, London, UK
>
> http://www.develop.com/courses/gaspdotnetls
>
> View archives and manage your subscription(s) at http://discuss.develop.com
>

--
Regards,
Archana

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
ASP.NET courses you may be interested in:

Guerrilla ASP.NET
15 March 2004, in Boston, MA
17 May 2004 in Torrance, CA
7 June 2004, London, UK

http://www.develop.com/courses/gaspdotnetls

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to