Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  DYNCALL (3)


dyncall - encapsulation of architecture-, OS- and compiler-specific function call semantics


See Also


.In dyncall.h DCCallVM * dcNewCallVM DCsize size void dcFree DCCallVM * vm void dcMode DCCallVM * vm DCint mode void dcReset DCCallVM * vm void dcArgBool DCCallVM * vm DCbool arg void dcArgChar DCCallVM * vm DCchar arg void dcArgShort DCCallVM * vm DCshort arg void dcArgInt DCCallVM * vm DCint arg void dcArgLong DCCallVM * vm DClong arg void dcArgLongLong DCCallVM * vm DClonglong arg void dcArgFloat DCCallVM * vm DCfloat arg void dcArgDouble DCCallVM * vm DCdouble arg void dcArgPointer DCCallVM * vm DCpointer arg DCvoid dcCallVoid DCCallVM * vm DCpointer funcptr DCbool dcCallBool DCCallVM * vm DCpointer funcptr DCchar dcCallChar DCCallVM * vm DCpointer funcptr DCshort dcCallShort DCCallVM * vm DCpointer funcptr DCint dcCallInt DCCallVM * vm DCpointer funcptr DClong dcCallLong DCCallVM * vm DCpointer funcptr DClonglong dcCallLongLong DCCallVM * vm DCpointer funcptr DCfloat dcCallFloat DCCallVM * vm DCpointer funcptr DCdouble dcCallDouble DCCallVM * vm DCpointer funcptr DCpointer dcCallPointer DCCallVM * vm DCpointer funcptr void dcArgF DCCallVM * vm const DCsigchar * signature ... void dcVArgF DCCallVM * vm const DCsigchar * signature va_list args void dcCallF DCCallVM * vm DCValue * result DCpointer funcptr const DCsigchar * signature ... void dcVCallF DCCallVM * vm DCValue * result DCpointer funcptr const DCsigchar * signature va_list args


The dyncall library encapsulates architecture-, OS- and compiler-specific function call semantics in a virtual "bind argument parameters from left to right and then call" interface allowing programmers to call C functions in a completely dynamic manner.

In other words, instead of calling a function directly, the dyncall library provides a mechanism to push the function parameters manually and to issue the call afterwards.

Since the idea behind this concept is similar to call dispatching mechanisms of virtual machines, the object that can be dynamically loaded with arguments, and then used to actually invoke the call, is called CallVM. It is possible to change the calling convention used by the CallVM at run-time. Due to the fact that nearly every platform comes with one or more distinct calling conventions, the dyncall library project intends to be a portable and open-source approach to the variety of compiler-specific binary interfaces, platform specific subtleties, and so on...

dcNewCallVM creates a new CallVM object, where size specifies the max size of the internal stack that will be allocated and used to bind the arguments to. Use dcFree to destroy the CallVM object.

dcMode sets the calling convention to use. See dyncall.h for a list of available modes. Note that some mode/platform combinations don’t make any sense (e.g. using a PowerPC calling convention on a MIPS platform) and are silently ignored.

dcReset resets the internal stack of arguments and prepares it for a new call. This function should be called after setting the call mode (using dcMode), but prior to binding arguments to the CallVM. Use it also when reusing a CallVM, as arguments don’t get flushed automatically after a function call invocation. Note: you should also call this function after initial creation of the a CallVM object, as dcNewCallVM doesn’t do this, implicitly.

dcArgBool, dcArgChar, dcArgShort, dcArgInt, dcArgLong, dcArgLongLong, dcArgFloat, dcArgDouble and dcArgPointer are used to bind arguments of the named types to the CallVM object. Arguments should be bound in left to right order regarding the C function prototype.

dcCallVoid, dcCallBool, dcCallChar, dcCallShort, dcCallInt, dcCallLong, dcCallLongLong, dcCallFloat, dcCallDouble and dcCallPointer call the function with the bound arguments and returning the named type, where funcptr is a pointer to the function to call. After the invocation of the function call, the argument values are still bound to the CallVM and a second call using the same arguments can be issued. Call reset to clear the internal argument stack.

dcArgF, dcVArgF, dcCallF and dcVCallF can be used to bind arguments in a printf-style call, using a signature string encoding the argument types and return type. The former 2 only bind the arguments to the vm object (and ignore return types specified in the signature), whereas the latter two issue a call to the given function pointer, afterwards. The return value will be stored in result. For information about the signature format, refer to the dyncall manual in PDF format.


Let’s say, we want to make a call to the function:
        double sqrt(double x);

Using the dyncall library, this function would be called as follows:

        double r;
        DCCallVM* vm = dcNewCallVM(4096);
        dcMode(vm, DC_CALL_C_DEFAULT);
        dcArgDouble(vm, 4.2373);
        r = dcCallDouble(vm, (DCpointer)&sqrt);


dyncallback(3), dynload(3) and the dyncall manual (available in PDF format) for a way more detailed documentation of this library.


.An Daniel Adler Aq
.An Tassilo Philipp Aq
Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.