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: Thunk - 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_thunk_arm32_arm.c" /* Since we can mix ARM and THUMB */
28
29
  /* assembly, reuse the ARM mode code */
29
30
 
@@ -6,7 +6,7 @@
6
6
  Description: Thunk - 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
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #ifndef DYNCALL_THUNK_ARM32_THUMB_H
27
28
  #define DYNCALL_THUNK_ARM32_THUMB_H
28
29
 
@@ -0,0 +1,64 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_thunk_arm64.c
6
+ Description: 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
+
26
+
27
+
28
+ #include "dyncall_thunk.h"
29
+
30
+ /*
31
+
32
+ Thunk Register: x9
33
+
34
+ Thunk:
35
+ adr x9, Thunk
36
+ ldr x10, .target
37
+ br x10
38
+ nop
39
+ .target:
40
+ .xword 0
41
+
42
+ -- Encoded in:
43
+
44
+ 0000000000000000 <Thunk>:
45
+ 0: 10000009 adr x9, 0 <Thunk>
46
+ 4: 5800006a ldr x10, 10 <.target>
47
+ 8: d61f0140 br x10
48
+ c: d503201f nop
49
+
50
+ 0000000000000010 <.target>:
51
+ 10: 76543210 .word 0x76543210
52
+ 14: fedcba98 .word 0xfedcba98
53
+ */
54
+
55
+ void dcbInitThunk(DCThunk* p, void (*entry)())
56
+ {
57
+ p->code[0] = 0x10000009; // adr x9, 0
58
+ p->code[1] = 0x5800006a; // ldr x9, entry
59
+ p->code[2] = 0xd61f0140; // br x9
60
+ p->code[3] = 0xd503201f; // nop
61
+ p->entry = entry; // entry:
62
+ // .xword 0
63
+ }
64
+
@@ -0,0 +1,42 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_thunk_arm64.h
6
+ Description: Thunk - Header 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
+ #ifndef DYNCALL_THUNK_ARM64_H
27
+ #define DYNCALL_THUNK_ARM64_H
28
+
29
+ struct DCThunk_
30
+ {
31
+ // off size
32
+ //-----|----------
33
+ unsigned int code[4]; // 0 16
34
+ void (*entry)(); // 16 8
35
+ void* reserved; // 24 8
36
+
37
+ // 32 total size
38
+
39
+ };
40
+
41
+ #endif /* DYNCALL_THUNK_ARM64_H */
42
+
@@ -6,8 +6,8 @@
6
6
  Description: Thunk - Implementation 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
@@ -30,23 +30,55 @@ unsigned short lo16(x) { return ( (unsigned short) ((unsigned int)x) );
30
30
 
31
31
  void dcbInitThunk(DCThunk* p, void (*entry)())
32
32
  {
33
- /*
33
+ /*
34
+
35
+ Thunk Register: $t4 ($12)
36
+ According to o32abi: $t9
37
+
38
+ 'The Linux/MIPS convention is that all PIC calls use t9 to hold the address of the called function.'
39
+ [See MIPS Run, p.413]
40
+
34
41
  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
42
+ lui $t4, %hi(p)
43
+ lui $t9, %hi(entry)
44
+ ori $t9, $t9, %lo(entry)
45
+ jr $t9
46
+ ori $t4, $t4, %lo(p)
47
+
48
+ thunk.o: file format elf32-tradbigmips
49
+
50
+
51
+ Disassembly of section .text:
52
+
53
+ 00000000 <thunk>:
54
+ 0: 3c0c0000 lui t4,0x0
55
+ 4: 3c190000 lui t9,0x0
56
+ 8: 37390000 ori t9,t9,0x0
57
+ c: 03200008 jr t9
58
+ 10: 00200825 move at,at
59
+ 14: 358c0000 ori t4,t4,0x0
60
+ 18: 00200825 move at,at
61
+ 1c: 00200825 move at,at
62
+
40
63
  */
41
64
 
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;
65
+ #if defined(DC__Endian_BIG)
66
+
67
+ p->data[0] = 0x3c0c; p->data[1] = hi16(p); /* lui $t4, hi(p) */
68
+ p->data[2] = 0x3c19; p->data[3] = hi16(entry); /* lui $t9, hi(entry) */
69
+ p->data[4] = 0x3739; p->data[5] = lo16(entry); /* ori $t9, $t9, lo(entry) */
70
+ p->jump = 0x03200008; /* jr $t9 */
71
+ p->bddt[0] = 0x358c; p->bddt[1] = lo16(p); /* ori $t4, $t4, lo(p) - branch delay slot */
72
+
73
+ #else /* defined(DC__Endian_LITTLE) */
74
+
75
+ p->data[1] = 0x3c0c; p->data[0] = hi16(p); /* lui $t4, hi(p) */
76
+ p->data[3] = 0x3c19; p->data[2] = hi16(entry); /* lui $t9, hi(entry) */
77
+ p->data[5] = 0x3739; p->data[4] = lo16(entry); /* ori $t9, $t9, lo(entry) */
78
+ p->jump = 0x03200008; /* jr $t9 */
79
+ p->bddt[1] = 0x358c; p->bddt[0] = lo16(p); /* ori $t4, $t4, lo(p) - branch delay slot */
80
+
81
+ #endif
82
+
51
83
  }
52
84
 
@@ -6,8 +6,8 @@
6
6
  Description: Thunk - 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
  #ifndef DYNCALL_THUNK_MIPS_H
27
28
  #define DYNCALL_THUNK_MIPS_H
28
29
 
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
5
  File: dyncallback/dyncall_thunk_ppc32.c
6
- Description: Thunk - Implementation for ppc32
6
+ Description: Thunk - Implementation for ppc32 darwin/apple
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
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #include "dyncall_thunk.h"
27
28
 
28
29
  unsigned short hi16(x) { return ( (unsigned short) (((unsigned int)x)>>16UL) ); }
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
5
  File: dyncallback/dyncall_thunk_ppc32.h
6
- Description: Thunk - Header for ppc32
6
+ Description: Thunk - Header for ppc32 (darwin/sysv)
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
@@ -28,11 +28,11 @@
28
28
 
29
29
  struct DCThunk_
30
30
  {
31
- unsigned short code_load_hi, addr_self_hi; /* offset: 0 */
32
- unsigned short code_load_lo, addr_self_lo; /* offset: 4 */
33
- unsigned int code_jump[3]; /* offset: 8 */
34
- void (*addr_entry)(); /* offset: 20 */
35
- };
31
+ unsigned short code_load_hi, addr_self_hi; /* offset: 0 size: 4 */
32
+ unsigned short code_load_lo, addr_self_lo; /* offset: 4 size: 4 */
33
+ unsigned int code_jump[3]; /* offset: 8 size: 12 */
34
+ void (*addr_entry)(); /* offset: 20 size: 4 */
35
+ }; /* total size: 24 */
36
36
 
37
37
  #define DCTHUNK_SIZE_PPC32 24
38
38
 
@@ -0,0 +1,50 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_thunk_ppc32_sysv.c
6
+ Description: Thunks on PowerPC 32-bit System V ABI
7
+ License:
8
+
9
+ Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>
10
+
11
+ Permission to use, copy, modify, and distribute this software for any
12
+ purpose with or without fee is hereby granted, provided that the above
13
+ copyright notice and this permission notice appear in all copies.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
+
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
+ 0: 3d 60 00 00 lis r11,0
35
+ 4: 61 6b 00 01 ori r11,r11,1
36
+ 8: 81 82 00 14 lwz r12,20(r2)
37
+ c: 7d 89 03 a6 mtctr r12
38
+ 10: 4e 80 04 20 bctr
39
+ */
40
+ p->code_load_hi = 0x3d60U; /* lis r11, HI16(p) */
41
+ p->addr_self_hi = hi16(p);
42
+ p->code_load_lo = 0x616bU; /* ori r11, r11, LO16(p) */
43
+ p->addr_self_lo = lo16(p);
44
+ p->code_jump[0] = 0x818b0014U; /* lwz r12, 20(r11) */
45
+ p->code_jump[1] = 0x7d8903a6U; /* mtclr r12 */
46
+ p->code_jump[2] = 0x4e800420U; /* bctr */
47
+ p->addr_entry = entry;
48
+
49
+ }
50
+
@@ -0,0 +1,87 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_thunk_ppc64.c
6
+ Description: Thunk - Implementation for ppc64
7
+ License:
8
+
9
+ Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
10
+
11
+ Permission to use, copy, modify, and distribute this software for any
12
+ purpose with or without fee is hereby granted, provided that the above
13
+ copyright notice and this permission notice appear in all copies.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
+
23
+ */
24
+
25
+ #include "dyncall_thunk.h"
26
+
27
+ #define HIST16(x) (unsigned short)((((unsigned long)(x))>>48UL) & 0xffff)
28
+ #define HIER16(x) (unsigned short)((((unsigned long)(x))>>32UL) & 0xffff)
29
+ #define HI16(x) (unsigned short)((((unsigned long)(x))>>16UL) & 0xffff)
30
+ #define LO16(x) (unsigned short)( ((unsigned long)(x)) & 0xffff)
31
+
32
+ void dcbInitThunk(DCThunk* p, void (*entry)())
33
+ {
34
+ #if DC__ABI_PPC64_ELF_V != 2
35
+ /*
36
+ ppc64 thunk code: (v1)
37
+ oris r11, r2, HI16(p)
38
+ ori r11,r11, LO16(p)
39
+ ld r12,48(r11)
40
+ ld r2,56(r11)
41
+ mtctr r12
42
+ bctr
43
+ */
44
+
45
+ p->thunk_entry = (void *)&(p->code_load_hi);
46
+ p->toc_thunk = ((long)(p->thunk_entry) & 0xffffffff00000000UL);
47
+
48
+ p->code_load_hi = 0x644bU; /* oris r11, r2, HI16(p) */
49
+ p->addr_self_hi = HI16(p);
50
+ p->code_load_lo = 0x616bU; /* ori r11,r11, LO16(p) */
51
+ p->addr_self_lo = LO16(p);
52
+ p->code_jump[0] = 0xe98b0030U; /* ld r12,48(r11) */
53
+ p->code_jump[1] = 0xe84b0038U; /* ld r2,56(r11) */
54
+ p->code_jump[2] = 0x7d8903a6U; /* mtclr r12 */
55
+ p->code_jump[3] = 0x4e800420U; /* bctr */
56
+ p->addr_entry = (void *)*((long *)entry);
57
+ p->toc_entry = *((long *)(entry + 8));
58
+
59
+ #else
60
+ /*
61
+ ppc64 thunk code: (v2)
62
+ lis r11, HIST16(p)
63
+ ori r11,r11, HIER16(p)
64
+ rldicr r11,r11,32,31
65
+ oris r11,r11, HI16(p)
66
+ ori r11,r11, LO16(p)
67
+ ld r12,40(r11)
68
+ mtctr r12
69
+ bctr
70
+ */
71
+
72
+ p->code_load_hist = 0x3d60U; /* lis r11,HIST16(p) */
73
+ p->addr_self_hist = HIST16(p);
74
+ p->code_load_hier = 0x616bU; /* ori r11,r11, HIER16(p) */
75
+ p->addr_self_hier = HIER16(p);
76
+ p->code_rot = 0x796b07c6U; /* rldicr r11,r11,32,31 */
77
+ p->code_load_hi = 0x656bU; /* oris r11,r11, HI16(p) */
78
+ p->addr_self_hi = HI16(p);
79
+ p->code_load_lo = 0x616bU; /* ori r11,r11, LO16(p) */
80
+ p->addr_self_lo = LO16(p);
81
+ p->code_jump[0] = 0xe98b0028U; /* ld r12,40(r11) */
82
+ p->code_jump[1] = 0x7d8903a6U; /* mtclr r12 */
83
+ p->code_jump[2] = 0x4e800420U; /* bctr */
84
+ p->addr_entry = (void *)(entry);
85
+ #endif
86
+ }
87
+
@@ -0,0 +1,55 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_thunk_ppc64.h
6
+ Description: Thunk - Header for ppc64
7
+ License:
8
+
9
+ Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
10
+
11
+ Permission to use, copy, modify, and distribute this software for any
12
+ purpose with or without fee is hereby granted, provided that the above
13
+ copyright notice and this permission notice appear in all copies.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
+
23
+ */
24
+
25
+ #ifndef DYNCALL_THUNK_PPC64_H
26
+ #define DYNCALL_THUNK_PPC64_H
27
+
28
+ #if DC__ABI_PPC64_ELF_V != 2
29
+ struct DCThunk_ /* v1 */
30
+ {
31
+ void (*thunk_entry)(); /* offset: 0 */
32
+ long toc_thunk; /* offset: 8 */
33
+ unsigned short code_load_hi, addr_self_hi; /* offset: 16 */
34
+ unsigned short code_load_lo, addr_self_lo; /* offset: 20 */
35
+ unsigned int code_jump[6]; /* offset: 24 */
36
+ void (*addr_entry)(); /* offset: 48 */
37
+ long toc_entry; /* offset: 56 */
38
+ };
39
+ #define DCTHUNK_SIZE_PPC64 64
40
+ #else
41
+ struct DCThunk_ /* v2 */
42
+ {
43
+ unsigned short addr_self_hist, code_load_hist; /* offset: 0 */
44
+ unsigned short addr_self_hier, code_load_hier; /* offset: 4 */
45
+ unsigned int code_rot; /* offset: 8 */
46
+ unsigned short addr_self_hi, code_load_hi; /* offset: 12 */
47
+ unsigned short addr_self_lo, code_load_lo; /* offset: 16 */
48
+ unsigned int code_jump[5]; /* offset: 20 */
49
+ void (*addr_entry)(); /* offset: 40 */
50
+ };
51
+ #define DCTHUNK_SIZE_PPC64 48
52
+ #endif
53
+
54
+ #endif /* DYNCALL_THUNK_PPC64_H */
55
+