annotate dyncall/dyncall.h @ 339:4f9f49fb82ce

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