0
|
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
|
7
|
32 2015/07/08 added SYS_PPC64 system call
|
0
|
33 2015/01/16 added SYS_PPC32 system call
|
|
34 2007/12/11 initial
|
|
35
|
|
36 */
|
|
37
|
|
38 #ifndef DYNCALL_H
|
|
39 #define DYNCALL_H
|
|
40
|
|
41 #include "dyncall_types.h"
|
|
42
|
|
43 #ifdef __cplusplus
|
|
44 extern "C" {
|
|
45 #endif
|
|
46
|
|
47 typedef struct DCCallVM_ DCCallVM;
|
|
48 typedef struct DCstruct_ DCstruct;
|
|
49
|
|
50 /* Supported Calling Convention Modes */
|
|
51
|
|
52 #define DC_CALL_C_DEFAULT 0
|
|
53 #define DC_CALL_C_ELLIPSIS 100
|
|
54 #define DC_CALL_C_ELLIPSIS_VARARGS 101
|
|
55 #define DC_CALL_C_X86_CDECL 1
|
|
56 #define DC_CALL_C_X86_WIN32_STD 2
|
|
57 #define DC_CALL_C_X86_WIN32_FAST_MS 3
|
|
58 #define DC_CALL_C_X86_WIN32_FAST_GNU 4
|
|
59 #define DC_CALL_C_X86_WIN32_THIS_MS 5
|
|
60 #define DC_CALL_C_X86_WIN32_THIS_GNU 6
|
|
61 #define DC_CALL_C_X64_WIN64 7
|
|
62 #define DC_CALL_C_X64_SYSV 8
|
|
63 #define DC_CALL_C_PPC32_DARWIN 9
|
|
64 #define DC_CALL_C_PPC32_OSX DC_CALL_C_PPC32_DARWIN /* alias */
|
|
65 #define DC_CALL_C_ARM_ARM_EABI 10
|
|
66 #define DC_CALL_C_ARM_THUMB_EABI 11
|
|
67 #define DC_CALL_C_ARM_ARMHF 30
|
|
68 #define DC_CALL_C_MIPS32_EABI 12
|
|
69 #define DC_CALL_C_MIPS32_PSPSDK DC_CALL_C_MIPS32_EABI /* alias - deprecated. */
|
|
70 #define DC_CALL_C_PPC32_SYSV 13
|
|
71 #define DC_CALL_C_PPC32_LINUX DC_CALL_C_PPC32_SYSV /* alias */
|
|
72 #define DC_CALL_C_ARM_ARM 14
|
|
73 #define DC_CALL_C_ARM_THUMB 15
|
|
74 #define DC_CALL_C_MIPS32_O32 16
|
|
75 #define DC_CALL_C_MIPS64_N32 17
|
|
76 #define DC_CALL_C_MIPS64_N64 18
|
|
77 #define DC_CALL_C_X86_PLAN9 19
|
|
78 #define DC_CALL_C_SPARC32 20
|
|
79 #define DC_CALL_C_SPARC64 21
|
|
80 #define DC_CALL_C_ARM64 22
|
|
81 #define DC_CALL_C_PPC64 23
|
|
82 #define DC_CALL_C_PPC64_LINUX DC_CALL_C_PPC64 /* alias */
|
|
83 #define DC_CALL_SYS_DEFAULT 200
|
|
84 #define DC_CALL_SYS_X86_INT80H_LINUX 201
|
|
85 #define DC_CALL_SYS_X86_INT80H_BSD 202
|
|
86 #define DC_CALL_SYS_PPC32 210
|
7
|
87 #define DC_CALL_SYS_PPC64 211
|
0
|
88
|
|
89 /* Error codes. */
|
|
90
|
|
91 #define DC_ERROR_NONE 0
|
|
92 #define DC_ERROR_UNSUPPORTED_MODE -1
|
|
93
|
|
94 DC_API DCCallVM* dcNewCallVM (DCsize size);
|
|
95 DC_API void dcFree (DCCallVM* vm);
|
|
96 DC_API void dcReset (DCCallVM* vm);
|
|
97
|
|
98 DC_API void dcMode (DCCallVM* vm, DCint mode);
|
|
99
|
|
100 DC_API void dcArgBool (DCCallVM* vm, DCbool value);
|
|
101 DC_API void dcArgChar (DCCallVM* vm, DCchar value);
|
|
102 DC_API void dcArgShort (DCCallVM* vm, DCshort value);
|
|
103 DC_API void dcArgInt (DCCallVM* vm, DCint value);
|
|
104 DC_API void dcArgLong (DCCallVM* vm, DClong value);
|
|
105 DC_API void dcArgLongLong (DCCallVM* vm, DClonglong value);
|
|
106 DC_API void dcArgFloat (DCCallVM* vm, DCfloat value);
|
|
107 DC_API void dcArgDouble (DCCallVM* vm, DCdouble value);
|
|
108 DC_API void dcArgPointer (DCCallVM* vm, DCpointer value);
|
|
109 DC_API void dcArgStruct (DCCallVM* vm, DCstruct* s, DCpointer value);
|
|
110
|
|
111 DC_API void dcCallVoid (DCCallVM* vm, DCpointer funcptr);
|
|
112 DC_API DCbool dcCallBool (DCCallVM* vm, DCpointer funcptr);
|
|
113 DC_API DCchar dcCallChar (DCCallVM* vm, DCpointer funcptr);
|
|
114 DC_API DCshort dcCallShort (DCCallVM* vm, DCpointer funcptr);
|
|
115 DC_API DCint dcCallInt (DCCallVM* vm, DCpointer funcptr);
|
|
116 DC_API DClong dcCallLong (DCCallVM* vm, DCpointer funcptr);
|
|
117 DC_API DClonglong dcCallLongLong (DCCallVM* vm, DCpointer funcptr);
|
|
118 DC_API DCfloat dcCallFloat (DCCallVM* vm, DCpointer funcptr);
|
|
119 DC_API DCdouble dcCallDouble (DCCallVM* vm, DCpointer funcptr);
|
|
120 DC_API DCpointer dcCallPointer (DCCallVM* vm, DCpointer funcptr);
|
|
121 DC_API void dcCallStruct (DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer returnValue);
|
|
122
|
|
123 DC_API DCint dcGetError (DCCallVM* vm);
|
|
124
|
|
125 #define DEFAULT_ALIGNMENT 0
|
|
126 DC_API DCstruct* dcNewStruct (DCsize fieldCount, DCint alignment);
|
|
127 DC_API void dcStructField (DCstruct* s, DCint type, DCint alignment, DCsize arrayLength);
|
|
128 DC_API void dcSubStruct (DCstruct* s, DCsize fieldCount, DCint alignment, DCsize arrayLength);
|
|
129 /* Each dcNewStruct or dcSubStruct call must be paired with a dcCloseStruct. */
|
|
130 DC_API void dcCloseStruct (DCstruct* s);
|
|
131 DC_API DCsize dcStructSize (DCstruct* s);
|
|
132 DC_API DCsize dcStructAlignment(DCstruct* s);
|
|
133 DC_API void dcFreeStruct (DCstruct* s);
|
|
134
|
|
135 DC_API DCstruct* dcDefineStruct (const char* signature);
|
|
136
|
|
137
|
|
138 #ifdef __cplusplus
|
|
139 }
|
|
140 #endif
|
|
141
|
|
142 #endif /* DYNCALL_H */
|
|
143
|