PatchSet 6647 
Date: 2005/06/17 12:24:19
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Important fix for sysdepCallMethod.


        * kaffe/kaffevm/support.c
        (KaffeVM_callMethodA, KaffeVM_callMethodV):
        Allocate the argument array following the real slot allocation given
        by methodSigInfo. This may not be sufficient for architecture which
        needs alignment of the slots.

        Define NEED_sysdepCallMethod to get specific argument reordering
        except if we use ffi.

Members: 
        ChangeLog:1.4173->1.4174 
        kaffe/kaffevm/support.c:1.85->1.86 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4173 kaffe/ChangeLog:1.4174
--- kaffe/ChangeLog:1.4173      Wed Jun 15 15:35:24 2005
+++ kaffe/ChangeLog     Fri Jun 17 12:24:19 2005
@@ -1,3 +1,14 @@
+2005-06-17  Guilhem Lavaux  <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/support.c
+       (KaffeVM_callMethodA, KaffeVM_callMethodV): 
+       Allocate the argument array following the real slot allocation given
+       by methodSigInfo. This may not be sufficient for architecture which
+       needs alignment of the slots.
+
+       Define NEED_sysdepCallMethod to get specific argument reordering
+       except if we use ffi.
+
 2005-06-15  Guilhem Lavaux  <[EMAIL PROTECTED]>
 
        * test/regression/Makefile.am: Added DoubleIEEE.
Index: kaffe/kaffe/kaffevm/support.c
diff -u kaffe/kaffe/kaffevm/support.c:1.85 kaffe/kaffe/kaffevm/support.c:1.86
--- kaffe/kaffe/kaffevm/support.c:1.85  Wed Jun  1 20:14:52 2005
+++ kaffe/kaffe/kaffevm/support.c       Fri Jun 17 12:24:23 2005
@@ -11,6 +11,11 @@
 
 #include "debug.h"
 #include "config.h"
+
+#if !defined(HAVE_LIBFFI)
+#define NEED_sysdepCallMethod 1
+#endif
+
 #include "config-std.h"
 #include "config-mem.h"
 #include "jni.h"
@@ -372,18 +377,24 @@
        int i;
        int j;
        int s;
+       int numArgs;
        callMethodInfo call;    
        jvalue tmp;
 
        if (ret == 0) {
                ret = &tmp;
        }
+       if (!NO_HOLES)
+               numArgs = sizeofSigMethod(meth, false);
+       else
+               numArgs = METHOD_NARGS(meth);
+
        i = engine_reservedArgs(meth);
        s = 0;
        
-       call.args = (jvalue 
*)alloca((METHOD_NARGS(meth)+engine_reservedArgs(meth)+2)*(sizeof(jvalue)+2));
-       call.callsize = (char 
*)&call.args[METHOD_NARGS(meth)+engine_reservedArgs(meth)+2];
-       call.calltype = (char 
*)&call.callsize[METHOD_NARGS(meth)+engine_reservedArgs(meth)+2];
+       call.args = (jvalue 
*)alloca((numArgs+engine_reservedArgs(meth)+2)*(sizeof(jvalue)+2));
+       call.callsize = (char *)&call.args[numArgs+engine_reservedArgs(meth)+2];
+       call.calltype = (char 
*)&call.callsize[numArgs+engine_reservedArgs(meth)+2];
 
        /* If this method isn't static, we must insert the object as
         * an argument.
@@ -551,16 +562,22 @@
        int j;
        callMethodInfo call;
        jvalue tmp;
+       int numArgs;
 
        if (ret == 0) {
                ret = &tmp;
        }
        i = engine_reservedArgs(meth);
        s = 0;
-
-       call.args = (jvalue 
*)alloca((METHOD_NARGS(meth)+engine_reservedArgs(meth)+2)*(sizeof(jvalue)+2));
-       call.callsize = (char 
*)&call.args[METHOD_NARGS(meth)+engine_reservedArgs(meth)+2];
-       call.calltype = (char 
*)&call.callsize[METHOD_NARGS(meth)+engine_reservedArgs(meth)+2];
+       
+       if (!NO_HOLES)
+               numArgs = sizeofSigMethod(meth, false);
+       else
+               numArgs = METHOD_NARGS(meth);
+
+       call.args = (jvalue 
*)alloca((numArgs+engine_reservedArgs(meth)+2)*(sizeof(jvalue)+2));
+       call.callsize = (char *)&call.args[numArgs+engine_reservedArgs(meth)+2];
+       call.calltype = (char 
*)&call.callsize[numArgs+engine_reservedArgs(meth)+2];
 
        /* If this method isn't static, we must insert the object as
         * the first argument and get the function code.
@@ -606,6 +623,7 @@
                                call.args[i+1].i = (&call.args[i].i)[1];
                                i++;
                                call.callsize[i] = 0;
+                               call.calltype[i] = 0;
                        }
                        break;
                case '[':

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to