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: Type and calling-convention signature character defines
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: Typedefs
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
@@ -45,24 +45,23 @@
45
45
  extern "C" {
46
46
  #endif
47
47
 
48
- typedef void DCvoid;
49
- typedef DC_BOOL DCbool;
50
- typedef char DCchar;
51
- typedef unsigned char DCuchar;
52
- typedef short DCshort;
53
- typedef unsigned short DCushort;
54
- typedef int DCint;
55
- typedef unsigned int DCuint;
56
- typedef long DClong;
57
- typedef unsigned long DCulong;
58
- typedef DC_LONG_LONG DClonglong;
48
+ typedef void DCvoid;
49
+ typedef DC_BOOL DCbool;
50
+ typedef char DCchar;
51
+ typedef unsigned char DCuchar;
52
+ typedef short DCshort;
53
+ typedef unsigned short DCushort;
54
+ typedef int DCint;
55
+ typedef unsigned int DCuint;
56
+ typedef long DClong;
57
+ typedef unsigned long DCulong;
58
+ typedef DC_LONG_LONG DClonglong;
59
59
  typedef unsigned DC_LONG_LONG DCulonglong;
60
- typedef float DCfloat;
61
- typedef double DCdouble;
62
- typedef DC_POINTER DCpointer;
63
- typedef const char* DCstring;
64
-
65
- typedef size_t DCsize;
60
+ typedef float DCfloat;
61
+ typedef double DCdouble;
62
+ typedef DC_POINTER DCpointer;
63
+ typedef const char* DCstring;
64
+ typedef size_t DCsize;
66
65
 
67
66
  #define DC_TRUE 1
68
67
  #define DC_FALSE 0
@@ -6,7 +6,7 @@
6
6
  Description: Type and calling-convention signature character defines
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: Value variant type
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
@@ -48,15 +48,17 @@ typedef union DCValue_ DCValue;
48
48
 
49
49
  union DCValue_
50
50
  {
51
- #if defined (DC__Arch_PPC32) && defined(DC__Endian_BIG)
52
- DCbool B;
51
+ /* dyncallback assembly pulls value directly from DCValue structs, without */
52
+ /* knowledge about types used, so lay it out as needed at compile time, here */
53
+ #if defined(DC__Endian_BIG) && (defined(DC__Arch_PPC32) || defined(DC__Arch_MIPS) || defined(DC__Arch_Sparc))
54
+ DCbool B;
53
55
  struct { DCchar c_pad[3]; DCchar c; };
54
56
  struct { DCuchar C_pad[3]; DCuchar C; };
55
57
  struct { DCshort s_pad; DCshort s; };
56
58
  struct { DCshort S_pad; DCshort S; };
57
- DCint i;
58
- DCuint I;
59
- #elif defined (DC__Arch_PPC64) && defined(DC__Endian_BIG)
59
+ DCint i;
60
+ DCuint I;
61
+ #elif defined(DC__Endian_BIG) && (defined(DC__Arch_PPC64) || defined(DC__Arch_MIPS64) || defined(DC__Arch_Sparc64))
60
62
  struct { DCbool B_pad; DCbool B; };
61
63
  struct { DCchar c_pad[7]; DCchar c; };
62
64
  struct { DCuchar C_pad[7]; DCuchar C; };
@@ -65,22 +67,27 @@ union DCValue_
65
67
  struct { DCint i_pad; DCint i; };
66
68
  struct { DCint I_pad; DCuint I; };
67
69
  #else
68
- DCbool B;
69
- DCchar c;
70
- DCuchar C;
71
- DCshort s;
72
- DCushort S;
73
- DCint i;
74
- DCuint I;
70
+ DCbool B;
71
+ DCchar c;
72
+ DCuchar C;
73
+ DCshort s;
74
+ DCushort S;
75
+ DCint i;
76
+ DCuint I;
75
77
  #endif
76
- DClong j;
77
- DCulong J;
78
- DClonglong l;
79
- DCulonglong L;
80
- DCfloat f;
81
- DCdouble d;
82
- DCpointer p;
83
- DCstring Z;
78
+ DClong j;
79
+ DCulong J;
80
+ DClonglong l;
81
+ DCulonglong L;
82
+ /* floats on mips are right justified in fp-registers on big endian targets, as they aren't promoted */
83
+ #if defined(DC__Endian_BIG) && (defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64))
84
+ struct { DCfloat f_pad; DCfloat f; };
85
+ #else
86
+ DCfloat f;
87
+ #endif
88
+ DCdouble d;
89
+ DCpointer p;
90
+ DCstring Z;
84
91
  };
85
92
 
86
93
  #ifdef __cplusplus
@@ -6,7 +6,7 @@
6
6
  Description: Simple dynamic vector container type 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
@@ -6,7 +6,7 @@
6
6
  Description: Simple dynamic vector container type 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
@@ -3,5 +3,5 @@
3
3
  # Uses portasm to generates MASM sources for intel platforms.
4
4
  printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x86_generic_masm.asm
5
5
  printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x64_generic_masm.asm
6
- gcc -E -P -DGEN_MASM dyncall_call_x86.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x86_generic_masm.asm
7
- gcc -E -P -DGEN_MASM dyncall_call_x64-att.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x64_generic_masm.asm
6
+ gcc -E -P -DGEN_MASM dyncall_call_x86.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x86_generic_masm.asm
7
+ gcc -E -P -DGEN_MASM dyncall_call_x64.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x64_generic_masm.asm
@@ -45,8 +45,7 @@ install(FILES
45
45
  dyncall_thunk_x86.h
46
46
  dyncall_thunk_ppc32.h
47
47
  dyncall_thunk_x64.h
48
- dyncall_thunk_arm32_arm.h
49
- dyncall_thunk_arm32_thumb.h
48
+ dyncall_thunk_arm32.h
50
49
  dyncall_alloc_wx.h
51
50
  dyncall_args.h
52
51
  dyncall_callback.h
@@ -1,6 +1,6 @@
1
1
  LIBNAME = dyncallback
2
2
  OBJS = dyncall_alloc_wx.o dyncall_args.o dyncall_callback.o dyncall_callback_arch.o dyncall_thunk.o
3
- HEADERS = ${VPATH}/dyncall_thunk.h ${VPATH}/dyncall_thunk_x86.h ${VPATH}/dyncall_thunk_ppc32.h ${VPATH}/dyncall_thunk_x64.h ${VPATH}/dyncall_thunk_arm32_arm.h ${VPATH}/dyncall_thunk_arm32_thumb.h ${VPATH}/dyncall_thunk_arm64.h ${VPATH}/dyncall_args.h ${VPATH}/dyncall_callback.h
3
+ HEADERS = ${VPATH}/dyncall_thunk.h ${VPATH}/dyncall_thunk_x86.h ${VPATH}/dyncall_thunk_ppc32.h ${VPATH}/dyncall_thunk_x64.h ${VPATH}/dyncall_thunk_arm32.h ${VPATH}/dyncall_thunk_arm64.h ${VPATH}/dyncall_thunk_mips.h ${VPATH}/dyncall_thunk_mips64.h ${VPATH}/dyncall_thunk_ppc64.h ${VPATH}/dyncall_thunk_sparc32.h ${VPATH}/dyncall_thunk_sparc64.h ${VPATH}/dyncall_args.h ${VPATH}/dyncall_callback.h
4
4
  TOP = ${VPATH}/..
5
5
  CFLAGS += -I${TOP}/dyncall
6
6
 
@@ -6,7 +6,7 @@
6
6
  Description: Allocate write/executable memory - Implementation back-end selector (mmap or win32)
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: Allocate write/executable memory - Interface
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
@@ -35,8 +35,9 @@ typedef int DCerror;
35
35
  extern "C" {
36
36
  #endif
37
37
 
38
- DCerror dcAllocWX(DCsize size, void** p);
39
- void dcFreeWX (void* p, DCsize size);
38
+ DCerror dcAllocWX (DCsize size, void** p);
39
+ DCerror dcInitExecWX(void* p, DCsize size);
40
+ void dcFreeWX (void* p, DCsize size);
40
41
 
41
42
  #ifdef __cplusplus
42
43
  }
@@ -6,7 +6,7 @@
6
6
  Description: Allocate write/executable memory - Fallback implementation based
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
@@ -29,13 +29,19 @@
29
29
  #include <stdlib.h>
30
30
 
31
31
 
32
- int dcAllocWX(size_t size, void** pp)
32
+ DCerror dcAllocWX(size_t size, void** pp)
33
33
  {
34
34
  *pp = malloc(size);
35
35
  return 0;
36
36
  }
37
37
 
38
+ DCerror dcInitExecWX(void* p, size_t size)
39
+ {
40
+ return 0;
41
+ }
42
+
38
43
  void dcFreeWX(void* p, size_t size)
39
44
  {
40
45
  free(p);
41
46
  }
47
+
@@ -6,7 +6,7 @@
6
6
  Description: Allocate write/executable memory - Implementation for posix
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
@@ -29,15 +29,78 @@
29
29
  #include <sys/types.h>
30
30
  #include <sys/mman.h>
31
31
 
32
- int dcAllocWX(size_t size, void** pp)
32
+ /* MAP_ANON is not POSIX, if lacking, we'll use a portable fallback on *nix systems */
33
+ #if !defined(MAP_ANON)
34
+ # if defined(MAP_ANONYMOUS)
35
+ # define MAP_ANON MAP_ANONYMOUS
36
+ # elif defined(DC_UNIX)
37
+ # include <fcntl.h>
38
+ # else
39
+ # error "Platform implementation missing for anonymous rwx memory"
40
+ # endif
41
+ #endif
42
+
43
+ /* platforms without mprotect */
44
+ #if defined(DC__OS_Minix)
45
+ # define NO_MPROTECT
46
+ #endif
47
+
48
+ /* if no mprotect() available/wanted, make mmap alloc pages as rwx */
49
+ #if defined(NO_MPROTECT)
50
+ # define MMAP_PROT_INIT (PROT_READ|PROT_WRITE|PROT_EXEC)
51
+ #else
52
+ # define MMAP_PROT_INIT (PROT_READ|PROT_WRITE)
53
+ #endif
54
+
55
+ DCerror dcAllocWX(size_t size, void** pp)
33
56
  {
34
- void* p = mmap(0, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
35
- if (p == ( (void*)-1 ) ) return -1;
57
+ void* p;
58
+ #if !defined(MAP_ANON) && defined(DC_UNIX)
59
+ /* Hack around not having POSIX' MAP_ANON by going through /dev/zero; store
60
+ file descr to close on dcFreeWX at beginning of memory, as tiny hack */
61
+ int fd = open("/dev/zero", O_RDWR);
62
+ if(fd == -1)
63
+ return -1;
64
+ p = mmap(0, size+sizeof(int), MMAP_PROT_INIT, MAP_PRIVATE, fd, 0);
65
+ if(p == MAP_FAILED) {
66
+ close(fd);
67
+ return -1;
68
+ }
69
+ *(int*)p = fd;
70
+ p += sizeof(int);
71
+ #else
72
+ p = mmap(0, size, MMAP_PROT_INIT, MAP_PRIVATE|MAP_ANON, -1, 0);
73
+ if(p == MAP_FAILED)
74
+ return -1;
75
+ #endif
76
+
36
77
  *pp = p;
37
78
  return 0;
38
79
  }
39
80
 
81
+ DCerror dcInitExecWX(void* p, size_t size)
82
+ {
83
+ #if defined(NO_MPROTECT)
84
+ return 0;
85
+ #else
86
+
87
+ #if !defined(MAP_ANON) && defined(DC_UNIX)
88
+ /* Fixup pointer for no-MAP_ANON workaround (see above) */
89
+ p -= sizeof(int);
90
+ size += sizeof(int);
91
+ #endif
92
+ return mprotect(p, size, PROT_READ|PROT_EXEC);
93
+ #endif
94
+ }
95
+
40
96
  void dcFreeWX(void* p, size_t size)
41
97
  {
98
+ #if !defined(MAP_ANON) && defined(DC_UNIX)
99
+ /* Close file descriptor for no-MAP_ANON workaround (see above) */
100
+ p -= sizeof(int);
101
+ size += sizeof(int);
102
+ close(*(int*)p);
103
+ #endif
42
104
  munmap(p, size);
43
105
  }
106
+
@@ -6,7 +6,7 @@
6
6
  Description: Allocate write/executable memory - Implementation for win32 platform
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
@@ -28,7 +28,7 @@
28
28
  #include <windows.h>
29
29
  #include <assert.h>
30
30
 
31
- int dcAllocWX(size_t size, void** ptr)
31
+ DCerror dcAllocWX(size_t size, void** ptr)
32
32
  {
33
33
  LPVOID p = VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
34
34
  if (p == NULL) return -1;
@@ -36,6 +36,11 @@ int dcAllocWX(size_t size, void** ptr)
36
36
  return 0;
37
37
  }
38
38
 
39
+ DCerror dcInitExecWX(void* p, size_t size)
40
+ {
41
+ return 0;
42
+ }
43
+
39
44
  void dcFreeWX(void* p, size_t size)
40
45
  {
41
46
  BOOL b = VirtualFree( p, 0, MEM_RELEASE);
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Implementation back-end selector
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
@@ -27,28 +27,32 @@
27
27
 
28
28
  #if defined(DC__Arch_Intel_x86)
29
29
  # include "dyncall_args_x86.c"
30
- #elif defined (DC__Arch_AMD64)
30
+ #elif defined(DC__Arch_AMD64)
31
31
  # include "dyncall_args_x64.c"
32
- #elif defined (DC__Arch_PPC32)
33
- # if defined (DC__OS_Darwin)
32
+ #elif defined(DC__Arch_PPC32)
33
+ # if defined(DC__OS_Darwin)
34
34
  # include "dyncall_args_ppc32.c"
35
35
  # else
36
36
  # include "dyncall_args_ppc32_sysv.c"
37
37
  # endif
38
- #elif defined (DC__Arch_PPC64)
38
+ #elif defined(DC__Arch_PPC64)
39
39
  # include "dyncall_args_ppc64.c"
40
- #elif defined (DC__Arch_ARM_ARM)
41
- # include "dyncall_args_arm32_arm.c"
42
- #elif defined (DC__Arch_ARM_THUMB)
43
- # include "dyncall_args_arm32_thumb.c"
44
- #elif defined (DC__Arch_MIPS)
45
- # include "dyncall_args_mips.c"
46
- #elif defined (DC__Arch_Sparc)
40
+ #elif defined(DC__Arch_ARM)
41
+ # include "dyncall_args_arm32.c"
42
+ #elif defined(DC__Arch_MIPS)
43
+ # if defined(DC__ABI_MIPS_O32)
44
+ # include "dyncall_args_mips_o32.c"
45
+ # else
46
+ # include "dyncall_args_mips.c"
47
+ # endif
48
+ #elif defined(DC__Arch_MIPS64)
49
+ # include "dyncall_args_mips64.c"
50
+ #elif defined(DC__Arch_Sparc)
47
51
  # include "dyncall_args_sparc32.c"
48
- #elif defined (DC__Arch_Sparcv9)
52
+ #elif defined(DC__Arch_Sparc64)
49
53
  # include "dyncall_args_sparc64.c"
50
- #elif defined (DC__Arch_ARM64)
51
- # if defined (DC__OS_Darwin)
54
+ #elif defined(DC__Arch_ARM64)
55
+ # if defined(DC__OS_Darwin)
52
56
  # include "dyncall_args_arm64_apple.c"
53
57
  # else
54
58
  # include "dyncall_args_arm64.c"
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Interface
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
@@ -2,11 +2,11 @@
2
2
 
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
- File: dyncallback/dyncall_args_arm32_arm.c
6
- Description: Callback's Arguments VM - Implementation for ARM32 (ARM mode)
5
+ File: dyncallback/dyncall_args_arm32.c
6
+ Description: Callback's Arguments VM - Implementation for ARM32 (ARM and THUMB mode)
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
@@ -25,7 +25,7 @@
25
25
 
26
26
 
27
27
 
28
- #include "dyncall_args_arm32_arm.h"
28
+ #include "dyncall_args_arm32.h"
29
29
 
30
30
 
31
31
  static void arm_align_64(DCArgs* args)