comparison dyncall/dyncall.h @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children 7ca57dbefed4
comparison
equal deleted inserted replaced
-1:000000000000 0:3e629dc19168
1 /*
2
3 Package: dyncall
4 Library: dyncall
5 File: dyncall/dyncall.h
6 Description: public header for library dyncall
7 License:
8
9 Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10 Tassilo Philipp <tphilipp@potion-studios.com>
11
12 Permission to use, copy, modify, and distribute this software for any
13 purpose with or without fee is hereby granted, provided that the above
14 copyright notice and this permission notice appear in all copies.
15
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
24 */
25
26
27 /*
28
29 dyncall C API
30
31 REVISION
32 2015/01/16 added SYS_PPC32 system call
33 2007/12/11 initial
34
35 */
36
37 #ifndef DYNCALL_H
38 #define DYNCALL_H
39
40 #include "dyncall_types.h"
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 typedef struct DCCallVM_ DCCallVM;
47 typedef struct DCstruct_ DCstruct;
48
49 /* Supported Calling Convention Modes */
50
51 #define DC_CALL_C_DEFAULT 0
52 #define DC_CALL_C_ELLIPSIS 100
53 #define DC_CALL_C_ELLIPSIS_VARARGS 101
54 #define DC_CALL_C_X86_CDECL 1
55 #define DC_CALL_C_X86_WIN32_STD 2
56 #define DC_CALL_C_X86_WIN32_FAST_MS 3
57 #define DC_CALL_C_X86_WIN32_FAST_GNU 4
58 #define DC_CALL_C_X86_WIN32_THIS_MS 5
59 #define DC_CALL_C_X86_WIN32_THIS_GNU 6
60 #define DC_CALL_C_X64_WIN64 7
61 #define DC_CALL_C_X64_SYSV 8
62 #define DC_CALL_C_PPC32_DARWIN 9
63 #define DC_CALL_C_PPC32_OSX DC_CALL_C_PPC32_DARWIN /* alias */
64 #define DC_CALL_C_ARM_ARM_EABI 10
65 #define DC_CALL_C_ARM_THUMB_EABI 11
66 #define DC_CALL_C_ARM_ARMHF 30
67 #define DC_CALL_C_MIPS32_EABI 12
68 #define DC_CALL_C_MIPS32_PSPSDK DC_CALL_C_MIPS32_EABI /* alias - deprecated. */
69 #define DC_CALL_C_PPC32_SYSV 13
70 #define DC_CALL_C_PPC32_LINUX DC_CALL_C_PPC32_SYSV /* alias */
71 #define DC_CALL_C_ARM_ARM 14
72 #define DC_CALL_C_ARM_THUMB 15
73 #define DC_CALL_C_MIPS32_O32 16
74 #define DC_CALL_C_MIPS64_N32 17
75 #define DC_CALL_C_MIPS64_N64 18
76 #define DC_CALL_C_X86_PLAN9 19
77 #define DC_CALL_C_SPARC32 20
78 #define DC_CALL_C_SPARC64 21
79 #define DC_CALL_C_ARM64 22
80 #define DC_CALL_C_PPC64 23
81 #define DC_CALL_C_PPC64_LINUX DC_CALL_C_PPC64 /* alias */
82 #define DC_CALL_SYS_DEFAULT 200
83 #define DC_CALL_SYS_X86_INT80H_LINUX 201
84 #define DC_CALL_SYS_X86_INT80H_BSD 202
85 #define DC_CALL_SYS_PPC32 210
86
87 /* Error codes. */
88
89 #define DC_ERROR_NONE 0
90 #define DC_ERROR_UNSUPPORTED_MODE -1
91
92 DC_API DCCallVM* dcNewCallVM (DCsize size);
93 DC_API void dcFree (DCCallVM* vm);
94 DC_API void dcReset (DCCallVM* vm);
95
96 DC_API void dcMode (DCCallVM* vm, DCint mode);
97
98 DC_API void dcArgBool (DCCallVM* vm, DCbool value);
99 DC_API void dcArgChar (DCCallVM* vm, DCchar value);
100 DC_API void dcArgShort (DCCallVM* vm, DCshort value);
101 DC_API void dcArgInt (DCCallVM* vm, DCint value);
102 DC_API void dcArgLong (DCCallVM* vm, DClong value);
103 DC_API void dcArgLongLong (DCCallVM* vm, DClonglong value);
104 DC_API void dcArgFloat (DCCallVM* vm, DCfloat value);
105 DC_API void dcArgDouble (DCCallVM* vm, DCdouble value);
106 DC_API void dcArgPointer (DCCallVM* vm, DCpointer value);
107 DC_API void dcArgStruct (DCCallVM* vm, DCstruct* s, DCpointer value);
108
109 DC_API void dcCallVoid (DCCallVM* vm, DCpointer funcptr);
110 DC_API DCbool dcCallBool (DCCallVM* vm, DCpointer funcptr);
111 DC_API DCchar dcCallChar (DCCallVM* vm, DCpointer funcptr);
112 DC_API DCshort dcCallShort (DCCallVM* vm, DCpointer funcptr);
113 DC_API DCint dcCallInt (DCCallVM* vm, DCpointer funcptr);
114 DC_API DClong dcCallLong (DCCallVM* vm, DCpointer funcptr);
115 DC_API DClonglong dcCallLongLong (DCCallVM* vm, DCpointer funcptr);
116 DC_API DCfloat dcCallFloat (DCCallVM* vm, DCpointer funcptr);
117 DC_API DCdouble dcCallDouble (DCCallVM* vm, DCpointer funcptr);
118 DC_API DCpointer dcCallPointer (DCCallVM* vm, DCpointer funcptr);
119 DC_API void dcCallStruct (DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer returnValue);
120
121 DC_API DCint dcGetError (DCCallVM* vm);
122
123 #define DEFAULT_ALIGNMENT 0
124 DC_API DCstruct* dcNewStruct (DCsize fieldCount, DCint alignment);
125 DC_API void dcStructField (DCstruct* s, DCint type, DCint alignment, DCsize arrayLength);
126 DC_API void dcSubStruct (DCstruct* s, DCsize fieldCount, DCint alignment, DCsize arrayLength);
127 /* Each dcNewStruct or dcSubStruct call must be paired with a dcCloseStruct. */
128 DC_API void dcCloseStruct (DCstruct* s);
129 DC_API DCsize dcStructSize (DCstruct* s);
130 DC_API DCsize dcStructAlignment(DCstruct* s);
131 DC_API void dcFreeStruct (DCstruct* s);
132
133 DC_API DCstruct* dcDefineStruct (const char* signature);
134
135
136 #ifdef __cplusplus
137 }
138 #endif
139
140 #endif /* DYNCALL_H */
141