diff dyncall/dyncall_callvm_ppc64.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 54930a037e8a
children ad5f9803f52f
line wrap: on
line diff
--- a/dyncall/dyncall_callvm_ppc64.c	Mon Mar 28 23:46:59 2016 +0200
+++ b/dyncall/dyncall_callvm_ppc64.c	Wed Apr 06 00:21:51 2016 +0200
@@ -345,10 +345,10 @@
 {
   DCCallVM_ppc64* self = (DCCallVM_ppc64*) in_self;
   DCCallVM_vt* vt;
+
   switch(mode) {
-
+    case DC_CALL_C_DEFAULT:
     case DC_CALL_C_PPC64: 
-    case DC_CALL_C_DEFAULT:
     case DC_CALL_C_ELLIPSIS:
 #if DC__ABI_PPC64_ELF_V == 2
       vt = &gVT_ppc64;
@@ -375,13 +375,16 @@
   dc_callvm_base_init(&self->mInterface, vt);
 }
 
+/* Public API. */
 DCCallVM* dcNewCallVM(DCsize size)
 {
-  DCCallVM_ppc64* self = (DCCallVM_ppc64*)dcAllocMem(sizeof(DCCallVM_ppc64)+size);
-  dcVecInit(&self->mVecHead, size);
-  self->mIntRegs              = 0;
-  self->mFloatRegs            = 0;
-  dc_callvm_mode_ppc64( (DCCallVM*) self, DC_CALL_C_DEFAULT );
-  return (DCCallVM*)self;
+  DCCallVM_ppc64* p = (DCCallVM_ppc64*)dcAllocMem(sizeof(DCCallVM_ppc64)+size);
+
+  dc_callvm_mode_ppc64((DCCallVM*)p, DC_CALL_C_DEFAULT);
+
+  dcVecInit(&p->mVecHead, size);
+  dc_callvm_reset_ppc64((DCCallVM*)p);
+
+  return (DCCallVM*)p;
 }