rbdc 0.8.7 → 0.9.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.
Files changed (215) hide show
  1. checksums.yaml +7 -0
  2. data/{bindings → dyncall-bindings}/ruby/rbdc/extconf.rb +1 -1
  3. data/{bindings → dyncall-bindings}/ruby/rbdc/rbdc.c +3 -1
  4. data/dyncall/AUTHORS +2 -0
  5. data/dyncall/BUGS +1 -0
  6. data/dyncall/CMakeLists.txt +10 -2
  7. data/dyncall/ChangeLog +46 -11
  8. data/dyncall/LICENSE +4 -1
  9. data/dyncall/Makefile.embedded +7 -3
  10. data/dyncall/README +23 -14
  11. data/dyncall/ToDo +27 -28
  12. data/dyncall/autovar/autovar_ABI.h +3 -2
  13. data/dyncall/autovar/autovar_ARCH.h +13 -10
  14. data/dyncall/autovar/autovar_CC.h +3 -2
  15. data/dyncall/autovar/autovar_OS.h +3 -2
  16. data/dyncall/autovar/autovar_OSFAMILY.h +3 -2
  17. data/dyncall/buildsys/scripts/batch-build-linux.sh +6 -2
  18. data/dyncall/buildsys/scripts/batch-build-minix.sh +2 -0
  19. data/dyncall/buildsys/scripts/batch-build-psp.sh +4 -1
  20. data/dyncall/buildsys/scripts/elf-to-psp-eboot.sh +19 -0
  21. data/dyncall/buildsys/scripts/setenv-cross-ios.sh +0 -0
  22. data/dyncall/buildsys/scripts/setenv-sdk-ios.sh +0 -0
  23. data/dyncall/configure +83 -30
  24. data/dyncall/dyncall/dyncall.3 +16 -4
  25. data/dyncall/dyncall/dyncall.h +9 -1
  26. data/dyncall/dyncall/dyncall_alloc.h +2 -1
  27. data/dyncall/dyncall/dyncall_api.c +2 -1
  28. data/dyncall/dyncall/dyncall_call.S +9 -2
  29. data/dyncall/dyncall/dyncall_call_arm32_arm.S +2 -1
  30. data/dyncall/dyncall/dyncall_call_arm32_arm.h +8 -2
  31. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +11 -19
  32. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +15 -2
  33. data/dyncall/dyncall/dyncall_call_arm32_thumb.h +8 -6
  34. data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +10 -18
  35. data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +0 -16
  36. data/dyncall/dyncall/dyncall_call_arm64.S +226 -0
  37. data/dyncall/dyncall/dyncall_call_arm64.h +45 -0
  38. data/dyncall/dyncall/dyncall_call_mips.h +2 -1
  39. data/dyncall/dyncall/dyncall_call_mips_eabi.h +2 -1
  40. data/dyncall/dyncall/dyncall_call_mips_gas.S +2 -1
  41. data/dyncall/dyncall/dyncall_call_mips_n32.h +2 -1
  42. data/dyncall/dyncall/dyncall_call_mips_n64.h +2 -1
  43. data/dyncall/dyncall/dyncall_call_mips_o32.h +2 -1
  44. data/dyncall/dyncall/dyncall_call_ppc32.S +27 -2
  45. data/dyncall/dyncall/dyncall_call_ppc32.h +2 -2
  46. data/dyncall/dyncall/dyncall_call_ppc64.S +210 -0
  47. data/dyncall/dyncall/dyncall_call_ppc64.h +55 -0
  48. data/dyncall/dyncall/dyncall_call_sparc.S +2 -1
  49. data/dyncall/dyncall/dyncall_call_sparc.h +2 -1
  50. data/dyncall/dyncall/dyncall_call_sparc64.S +2 -1
  51. data/dyncall/dyncall/dyncall_call_sparc64.h +2 -1
  52. data/dyncall/dyncall/dyncall_call_sparc_v9.S +25 -23
  53. data/dyncall/dyncall/dyncall_call_sparc_v9.h +2 -1
  54. data/dyncall/dyncall/dyncall_call_x64-att.S +2 -1
  55. data/dyncall/dyncall/dyncall_call_x64.S +2 -1
  56. data/dyncall/dyncall/dyncall_call_x64.h +2 -1
  57. data/dyncall/dyncall/dyncall_call_x86.S +2 -1
  58. data/dyncall/dyncall/dyncall_call_x86.h +2 -1
  59. data/dyncall/dyncall/dyncall_callf.c +56 -66
  60. data/dyncall/dyncall/dyncall_callf.h +5 -1
  61. data/dyncall/dyncall/dyncall_callvm.c +11 -2
  62. data/dyncall/dyncall/dyncall_callvm.h +2 -1
  63. data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +2 -1
  64. data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +2 -1
  65. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +60 -30
  66. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +3 -2
  67. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +2 -24
  68. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +2 -1
  69. data/dyncall/dyncall/dyncall_callvm_arm64.c +165 -0
  70. data/dyncall/dyncall/dyncall_callvm_arm64.h +51 -0
  71. data/dyncall/dyncall/dyncall_callvm_arm64_apple.c +272 -0
  72. data/dyncall/dyncall/dyncall_callvm_base.c +2 -1
  73. data/dyncall/dyncall/dyncall_callvm_mips.c +2 -1
  74. data/dyncall/dyncall/dyncall_callvm_mips.h +2 -1
  75. data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +2 -1
  76. data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +2 -1
  77. data/dyncall/dyncall/dyncall_callvm_mips_n32.c +2 -1
  78. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +2 -1
  79. data/dyncall/dyncall/dyncall_callvm_mips_n64.h +2 -1
  80. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +2 -1
  81. data/dyncall/dyncall/dyncall_callvm_mips_o32.h +2 -1
  82. data/dyncall/dyncall/dyncall_callvm_ppc32.c +45 -2
  83. data/dyncall/dyncall/dyncall_callvm_ppc32.h +2 -1
  84. data/dyncall/dyncall/dyncall_callvm_ppc64.c +351 -0
  85. data/dyncall/dyncall/dyncall_callvm_ppc64.h +60 -0
  86. data/dyncall/dyncall/dyncall_callvm_sparc.c +2 -1
  87. data/dyncall/dyncall/dyncall_callvm_sparc.h +2 -1
  88. data/dyncall/dyncall/dyncall_callvm_sparc64.c +2 -2
  89. data/dyncall/dyncall/dyncall_callvm_sparc64.h +2 -1
  90. data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +3 -3
  91. data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +2 -1
  92. data/dyncall/dyncall/dyncall_callvm_x64.c +2 -1
  93. data/dyncall/dyncall/dyncall_callvm_x64.h +2 -1
  94. data/dyncall/dyncall/dyncall_callvm_x86.c +2 -1
  95. data/dyncall/dyncall/dyncall_callvm_x86.h +2 -1
  96. data/dyncall/dyncall/dyncall_config.h +2 -1
  97. data/dyncall/dyncall/dyncall_macros.h +46 -9
  98. data/dyncall/dyncall/dyncall_signature.h +2 -1
  99. data/dyncall/dyncall/dyncall_struct.c +2 -1
  100. data/dyncall/dyncall/dyncall_struct.h +2 -1
  101. data/dyncall/dyncall/dyncall_types.h +2 -1
  102. data/dyncall/dyncall/dyncall_utils.h +2 -1
  103. data/dyncall/dyncall/dyncall_value.h +19 -1
  104. data/dyncall/dyncall/dyncall_vector.c +2 -1
  105. data/dyncall/dyncall/dyncall_vector.h +3 -1
  106. data/dyncall/dyncall/gen-masm.sh +0 -0
  107. data/dyncall/dyncallback/Makefile.generic +1 -1
  108. data/dyncall/dyncallback/dyncall_alloc_wx.c +2 -1
  109. data/dyncall/dyncallback/dyncall_alloc_wx.h +2 -1
  110. data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +2 -1
  111. data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +2 -1
  112. data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +2 -1
  113. data/dyncall/dyncallback/dyncall_args.c +22 -10
  114. data/dyncall/dyncallback/dyncall_args.h +2 -1
  115. data/dyncall/dyncallback/dyncall_args_arm32_arm.c +35 -4
  116. data/dyncall/dyncallback/dyncall_args_arm32_arm.h +7 -1
  117. data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +2 -1
  118. data/dyncall/dyncallback/dyncall_args_arm32_thumb.h +2 -1
  119. data/dyncall/dyncallback/dyncall_args_arm64.c +77 -0
  120. data/dyncall/dyncallback/dyncall_args_arm64_apple.c +160 -0
  121. data/dyncall/dyncallback/dyncall_args_mips.c +3 -2
  122. data/dyncall/dyncallback/dyncall_args_mips.h +3 -2
  123. data/dyncall/dyncallback/dyncall_args_ppc32.c +2 -1
  124. data/dyncall/dyncallback/dyncall_args_ppc32.h +9 -7
  125. data/dyncall/dyncallback/dyncall_args_ppc32_sysv.c +95 -0
  126. data/dyncall/dyncallback/dyncall_args_ppc64.c +71 -0
  127. data/dyncall/dyncallback/dyncall_args_ppc64.h +40 -0
  128. data/dyncall/dyncallback/dyncall_args_sparc32.c +2 -1
  129. data/dyncall/dyncallback/dyncall_args_sparc32.h +2 -1
  130. data/dyncall/dyncallback/dyncall_args_sparc64.c +2 -1
  131. data/dyncall/dyncallback/dyncall_args_sparc64.h +2 -1
  132. data/dyncall/dyncallback/dyncall_args_x64.c +2 -1
  133. data/dyncall/dyncallback/dyncall_args_x64.h +2 -1
  134. data/dyncall/dyncallback/dyncall_args_x86.c +2 -1
  135. data/dyncall/dyncallback/dyncall_args_x86.h +2 -1
  136. data/dyncall/dyncallback/dyncall_callback.c +7 -2
  137. data/dyncall/dyncallback/dyncall_callback.h +3 -1
  138. data/dyncall/dyncallback/dyncall_callback_arch.S +14 -6
  139. data/dyncall/dyncallback/dyncall_callback_arm32_arm.c +2 -1
  140. data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +2 -1
  141. data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +1 -1
  142. data/dyncall/dyncallback/{dyncall_callback_arm32_arm_gas.s → dyncall_callback_arm32_arm_gas.S} +17 -7
  143. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.c +2 -1
  144. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.h +2 -1
  145. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb_apple.s → dyncall_callback_arm32_thumb_apple.S} +2 -2
  146. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb_gas.s → dyncall_callback_arm32_thumb_gas.S} +2 -2
  147. data/dyncall/dyncallback/dyncall_callback_arm64.S +111 -0
  148. data/dyncall/dyncallback/dyncall_callback_arm64.c +71 -0
  149. data/dyncall/dyncallback/dyncall_callback_mips.c +3 -2
  150. data/dyncall/dyncallback/dyncall_callback_mips.h +3 -2
  151. data/dyncall/dyncallback/dyncall_callback_ppc32.S +115 -4
  152. data/dyncall/dyncallback/dyncall_callback_ppc32.c +3 -2
  153. data/dyncall/dyncallback/dyncall_callback_ppc32.h +6 -6
  154. data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +6 -5
  155. data/dyncall/dyncallback/dyncall_callback_ppc64.S +170 -0
  156. data/dyncall/dyncallback/dyncall_callback_ppc64.c +60 -0
  157. data/dyncall/dyncallback/dyncall_callback_ppc64.h +56 -0
  158. data/dyncall/dyncallback/dyncall_callback_sparc32.c +2 -1
  159. data/dyncall/dyncallback/dyncall_callback_sparc32.h +2 -1
  160. data/dyncall/dyncallback/dyncall_callback_sparc32.s +1 -1
  161. data/dyncall/dyncallback/dyncall_callback_sparc64.c +2 -1
  162. data/dyncall/dyncallback/dyncall_callback_sparc64.s +1 -1
  163. data/dyncall/dyncallback/dyncall_callback_x64.S +5 -12
  164. data/dyncall/dyncallback/dyncall_callback_x64.c +2 -1
  165. data/dyncall/dyncallback/dyncall_callback_x64.h +2 -1
  166. data/dyncall/dyncallback/dyncall_callback_x64_masm.asm +0 -7
  167. data/dyncall/dyncallback/dyncall_callback_x86.S +5 -12
  168. data/dyncall/dyncallback/dyncall_callback_x86.c +2 -1
  169. data/dyncall/dyncallback/dyncall_callback_x86.h +2 -1
  170. data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +2 -11
  171. data/dyncall/dyncallback/dyncall_thunk.c +11 -3
  172. data/dyncall/dyncallback/dyncall_thunk.h +8 -2
  173. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.c +7 -7
  174. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.h +2 -1
  175. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +2 -1
  176. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +2 -1
  177. data/dyncall/dyncallback/dyncall_thunk_arm64.c +64 -0
  178. data/dyncall/dyncallback/dyncall_thunk_arm64.h +42 -0
  179. data/dyncall/dyncallback/dyncall_thunk_mips.c +49 -17
  180. data/dyncall/dyncallback/dyncall_thunk_mips.h +3 -2
  181. data/dyncall/dyncallback/dyncall_thunk_ppc32.c +3 -2
  182. data/dyncall/dyncallback/dyncall_thunk_ppc32.h +7 -7
  183. data/dyncall/dyncallback/dyncall_thunk_ppc32_sysv.c +50 -0
  184. data/dyncall/dyncallback/dyncall_thunk_ppc64.c +87 -0
  185. data/dyncall/dyncallback/dyncall_thunk_ppc64.h +55 -0
  186. data/dyncall/dyncallback/dyncall_thunk_sparc32.c +2 -1
  187. data/dyncall/dyncallback/dyncall_thunk_sparc32.h +2 -1
  188. data/dyncall/dyncallback/dyncall_thunk_sparc64.c +2 -1
  189. data/dyncall/dyncallback/dyncall_thunk_sparc64.h +2 -1
  190. data/dyncall/dyncallback/dyncall_thunk_x64.c +2 -1
  191. data/dyncall/dyncallback/dyncall_thunk_x64.h +2 -1
  192. data/dyncall/dyncallback/dyncall_thunk_x86.c +2 -1
  193. data/dyncall/dyncallback/dyncall_thunk_x86.h +2 -1
  194. data/dyncall/dyncallback/dyncallback.3 +3 -3
  195. data/dyncall/dyncallback/gen-masm.sh +0 -0
  196. data/dyncall/dynload/dynload.c +2 -1
  197. data/dyncall/dynload/dynload.h +2 -1
  198. data/dyncall/dynload/dynload_alloc.h +2 -1
  199. data/dyncall/dynload/dynload_darwin.c +2 -1
  200. data/dyncall/dynload/dynload_syms.c +2 -1
  201. data/dyncall/dynload/dynload_syms_elf.c +2 -1
  202. data/dyncall/dynload/dynload_syms_mach-o.c +3 -2
  203. data/dyncall/dynload/dynload_syms_pe.c +2 -1
  204. data/dyncall/dynload/dynload_unix.c +2 -1
  205. data/dyncall/dynload/dynload_windows.c +2 -1
  206. data/dyncall/portasm/gen-masm.sh +0 -0
  207. data/dyncall/portasm/portasm-arm.S +3 -2
  208. data/dyncall/portasm/portasm-ppc.S +2 -1
  209. data/dyncall/portasm/portasm-ppc64.S +119 -0
  210. data/dyncall/portasm/portasm-x64-att.S +2 -1
  211. data/dyncall/portasm/portasm-x86.S +2 -1
  212. metadata +39 -18
  213. data/dyncall/dyncallback/dyncall_callback_x64_apple.s +0 -122
  214. data/dyncall/dyncallback/dyncall_callback_x64_gas.s +0 -119
  215. data/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s +0 -102
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Interface
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -32,6 +32,8 @@
32
32
 
33
33
  typedef struct DCCallback DCCallback;
34
34
 
35
+ // TODO: return value is the type encoded as a signature char (character of the set [vBcCsSiIjJlLfd]).
36
+
35
37
  typedef char (DCCallbackHandler)(DCCallback* pcb, DCArgs* args, DCValue* result, void* userdata);
36
38
 
37
39
  #ifdef __cplusplus
@@ -6,7 +6,7 @@
6
6
  Description: Callback Thunk - Implementation Back-end selector
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2013 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -40,32 +40,40 @@
40
40
  # error Unsupported Architecture on Plan9.
41
41
  # endif
42
42
  #elif defined(DC__OS_Darwin)
43
- # if defined(DC__Arch_PowerPC)
43
+ # if defined(DC__Arch_PPC32)
44
44
  # include "dyncall_callback_ppc32_apple.s"
45
45
  # elif defined(DC__Arch_ARM_ARM)
46
46
  # include "dyncall_callback_arm32_arm_apple.s"
47
47
  # elif defined(DC__Arch_ARM_THUMB)
48
- # include "dyncall_callback_arm32_thumb_apple.s"
48
+ # include "dyncall_callback_arm32_thumb_apple.S"
49
49
  # elif defined(DC__Arch_AMD64)
50
50
  # include "dyncall_callback_x64.S"
51
51
  # elif defined(DC__Arch_Intel_x86)
52
52
  # include "dyncall_callback_x86.S"
53
+ # elif defined(DC__Arch_ARM64)
54
+ # include "dyncall_callback_arm64.S"
55
+ # else // e.g. PowerPC G5, which is PPC64, etc.
56
+ # error Unsupported Architecture on Darwin/OS X.
53
57
  # endif
54
58
  #else
55
59
  # if defined(DC__Arch_Intel_x86)
56
60
  # include "dyncall_callback_x86.S"
57
61
  # elif defined(DC__Arch_AMD64)
58
62
  # include "dyncall_callback_x64.S"
59
- # elif defined(DC__Arch_PowerPC)
63
+ # elif defined(DC__Arch_PPC32)
60
64
  # include "dyncall_callback_ppc32.S"
65
+ # elif defined(DC__Arch_PPC64)
66
+ # include "dyncall_callback_ppc64.S"
61
67
  # elif defined(DC__Arch_ARM_ARM)
62
- # include "dyncall_callback_arm32_arm_gas.s"
68
+ # include "dyncall_callback_arm32_arm_gas.S"
63
69
  # elif defined(DC__Arch_ARM_THUMB)
64
- # include "dyncall_callback_arm32_thumb_gas.s"
70
+ # include "dyncall_callback_arm32_thumb_gas.S"
65
71
  # elif defined(DC__Arch_Sparc)
66
72
  # include "dyncall_callback_sparc32.s"
67
73
  # elif defined(DC__Arch_Sparcv9)
68
74
  # include "dyncall_callback_sparc64.s"
75
+ # elif defined(DC__Arch_ARM64)
76
+ # include "dyncall_callback_arm64.S"
69
77
  # endif
70
78
  #endif
71
79
 
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for ARM32 (ARM mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #include "dyncall_callback_arm32_arm.h"
28
29
  #include "dyncall_args_arm32_arm.h"
29
30
 
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Header for ARM32 (ARM mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #ifndef DYNCALL_CALLBACK_ARM32_ARM_H_
28
29
  #define DYNCALL_CALLBACK_ARM32_ARM_H_
29
30
 
@@ -32,13 +32,13 @@
32
32
  /* sizes */
33
33
  .set DCThunk_size , 8
34
34
  .set DCArgs_size , 24
35
+ .set DCCallback_size, 20
35
36
  .set DCValue_size , 8
36
37
 
37
38
  /* struct DCCallback offsets and size */
38
39
  .set CTX_thunk , 0
39
40
  .set CTX_handler , 12
40
41
  .set CTX_userdata , 16
41
- .set DCCallback_size, 20
42
42
 
43
43
 
44
44
  /* Called by thunk - thunk stores pointer to DCCallback in r12 */
@@ -2,7 +2,7 @@
2
2
 
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
- File: dyncallback/dyncall_callback_arm32_arm_gas.s
5
+ File: dyncallback/dyncall_callback_arm32_arm_gas.S
6
6
  Description: Callback Thunk - Implementation for ARM32 (ARM mode)
7
7
  License:
8
8
 
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+ #include "../dyncall/dyncall_macros.h"
26
27
 
27
28
  .text
28
29
  .code 32 /* ARM mode */
@@ -30,15 +31,16 @@
30
31
  .globl dcCallbackThunkEntry
31
32
 
32
33
  /* sizes */
33
- .set DCThunk_size , 8
34
- .set DCArgs_size , 24
34
+ /* .set DCThunk_size , 8 */
35
+ /* .set DCArgs_size , 24 */ /* for EABI/ATPCS/... */
36
+ /* .set DCArgs_size , 96 */ /* for armhf */
37
+ /* .set DCCallback_size, 20 */
35
38
  .set DCValue_size , 8
36
39
 
37
40
  /* struct DCCallback offsets and size */
38
- .set CTX_thunk , 0
41
+ /* .set CTX_thunk , 0 */
39
42
  .set CTX_handler , 12
40
43
  .set CTX_userdata , 16
41
- .set DCCallback_size, 20
42
44
 
43
45
 
44
46
  /* Called by thunk - thunk stores pointer to DCCallback in r12 */
@@ -51,7 +53,12 @@ dcCallbackThunkEntry:
51
53
 
52
54
  /* Grab arguments. */
53
55
  mov %r4, #0
54
- stmdb %r13!, {%r0-%r4, %r11} /* Spill first 4 args to DCArgs, along with reg_count and (stack) pointer to remaining args. */
56
+ #if defined(DC__ABI_ARM_HF)
57
+ stmdb %r13!, {%r4} /* Init freg_count and dreg_count to 0 */
58
+ stmdb %r13!, {%r4}
59
+ fstmdbd %r13!, {d0-d7} /* Store all fp-registers in DCArgs' f[16] */
60
+ #endif
61
+ stmdb %r13!, {%r0-%r4, %r11} /* Spill first 4 args to DCArgs, along with reg_count (init to 0) and (stack) pointer to remaining args. */
55
62
 
56
63
  /* Prepare callback handler call. */
57
64
  mov %r0, %r12 /* Parameter 0 (r0) = DCCallback pointer (r12, pointer to thunk). */
@@ -62,11 +69,14 @@ dcCallbackThunkEntry:
62
69
 
63
70
  /* Call. */
64
71
  ldr %r4, [%r12, #CTX_handler] /* Load callback handler pointer into r4. */
65
- mov %r14, %r15 /* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */
72
+ mov %r14, %r15 /* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */
66
73
  bx %r4 /* Call. */
67
74
 
68
75
  /* Return value. */
69
76
  ldmia %r13, {%r0, %r1} /* Load return value in r0 and r1. */
77
+ #if defined(DC__ABI_ARM_HF)
78
+ fldmiad %r13, {%d0} /* Same for floating point return value (if any). */
79
+ #endif
70
80
 
71
81
  /* Epilog. */
72
82
  ldmdb %r11, {%r4-%r11, %r13, %r15} /* Restore permanent registers (restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for ARM32 (THUMB mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #include "dyncall_callback_arm32_thumb.h"
28
29
  #include "dyncall_callback_arm32_arm.c" /* Uses same code as ARM mode. */
29
30
 
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Header for ARM32 (THUMB mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #ifndef DYNCALL_CALLBACK_ARM32_THUMB_H_
28
29
  #define DYNCALL_CALLBACK_ARM32_THUMB_H_
29
30
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
- File: dyncallback/dyncall_callback_arm32_thumb_gas.s
5
+ File: dyncallback/dyncall_callback_arm32_thumb_apple.S
6
6
  Description: Callback Thunk - Implementation for ARM32 (THUMB mode)
7
7
  License:
8
8
 
@@ -28,5 +28,5 @@
28
28
  /* into ARM mode, the parameters passed use the same registers/stack spase */
29
29
  /* as the ARM mode, and the bx instruction switches back to THUMB mode, if */
30
30
  /* the function to be called has a "THUMB function address" (=address+1). */
31
- .include "dyncall_callback_arm32_arm_apple.s"
31
+ #include "dyncall_callback_arm32_arm_apple.s"
32
32
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
- File: dyncallback/dyncall_callback_arm32_thumb_gas.s
5
+ File: dyncallback/dyncall_callback_arm32_thumb_gas.S
6
6
  Description: Callback Thunk - Implementation for ARM32 (THUMB mode)
7
7
  License:
8
8
 
@@ -28,5 +28,5 @@
28
28
  /* into ARM mode, the parameters passed use the same registers/stack space */
29
29
  /* as the ARM mode, and the bx instruction switches back to THUMB mode, if */
30
30
  /* the function to be called has a "THUMB function address" (=address+1). */
31
- .include "dyncall_callback_arm32_arm_gas.s"
31
+ #include "dyncall_callback_arm32_arm_gas.S"
32
32
 
@@ -0,0 +1,111 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_callback_arm64.S
6
+ Description: Callback Thunk - Implementation for ARM64 / ARMv8 / AAPCS64
7
+ License:
8
+
9
+ Copyright (c) 2015 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
+ // struct DCCallback
26
+ // type off size
27
+ // ---------|------|------
28
+ // DCThunk | 0 | 32
29
+ // handler | 32 | 8
30
+ // userdata | 40 | 8
31
+
32
+ #include "../portasm/portasm-arm.S"
33
+
34
+ .align 4
35
+ GLOBAL_C(dcCallbackThunkEntry)
36
+ ENTRY_C(dcCallbackThunkEntry)
37
+
38
+ // input:
39
+ // x9: DCCallback* pcb
40
+ // x0..x7 ?? GP regs
41
+ // d0..d7 ?? FP/SIMD regs
42
+ // sp... ?? arguments on stack
43
+ //
44
+ // locals:
45
+ // type off size
46
+ // ---------|------|------
47
+ // Frame 0 16
48
+ // DCArgs 16 168
49
+ // DCValue 184 16
50
+ //
51
+ // size 200
52
+ // aligned 208
53
+ //
54
+
55
+ // locals:
56
+ // x10: sp
57
+ // x11: DCArgs* args
58
+
59
+ mov x10, sp
60
+ stp x29, x30, [sp, #-208 ]!
61
+ mov x29, sp
62
+
63
+ add x11, x29 , #16
64
+
65
+ // save integer registers
66
+
67
+ stp x0, x1, [x11, #0 ]
68
+ stp x2, x3, [x11, #16]
69
+ stp x4, x5, [x11, #32]
70
+ stp x6, x7, [x11, #48]
71
+
72
+ stp d0, d1, [x11, #64]
73
+ stp d2, d3, [x11, #80]
74
+ stp d4, d5, [x11, #96]
75
+ stp d6, d7, [x11, #112]
76
+
77
+ eor x12, x12, x12
78
+ stp x10,x12,[x11, #128] // sp=sp, i=0, f=0
79
+
80
+ str x12, [x11, #144] // s=0, reserved=0
81
+
82
+
83
+ // call handler:
84
+ // args:
85
+ // x0: DCCallback* pcb
86
+ // x1: DCArgs* args
87
+ // x2: DCValue* result
88
+ // x3: void* userdata
89
+
90
+ mov x0 , x9
91
+ add x1 , x29 , #16
92
+ add x2 , x29 , #184
93
+ ldr x3 , [x9 , #40]
94
+
95
+ ldr x11, [x9 , #32]
96
+ blr x11
97
+
98
+ and w0, w0, #255
99
+ cmp w0, 'f'
100
+ b.eq .retf
101
+ cmp w0, 'd'
102
+ b.eq .retf
103
+
104
+ .reti:
105
+ ldr x0, [x29, #184]
106
+ b .ret
107
+ .retf:
108
+ ldr d0, [x29, #184]
109
+ .ret:
110
+ ldp x29, x30, [sp], #208
111
+ ret
@@ -0,0 +1,71 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_callback_arm64.c
6
+ Description: Callback - Implementation for ARM64 / ARMv8 / AAPCS64
7
+ License:
8
+
9
+ Copyright (c) 2015 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_callback.h"
27
+ #include "dyncall_alloc_wx.h"
28
+ #include "dyncall_thunk.h"
29
+
30
+ extern void dcCallbackThunkEntry();
31
+
32
+ struct DCCallback
33
+ {
34
+ // off size
35
+ // ----|-----
36
+ DCThunk thunk; // 0 32
37
+ DCCallbackHandler* handler; // 32 8
38
+ void* userdata; // 40 8
39
+ //
40
+ // size 48
41
+ // aligned 48
42
+ };
43
+
44
+ void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
45
+ {
46
+ pcb->handler = handler;
47
+ pcb->userdata = userdata;
48
+ }
49
+
50
+ DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
51
+ {
52
+ int err;
53
+ DCCallback* pcb;
54
+ err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
55
+ if (err != 0) return 0;
56
+
57
+ dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
58
+ dcbInitCallback(pcb, signature, handler, userdata);
59
+ return pcb;
60
+ }
61
+
62
+ void dcbFreeCallback(DCCallback* pcb)
63
+ {
64
+ dcFreeWX(pcb, sizeof(DCCallback));
65
+ }
66
+
67
+ void* dcbGetUserData(DCCallback* pcb)
68
+ {
69
+ return pcb->userdata;
70
+ }
71
+
@@ -6,8 +6,8 @@
6
6
  Description: Callback - Implementation Header for MIPS
7
7
  License:
8
8
 
9
- Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>,
10
- Tassilo Philipp <tphilipp@potion-studios.com>
9
+ Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
13
13
  purpose with or without fee is hereby granted, provided that the above
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #include "dyncall_callback.h"
27
28
  #include "dyncall_callback_mips.h"
28
29