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