annotate dyncall/dyncall.3 @ 457:90b1d927912a

- suite_aggrs: make sure random memory used doesn't ever result in NaN fp values (for every possible address), as this messes with result comparison
author Tassilo Philipp
date Fri, 28 Jan 2022 14:11:21 +0100
parents 78dfa2f9783a
children 71c884e610f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
362
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
1 .\" Copyright (c) 2007-2020 Daniel Adler <dadler AT uni-goettingen DOT de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 .\" Tassilo Philipp <tphilipp AT potion-studios DOT com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 .\" Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 .\" purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 .\" copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 .\"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 .Dd $Mdocdate$
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 .Dt dyncall 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 .Sh NAME
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 .Nm dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 .Nd encapsulation of architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 semantics
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 .Sh SYNOPSIS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 .In dyncall.h
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 .Ft DCCallVM *
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 .Fn dcNewCallVM "DCsize size"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 .Fn dcFree "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 .Fn dcMode "DCCallVM * vm" "DCint mode"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 .Fn dcReset "DCCallVM * vm"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 .Fn dcArgBool "DCCallVM * vm" "DCbool arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 .Fn dcArgChar "DCCallVM * vm" "DCchar arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 .Fn dcArgShort "DCCallVM * vm" "DCshort arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 .Fn dcArgInt "DCCallVM * vm" "DCint arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 .Fn dcArgLong "DCCallVM * vm" "DClong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 .Fn dcArgLongLong "DCCallVM * vm" "DClonglong arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 .Fn dcArgFloat "DCCallVM * vm" "DCfloat arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 .Fn dcArgDouble "DCCallVM * vm" "DCdouble arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 .Fn dcArgPointer "DCCallVM * vm" "DCpointer arg"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 .Ft DCvoid
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 .Fn dcCallVoid "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 .Ft DCbool
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 .Fn dcCallBool "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 .Ft DCchar
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 .Fn dcCallChar "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 .Ft DCshort
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 .Fn dcCallShort "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 .Ft DCint
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 .Fn dcCallInt "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 .Ft DClong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 .Fn dcCallLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 .Ft DClonglong
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 .Fn dcCallLongLong "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 .Ft DCfloat
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 .Fn dcCallFloat "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 .Ft DCdouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 .Fn dcCallDouble "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 .Ft DCpointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 .Fn dcCallPointer "DCCallVM * vm" "DCpointer funcptr"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 .Fn dcArgF "DCCallVM * vm" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 .Fn dcVArgF "DCCallVM * vm" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 .Fn dcCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "..."
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 .Ft void
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 .Fn dcVCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "va_list args"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 .Sh DESCRIPTION
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 The
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 library encapsulates architecture-, OS- and compiler-specific function call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 semantics in a virtual "bind argument parameters from left to right and then
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 call" interface allowing programmers to call C functions in a completely
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 dynamic manner.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 In other words, instead of calling a function directly, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 library provides a mechanism to push the function parameters manually and to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 issue the call afterwards.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 Since the idea behind this concept is similar to call dispatching mechanisms
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 of virtual machines, the object that can be dynamically loaded with arguments,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 and then used to actually invoke the call, is called CallVM. It is possible to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 change the calling convention used by the CallVM at run-time. Due to the fact
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 that nearly every platform comes with one or more distinct calling conventions, the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 library project intends to be a portable and open-source approach to the variety of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 compiler-specific binary interfaces, platform specific subtleties, and so on...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 .Fn dcNewCallVM
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 creates a new CallVM object, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 .Ar size
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 specifies the max size of the internal stack that will be allocated and used to
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 bind the arguments to. Use
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 .Fn dcFree
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 to destroy the CallVM object.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 .Fn dcMode
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 sets the calling convention to use. See dyncall.h for a list of
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 available modes. Note that some mode/platform combinations don't make any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 sense (e.g. using a PowerPC calling convention on a MIPS platform) and are
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 silently ignored.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 .Fn dcReset
362
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
115 resets the internal stack of arguments and prepares it for a new call. This
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
116 function should be called after setting the call mode (using dcMode), but prior
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
117 to binding arguments to the CallVM (except for when setting mode
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
118 DC_SIGCHAR_CC_ELLIPSIS_VARARGS, which is used prior to binding varargs of
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
119 variadic functions). Use it also when reusing a CallVM, as arguments don't get
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
120 flushed automatically after a function call invocation. Note: you should also
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
121 call this function after initial creation of the a CallVM object, as
78dfa2f9783a - added helper function dcGetModeFromCCSigChar() mapping callconv sig chars to respective mode
Tassilo Philipp
parents: 360
diff changeset
122 dcNewCallVM doesn't do this, implicitly.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 .Fn dcArgBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125 .Fn dcArgChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 .Fn dcArgShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 .Fn dcArgInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 .Fn dcArgLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 .Fn dcArgLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 .Fn dcArgFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 .Fn dcArgDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 .Fn dcArgPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 are used to bind arguments of the named types to the CallVM object. Arguments should
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 be bound in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136 .Em "left to right"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 order regarding the C function prototype.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 .Fn dcCallVoid ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 .Fn dcCallBool ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 .Fn dcCallChar ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 .Fn dcCallShort ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 .Fn dcCallInt ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 .Fn dcCallLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 .Fn dcCallLongLong ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 .Fn dcCallFloat ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 .Fn dcCallDouble
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 .Fn dcCallPointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 call the function with the bound arguments and returning the named type, where
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 .Ar funcptr
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 is a pointer to the function to call. After the invocation of the function
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 call, the argument values are still bound to the CallVM and a second call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 using the same arguments can be issued. Call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 .Fn reset
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 to clear the internal argument stack.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 .Fn dcArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 .Fn dcVArgF ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 .Fn dcCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 and
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 .Fn dcVCallF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 can be used to bind arguments in a printf-style call, using a signature
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 string encoding the argument types and return type. The former 2 only bind
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 the arguments to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 .Ar vm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 object (and ignore return types specified in the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 signature), whereas the latter two issue a call to the given function pointer,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 afterwards. The return value will be stored in
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 .Ar result .
360
32736025371f - doc updates with more info about signature string usage
Tassilo Philipp
parents: 250
diff changeset
171 The signature string also features calling convention mode selection.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 For information about the signature format, refer to the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 manual in PDF format.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 .Sh EXAMPLE
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 Let's say, we want to make a call to the function:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 double sqrt(double x);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 .Ed
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 .Pp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 Using the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 .Nm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 library, this function would be called as follows:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184 .Bd -literal -offset indent
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 double r;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 DCCallVM* vm = dcNewCallVM(4096);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 dcMode(vm, DC_CALL_C_DEFAULT);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188 dcReset(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 dcArgDouble(vm, 4.2373);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190 r = dcCallDouble(vm, (DCpointer)&sqrt);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 dcFree(vm);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 .Ed
250
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
193 .Sh CONFORMING TO
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
194 The dyncall library needs at least a c99 compiler with additional support for
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
195 anonymous structs/unions (which were introduced officially in c11). Given that
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
196 those are generally supported by pretty much all major c99 conforming compilers
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
197 (as default extension), it should build fine with a c99 toolchain. Strictly
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
198 speaking, dyncall conforms to c11, though.
7cb8a0aaf638 - note about c99 (+ anon struct/union) requirements in doc
Tassilo Philipp
parents: 93
diff changeset
199 .Ed
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 .Sh SEE ALSO
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 .Xr dyncallback 3 ,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202 .Xr dynload 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 and the
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 .Nm
93
dfde5035d410 - better, more neutral .3 SEE ALSO
cslag
parents: 81
diff changeset
205 manual (available in HTML and PDF format) for more information.
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206 .Sh AUTHORS
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 .An "Daniel Adler" Aq dadler@uni-goettingen.de
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 .An "Tassilo Philipp" Aq tphilipp@potion-studios.com