diff dyncall/dyncall_signature.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 ddfb9577a00e
children
line wrap: on
line diff
--- a/dyncall/dyncall_signature.h	Sat Apr 16 15:00:58 2022 +0200
+++ b/dyncall/dyncall_signature.h	Thu Apr 21 13:35:47 2022 +0200
@@ -6,7 +6,7 @@
  Description: Type and calling-convention signature character defines
  License:
 
-   Copyright (c) 2007-2020 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
@@ -24,17 +24,6 @@
 */
 
 
-
-/*
-
-  dyncall signature characters
-
-  REVISION
-  2007/12/11 initial
-  
-*/
-
-
 #ifndef DYNCALL_SIGNATURE_H
 #define DYNCALL_SIGNATURE_H
 
@@ -54,14 +43,14 @@
 #define DC_SIGCHAR_ULONGLONG    'L'
 #define DC_SIGCHAR_FLOAT        'f'
 #define DC_SIGCHAR_DOUBLE       'd'
-#define DC_SIGCHAR_POINTER      'p'
+#define DC_SIGCHAR_POINTER      'p' /* also used for arrays, as such args decay to ptrs */
 #define DC_SIGCHAR_STRING       'Z' /* in theory same as 'p', but convenient to disambiguate */
-#define DC_SIGCHAR_STRUCT       'T'
-#define DC_SIGCHAR_ENDARG       ')' /* also works for end struct */
+#define DC_SIGCHAR_AGGREGATE    'A' /* aggregate (struct/union described out-of-band via DCaggr) */
+#define DC_SIGCHAR_ENDARG       ')'
 
 /* calling convention / mode signatures */
 
-#define DC_SIGCHAR_CC_PREFIX           '_'
+#define DC_SIGCHAR_CC_PREFIX           '_' /* announces next char to be one of the below calling convention mode chars */
 #define DC_SIGCHAR_CC_DEFAULT          ':' /* default calling conv (platform native) */
 #define DC_SIGCHAR_CC_THISCALL         '*' /* C++ this calls (platform native) */
 #define DC_SIGCHAR_CC_ELLIPSIS         'e'