rbdc 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bindings/ruby/rbdc/extconf.rb +57 -0
- data/bindings/ruby/rbdc/rbdc.c +304 -0
- data/dyncall/AUTHORS +4 -0
- data/dyncall/BUGS +3 -0
- data/dyncall/CMakeLists.txt +79 -0
- data/dyncall/ChangeLog +165 -0
- data/dyncall/LICENSE +15 -0
- data/dyncall/Makefile.M +15 -0
- data/dyncall/Makefile.embedded +71 -0
- data/dyncall/Makefile.generic +36 -0
- data/dyncall/Nmakefile +45 -0
- data/dyncall/README +92 -0
- data/dyncall/ToDo +114 -0
- data/dyncall/autovar/LICENSE.txt +15 -0
- data/dyncall/autovar/README.txt +69 -0
- data/dyncall/autovar/autovar_ABI.h +44 -0
- data/dyncall/autovar/autovar_ARCH.h +56 -0
- data/dyncall/autovar/autovar_CC.h +46 -0
- data/dyncall/autovar/autovar_OS.h +78 -0
- data/dyncall/autovar/autovar_OSFAMILY.h +39 -0
- data/dyncall/buildsys/cmake/Modules/FindDynCall.cmake +43 -0
- data/dyncall/buildsys/cmake/Modules/FindDynCallback.cmake +43 -0
- data/dyncall/buildsys/cmake/Modules/FindDynLoad.cmake +45 -0
- data/dyncall/buildsys/cmake/Modules/UseLATEX.cmake +811 -0
- data/dyncall/buildsys/dynmake/Makefile.base.M +82 -0
- data/dyncall/buildsys/dynmake/dynmake.bat +2 -0
- data/dyncall/buildsys/dynmake/dynmake.sh +4 -0
- data/dyncall/buildsys/lua/Makefile +10 -0
- data/dyncall/buildsys/lua/README.txt +4 -0
- data/dyncall/buildsys/lua/bootstrap.sh +34 -0
- data/dyncall/buildsys/lua/cleanup.sh +6 -0
- data/dyncall/buildsys/lua/mkfile +34 -0
- data/dyncall/buildsys/lua/setenv.sh +4 -0
- data/dyncall/buildsys/mk/app.mk +30 -0
- data/dyncall/buildsys/mk/dirs.mk +27 -0
- data/dyncall/buildsys/mk/epilog.mk +30 -0
- data/dyncall/buildsys/mk/lib.mk +23 -0
- data/dyncall/buildsys/mk/pcc.mk +60 -0
- data/dyncall/buildsys/mk/prolog.mk +35 -0
- data/dyncall/buildsys/nmake/common.nmake +61 -0
- data/dyncall/buildsys/nmake/epilog.nmake +28 -0
- data/dyncall/buildsys/nmake/prolog.nmake +76 -0
- data/dyncall/buildsys/nmake/tool_gcc.nmake +82 -0
- data/dyncall/buildsys/nmake/tool_msvc.nmake +67 -0
- data/dyncall/buildsys/scripts/batch-build-linux.sh +11 -0
- data/dyncall/buildsys/scripts/batch-build-minix.sh +11 -0
- data/dyncall/buildsys/scripts/batch-build-psp.sh +11 -0
- data/dyncall/buildsys/scripts/conf-nds.bat +41 -0
- data/dyncall/buildsys/scripts/setenv-cross-ios.sh +8 -0
- data/dyncall/buildsys/scripts/setenv-sdk-ios.sh +22 -0
- data/dyncall/buildsys/vs2005/dyncall/dyncall.vcproj +245 -0
- data/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj +202 -0
- data/dyncall/buildsys/vs2005/vs2005.sln +29 -0
- data/dyncall/configure +152 -0
- data/dyncall/configure.bat +157 -0
- data/dyncall/configure.rc +234 -0
- data/dyncall/dynMakefile +4 -0
- data/dyncall/dyncall/CMakeLists.txt +53 -0
- data/dyncall/dyncall/DynCallConfig.cmake +3 -0
- data/dyncall/dyncall/Makefile.M +10 -0
- data/dyncall/dyncall/Makefile.embedded +20 -0
- data/dyncall/dyncall/Makefile.generic +16 -0
- data/dyncall/dyncall/Nmakefile +62 -0
- data/dyncall/dyncall/README-Developer.txt +45 -0
- data/dyncall/dyncall/README.txt +65 -0
- data/dyncall/dyncall/TODO +9 -0
- data/dyncall/dyncall/dynMakefile +4 -0
- data/dyncall/dyncall/dyncall.3 +189 -0
- data/dyncall/dyncall/dyncall.h +135 -0
- data/dyncall/dyncall/dyncall_alloc.h +40 -0
- data/dyncall/dyncall/dyncall_api.c +167 -0
- data/dyncall/dyncall/dyncall_call.S +72 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm.S +80 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm.h +61 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +96 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +44 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb.h +65 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_apple.s +80 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +121 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +101 -0
- data/dyncall/dyncall/dyncall_call_mips.h +50 -0
- data/dyncall/dyncall/dyncall_call_mips_eabi.h +61 -0
- data/dyncall/dyncall/dyncall_call_mips_eabi_gas.s +115 -0
- data/dyncall/dyncall/dyncall_call_mips_gas.S +36 -0
- data/dyncall/dyncall/dyncall_call_mips_n32.h +67 -0
- data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +192 -0
- data/dyncall/dyncall/dyncall_call_mips_n64.h +67 -0
- data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +192 -0
- data/dyncall/dyncall/dyncall_call_mips_o32.h +70 -0
- data/dyncall/dyncall/dyncall_call_mips_o32_gas.s +109 -0
- data/dyncall/dyncall/dyncall_call_ppc32.S +266 -0
- data/dyncall/dyncall/dyncall_call_ppc32.h +62 -0
- data/dyncall/dyncall/dyncall_call_sparc.S +192 -0
- data/dyncall/dyncall/dyncall_call_sparc.h +42 -0
- data/dyncall/dyncall/dyncall_call_sparc64.S +361 -0
- data/dyncall/dyncall/dyncall_call_sparc64.h +42 -0
- data/dyncall/dyncall/dyncall_call_sparc_v9.S +220 -0
- data/dyncall/dyncall/dyncall_call_sparc_v9.h +42 -0
- data/dyncall/dyncall/dyncall_call_x64-att.S +146 -0
- data/dyncall/dyncall/dyncall_call_x64.S +149 -0
- data/dyncall/dyncall/dyncall_call_x64.h +63 -0
- data/dyncall/dyncall/dyncall_call_x64_generic_masm.asm +70 -0
- data/dyncall/dyncall/dyncall_call_x86.S +238 -0
- data/dyncall/dyncall/dyncall_call_x86.h +70 -0
- data/dyncall/dyncall/dyncall_call_x86_8a.s +127 -0
- data/dyncall/dyncall/dyncall_call_x86_generic_masm.asm +136 -0
- data/dyncall/dyncall/dyncall_call_x86_nasm.asm +234 -0
- data/dyncall/dyncall/dyncall_callf.c +112 -0
- data/dyncall/dyncall/dyncall_callf.h +52 -0
- data/dyncall/dyncall/dyncall_callvm.c +68 -0
- data/dyncall/dyncall/dyncall_callvm.h +88 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +250 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +59 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +204 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +63 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +271 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +59 -0
- data/dyncall/dyncall/dyncall_callvm_base.c +33 -0
- data/dyncall/dyncall/dyncall_callvm_mips.c +40 -0
- data/dyncall/dyncall/dyncall_callvm_mips.h +37 -0
- data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +181 -0
- data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +61 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n32.c +268 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n64.c +268 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n64.h +53 -0
- data/dyncall/dyncall/dyncall_callvm_mips_o32.c +235 -0
- data/dyncall/dyncall/dyncall_callvm_mips_o32.h +45 -0
- data/dyncall/dyncall/dyncall_callvm_ppc32.c +372 -0
- data/dyncall/dyncall/dyncall_callvm_ppc32.h +61 -0
- data/dyncall/dyncall/dyncall_callvm_sparc.c +155 -0
- data/dyncall/dyncall/dyncall_callvm_sparc.h +44 -0
- data/dyncall/dyncall/dyncall_callvm_sparc64.c +239 -0
- data/dyncall/dyncall/dyncall_callvm_sparc64.h +47 -0
- data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +182 -0
- data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +45 -0
- data/dyncall/dyncall/dyncall_callvm_x64.c +228 -0
- data/dyncall/dyncall/dyncall_callvm_x64.h +111 -0
- data/dyncall/dyncall/dyncall_callvm_x86.c +667 -0
- data/dyncall/dyncall/dyncall_callvm_x86.h +75 -0
- data/dyncall/dyncall/dyncall_config.h +46 -0
- data/dyncall/dyncall/dyncall_macros.h +248 -0
- data/dyncall/dyncall/dyncall_signature.h +71 -0
- data/dyncall/dyncall/dyncall_struct.c +255 -0
- data/dyncall/dyncall/dyncall_struct.h +69 -0
- data/dyncall/dyncall/dyncall_types.h +74 -0
- data/dyncall/dyncall/dyncall_utils.h +38 -0
- data/dyncall/dyncall/dyncall_value.h +73 -0
- data/dyncall/dyncall/dyncall_vector.c +52 -0
- data/dyncall/dyncall/dyncall_vector.h +56 -0
- data/dyncall/dyncall/gen-masm.sh +7 -0
- data/dyncall/dyncall/mkfile +29 -0
- data/dyncall/dyncallback/CMakeLists.txt +55 -0
- data/dyncall/dyncallback/DynCallbackConfig.cmake +2 -0
- data/dyncall/dyncallback/Makefile.M +10 -0
- data/dyncall/dyncallback/Makefile.embedded +15 -0
- data/dyncall/dyncallback/Makefile.generic +20 -0
- data/dyncall/dyncallback/Nmakefile +71 -0
- data/dyncall/dyncallback/README.txt +9 -0
- data/dyncall/dyncallback/TODO +4 -0
- data/dyncall/dyncallback/dynMakefile +4 -0
- data/dyncall/dyncallback/dyncall_alloc_wx.c +35 -0
- data/dyncall/dyncallback/dyncall_alloc_wx.h +46 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +40 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +42 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +42 -0
- data/dyncall/dyncallback/dyncall_args.c +45 -0
- data/dyncall/dyncallback/dyncall_args.h +65 -0
- data/dyncall/dyncallback/dyncall_args_arm32_arm.c +112 -0
- data/dyncall/dyncallback/dyncall_args_arm32_arm.h +40 -0
- data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_args_arm32_thumb.h +32 -0
- data/dyncall/dyncallback/dyncall_args_mips.c +81 -0
- data/dyncall/dyncallback/dyncall_args_mips.h +41 -0
- data/dyncall/dyncallback/dyncall_args_ppc32.c +88 -0
- data/dyncall/dyncallback/dyncall_args_ppc32.h +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc32.c +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc32.h +37 -0
- data/dyncall/dyncallback/dyncall_args_sparc64.c +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc64.h +37 -0
- data/dyncall/dyncallback/dyncall_args_x64.c +73 -0
- data/dyncall/dyncallback/dyncall_args_x64.h +44 -0
- data/dyncall/dyncallback/dyncall_args_x86.c +121 -0
- data/dyncall/dyncallback/dyncall_args_x86.h +58 -0
- data/dyncall/dyncallback/dyncall_callback.c +45 -0
- data/dyncall/dyncallback/dyncall_callback.h +51 -0
- data/dyncall/dyncallback/dyncall_callback_arch.S +71 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm.c +63 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +45 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +73 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.s +73 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb.h +33 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.s +32 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.s +32 -0
- data/dyncall/dyncallback/dyncall_callback_mips.c +61 -0
- data/dyncall/dyncallback/dyncall_callback_mips.h +42 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.S +33 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.c +60 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.h +43 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +180 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.c +57 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.h +43 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.s +30 -0
- data/dyncall/dyncallback/dyncall_callback_sparc64.c +57 -0
- data/dyncall/dyncallback/dyncall_callback_sparc64.s +30 -0
- data/dyncall/dyncallback/dyncall_callback_x64.S +187 -0
- data/dyncall/dyncallback/dyncall_callback_x64.c +69 -0
- data/dyncall/dyncallback/dyncall_callback_x64.h +44 -0
- data/dyncall/dyncallback/dyncall_callback_x64_apple.s +122 -0
- data/dyncall/dyncallback/dyncall_callback_x64_gas.s +119 -0
- data/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s +102 -0
- data/dyncall/dyncallback/dyncall_callback_x64_masm.asm +89 -0
- data/dyncall/dyncallback/dyncall_callback_x86.S +115 -0
- data/dyncall/dyncallback/dyncall_callback_x86.c +281 -0
- data/dyncall/dyncallback/dyncall_callback_x86.h +49 -0
- data/dyncall/dyncallback/dyncall_callback_x86_8a.s +100 -0
- data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +74 -0
- data/dyncall/dyncallback/dyncall_thunk.c +47 -0
- data/dyncall/dyncallback/dyncall_thunk.h +84 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_arm.c +45 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_arm.h +40 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +35 -0
- data/dyncall/dyncallback/dyncall_thunk_mips.c +52 -0
- data/dyncall/dyncallback/dyncall_thunk_mips.h +37 -0
- data/dyncall/dyncallback/dyncall_thunk_ppc32.c +51 -0
- data/dyncall/dyncallback/dyncall_thunk_ppc32.h +40 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc32.c +32 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc32.h +36 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc64.c +32 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc64.h +36 -0
- data/dyncall/dyncallback/dyncall_thunk_x64.c +48 -0
- data/dyncall/dyncallback/dyncall_thunk_x64.h +39 -0
- data/dyncall/dyncallback/dyncall_thunk_x86.c +44 -0
- data/dyncall/dyncallback/dyncall_thunk_x86.h +39 -0
- data/dyncall/dyncallback/dyncallback.3 +134 -0
- data/dyncall/dyncallback/gen-masm.sh +8 -0
- data/dyncall/dyncallback/mkfile +29 -0
- data/dyncall/dynload/CMakeLists.txt +25 -0
- data/dyncall/dynload/DynLoadConfig.cmake +3 -0
- data/dyncall/dynload/Makefile.M +10 -0
- data/dyncall/dynload/Makefile.embedded +22 -0
- data/dyncall/dynload/Makefile.generic +18 -0
- data/dyncall/dynload/Nmakefile +57 -0
- data/dyncall/dynload/README.txt +113 -0
- data/dyncall/dynload/TODO +20 -0
- data/dyncall/dynload/dynMakefile +4 -0
- data/dyncall/dynload/dynload.3 +64 -0
- data/dyncall/dynload/dynload.c +38 -0
- data/dyncall/dynload/dynload.h +65 -0
- data/dyncall/dynload/dynload_alloc.h +40 -0
- data/dyncall/dynload/dynload_darwin.c +89 -0
- data/dyncall/dynload/dynload_syms.c +38 -0
- data/dyncall/dynload/dynload_syms_elf.c +214 -0
- data/dyncall/dynload/dynload_syms_mach-o.c +167 -0
- data/dyncall/dynload/dynload_syms_pe.c +109 -0
- data/dyncall/dynload/dynload_unix.c +57 -0
- data/dyncall/dynload/dynload_windows.c +59 -0
- data/dyncall/mkfile +36 -0
- data/dyncall/portasm/README.txt +42 -0
- data/dyncall/portasm/gen-masm.sh +3 -0
- data/dyncall/portasm/portasm-arm.S +36 -0
- data/dyncall/portasm/portasm-ppc.S +98 -0
- data/dyncall/portasm/portasm-x64-att.S +155 -0
- data/dyncall/portasm/portasm-x86.S +127 -0
- metadata +311 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
; auto-generated by gen-masm.sh
|
|
2
|
+
.386
|
|
3
|
+
.MODEL FLAT
|
|
4
|
+
.CODE
|
|
5
|
+
|
|
6
|
+
DCThunk_size = 16
|
|
7
|
+
DCArgs_size = 20
|
|
8
|
+
DCValue_size = 8
|
|
9
|
+
CTX_thunk = 0
|
|
10
|
+
CTX_phandler = 16
|
|
11
|
+
CTX_pargsvt = 20
|
|
12
|
+
CTX_stack_cleanup = 24
|
|
13
|
+
CTX_userdata = 28
|
|
14
|
+
frame_arg0 = 8
|
|
15
|
+
frame_ret = 4
|
|
16
|
+
frame_parent = 0
|
|
17
|
+
frame_CTX = -4
|
|
18
|
+
frame_DCArgs = -24
|
|
19
|
+
frame_DCValue = -32
|
|
20
|
+
_dcCallbackThunkEntry PROC
|
|
21
|
+
OPTION PROLOGUE:NONE, EPILOGUE:NONE
|
|
22
|
+
push EBP
|
|
23
|
+
mov EBP,ESP
|
|
24
|
+
push EAX
|
|
25
|
+
push 0
|
|
26
|
+
push EDX
|
|
27
|
+
push ECX
|
|
28
|
+
lea ECX,dword ptr [EBP+frame_arg0]
|
|
29
|
+
push ECX
|
|
30
|
+
push dword ptr [EAX+CTX_pargsvt]
|
|
31
|
+
mov ECX,ESP
|
|
32
|
+
push 0
|
|
33
|
+
push 0
|
|
34
|
+
mov EDX,ESP
|
|
35
|
+
and ESP,-16
|
|
36
|
+
push dword ptr [EAX+CTX_userdata]
|
|
37
|
+
push EDX
|
|
38
|
+
push ECX
|
|
39
|
+
push EAX
|
|
40
|
+
call dword ptr [EAX+CTX_phandler]
|
|
41
|
+
mov ESP,EBP
|
|
42
|
+
pop ECX
|
|
43
|
+
pop ECX
|
|
44
|
+
mov EDX,dword ptr [EBP+frame_CTX]
|
|
45
|
+
add ESP,dword ptr [EDX+CTX_stack_cleanup]
|
|
46
|
+
push ECX
|
|
47
|
+
lea EDX,dword ptr [EBP+frame_DCValue]
|
|
48
|
+
mov EBP,dword ptr [EBP+0]
|
|
49
|
+
cmp AL,118
|
|
50
|
+
je return_void
|
|
51
|
+
cmp AL,100
|
|
52
|
+
je return_f64
|
|
53
|
+
cmp AL,102
|
|
54
|
+
je return_f32
|
|
55
|
+
cmp AL,108
|
|
56
|
+
je return_i64
|
|
57
|
+
cmp AL,76
|
|
58
|
+
je return_i64
|
|
59
|
+
return_i32:
|
|
60
|
+
mov EAX,dword ptr [EDX+0]
|
|
61
|
+
ret
|
|
62
|
+
return_i64:
|
|
63
|
+
mov EAX,dword ptr [EDX+0]
|
|
64
|
+
mov EDX,dword ptr [EDX+4]
|
|
65
|
+
ret
|
|
66
|
+
return_f32:
|
|
67
|
+
fld dword ptr [EDX+0]
|
|
68
|
+
ret
|
|
69
|
+
return_f64:
|
|
70
|
+
fld qword ptr [EDX+0]
|
|
71
|
+
return_void:
|
|
72
|
+
ret
|
|
73
|
+
_dcCallbackThunkEntry ENDP
|
|
74
|
+
END
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk.c
|
|
6
|
+
Description: Thunk - Implementation Back-end selection
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#include "dyncall_thunk.h"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#if defined(DC__Arch_Intel_x86)
|
|
31
|
+
# include "dyncall_thunk_x86.c"
|
|
32
|
+
#elif defined(DC__Arch_AMD64)
|
|
33
|
+
# include "dyncall_thunk_x64.c"
|
|
34
|
+
#elif defined(DC__Arch_PowerPC)
|
|
35
|
+
# include "dyncall_thunk_ppc32.c"
|
|
36
|
+
#elif defined(DC__Arch_ARM_ARM)
|
|
37
|
+
#include "dyncall_thunk_arm32_arm.c"
|
|
38
|
+
#elif defined(DC__Arch_ARM_THUMB)
|
|
39
|
+
#include "dyncall_thunk_arm32_thumb.c"
|
|
40
|
+
#elif defined(DC__Arch_MIPS)
|
|
41
|
+
#include "dyncall_thunk_mips.c"
|
|
42
|
+
#elif defined(DC__Arch_Sparc)
|
|
43
|
+
#include "dyncall_thunk_sparc32.c"
|
|
44
|
+
#elif defined(DC__Arch_Sparcv9)
|
|
45
|
+
#include "dyncall_thunk_sparc64.c"
|
|
46
|
+
#endif
|
|
47
|
+
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk.h
|
|
6
|
+
Description: Thunk - Interface
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#ifndef DYNCALL_THUNK_H
|
|
28
|
+
#define DYNCALL_THUNK_H
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
** dyncall thunks
|
|
32
|
+
**
|
|
33
|
+
** thunks are small-size hybrid code/data objects, created at run-time to
|
|
34
|
+
** be used as function pointers with associated data and entry functions.
|
|
35
|
+
**
|
|
36
|
+
** The header contains code, that does load its address into a designated scratch
|
|
37
|
+
** register and will jump to a thunk function.
|
|
38
|
+
**
|
|
39
|
+
** Thunk entry procedures are compiled functions, that are called as a result of
|
|
40
|
+
** a thunk function.
|
|
41
|
+
** There is one thunk entry currently for supporting callbacks.
|
|
42
|
+
**
|
|
43
|
+
** Thunk context register ( ::= an available scratch register in the calling convention):
|
|
44
|
+
**
|
|
45
|
+
** x86: eax
|
|
46
|
+
** x64: rax
|
|
47
|
+
** ppc: r2
|
|
48
|
+
**
|
|
49
|
+
**/
|
|
50
|
+
|
|
51
|
+
#include "../dyncall/dyncall_macros.h"
|
|
52
|
+
|
|
53
|
+
typedef struct DCThunk_ DCThunk;
|
|
54
|
+
|
|
55
|
+
#ifdef __cplusplus
|
|
56
|
+
extern "C" {
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
void dcbInitThunk(DCThunk* p, void (*entry)());
|
|
60
|
+
|
|
61
|
+
#if defined(DC__Arch_Intel_x86)
|
|
62
|
+
#include "dyncall_thunk_x86.h"
|
|
63
|
+
#elif defined (DC__Arch_AMD64)
|
|
64
|
+
#include "dyncall_thunk_x64.h"
|
|
65
|
+
#elif defined (DC__Arch_PowerPC)
|
|
66
|
+
#include "dyncall_thunk_ppc32.h"
|
|
67
|
+
#elif defined (DC__Arch_ARM_ARM)
|
|
68
|
+
#include "dyncall_thunk_arm32_arm.h"
|
|
69
|
+
#elif defined (DC__Arch_ARM_THUMB)
|
|
70
|
+
#include "dyncall_thunk_arm32_thumb.h"
|
|
71
|
+
#elif defined (DC__Arch_MIPS)
|
|
72
|
+
#include "dyncall_thunk_mips.h"
|
|
73
|
+
#elif defined (DC__Arch_Sparc)
|
|
74
|
+
#include "dyncall_thunk_sparc32.h"
|
|
75
|
+
#elif defined (DC__Arch_Sparcv9)
|
|
76
|
+
#include "dyncall_thunk_sparc64.h"
|
|
77
|
+
#endif
|
|
78
|
+
|
|
79
|
+
#ifdef __cplusplus
|
|
80
|
+
}
|
|
81
|
+
#endif
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
#endif /* DYNCALL_THUNK_H */
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_arm32_arm.c
|
|
6
|
+
Description: Thunk - Implementation for ARM32 (ARM mode)
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#include "dyncall_thunk.h"
|
|
27
|
+
|
|
28
|
+
void dcbInitThunk(DCThunk* p, void (*entry)())
|
|
29
|
+
{
|
|
30
|
+
/*
|
|
31
|
+
# ARM32 (ARM mode) thunk code:
|
|
32
|
+
.code 32
|
|
33
|
+
sub %r12, %r15, #8
|
|
34
|
+
ldr %r15, [%r15, #-4]
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/* This code loads 'entry+8' into r15. The -4 is needed, because r15 as */
|
|
38
|
+
/* program counter points to the current instruction+8, but the pointer */
|
|
39
|
+
/* to the code to execute follows the ldr instruction directly. Add 8 to */
|
|
40
|
+
/* entry for similar reasons. NOTE: Latter seems to be implicit with */
|
|
41
|
+
/* latest update of arm-eabi tools. */
|
|
42
|
+
p->code[0] = 0xe24fc008UL; /* sub %r12, %r15, #8 */
|
|
43
|
+
p->code[1] = 0xe51ff004UL; /* ldr %r15, [%r15, #-4] */
|
|
44
|
+
p->entry = entry/*+8*/;
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_arm32_arm.h
|
|
6
|
+
Description: Thunk - Header for ARM32 (ARM mode)
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#ifndef DYNCALL_THUNK_ARM32_ARM_H
|
|
27
|
+
#define DYNCALL_THUNK_ARM32_ARM_H
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
struct DCThunk_
|
|
31
|
+
{
|
|
32
|
+
unsigned int code[2];
|
|
33
|
+
void (*entry)();
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
#define DCTHUNK_ARM32_ARM_SIZE 12
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#endif /* DYNCALL_THUNK_ARM32_ARM_H */
|
|
40
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_arm32_thumb.c
|
|
6
|
+
Description: Thunk - Implementation for ARM32 (THUMB mode)
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#include "dyncall_thunk_arm32_arm.c" /* Since we can mix ARM and THUMB */
|
|
28
|
+
/* assembly, reuse the ARM mode code */
|
|
29
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_arm32_thumb.h
|
|
6
|
+
Description: Thunk - Header for ARM32 (THUMB mode)
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2007-2011 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
|
+
#ifndef DYNCALL_THUNK_ARM32_THUMB_H
|
|
27
|
+
#define DYNCALL_THUNK_ARM32_THUMB_H
|
|
28
|
+
|
|
29
|
+
#include "dyncall_thunk_arm32_arm.h" /* Uses same code as ARM mode. */
|
|
30
|
+
|
|
31
|
+
#define DCTHUNK_ARM32_THUMB_SIZE 12
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#endif /* DYNCALL_THUNK_ARM32_THUMB_H */
|
|
35
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_mips.c
|
|
6
|
+
Description: Thunk - Implementation for MIPS
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2013 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
|
+
#include "dyncall_thunk.h"
|
|
27
|
+
|
|
28
|
+
unsigned short hi16(x) { return ( (unsigned short) (((unsigned int)x)>>16UL) ); }
|
|
29
|
+
unsigned short lo16(x) { return ( (unsigned short) ((unsigned int)x) ); }
|
|
30
|
+
|
|
31
|
+
void dcbInitThunk(DCThunk* p, void (*entry)())
|
|
32
|
+
{
|
|
33
|
+
/*
|
|
34
|
+
mips thunk code:
|
|
35
|
+
lui $t4, hi(p)
|
|
36
|
+
lui $t5, hi(entry)
|
|
37
|
+
ori $t5, $t5, lo(entry)
|
|
38
|
+
jr $t5
|
|
39
|
+
ori $t4, $t4, lo(p) - branch delay slot
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
p->data[0] = hi16(p); /* lui $t4, hi(p) */
|
|
43
|
+
p->data[1] = 0x3c0c;
|
|
44
|
+
p->data[2] = hi16(entry); /* lui $t5, hi(entry) */
|
|
45
|
+
p->data[3] = 0x3c0d;
|
|
46
|
+
p->data[4] = lo16(entry); /* ori $t5, $t5, lo(entry) */
|
|
47
|
+
p->data[5] = 0x35ad;
|
|
48
|
+
p->jump = 0x01a00008; /* jr $t5 */
|
|
49
|
+
p->bddt[0] = lo16(p); /* ori $t4, $t4, lo(p) - branch delay slot */
|
|
50
|
+
p->bddt[1] = 0x358c;
|
|
51
|
+
}
|
|
52
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncallback
|
|
5
|
+
File: dyncallback/dyncall_thunk_mips.h
|
|
6
|
+
Description: Thunk - Header for MIPS
|
|
7
|
+
License:
|
|
8
|
+
|
|
9
|
+
Copyright (c) 2013 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
|
+
#ifndef DYNCALL_THUNK_MIPS_H
|
|
27
|
+
#define DYNCALL_THUNK_MIPS_H
|
|
28
|
+
|
|
29
|
+
struct DCThunk_
|
|
30
|
+
{
|
|
31
|
+
unsigned short data[6];
|
|
32
|
+
unsigned int jump;
|
|
33
|
+
unsigned short bddt[2];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
#endif /* DYNCALL_THUNK_MIPS_H */
|
|
37
|
+
|