dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] pnet ./ChangeLog engine/call.c engine/jitc.c en...


From: Klaus Treichel
Subject: [dotgnu-pnet-commits] pnet ./ChangeLog engine/call.c engine/jitc.c en...
Date: Sun, 26 Feb 2006 20:33:25 +0000

CVSROOT:        /cvsroot/dotgnu-pnet
Module name:    pnet
Branch:         
Changes by:     Klaus Treichel <address@hidden> 06/02/26 20:33:25

Modified files:
        .              : ChangeLog 
        engine         : call.c jitc.c lib_reflect.c 

Log message:
        2006-02-26  Klaus Treichel  <address@hidden>
        
        * engine/call.c: add an additional slot in the arg buffer for ctors. 
Return
        1 when an exception was thrown in _ILCallMethod.
        
        * engine/jitc.c, engine/lib_reflect.c: Make _ILJitGetCallingMethod more
        portable.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/ChangeLog.diff?tr1=1.3297&tr2=1.3298&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/call.c.diff?tr1=1.39&tr2=1.40&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc.c.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/lib_reflect.c.diff?tr1=1.76&tr2=1.77&r1=text&r2=text

Patches:
Index: pnet/ChangeLog
diff -u pnet/ChangeLog:1.3297 pnet/ChangeLog:1.3298
--- pnet/ChangeLog:1.3297       Sun Feb 26 16:44:34 2006
+++ pnet/ChangeLog      Sun Feb 26 20:33:25 2006
@@ -1,3 +1,11 @@
+2006-02-26  Klaus Treichel  <address@hidden>
+
+       * engine/call.c: add an additional slot in the arg buffer for ctors. 
Return
+       1 when an exception was thrown in _ILCallMethod.
+
+       * engine/jitc.c, engine/lib_reflect.c: Make _ILJitGetCallingMethod more
+       portable.
+
 2006-02-25  Klaus Treichel  <address@hidden>
 
        * engine/call.c: Return the this pointer for ctor calls in ILCallMethod 
and
Index: pnet/engine/call.c
diff -u pnet/engine/call.c:1.39 pnet/engine/call.c:1.40
--- pnet/engine/call.c:1.39     Sun Feb 26 16:44:34 2006
+++ pnet/engine/call.c  Sun Feb 26 20:33:25 2006
@@ -982,6 +982,7 @@
                                /* We need an additional parameter for the this 
pointer */
                                /* for all casese except arrays or strings. */
                                totalParams++;
+                               numParams++;
                        }
                        else
                        {
@@ -1033,8 +1034,9 @@
                        /* Return the this pointer. */
                        *(void **)result = *(void **)(jitArgs[1]);
                }
+               return 0;
        }
-       return 0;
+       return 1;
 }
 #else
 int _ILCallMethod(ILExecThread *thread, ILMethod *method,
Index: pnet/engine/jitc.c
diff -u pnet/engine/jitc.c:1.19 pnet/engine/jitc.c:1.20
--- pnet/engine/jitc.c:1.19     Sat Feb 25 17:34:00 2006
+++ pnet/engine/jitc.c  Sun Feb 26 20:33:25 2006
@@ -509,45 +509,62 @@
  */
 ILMethod *_ILJitGetCallingMethod(ILExecThread *thread, ILUInt32 frames)
 {
+       ILExecProcess *process = _ILExecThreadProcess(thread);
+       ILJITCoder *jitCoder;
+       ILJitFunction jitFunction = 0;
+       void *callFrame = jit_get_current_frame();
        void *returnAddress = 0;
+       void *exceptionHandler = 0;
 
-       fprintf(stdout, "CallingMethod \n");
-       if(frames > 0)
+       if(!process)
        {
-               void *callFrame = jit_get_frame_address(frames);
-               if(callFrame)
-               {
-                       returnAddress = jit_get_return_address(callFrame);
-               }
+               return 0;
        }
-       else
+       if(!(jitCoder = _ILCoderToILJITCoder(process->coder)))
        {
-               returnAddress = jit_get_current_return();
+               return 0;
        }
-       if(returnAddress)
-       {
-               ILExecProcess *process = _ILExecThreadProcess(thread);
-               ILJITCoder *jitCoder;
-               ILJitFunction jitFunction;
-               void *exceptionHandler = 0;
-
-               if(!process)
+       /* Find the first callframe that has a jitFunction assigned. */
+       /* This callframe is usually the jitFunction for the internalcall. */
+       do {
+               returnAddress = jit_get_return_address(callFrame);
+               if(!(callFrame = jit_get_next_frame_address(callFrame)))
                {
+                       /* Could not get the next frame address. */
                        return 0;
                }
-               if(!(jitCoder = _ILCoderToILJITCoder(process->coder)))
+               if((jitFunction = jit_function_from_pc(jitCoder->context,
+                                                                               
          returnAddress,
+                                                                               
          &exceptionHandler)))
                {
-                       return 0;
+                       break;
                }
-               if(!(jitFunction = jit_function_from_pc(jitCoder->context,
-                                                                               
   returnAddress,
-                                                                               
   &exceptionHandler)))
+
+       } while(1);
+
+       /* callFrame is the first frame with a jitFunction assigned. */
+       /* Now we have to find the return address frames down the stack */
+       /* with a jitFunction assigned. */
+       do {
+               returnAddress = jit_get_return_address(callFrame);
+               if((jitFunction = jit_function_from_pc(jitCoder->context,
+                                                                               
          returnAddress,
+                                                                               
          &exceptionHandler)))
                {
+                       if(frames == 0)
+                       {
+                               break;
+                       }
+               }
+               frames--;
+               if(!(callFrame = jit_get_next_frame_address(callFrame)))
+               {
+                       /* Could not get the next frame address. */
                        return 0;
                }
-               return (ILMethod *)jit_function_get_meta(jitFunction, 
IL_JIT_META_METHOD);
-       }
-       return 0;
+       } while(1);
+       /* And we return the ILMethod assigned to that jitFunction. */
+       return (ILMethod *)jit_function_get_meta(jitFunction, 
IL_JIT_META_METHOD);
 }
 
 /*
Index: pnet/engine/lib_reflect.c
diff -u pnet/engine/lib_reflect.c:1.76 pnet/engine/lib_reflect.c:1.77
--- pnet/engine/lib_reflect.c:1.76      Sat Feb 25 17:58:55 2006
+++ pnet/engine/lib_reflect.c   Sun Feb 26 20:33:25 2006
@@ -862,7 +862,7 @@
 ILObject *_IL_Assembly_GetCallingAssembly(ILExecThread *thread)
 {
 #ifdef IL_USE_JIT
-       ILMethod *method = _ILJitGetCallingMethod(thread, 3);
+       ILMethod *method = _ILJitGetCallingMethod(thread, 1);
        if(method)
        {
                return ImageToAssembly(thread, ILProgramItem_Image(method));
@@ -902,7 +902,7 @@
 ILObject *_IL_Assembly_GetExecutingAssembly(ILExecThread *thread)
 {
 #ifdef IL_USE_JIT
-       ILMethod *method = _ILJitGetCallingMethod(thread, 2);
+       ILMethod *method = _ILJitGetCallingMethod(thread, 0);
        if(method)
        {
                return ImageToAssembly(thread, ILProgramItem_Image(method));




reply via email to

[Prev in Thread] Current Thread [Next in Thread]