diff dyncall/dyncall_callvm_arm64.c @ 84:67961454902b

- bigger cleanup in callvm code * changed init of most callvms to reuse code and for consistency * removed unused functions * general changes for consistency * added some missing cconv defines do mode calls - fixed potential buffer overrun on arm64 - fixed sparc and x64 mode setting (only one mode, but wasn't (pointlessly) resettable) - error code handling (dcGetError) changes, flag is now cleared (work still underway) - Changelog update
author cslag
date Wed, 06 Apr 2016 00:21:51 +0200
parents 3e629dc19168
children f5577f6bf97a
line wrap: on
line diff
--- a/dyncall/dyncall_callvm_arm64.c	Mon Mar 28 23:46:59 2016 +0200
+++ b/dyncall/dyncall_callvm_arm64.c	Wed Apr 06 00:21:51 2016 +0200
@@ -27,19 +27,6 @@
 #include "dyncall_callvm_arm64.h"
 #include "dyncall_alloc.h"
 
-static DCCallVM* dc_callvm_new_arm64(DCCallVM_vt* vt, DCsize size)
-{
-  DCCallVM_arm64* p = (DCCallVM_arm64*) dcAllocMem(size);
-
-  dc_callvm_base_init(&p->mInterface, vt);
-
-  dcVecInit(&p->mVecHead, size);
-
-  p->i = 0;
-  p->f = 0;
-
-  return (DCCallVM*)p;
-}
 
 static void reset(DCCallVM* in_p)
 {
@@ -50,8 +37,6 @@
 }
 
 
-static void mode(DCCallVM* in_self,DCint mode);
-
 static void deinit(DCCallVM* in_self)
 {
   dcFreeMem(in_self);
@@ -112,6 +97,8 @@
   dcCall_arm64(target, dcVecData(&p->mVecHead), ( dcVecSize(&p->mVecHead) + 15 ) & -16, &p->u.S[0]);
 }
 
+static void mode(DCCallVM* in_self, DCint mode);
+
 DCCallVM_vt vt_arm64 =
 {
   &deinit
@@ -140,26 +127,35 @@
 , NULL /* callStruct */
 };
 
-DCCallVM* dcNewCallVM(DCsize size) 
+static void mode(DCCallVM* in_self, DCint mode)
 {
-  return dc_callvm_new_arm64(&vt_arm64, size);
-}
+  DCCallVM_arm64* self = (DCCallVM_arm64*)in_self;
+  DCCallVM_vt* vt;
 
-static void mode(DCCallVM* in_self,DCint mode)
-{
-  DCCallVM_arm64* self = (DCCallVM_arm64*) in_self;
-  DCCallVM_vt*  vt;
   switch(mode) {
     case DC_CALL_C_DEFAULT:        
+    case DC_CALL_C_ARM64:        
     case DC_CALL_C_ELLIPSIS:
     case DC_CALL_C_ELLIPSIS_VARARGS:
-    case DC_CALL_C_ARM64:        
       vt = &vt_arm64;
       break;
     default: 
-      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; 
       return;
   }
-  self->mInterface.mVTpointer = vt;
+  dc_callvm_base_init(&self->mInterface, vt);
 }
 
+/* Public API. */
+DCCallVM* dcNewCallVM(DCsize size) 
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)dcAllocMem(sizeof(DCCallVM_arm64)+size);
+
+  mode((DCCallVM*)p, DC_CALL_C_DEFAULT);
+
+  dcVecInit(&p->mVecHead, size);
+  reset((DCCallVM*)p);
+
+  return (DCCallVM*)p;
+}
+