Mercurial > pub > dyncall > dyncall
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; +} +