rbdc 0.9.0 → 1.0.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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/dyncall/BUGS +1 -1
  3. data/dyncall/CMakeLists.txt +19 -7
  4. data/dyncall/ChangeLog +61 -20
  5. data/dyncall/LICENSE +1 -1
  6. data/dyncall/Makefile.generic +2 -0
  7. data/dyncall/ToDo +97 -29
  8. data/dyncall/autovar/README.txt +1 -0
  9. data/dyncall/autovar/autovar_ABI.h +4 -2
  10. data/dyncall/autovar/autovar_ARCH.h +9 -5
  11. data/dyncall/autovar/autovar_CC.h +3 -1
  12. data/dyncall/autovar/autovar_OS.h +2 -2
  13. data/dyncall/autovar/autovar_OSFAMILY.h +1 -1
  14. data/dyncall/configure +94 -38
  15. data/dyncall/dyncall/dyncall.3 +8 -4
  16. data/dyncall/dyncall/dyncall.h +1 -1
  17. data/dyncall/dyncall/dyncall_alloc.h +1 -1
  18. data/dyncall/dyncall/dyncall_api.c +3 -1
  19. data/dyncall/dyncall/dyncall_call.S +13 -5
  20. data/dyncall/dyncall/dyncall_call_arm32_arm.S +1 -2
  21. data/dyncall/dyncall/dyncall_call_arm32_arm.h +1 -1
  22. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +24 -26
  23. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +1 -1
  24. data/dyncall/dyncall/dyncall_call_arm32_thumb.h +1 -1
  25. data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +1 -1
  26. data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +3 -7
  27. data/dyncall/dyncall/dyncall_call_arm64.S +2 -2
  28. data/dyncall/dyncall/dyncall_call_arm64.h +2 -2
  29. data/dyncall/dyncall/dyncall_call_mips.h +1 -1
  30. data/dyncall/dyncall/dyncall_call_mips_eabi.h +1 -1
  31. data/dyncall/dyncall/dyncall_call_mips_eabi_gas.s +16 -16
  32. data/dyncall/dyncall/dyncall_call_mips_gas.S +2 -2
  33. data/dyncall/dyncall/dyncall_call_mips_n32.h +5 -4
  34. data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +4 -4
  35. data/dyncall/dyncall/dyncall_call_mips_n64.h +3 -3
  36. data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +2 -2
  37. data/dyncall/dyncall/dyncall_call_mips_o32.h +4 -3
  38. data/dyncall/dyncall/dyncall_call_mips_o32_gas.s +1 -3
  39. data/dyncall/dyncall/dyncall_call_ppc32.S +1 -1
  40. data/dyncall/dyncall/dyncall_call_ppc32.h +1 -1
  41. data/dyncall/dyncall/dyncall_call_sparc.h +1 -1
  42. data/dyncall/dyncall/{dyncall_call_sparc.S → dyncall_call_sparc.s} +39 -44
  43. data/dyncall/dyncall/dyncall_call_sparc64.h +5 -5
  44. data/dyncall/dyncall/dyncall_call_sparc64.s +177 -0
  45. data/dyncall/dyncall/dyncall_call_x64.S +83 -86
  46. data/dyncall/dyncall/dyncall_call_x64.h +1 -1
  47. data/dyncall/dyncall/dyncall_call_x86.S +9 -9
  48. data/dyncall/dyncall/dyncall_call_x86.h +1 -1
  49. data/dyncall/dyncall/dyncall_call_x86_nasm.asm +5 -5
  50. data/dyncall/dyncall/dyncall_callf.c +18 -18
  51. data/dyncall/dyncall/dyncall_callf.h +1 -1
  52. data/dyncall/dyncall/dyncall_callvm.c +3 -3
  53. data/dyncall/dyncall/dyncall_callvm.h +1 -1
  54. data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +25 -40
  55. data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +1 -5
  56. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +25 -33
  57. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +1 -5
  58. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +24 -36
  59. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +1 -5
  60. data/dyncall/dyncall/dyncall_callvm_arm64.c +23 -27
  61. data/dyncall/dyncall/dyncall_callvm_arm64.h +2 -6
  62. data/dyncall/dyncall/dyncall_callvm_arm64_apple.c +23 -30
  63. data/dyncall/dyncall/dyncall_callvm_base.c +1 -1
  64. data/dyncall/dyncall/dyncall_callvm_mips.c +1 -1
  65. data/dyncall/dyncall/dyncall_callvm_mips.h +1 -1
  66. data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +30 -27
  67. data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +1 -5
  68. data/dyncall/dyncall/dyncall_callvm_mips_n32.c +24 -30
  69. data/dyncall/dyncall/{dyncall_call_sparc_v9.h → dyncall_callvm_mips_n32.h} +18 -8
  70. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +23 -30
  71. data/dyncall/dyncall/dyncall_callvm_mips_n64.h +4 -6
  72. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +31 -29
  73. data/dyncall/dyncall/dyncall_callvm_mips_o32.h +1 -3
  74. data/dyncall/dyncall/dyncall_callvm_ppc32.c +22 -20
  75. data/dyncall/dyncall/dyncall_callvm_ppc32.h +1 -3
  76. data/dyncall/dyncall/dyncall_callvm_ppc64.c +54 -15
  77. data/dyncall/dyncall/dyncall_callvm_ppc64.h +0 -2
  78. data/dyncall/dyncall/dyncall_callvm_sparc.c +34 -26
  79. data/dyncall/dyncall/dyncall_callvm_sparc.h +1 -3
  80. data/dyncall/dyncall/dyncall_callvm_sparc64.c +94 -150
  81. data/dyncall/dyncall/dyncall_callvm_sparc64.h +11 -17
  82. data/dyncall/dyncall/dyncall_callvm_x64.c +37 -36
  83. data/dyncall/dyncall/dyncall_callvm_x64.h +1 -4
  84. data/dyncall/dyncall/dyncall_callvm_x86.c +22 -63
  85. data/dyncall/dyncall/dyncall_callvm_x86.h +1 -17
  86. data/dyncall/dyncall/dyncall_config.h +1 -1
  87. data/dyncall/dyncall/dyncall_macros.h +28 -19
  88. data/dyncall/dyncall/dyncall_signature.h +1 -1
  89. data/dyncall/dyncall/dyncall_types.h +17 -18
  90. data/dyncall/dyncall/dyncall_utils.h +1 -1
  91. data/dyncall/dyncall/dyncall_value.h +28 -21
  92. data/dyncall/dyncall/dyncall_vector.c +1 -1
  93. data/dyncall/dyncall/dyncall_vector.h +1 -1
  94. data/dyncall/dyncall/gen-masm.sh +2 -2
  95. data/dyncall/dyncallback/CMakeLists.txt +1 -2
  96. data/dyncall/dyncallback/Makefile.generic +1 -1
  97. data/dyncall/dyncallback/dyncall_alloc_wx.c +1 -1
  98. data/dyncall/dyncallback/dyncall_alloc_wx.h +4 -3
  99. data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +8 -2
  100. data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +67 -4
  101. data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +7 -2
  102. data/dyncall/dyncallback/dyncall_args.c +19 -15
  103. data/dyncall/dyncallback/dyncall_args.h +1 -1
  104. data/dyncall/dyncallback/{dyncall_args_arm32_arm.c → dyncall_args_arm32.c} +4 -4
  105. data/dyncall/dyncallback/{dyncall_args_arm32_arm.h → dyncall_args_arm32.h} +6 -6
  106. data/dyncall/dyncallback/dyncall_args_arm64.c +2 -2
  107. data/dyncall/dyncallback/dyncall_args_arm64_apple.c +2 -2
  108. data/dyncall/dyncallback/dyncall_args_mips.c +26 -21
  109. data/dyncall/dyncallback/dyncall_args_mips.h +18 -6
  110. data/dyncall/dyncallback/dyncall_args_mips64.c +81 -0
  111. data/dyncall/dyncallback/dyncall_args_mips_o32.c +104 -0
  112. data/dyncall/dyncallback/dyncall_args_ppc32.c +2 -2
  113. data/dyncall/dyncallback/dyncall_args_ppc32.h +1 -1
  114. data/dyncall/dyncallback/dyncall_args_ppc32_sysv.c +1 -1
  115. data/dyncall/dyncallback/dyncall_args_ppc64.c +24 -3
  116. data/dyncall/dyncallback/dyncall_args_sparc32.c +41 -15
  117. data/dyncall/dyncallback/dyncall_args_sparc32.h +2 -2
  118. data/dyncall/dyncallback/dyncall_args_sparc64.c +28 -15
  119. data/dyncall/dyncallback/dyncall_args_sparc64.h +7 -3
  120. data/dyncall/dyncallback/dyncall_args_x64.c +1 -1
  121. data/dyncall/dyncallback/dyncall_args_x64.h +1 -1
  122. data/dyncall/dyncallback/dyncall_args_x86.c +1 -1
  123. data/dyncall/dyncallback/dyncall_args_x86.h +1 -1
  124. data/dyncall/dyncallback/dyncall_callback.c +10 -12
  125. data/dyncall/dyncallback/dyncall_callback.h +2 -4
  126. data/dyncall/dyncallback/dyncall_callback_arch.S +12 -2
  127. data/dyncall/dyncallback/{dyncall_callback_arm32_arm.c → dyncall_callback_arm32.c} +25 -10
  128. data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +7 -7
  129. data/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.S +9 -9
  130. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.S +1 -1
  131. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.S +1 -1
  132. data/dyncall/dyncallback/dyncall_callback_arm64.S +2 -2
  133. data/dyncall/dyncallback/dyncall_callback_arm64.c +20 -14
  134. data/dyncall/dyncallback/dyncall_callback_mips.c +26 -9
  135. data/dyncall/dyncallback/dyncall_callback_mips_eabi_gas.s +99 -0
  136. data/dyncall/dyncallback/{dyncall_args_arm32_thumb.h → dyncall_callback_mips_gas.S} +14 -9
  137. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb.c → dyncall_callback_mips_n32_gas.s} +12 -7
  138. data/dyncall/dyncallback/dyncall_callback_mips_n64_gas.s +98 -0
  139. data/dyncall/dyncallback/dyncall_callback_mips_o32_gas.s +100 -0
  140. data/dyncall/dyncallback/dyncall_callback_ppc32.S +54 -54
  141. data/dyncall/dyncallback/dyncall_callback_ppc32.c +23 -5
  142. data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +92 -117
  143. data/dyncall/dyncallback/dyncall_callback_ppc64.S +2 -2
  144. data/dyncall/dyncallback/dyncall_callback_ppc64.c +23 -5
  145. data/dyncall/dyncallback/dyncall_callback_sparc32.c +25 -7
  146. data/dyncall/dyncallback/dyncall_callback_sparc32.s +55 -4
  147. data/dyncall/dyncallback/dyncall_callback_sparc64.c +25 -7
  148. data/dyncall/dyncallback/dyncall_callback_sparc64.s +89 -5
  149. data/dyncall/dyncallback/dyncall_callback_x64.S +8 -8
  150. data/dyncall/dyncallback/dyncall_callback_x64.c +19 -6
  151. data/dyncall/dyncallback/dyncall_callback_x86.S +29 -25
  152. data/dyncall/dyncallback/dyncall_callback_x86.c +24 -11
  153. data/dyncall/dyncallback/dyncall_thunk.c +6 -6
  154. data/dyncall/dyncallback/dyncall_thunk.h +9 -7
  155. data/dyncall/dyncallback/{dyncall_thunk_arm32_arm.c → dyncall_thunk_arm32.c} +5 -3
  156. data/dyncall/dyncallback/{dyncall_thunk_arm32_arm.h → dyncall_thunk_arm32.h} +7 -7
  157. data/dyncall/dyncallback/dyncall_thunk_arm64.c +2 -2
  158. data/dyncall/dyncallback/dyncall_thunk_arm64.h +8 -13
  159. data/dyncall/dyncallback/dyncall_thunk_mips.c +16 -20
  160. data/dyncall/dyncallback/dyncall_thunk_mips.h +4 -2
  161. data/dyncall/dyncallback/dyncall_thunk_mips64.c +103 -0
  162. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb.h → dyncall_thunk_mips64.h} +15 -8
  163. data/dyncall/dyncallback/dyncall_thunk_ppc32.c +4 -4
  164. data/dyncall/dyncallback/dyncall_thunk_ppc32.h +1 -1
  165. data/dyncall/dyncallback/dyncall_thunk_ppc32_sysv.c +9 -9
  166. data/dyncall/dyncallback/dyncall_thunk_ppc64.c +2 -2
  167. data/dyncall/dyncallback/dyncall_thunk_sparc32.c +19 -2
  168. data/dyncall/dyncallback/dyncall_thunk_sparc32.h +5 -4
  169. data/dyncall/dyncallback/dyncall_thunk_sparc64.c +42 -2
  170. data/dyncall/dyncallback/dyncall_thunk_sparc64.h +5 -5
  171. data/dyncall/dyncallback/dyncall_thunk_x64.c +1 -1
  172. data/dyncall/dyncallback/dyncall_thunk_x64.h +2 -2
  173. data/dyncall/dyncallback/dyncall_thunk_x86.c +1 -1
  174. data/dyncall/dyncallback/dyncall_thunk_x86.h +2 -2
  175. data/dyncall/dyncallback/dyncallback.3 +16 -11
  176. data/dyncall/dynload/dynload.3 +63 -8
  177. data/dyncall/dynload/dynload.c +2 -8
  178. data/dyncall/dynload/dynload.h +9 -5
  179. data/dyncall/dynload/dynload_alloc.h +1 -1
  180. data/dyncall/dynload/dynload_syms.c +1 -3
  181. data/dyncall/dynload/dynload_syms_elf.c +19 -11
  182. data/dyncall/dynload/dynload_syms_mach-o.c +151 -75
  183. data/dyncall/dynload/dynload_syms_pe.c +24 -24
  184. data/dyncall/dynload/dynload_unix.c +156 -13
  185. data/dyncall/dynload/dynload_windows.c +15 -11
  186. data/dyncall/portasm/portasm-arm.S +1 -1
  187. data/dyncall/portasm/portasm-ppc.S +1 -1
  188. data/dyncall/portasm/{portasm-x64-att.S → portasm-x64.S} +7 -4
  189. data/dyncall/portasm/portasm-x86.S +4 -2
  190. data/{dyncall-bindings/ruby/rbdc/extconf.rb → extconf.rb} +4 -4
  191. data/{dyncall-bindings/ruby/rbdc/rbdc.c → rbdc.c} +5 -5
  192. metadata +24 -48
  193. data/dyncall/Makefile.M +0 -15
  194. data/dyncall/buildsys/dynmake/Makefile.base.M +0 -82
  195. data/dyncall/buildsys/dynmake/dynmake.bat +0 -2
  196. data/dyncall/buildsys/dynmake/dynmake.sh +0 -4
  197. data/dyncall/dynMakefile +0 -4
  198. data/dyncall/dyncall/Makefile.M +0 -10
  199. data/dyncall/dyncall/TODO +0 -9
  200. data/dyncall/dyncall/dynMakefile +0 -4
  201. data/dyncall/dyncall/dyncall_call_sparc64.S +0 -362
  202. data/dyncall/dyncall/dyncall_call_sparc_v9.S +0 -222
  203. data/dyncall/dyncall/dyncall_call_x64-att.S +0 -147
  204. data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +0 -182
  205. data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +0 -46
  206. data/dyncall/dyncallback/Makefile.M +0 -10
  207. data/dyncall/dyncallback/README.txt +0 -9
  208. data/dyncall/dyncallback/TODO +0 -4
  209. data/dyncall/dyncallback/dynMakefile +0 -4
  210. data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +0 -30
  211. data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +0 -46
  212. data/dyncall/dyncallback/dyncall_callback_mips.h +0 -43
  213. data/dyncall/dyncallback/dyncall_callback_ppc32.h +0 -43
  214. data/dyncall/dyncallback/dyncall_callback_ppc64.h +0 -56
  215. data/dyncall/dyncallback/dyncall_callback_sparc32.h +0 -44
  216. data/dyncall/dyncallback/dyncall_callback_x64.h +0 -45
  217. data/dyncall/dyncallback/dyncall_callback_x86.h +0 -50
  218. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +0 -30
  219. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +0 -36
  220. data/dyncall/dynload/Makefile.M +0 -10
  221. data/dyncall/dynload/TODO +0 -20
  222. data/dyncall/dynload/dynMakefile +0 -4
  223. data/dyncall/dynload/dynload_darwin.c +0 -90
@@ -6,7 +6,7 @@
6
6
  Description:
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -33,23 +33,6 @@
33
33
  #include "dyncall_alloc.h"
34
34
  #include "dyncall_struct.h"
35
35
 
36
- static DCCallVM* dc_callvm_new_x64(DCCallVM_vt* vt, DCsize size)
37
- {
38
- DCCallVM_x64* self = (DCCallVM_x64*)dcAllocMem(sizeof(DCCallVM_x64)+size);
39
-
40
- dc_callvm_base_init(&self->mInterface, vt);
41
-
42
- /* Since we store register parameters in DCCallVM_x64 directly, adjust the stack size. */
43
- size -= sizeof(DCRegData_x64);
44
- size = (((signed long)size) < 0) ? 0 : size;
45
-
46
-
47
- self->mRegCount.i = self->mRegCount.f = 0;
48
-
49
- dcVecInit(&self->mVecHead, size);
50
- return (DCCallVM*)self;
51
- }
52
-
53
36
 
54
37
  static void dc_callvm_free_x64(DCCallVM* in_self)
55
38
  {
@@ -61,20 +44,7 @@ static void dc_callvm_reset_x64(DCCallVM* in_self)
61
44
  {
62
45
  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
63
46
  dcVecReset(&self->mVecHead);
64
- self->mRegCount.i = self->mRegCount.f = 0;
65
- }
66
-
67
-
68
- static void dc_callvm_mode_x64(DCCallVM* self, DCint mode)
69
- {
70
- switch(mode) {
71
- case DC_CALL_C_DEFAULT:
72
- case DC_CALL_C_ELLIPSIS:
73
- break;
74
- default:
75
- self->mError = DC_ERROR_UNSUPPORTED_MODE;
76
- break;
77
- }
47
+ self->mRegCount.i = self->mRegCount.f = 0;
78
48
  }
79
49
 
80
50
 
@@ -188,6 +158,8 @@ void dc_callvm_call_x64(DCCallVM* in_self, DCpointer target)
188
158
  }
189
159
 
190
160
 
161
+ static void dc_callvm_mode_x64(DCCallVM* in_self, DCint mode);
162
+
191
163
  DCCallVM_vt gVT_x64 =
192
164
  {
193
165
  &dc_callvm_free_x64
@@ -216,14 +188,43 @@ DCCallVM_vt gVT_x64 =
216
188
  , NULL /* callStruct */
217
189
  };
218
190
 
219
-
220
- DCCallVM* dcNewCallVM_x64(DCsize size)
191
+ /* mode: only a single mode available currently. */
192
+ static void dc_callvm_mode_x64(DCCallVM* in_self, DCint mode)
221
193
  {
222
- return dc_callvm_new_x64(&gVT_x64, size);
194
+ DCCallVM_x64* self = (DCCallVM_x64*)in_self;
195
+ DCCallVM_vt* vt;
196
+
197
+ switch(mode) {
198
+ case DC_CALL_C_DEFAULT:
199
+ #if defined(DC_UNIX)
200
+ case DC_CALL_C_X64_SYSV:
201
+ #else
202
+ case DC_CALL_C_X64_WIN64:
203
+ #endif
204
+ case DC_CALL_C_ELLIPSIS:
205
+ case DC_CALL_C_ELLIPSIS_VARARGS:
206
+ vt = &gVT_x64;
207
+ break;
208
+ default:
209
+ self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
210
+ return;
211
+ }
212
+ dc_callvm_base_init(&self->mInterface, vt);
223
213
  }
224
214
 
215
+ /* Public API. */
225
216
  DCCallVM* dcNewCallVM(DCsize size)
226
217
  {
227
- return dcNewCallVM_x64(size);
218
+ DCCallVM_x64* p = (DCCallVM_x64*)dcAllocMem(sizeof(DCCallVM_x64)+size);
219
+
220
+ dc_callvm_mode_x64((DCCallVM*)p, DC_CALL_C_DEFAULT);
221
+
222
+ /* Since we store register parameters in DCCallVM_x64 directly, adjust the stack size. */
223
+ size -= sizeof(DCRegData_x64);
224
+ size = (((signed long)size) < 0) ? 0 : size;
225
+ dcVecInit(&p->mVecHead, size);
226
+ dc_callvm_reset_x64((DCCallVM*)p);
227
+
228
+ return (DCCallVM*)p;
228
229
  }
229
230
 
@@ -6,7 +6,7 @@
6
6
  Description:
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -105,8 +105,5 @@ typedef struct
105
105
  DCVecHead mVecHead; /* Parameters to be pushed onto stack. */
106
106
  } DCCallVM_x64;
107
107
 
108
- DCCallVM* dcNewCallVM_x64(DCsize size);
109
-
110
-
111
108
  #endif /* DYNCALL_CALLVM_X64_H */
112
109
 
@@ -6,7 +6,7 @@
6
6
  Description: Call VM for x86 architecture implementation
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -31,19 +31,6 @@
31
31
 
32
32
  void dc_callvm_mode_x86(DCCallVM* in_self, DCint mode);
33
33
 
34
- /* call vm allocator */
35
-
36
- static DCCallVM* dc_callvm_new_x86(DCCallVM_vt* vt, DCsize size)
37
- {
38
- DCCallVM_x86* self = (DCCallVM_x86*) dcAllocMem( sizeof(DCCallVM_x86)+size );
39
-
40
- dc_callvm_base_init(&self->mInterface, vt);
41
-
42
- self->mIntRegs = 0;
43
- dcVecInit(&self->mVecHead, size);
44
- return (DCCallVM*) self;
45
- }
46
-
47
34
  /* call vm destructor */
48
35
 
49
36
  static void dc_callvm_free_x86(DCCallVM* in_self)
@@ -186,11 +173,6 @@ DCCallVM_vt gVT_x86_plan9 =
186
173
  , NULL /* callStruct */
187
174
  };
188
175
 
189
- DCCallVM* dcNewCallVM_x86_plan9(DCsize size)
190
- {
191
- return dc_callvm_new_x86( &gVT_x86_plan9, size );
192
- }
193
-
194
176
 
195
177
  #else
196
178
 
@@ -231,11 +213,6 @@ DCCallVM_vt gVT_x86_cdecl =
231
213
  , NULL /* callStruct */
232
214
  };
233
215
 
234
- DCCallVM* dcNewCallVM_x86_cdecl(DCsize size)
235
- {
236
- return dc_callvm_new_x86( &gVT_x86_cdecl, size );
237
- }
238
-
239
216
 
240
217
 
241
218
  /* --- stdcall -------------------------------------------------------------- */
@@ -278,12 +255,6 @@ DCCallVM_vt gVT_x86_win32_std =
278
255
  , NULL /* callStruct */
279
256
  };
280
257
 
281
- /* win32/std callvm allocator */
282
-
283
- DCCallVM* dcNewCallVM_x86_win32_std(DCsize size)
284
- {
285
- return dc_callvm_new_x86( &gVT_x86_win32_std, size );
286
- }
287
258
 
288
259
  /* --- fastcall common (ms/gnu) -------------------------------------------- */
289
260
 
@@ -389,10 +360,6 @@ DCCallVM_vt gVT_x86_win32_fast_ms =
389
360
  , NULL /* callStruct */
390
361
  };
391
362
 
392
- DCCallVM* dcNewCallVM_x86_win32_fast_ms(DCsize size)
393
- {
394
- return dc_callvm_new_x86( &gVT_x86_win32_fast_ms, size );
395
- }
396
363
 
397
364
  /* --- gnu fastcall -------------------------------------------------------- */
398
365
 
@@ -487,10 +454,6 @@ DCCallVM_vt gVT_x86_win32_fast_gnu =
487
454
  , NULL /* callStruct */
488
455
  };
489
456
 
490
- DCCallVM* dcNewCallVM_x86_win32_fast_gnu(DCsize size)
491
- {
492
- return dc_callvm_new_x86( &gVT_x86_win32_fast_gnu, size );
493
- }
494
457
 
495
458
  /* --- this ms ------------------------------------------------------------- */
496
459
 
@@ -605,13 +568,6 @@ DCCallVM_vt gVT_x86_sys_int80h_bsd =
605
568
  };
606
569
 
607
570
 
608
- /* win32/this/ms callvm allocator */
609
-
610
- DCCallVM* dcNewCallVM_x86_win32_this_ms(DCsize size)
611
- {
612
- return dc_callvm_new_x86( &gVT_x86_win32_this_ms, size );
613
- }
614
-
615
571
  #endif
616
572
 
617
573
 
@@ -619,13 +575,15 @@ DCCallVM* dcNewCallVM_x86_win32_this_ms(DCsize size)
619
575
 
620
576
  void dc_callvm_mode_x86(DCCallVM* in_self, DCint mode)
621
577
  {
622
- DCCallVM_x86* self = (DCCallVM_x86*) in_self;
623
- DCCallVM_vt* vt;
578
+ DCCallVM_x86* self = (DCCallVM_x86*)in_self;
579
+ DCCallVM_vt* vt;
580
+
624
581
  switch(mode) {
582
+ case DC_CALL_C_DEFAULT:
625
583
  case DC_CALL_C_ELLIPSIS:
626
584
  case DC_CALL_C_ELLIPSIS_VARARGS:
627
- case DC_CALL_C_DEFAULT:
628
- #if defined(DC_PLAN9) /* Plan9 (and forks) have their own calling convention (and no support for foreign ones). */
585
+ /* Plan9 (and forks) have their own calling convention (and no support for foreign ones). */
586
+ #if defined(DC_PLAN9)
629
587
  case DC_CALL_C_X86_PLAN9: vt = &gVT_x86_plan9; break;
630
588
  #else
631
589
  case DC_CALL_C_X86_CDECL: vt = &gVT_x86_cdecl; break;
@@ -639,30 +597,31 @@ void dc_callvm_mode_x86(DCCallVM* in_self, DCint mode)
639
597
  # if defined DC__OS_Linux
640
598
  vt = &gVT_x86_sys_int80h_linux; break;
641
599
  # else
642
- vt = &gVT_x86_sys_int80h_bsd; break;
600
+ vt = &gVT_x86_sys_int80h_bsd; break;
643
601
  # endif
644
602
  # else
645
603
  self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
646
604
  # endif
647
- case DC_CALL_SYS_X86_INT80H_LINUX:
648
- vt = &gVT_x86_sys_int80h_linux; break;
649
- case DC_CALL_SYS_X86_INT80H_BSD:
650
- vt = &gVT_x86_sys_int80h_bsd; break;
605
+ case DC_CALL_SYS_X86_INT80H_LINUX: vt = &gVT_x86_sys_int80h_linux; break;
606
+ case DC_CALL_SYS_X86_INT80H_BSD: vt = &gVT_x86_sys_int80h_bsd; break;
651
607
  #endif
652
608
  default:
653
- self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
609
+ self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
610
+ return;
654
611
  }
655
- self->mInterface.mVTpointer = vt;
612
+ dc_callvm_base_init(&self->mInterface, vt);
656
613
  }
657
614
 
658
- /* new */
659
-
615
+ /* Public API. */
660
616
  DCCallVM* dcNewCallVM(DCsize size)
661
617
  {
662
- #if defined(DC__OS_Plan9)
663
- return dcNewCallVM_x86_plan9(size);
664
- #else
665
- return dcNewCallVM_x86_cdecl(size);
666
- #endif
618
+ DCCallVM_x86* p = (DCCallVM_x86*)dcAllocMem(sizeof(DCCallVM_x86)+size);
619
+
620
+ dc_callvm_mode_x86((DCCallVM*)p, DC_CALL_C_DEFAULT);
621
+
622
+ dcVecInit(&p->mVecHead, size);
623
+ dc_callvm_reset_x86((DCCallVM*)p);
624
+
625
+ return (DCCallVM*)p;
667
626
  }
668
627
 
@@ -6,7 +6,7 @@
6
6
  Description: Call virtual machine for x86 architecture header
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -56,21 +56,5 @@ struct DCCallVM_x86_
56
56
  DCVecHead mVecHead;
57
57
  };
58
58
 
59
- /* Plan9 has no support for OS foreign calling conventions at
60
- the time, and vice-versa. */
61
- #if defined(DC__OS_Plan9)
62
-
63
- DCCallVM* dcNewCallVM_x86_plan9(DCsize size);
64
-
65
- #else
66
-
67
- DCCallVM* dcNewCallVM_x86_cdecl(DCsize size);
68
- DCCallVM* dcNewCallVM_x86_win32_std(DCsize size);
69
- DCCallVM* dcNewCallVM_x86_win32_fast_ms(DCsize size);
70
- DCCallVM* dcNewCallVM_x86_win32_fast_gnu(DCsize size);
71
- DCCallVM* dcNewCallVM_x86_win32_this_ms(DCsize size);
72
-
73
- #endif
74
-
75
59
  #endif /* DYNCALL_CALLVM_X86_H */
76
60
 
@@ -6,7 +6,7 @@
6
6
  Description: Macro configuration file for non-standard C types
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -6,7 +6,7 @@
6
6
  Description: Platform detection macros
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -72,7 +72,7 @@
72
72
  #define DC__OS_Linux
73
73
 
74
74
  /* The most powerful open source Unix-like OS - FreeBSD. */
75
- #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
75
+ #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) /* latter is (also) used by systems using FreeBSD kernel, e.g. Debian/kFreeBSD, which could be detected specifically by also checking for __GLIBC__ */
76
76
  #define DC__OS_FreeBSD
77
77
 
78
78
  /* The most secure open source Unix-like OS - OpenBSD. */
@@ -123,7 +123,9 @@
123
123
  #define DC__OS_Minix
124
124
 
125
125
  #else
126
- #error Unsupported OS.
126
+
127
+ /* Unable to determine OS, which is probably ok (e.g. baremetal stuff, etc.). */
128
+ #define DC__OS_UNKNOWN
127
129
  #endif
128
130
 
129
131
 
@@ -140,7 +142,7 @@
140
142
  #define DC__C_MSVC
141
143
 
142
144
  /* LLVM clang. */
143
- #elif defined(__clang__)
145
+ #elif defined(__clang__) || defined(__llvm__)
144
146
  #define DC__C_CLANG
145
147
 
146
148
  /* The GNU Compiler Collection - GCC. */
@@ -191,11 +193,12 @@
191
193
  # define DC__Arch_ARM64
192
194
  #elif defined(__sh__)
193
195
  # define DC__Arch_SuperH
194
- #elif defined(__sparcv9) || defined(__sparc64__) || ( defined(__sparc) && defined(__arch64__) )
195
- /* this could be needed on Linux/GNU sparc64 in the future: || ( defined(__sparc) && defined(__arch64__) ) */
196
- # define DC__Arch_Sparcv9
197
- #elif defined(__sparc)
198
- # define DC__Arch_Sparc
196
+ #elif defined(__sparc) || defined(__sparc__)
197
+ # if defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || defined(__arch64__)
198
+ # define DC__Arch_Sparc64
199
+ # else
200
+ # define DC__Arch_Sparc
201
+ # endif
199
202
  #endif
200
203
 
201
204
 
@@ -237,13 +240,14 @@
237
240
  #if defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
238
241
  # if defined(_ABIO32) || defined(_MIPS_ARCH_MIPS1) || defined(_MIPS_ARCH_MIPS2)
239
242
  # define DC__ABI_MIPS_O32
243
+ # elif defined(_ABI64) || defined(_mips_n64)
244
+ # define DC__ABI_MIPS_N64
240
245
  # elif defined(_ABIN32)
241
246
  # define DC__ABI_MIPS_N32
242
- # elif defined(_ABI64)
243
- # define DC__ABI_MIPS_N64
244
247
  # else
245
248
  # define DC__ABI_MIPS_EABI
246
249
  # endif
250
+ /*@@@implement/support: __mips_hard_float*/
247
251
  #endif /* MIPS */
248
252
 
249
253
  #if defined(DC__Arch_PPC64)
@@ -252,37 +256,42 @@
252
256
  # else
253
257
  # define DC__ABI_PPC64_ELF_V 0 /* 0 means not explicitly set, otherwise this is 1 (big endian) and 2 (little endian) */
254
258
  # endif
255
- #endif /* MIPS */
259
+ #endif /* PPC64 */
256
260
 
257
261
 
258
262
  /* Endian detection. */
259
263
  #if defined(DC__Arch_Intel_x86) || defined(DC__Arch_AMD64) /* always little */
260
264
  # define DC__Endian_LITTLE
261
- #elif defined(DC__Arch_Sparc) /*always big until v9*/
265
+ #elif defined(DC__Arch_Sparc) /* always purely big until v9 */
262
266
  # define DC__Endian_BIG
263
267
  #else /* all others are bi-endian */
264
268
  /* @@@check flags used on following bi-endianness archs:
265
269
  DC__Arch_ARM
266
270
  DC__Arch_ARM64
267
271
  DC__Arch_Itanium
268
- DC__Arch_MIPS
269
- DC__Arch_MIPS64
270
272
  DC__Arch_PPC32
271
273
  DC__Arch_PPC64
272
- DC__Arch_Sparcv9
273
274
  DC__Arch_SuperH
274
275
  */
275
- # if (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 1)) || defined(_BIG_ENDIAN) || defined(MIPSEB)
276
+ # if (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 1)) || defined(_BIG_ENDIAN) || defined(MIPSEB) || defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
276
277
  # define DC__Endian_BIG
277
- # elif (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 2)) || defined(_LITTLE_ENDIAN) || defined(MIPSEL)
278
+ # elif (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 2)) || defined(_LITTLE_ENDIAN) || defined(MIPSEL) || defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
278
279
  # define DC__Endian_LITTLE
280
+ # elif defined(DC__Arch_Sparc64) && !defined(__BYTE_ORDER__) /* Sparc64 default is big-endian, except if explicitly defined */
281
+ # define DC__Endian_BIG
282
+ # elif defined(__BYTE_ORDER__) /* explicitly set */
283
+ # if defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
284
+ # define DC__Endian_BIG
285
+ # elif defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
286
+ # define DC__Endian_LITTLE
287
+ # endif
279
288
  # endif /* no else, leave unset if not sure */
280
289
  #endif
281
290
 
282
291
 
283
292
  /* Internal macro/tag. */
284
293
  #if !defined(DC_API)
285
- #define DC_API
294
+ # define DC_API
286
295
  #endif
287
296
 
288
297
  #endif /* DYNCALL_MACROS_H */