Mercurial > pub > dyncall > dyncall
diff dyncallback/dyncall_thunk.h @ 0:3e629dc19168
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:24:28 +0100 |
parents | |
children | 1ce60358fbad |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dyncallback/dyncall_thunk.h Thu Mar 19 22:24:28 2015 +0100 @@ -0,0 +1,90 @@ +/* + + Package: dyncall + Library: dyncallback + File: dyncallback/dyncall_thunk.h + Description: Thunk - Interface + License: + + Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, + Tassilo Philipp <tphilipp@potion-studios.com> + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +*/ + + +#ifndef DYNCALL_THUNK_H +#define DYNCALL_THUNK_H + +/** + ** dyncall thunks + ** + ** thunks are small-size hybrid code/data objects, created at run-time to + ** be used as function pointers with associated data and entry functions. + ** + ** The header contains code, that does load its address into a designated scratch + ** register and will jump to a thunk function. + ** + ** Thunk entry procedures are compiled functions, that are called as a result of + ** a thunk function. + ** There is one thunk entry currently for supporting callbacks. + ** + ** Thunk context register ( ::= an available scratch register in the calling convention): + ** + ** x86: eax + ** x64: rax + ** ppc: r2 + ** arm: r12 + ** arm64: x9 + ** + **/ + +#include "dyncall_macros.h" + +typedef struct DCThunk_ DCThunk; + +#ifdef __cplusplus +extern "C" { +#endif + +void dcbInitThunk(DCThunk* p, void (*entry)()); + +#if defined(DC__Arch_Intel_x86) +#include "dyncall_thunk_x86.h" +#elif defined (DC__Arch_AMD64) +#include "dyncall_thunk_x64.h" +#elif defined (DC__Arch_PPC32) +#include "dyncall_thunk_ppc32.h" +#elif defined (DC__Arch_PPC64) +#include "dyncall_thunk_ppc64.h" +#elif defined (DC__Arch_ARM_ARM) +#include "dyncall_thunk_arm32_arm.h" +#elif defined (DC__Arch_ARM_THUMB) +#include "dyncall_thunk_arm32_thumb.h" +#elif defined (DC__Arch_MIPS) +#include "dyncall_thunk_mips.h" +#elif defined (DC__Arch_Sparc) +#include "dyncall_thunk_sparc32.h" +#elif defined (DC__Arch_Sparcv9) +#include "dyncall_thunk_sparc64.h" +#elif defined (DC__Arch_ARM64) +#include "dyncall_thunk_arm64.h" +#endif + +#ifdef __cplusplus +} +#endif + + +#endif /* DYNCALL_THUNK_H */