[Top][All Lists]
[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));
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ./ChangeLog engine/call.c engine/jitc.c en...,
Klaus Treichel <=