diff dyncall/dyncall_callvm.h @ 533:71c884e610f0

- integration of patches from Raphael Luba, Thekla, Inc.: * integration of aggregate-by-value (struct, union) support patch for x64 (win and sysv) * windows/x64 asm additions to specify how stack unwinds (help for debuggers, exception handling, etc.) * see Changelog for details - new calling convention modes for thiscalls (platform agnostic, was specific before) * new signature character for platform agnostic thiscalls ('*' / DC_SIGCHAR_CC_THISCALL) - dcCallF(), dcVCallF(), dcArgF() and dcVArgF(): * added support for aggregates-by-value (wasn't part of patch) * change that those functions don't implicitly call dcReset() anymore, which was unflexible (breaking change) - added macros to feature test implementation for aggregate-by-value and syscall support - changed libdyncall_s.lib and libdyncallback_s.lib order in callback test makefiles, as some toolchains are picky about order - doc: * man page updates to describe aggregate interface * manual overview changes to highlight platforms with aggregate-by-value support - test/plain: replaced tests w/ old/stale sctruct interface with new aggregate one
author Tassilo Philipp
date Thu, 21 Apr 2022 13:35:47 +0200
parents f5577f6bf97a
children
line wrap: on
line diff
--- a/dyncall/dyncall_callvm.h	Sat Apr 16 15:00:58 2022 +0200
+++ b/dyncall/dyncall_callvm.h	Thu Apr 21 13:35:47 2022 +0200
@@ -6,7 +6,7 @@
  Description: Common call vm binary interface.
  License:
 
-   Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>, 
+   Copyright (c) 2007-2022 Daniel Adler <dadler@uni-goettingen.de>, 
                            Tassilo Philipp <tphilipp@potion-studios.com>
 
    Permission to use, copy, modify, and distribute this software for any
@@ -46,40 +46,43 @@
 {
   void         (*free)           (DCCallVM* vm);
   void         (*reset)          (DCCallVM* vm);
-  void         (*mode)           (DCCallVM* vm,DCint        mode);
-  void         (*argBool)        (DCCallVM* vm,DCbool          B);
-  void         (*argChar)        (DCCallVM* vm,DCchar          c);
-  void         (*argShort)       (DCCallVM* vm,DCshort         s);
-  void         (*argInt)         (DCCallVM* vm,DCint           i);
-  void         (*argLong)        (DCCallVM* vm,DClong          l);
-  void         (*argLongLong)    (DCCallVM* vm,DClonglong      L);
-  void         (*argFloat)       (DCCallVM* vm,DCfloat         f);
-  void         (*argDouble)      (DCCallVM* vm,DCdouble        d);
-  void         (*argPointer)     (DCCallVM* vm,DCpointer       p);
-  void         (*argStruct)      (DCCallVM* vm,DCstruct* s, DCpointer p);
-  void         (*callVoid)       (DCCallVM* vm,DCpointer funcptr);
-  DCbool       (*callBool)       (DCCallVM* vm,DCpointer funcptr);
-  DCchar       (*callChar)       (DCCallVM* vm,DCpointer funcptr);
-  DCshort      (*callShort)      (DCCallVM* vm,DCpointer funcptr);
-  DCint        (*callInt)        (DCCallVM* vm,DCpointer funcptr);
-  DClong       (*callLong)       (DCCallVM* vm,DCpointer funcptr);
-  DClonglong   (*callLongLong)   (DCCallVM* vm,DCpointer funcptr);
-  DCfloat      (*callFloat)      (DCCallVM* vm,DCpointer funcptr);
-  DCdouble     (*callDouble)     (DCCallVM* vm,DCpointer funcptr);
-  DCpointer    (*callPointer)    (DCCallVM* vm,DCpointer funcptr);
-  void         (*callStruct)     (DCCallVM* vm,DCpointer funcptr,DCstruct* s, DCpointer returnValue);
+  void         (*mode)           (DCCallVM* vm, DCint mode);
+  void         (*argBool)        (DCCallVM* vm, DCbool     B);
+  void         (*argChar)        (DCCallVM* vm, DCchar     c);
+  void         (*argShort)       (DCCallVM* vm, DCshort    s);
+  void         (*argInt)         (DCCallVM* vm, DCint      i);
+  void         (*argLong)        (DCCallVM* vm, DClong     l);
+  void         (*argLongLong)    (DCCallVM* vm, DClonglong L);
+  void         (*argFloat)       (DCCallVM* vm, DCfloat    f);
+  void         (*argDouble)      (DCCallVM* vm, DCdouble   d);
+  void         (*argPointer)     (DCCallVM* vm, DCpointer  p);
+  void         (*argAggr)        (DCCallVM* vm, const DCaggr* ag, const void* p);
+  void         (*callVoid)       (DCCallVM* vm, DCpointer funcptr);
+  DCbool       (*callBool)       (DCCallVM* vm, DCpointer funcptr);
+  DCchar       (*callChar)       (DCCallVM* vm, DCpointer funcptr);
+  DCshort      (*callShort)      (DCCallVM* vm, DCpointer funcptr);
+  DCint        (*callInt)        (DCCallVM* vm, DCpointer funcptr);
+  DClong       (*callLong)       (DCCallVM* vm, DCpointer funcptr);
+  DClonglong   (*callLongLong)   (DCCallVM* vm, DCpointer funcptr);
+  DCfloat      (*callFloat)      (DCCallVM* vm, DCpointer funcptr);
+  DCdouble     (*callDouble)     (DCCallVM* vm, DCpointer funcptr);
+  DCpointer    (*callPointer)    (DCCallVM* vm, DCpointer funcptr);
+  void         (*callAggr)       (DCCallVM* vm, DCpointer funcptr, const DCaggr* ag, DCpointer returnValue);
+  void         (*beginAggr)      (DCCallVM* vm, const DCaggr* ag);
 };
 
-typedef DCvoid       (DCvoidvmfunc)      (DCCallVM* vm,DCpointer funcptr); 
-typedef DCbool       (DCboolvmfunc)      (DCCallVM* vn,DCpointer funcptr);
-typedef DCchar       (DCcharvmfunc)      (DCCallVM* vm,DCpointer funcptr);
-typedef DCshort      (DCshortvmfunc)     (DCCallVM* vm,DCpointer funcptr);
-typedef DCint        (DCintvmfunc)       (DCCallVM* vm,DCpointer funcptr);
-typedef DClong       (DClongvmfunc)      (DCCallVM* vm,DCpointer funcptr);
-typedef DClonglong   (DClonglongvmfunc)  (DCCallVM* vm,DCpointer funcptr);
-typedef DCfloat      (DCfloatvmfunc)     (DCCallVM* vm,DCpointer funcptr);
-typedef DCdouble     (DCdoublevmfunc)    (DCCallVM* vm,DCpointer funcptr);
-typedef DCpointer    (DCpointervmfunc)   (DCCallVM* vm,DCpointer funcptr);
+typedef DCvoid       (DCvoidvmfunc)     (DCCallVM* vm, DCpointer funcptr); 
+typedef DCbool       (DCboolvmfunc)     (DCCallVM* vm, DCpointer funcptr);
+typedef DCchar       (DCcharvmfunc)     (DCCallVM* vm, DCpointer funcptr);
+typedef DCshort      (DCshortvmfunc)    (DCCallVM* vm, DCpointer funcptr);
+typedef DCint        (DCintvmfunc)      (DCCallVM* vm, DCpointer funcptr);
+typedef DClong       (DClongvmfunc)     (DCCallVM* vm, DCpointer funcptr);
+typedef DClonglong   (DClonglongvmfunc) (DCCallVM* vm, DCpointer funcptr);
+typedef DCfloat      (DCfloatvmfunc)    (DCCallVM* vm, DCpointer funcptr);
+typedef DCdouble     (DCdoublevmfunc)   (DCCallVM* vm, DCpointer funcptr);
+typedef DCpointer    (DCpointervmfunc)  (DCCallVM* vm, DCpointer funcptr);
+typedef DCvoid       (DCaggrvmfunc)     (DCCallVM* vm, DCpointer funcptr, const DCaggr* ag, DCpointer returnValue);
+typedef DCvoid       (DCbeginaggrvmfunc)(DCCallVM* vm, const DCaggr* ag);
 
 /* Common base functions for CallVM implementations. */