ffi 1.9.18-x86-mingw32 → 1.9.21-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ffi might be problematic. Click here for more details.

Files changed (384) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -2
  3. data/Rakefile +14 -4
  4. data/ext/ffi_c/AbstractMemory.c +6 -1
  5. data/ext/ffi_c/Platform.c +10 -2
  6. data/ext/ffi_c/extconf.rb +7 -2
  7. data/ext/ffi_c/libffi.bsd.mk +9 -3
  8. data/ext/ffi_c/libffi.darwin.mk +14 -4
  9. data/ext/ffi_c/libffi.gnu.mk +2 -1
  10. data/ext/ffi_c/libffi.mk +9 -4
  11. data/ext/ffi_c/libffi/ChangeLog.libffi +2 -2
  12. data/ext/ffi_c/libffi/{ChangeLog → ChangeLog.libffi-3.1} +1402 -2
  13. data/ext/ffi_c/libffi/ChangeLog.v1 +1 -1
  14. data/ext/ffi_c/libffi/LICENSE +1 -1
  15. data/ext/ffi_c/libffi/Makefile.am +166 -157
  16. data/ext/ffi_c/libffi/Makefile.in +923 -938
  17. data/ext/ffi_c/libffi/README +164 -52
  18. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  19. data/ext/ffi_c/libffi/aclocal.m4 +645 -384
  20. data/ext/ffi_c/libffi/autogen.sh +2 -0
  21. data/ext/ffi_c/libffi/autom4te.cache/output.0 +21972 -0
  22. data/ext/ffi_c/libffi/autom4te.cache/output.1 +21972 -0
  23. data/ext/ffi_c/libffi/autom4te.cache/output.2 +21972 -0
  24. data/ext/ffi_c/libffi/autom4te.cache/output.3 +21972 -0
  25. data/ext/ffi_c/libffi/autom4te.cache/requests +331 -0
  26. data/ext/ffi_c/libffi/autom4te.cache/traces.0 +4010 -0
  27. data/ext/ffi_c/libffi/autom4te.cache/traces.1 +1005 -0
  28. data/ext/ffi_c/libffi/autom4te.cache/traces.2 +4010 -0
  29. data/ext/ffi_c/libffi/autom4te.cache/traces.3 +4010 -0
  30. data/ext/ffi_c/libffi/compile +218 -14
  31. data/ext/ffi_c/libffi/config.guess +329 -368
  32. data/ext/ffi_c/libffi/config.sub +232 -112
  33. data/ext/ffi_c/libffi/configure +6970 -2189
  34. data/ext/ffi_c/libffi/configure.ac +148 -256
  35. data/ext/ffi_c/libffi/configure.host +265 -4
  36. data/ext/ffi_c/libffi/depcomp +346 -185
  37. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  38. data/ext/ffi_c/libffi/doc/Makefile.in +811 -0
  39. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  40. data/ext/ffi_c/libffi/{mdate-sh → doc/mdate-sh} +40 -13
  41. data/ext/ffi_c/libffi/{texinfo.tex → doc/texinfo.tex} +3990 -1121
  42. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  43. data/ext/ffi_c/libffi/fficonfig.h.in +24 -13
  44. data/ext/ffi_c/libffi/fficonfig.h.in~ +210 -0
  45. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  46. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  47. data/ext/ffi_c/libffi/include/Makefile.in +188 -71
  48. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  49. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  50. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  51. data/ext/ffi_c/libffi/install-sh +190 -202
  52. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  53. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  54. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  55. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  56. data/ext/ffi_c/libffi/libtool-version +1 -1
  57. data/ext/ffi_c/libffi/ltmain.sh +3553 -2033
  58. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  59. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  60. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  61. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  62. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  63. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  64. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  65. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  66. data/ext/ffi_c/libffi/m4/libtool.m4 +1691 -1135
  67. data/ext/ffi_c/libffi/m4/ltoptions.m4 +104 -36
  68. data/ext/ffi_c/libffi/m4/ltsugar.m4 +4 -3
  69. data/ext/ffi_c/libffi/m4/ltversion.m4 +6 -6
  70. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +4 -3
  71. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  72. data/ext/ffi_c/libffi/man/Makefile.in +141 -49
  73. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  74. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  75. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  76. data/ext/ffi_c/libffi/missing +150 -311
  77. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  78. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  79. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  80. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  81. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  82. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  83. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  84. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  85. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  86. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  87. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  88. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  90. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  91. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  92. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  93. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  94. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  95. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  96. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  97. data/ext/ffi_c/libffi/src/closures.c +319 -44
  98. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  99. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  100. data/ext/ffi_c/libffi/src/debug.c +6 -1
  101. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  102. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  103. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  104. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  105. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  106. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  107. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  108. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  109. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  110. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  111. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  112. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  113. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  114. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  115. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  116. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  117. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  118. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  119. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  120. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  121. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  122. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  123. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  124. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  125. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  126. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  127. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  128. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  129. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  130. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  131. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  132. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  133. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  134. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  135. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  136. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  137. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  138. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  139. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  140. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  141. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  142. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  143. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  144. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  145. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  146. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  147. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  148. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  149. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  150. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  151. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  152. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  153. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  154. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  155. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  156. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  157. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  158. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  159. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  160. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  161. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  162. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  163. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  164. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  165. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  166. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  167. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  168. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  169. data/ext/ffi_c/libffi/src/types.c +43 -14
  170. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  171. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  172. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  173. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  174. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  175. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  176. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  177. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  178. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  179. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  180. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  181. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  182. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  183. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  184. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  185. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  186. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  187. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  188. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  189. data/ext/ffi_c/libffi/testsuite/Makefile.in +218 -111
  190. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  191. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  262. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  263. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  268. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  269. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  274. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  275. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  276. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  277. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  278. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  279. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  280. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  284. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  285. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  286. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  287. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  288. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  289. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  290. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  291. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  292. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  293. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  294. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  295. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  296. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  316. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  342. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  343. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  344. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  345. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  346. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  347. data/ffi.gemspec +2 -2
  348. data/lib/2.0/ffi_c.so +0 -0
  349. data/lib/2.1/ffi_c.so +0 -0
  350. data/lib/2.2/ffi_c.so +0 -0
  351. data/lib/2.3/ffi_c.so +0 -0
  352. data/lib/2.4/ffi_c.so +0 -0
  353. data/lib/2.5/ffi_c.so +0 -0
  354. data/lib/ffi/enum.rb +124 -0
  355. data/lib/ffi/library.rb +65 -13
  356. data/lib/ffi/platform.rb +7 -2
  357. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  358. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  359. data/lib/ffi/pointer.rb +1 -0
  360. data/lib/ffi/struct.rb +0 -2
  361. data/lib/ffi/version.rb +1 -1
  362. data/spec/ffi/bitmask_spec.rb +575 -0
  363. data/spec/ffi/embed-test/ext/Makefile +242 -0
  364. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  365. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  366. data/spec/ffi/struct_spec.rb +0 -4
  367. metadata +158 -32
  368. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  369. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  370. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  371. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  372. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  373. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  374. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  375. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  376. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  377. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  378. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  379. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  380. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  381. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  382. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  383. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  384. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
@@ -1,7 +1,7 @@
1
1
  Status
2
2
  ======
3
3
 
4
- libffi-3.0.10 was released on August 23, 2011. Check the libffi web
4
+ libffi-4?? was released on TBD. Check the libffi web
5
5
  page for updates: <URL:http://sourceware.org/libffi/>.
6
6
 
7
7
 
@@ -43,51 +43,79 @@ Libffi has been ported to many different platforms.
43
43
  For specific configuration details and testing status, please
44
44
  refer to the wiki page here:
45
45
 
46
- http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10
46
+ http://www.moxielogic.org/wiki/index.php?title=Libffi_3.2
47
47
 
48
48
  At the time of release, the following basic configurations have been
49
49
  tested:
50
50
 
51
- |--------------+------------------|
52
- | Architecture | Operating System |
53
- |--------------+------------------|
54
- | Alpha | Linux |
55
- | Alpha | Tru64 |
56
- | ARM | Linux |
57
- | ARM | iOS |
58
- | AVR32 | Linux |
59
- | HPPA | HPUX |
60
- | IA-64 | Linux |
61
- | M68K | RTEMS |
62
- | MIPS | IRIX |
63
- | MIPS | Linux |
64
- | MIPS | RTEMS |
65
- | MIPS64 | Linux |
66
- | PowerPC | Linux |
67
- | PowerPC | Mac OSX |
68
- | PowerPC | FreeBSD |
69
- | PowerPC64 | Linux |
70
- | S390 | Linux |
71
- | S390X | Linux |
72
- | SPARC | Linux |
73
- | SPARC | Solaris |
74
- | SPARC64 | Linux |
75
- | SPARC64 | FreeBSD |
76
- | X86 | FreeBSD |
77
- | X86 | Interix |
78
- | X86 | kFreeBSD |
79
- | X86 | Linux |
80
- | X86 | Mac OSX |
81
- | X86 | OpenBSD |
82
- | X86 | OS/2 |
83
- | X86 | Solaris |
84
- | X86 | Windows/Cygwin |
85
- | X86 | Windows/MingW |
86
- | X86-64 | FreeBSD |
87
- | X86-64 | Linux |
88
- | X86-64 | OpenBSD |
89
- | X86-64 | Windows/MingW |
90
- |--------------+------------------|
51
+ |-----------------+------------------+-------------------------|
52
+ | Architecture | Operating System | Compiler |
53
+ |-----------------+------------------+-------------------------|
54
+ | AArch64 (ARM64) | iOS | Clang |
55
+ | AArch64 | Linux | GCC |
56
+ | Alpha | Linux | GCC |
57
+ | Alpha | Tru64 | GCC |
58
+ | ARC | Linux | GCC |
59
+ | ARM | Linux | GCC |
60
+ | ARM | iOS | GCC |
61
+ | AVR32 | Linux | GCC |
62
+ | Blackfin | uClinux | GCC |
63
+ | HPPA | HPUX | GCC |
64
+ | IA-64 | Linux | GCC |
65
+ | M68K | FreeMiNT | GCC |
66
+ | M68K | Linux | GCC |
67
+ | M68K | RTEMS | GCC |
68
+ | M88K | OpenBSD/mvme88k | GCC |
69
+ | Meta | Linux | GCC |
70
+ | MicroBlaze | Linux | GCC |
71
+ | MIPS | IRIX | GCC |
72
+ | MIPS | Linux | GCC |
73
+ | MIPS | RTEMS | GCC |
74
+ | MIPS64 | Linux | GCC |
75
+ | Moxie | Bare metal | GCC |
76
+ | Nios II | Linux | GCC |
77
+ | OpenRISC | Linux | GCC |
78
+ | PowerPC 32-bit | AIX | IBM XL C |
79
+ | PowerPC 64-bit | AIX | IBM XL C |
80
+ | PowerPC | AMIGA | GCC |
81
+ | PowerPC | Linux | GCC |
82
+ | PowerPC | Mac OSX | GCC |
83
+ | PowerPC | FreeBSD | GCC |
84
+ | PowerPC 64-bit | FreeBSD | GCC |
85
+ | PowerPC 64-bit | Linux ELFv1 | GCC |
86
+ | PowerPC 64-bit | Linux ELFv2 | GCC |
87
+ | S390 | Linux | GCC |
88
+ | S390X | Linux | GCC |
89
+ | SPARC | Linux | GCC |
90
+ | SPARC | Solaris | GCC |
91
+ | SPARC | Solaris | Oracle Solaris Studio C |
92
+ | SPARC64 | Linux | GCC |
93
+ | SPARC64 | FreeBSD | GCC |
94
+ | SPARC64 | Solaris | Oracle Solaris Studio C |
95
+ | TILE-Gx/TILEPro | Linux | GCC |
96
+ | VAX | OpenBSD/vax | GCC |
97
+ | X86 | FreeBSD | GCC |
98
+ | X86 | GNU HURD | GCC |
99
+ | X86 | Interix | GCC |
100
+ | X86 | kFreeBSD | GCC |
101
+ | X86 | Linux | GCC |
102
+ | X86 | Mac OSX | GCC |
103
+ | X86 | OpenBSD | GCC |
104
+ | X86 | OS/2 | GCC |
105
+ | X86 | Solaris | GCC |
106
+ | X86 | Solaris | Oracle Solaris Studio C |
107
+ | X86 | Windows/Cygwin | GCC |
108
+ | X86 | Windows/MingW | GCC |
109
+ | X86-64 | FreeBSD | GCC |
110
+ | X86-64 | Linux | GCC |
111
+ | X86-64 | Linux/x32 | GCC |
112
+ | X86-64 | OpenBSD | GCC |
113
+ | X86-64 | Solaris | Oracle Solaris Studio C |
114
+ | X86-64 | Windows/Cygwin | GCC |
115
+ | X86-64 | Windows/MingW | GCC |
116
+ | X86-64 | Mac OSX | GCC |
117
+ | Xtensa | Linux | GCC |
118
+ |-----------------+------------------+-------------------------|
91
119
 
92
120
  Please send additional platform test results to
93
121
  libffi-discuss@sourceware.org and feel free to update the wiki page
@@ -101,6 +129,9 @@ system. Go to the directory you wish to build libffi in and run the
101
129
  "configure" program found in the root directory of the libffi source
102
130
  distribution.
103
131
 
132
+ If you're building libffi directly from version control, configure won't
133
+ exist yet; run ./autogen.sh first.
134
+
104
135
  You may want to tell configure where to install the libffi library and
105
136
  header files. To do that, use the --prefix configure switch. Libffi
106
137
  will install under /usr/local by default.
@@ -114,24 +145,35 @@ will add some extra code which will suppress certain warnings when you
114
145
  are using Purify with libffi. Only use this switch when using
115
146
  Purify, as it will slow down the library.
116
147
 
148
+ If you don't want to build documentation, use the --disable-docs
149
+ configure switch.
150
+
117
151
  It's also possible to build libffi on Windows platforms with
118
152
  Microsoft's Visual C++ compiler. In this case, use the msvcc.sh
119
153
  wrapper script during configuration like so:
120
154
 
121
- path/to/configure CC=path/to/msvcc.sh LD=link CPP=\"cl -nologo -EP\"
155
+ path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP"
156
+
157
+ For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64" and
158
+ CXX="path/to/msvcc.sh -m64". You may also need to specify --build
159
+ appropriately.
160
+
161
+ It is also possible to build libffi on Windows platforms with the LLVM
162
+ project's clang-cl compiler, like below:
163
+
164
+ path/to/configure CC="path/to/msvcc.sh -clang-cl" CXX="path/to/msvcc.sh -clang-cl" LD=link CPP="clang-cl -EP"
122
165
 
123
- For 64-bit Windows builds, use CC="path/to/msvcc.sh -m64".
124
- You may also need to specify --build appropriately. When building with MSVC
125
- under a MingW environment, you may need to remove the line in configure
126
- that sets 'fix_srcfile_path' to a 'cygpath' command. ('cygpath' is not
127
- present in MingW, and is not required when using MingW-style paths.)
166
+ When building with MSVC under a MingW environment, you may need to
167
+ remove the line in configure that sets 'fix_srcfile_path' to a 'cygpath'
168
+ command. ('cygpath' is not present in MingW, and is not required when
169
+ using MingW-style paths.)
128
170
 
129
- For iOS builds, refer to the build-ios.sh script for guidance.
171
+ For iOS builds, the 'libffi.xcodeproj' Xcode project is available.
130
172
 
131
173
  Configure has many other options. Use "configure --help" to see them all.
132
174
 
133
175
  Once configure has finished, type "make". Note that you must be using
134
- GNU make. You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
176
+ GNU make. You can ftp GNU make from ftp.gnu.org:/pub/gnu/make .
135
177
 
136
178
  To ensure that libffi is working as advertised, type "make check".
137
179
  This will require that you have DejaGNU installed.
@@ -142,7 +184,67 @@ To install the library and header files, type "make install".
142
184
  History
143
185
  =======
144
186
 
145
- See the ChangeLog files for details.
187
+ See the git log for details at http://github.com/libffi/libffi.
188
+
189
+ 4.0 TBD
190
+ New API in support of GO closures.
191
+
192
+ 3.2.1 Nov-12-14
193
+ Build fix for non-iOS AArch64 targets.
194
+
195
+ 3.2 Nov-11-14
196
+ Add C99 Complex Type support (currently only supported on
197
+ s390).
198
+ Add support for PASCAL and REGISTER calling conventions on x86
199
+ Windows/Linux.
200
+ Add OpenRISC and Cygwin-64 support.
201
+ Bug fixes.
202
+
203
+ 3.1 May-19-14
204
+ Add AArch64 (ARM64) iOS support.
205
+ Add Nios II support.
206
+ Add m88k and DEC VAX support.
207
+ Add support for stdcall, thiscall, and fastcall on non-Windows
208
+ 32-bit x86 targets such as Linux.
209
+ Various Android, MIPS N32, x86, FreeBSD and UltraSPARC IIi
210
+ fixes.
211
+ Make the testsuite more robust: eliminate several spurious
212
+ failures, and respect the $CC and $CXX environment variables.
213
+ Archive off the manually maintained ChangeLog in favor of git
214
+ log.
215
+
216
+ 3.0.13 Mar-17-13
217
+ Add Meta support.
218
+ Add missing Moxie bits.
219
+ Fix stack alignment bug on 32-bit x86.
220
+ Build fix for m68000 targets.
221
+ Build fix for soft-float Power targets.
222
+ Fix the install dir location for some platforms when building
223
+ with GCC (OS X, Solaris).
224
+ Fix Cygwin regression.
225
+
226
+ 3.0.12 Feb-11-13
227
+ Add Moxie support.
228
+ Add AArch64 support.
229
+ Add Blackfin support.
230
+ Add TILE-Gx/TILEPro support.
231
+ Add MicroBlaze support.
232
+ Add Xtensa support.
233
+ Add support for PaX enabled kernels with MPROTECT.
234
+ Add support for native vendor compilers on
235
+ Solaris and AIX.
236
+ Work around LLVM/GCC interoperability issue on x86_64.
237
+
238
+ 3.0.11 Apr-11-12
239
+ Lots of build fixes.
240
+ Add support for variadic functions (ffi_prep_cif_var).
241
+ Add Linux/x32 support.
242
+ Add thiscall, fastcall and MSVC cdecl support on Windows.
243
+ Add Amiga and newer MacOS support.
244
+ Add m68k FreeMiNT support.
245
+ Integration with iOS' xcode build tools.
246
+ Fix Octeon and MC68881 support.
247
+ Fix code pessimizations.
146
248
 
147
249
  3.0.10 Aug-23-11
148
250
  Add support for Apple's iOS.
@@ -286,7 +388,7 @@ See the ChangeLog files for details.
286
388
  Authors & Credits
287
389
  =================
288
390
 
289
- libffi was originally written by Anthony Green <green@redhat.com>.
391
+ libffi was originally written by Anthony Green <green@moxielogic.com>.
290
392
 
291
393
  The developers of the GNU Compiler Collection project have made
292
394
  innumerable valuable contributions. See the ChangeLog file for
@@ -301,15 +403,22 @@ Thorup.
301
403
  Major processor architecture ports were contributed by the following
302
404
  developers:
303
405
 
406
+ aarch64 Marcus Shawcroft, James Greenhalgh
304
407
  alpha Richard Henderson
305
408
  arm Raffaele Sena
409
+ blackfin Alexandre Keunecke I. de Mendonca
306
410
  cris Simon Posnjak, Hans-Peter Nilsson
307
411
  frv Anthony Green
308
412
  ia64 Hans Boehm
309
413
  m32r Kazuhiro Inaoka
310
414
  m68k Andreas Schwab
415
+ m88k Miod Vallat
416
+ microblaze Nathan Rossi
311
417
  mips Anthony Green, Casey Marshall
312
418
  mips64 David Daney
419
+ moxie Anthony Green
420
+ nios ii Sandra Loosemore
421
+ openrisc Sebastian Macke
313
422
  pa Randolph Chung, Dave Anglin, Andreas Tobler
314
423
  powerpc Geoffrey Keating, Andreas Tobler,
315
424
  David Edelsohn, John Hornkvist
@@ -318,8 +427,11 @@ s390 Gerhard Tonn, Ulrich Weigand
318
427
  sh Kaz Kojima
319
428
  sh64 Kaz Kojima
320
429
  sparc Anthony Green, Gordon Irlam
430
+ tile-gx/tilepro Walter Lee
431
+ vax Miod Vallat
321
432
  x86 Anthony Green, Jon Beniston
322
433
  x86-64 Bo Thorsen
434
+ xtensa Chris Zankel
323
435
 
324
436
  Jesper Skov and Andrew Haley both did more than their fair share of
325
437
  stepping through the code and tracking down bugs.
@@ -90,3 +90,384 @@ if test $ac_cv_func_mmap_anon = yes; then
90
90
  [Define if mmap with MAP_ANON(YMOUS) works.])
91
91
  fi
92
92
  ])
93
+
94
+ dnl ----------------------------------------------------------------------
95
+ dnl This whole bit snagged from libstdc++-v3, via libatomic.
96
+
97
+ dnl
98
+ dnl LIBFFI_ENABLE
99
+ dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
100
+ dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
101
+ dnl (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
102
+ dnl
103
+ dnl See docs/html/17_intro/configury.html#enable for documentation.
104
+ dnl
105
+ m4_define([LIBFFI_ENABLE],[dnl
106
+ m4_define([_g_switch],[--enable-$1])dnl
107
+ m4_define([_g_help],[AC_HELP_STRING(_g_switch$3,[$4 @<:@default=$2@:>@])])dnl
108
+ AC_ARG_ENABLE($1,_g_help,
109
+ m4_bmatch([$5],
110
+ [^permit ],
111
+ [[
112
+ case "$enableval" in
113
+ m4_bpatsubst([$5],[permit ])) ;;
114
+ *) AC_MSG_ERROR(Unknown argument to enable/disable $1) ;;
115
+ dnl Idea for future: generate a URL pointing to
116
+ dnl "onlinedocs/configopts.html#whatever"
117
+ esac
118
+ ]],
119
+ [^$],
120
+ [[
121
+ case "$enableval" in
122
+ yes|no) ;;
123
+ *) AC_MSG_ERROR(Argument to enable/disable $1 must be yes or no) ;;
124
+ esac
125
+ ]],
126
+ [[$5]]),
127
+ [enable_]m4_bpatsubst([$1],-,_)[=][$2])
128
+ m4_undefine([_g_switch])dnl
129
+ m4_undefine([_g_help])dnl
130
+ ])
131
+
132
+ dnl
133
+ dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
134
+ dnl the native linker is in use, all variables will be defined to something
135
+ dnl safe (like an empty string).
136
+ dnl
137
+ dnl Defines:
138
+ dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
139
+ dnl OPT_LDFLAGS='-Wl,-O1' if possible
140
+ dnl LD (as a side effect of testing)
141
+ dnl Sets:
142
+ dnl with_gnu_ld
143
+ dnl libat_ld_is_gold (possibly)
144
+ dnl libat_gnu_ld_version (possibly)
145
+ dnl
146
+ dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
147
+ dnl set libat_gnu_ld_version to 12345. Zeros cause problems.
148
+ dnl
149
+ AC_DEFUN([LIBFFI_CHECK_LINKER_FEATURES], [
150
+ # If we're not using GNU ld, then there's no point in even trying these
151
+ # tests. Check for that first. We should have already tested for gld
152
+ # by now (in libtool), but require it now just to be safe...
153
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
154
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
155
+ AC_REQUIRE([AC_PROG_LD])
156
+ AC_REQUIRE([AC_PROG_AWK])
157
+
158
+ # The name set by libtool depends on the version of libtool. Shame on us
159
+ # for depending on an impl detail, but c'est la vie. Older versions used
160
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
161
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
162
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
163
+ # set (hence we're using an older libtool), then set it.
164
+ if test x${with_gnu_ld+set} != xset; then
165
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
166
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
167
+ with_gnu_ld=no
168
+ else
169
+ with_gnu_ld=$ac_cv_prog_gnu_ld
170
+ fi
171
+ fi
172
+
173
+ # Start by getting the version number. I think the libtool test already
174
+ # does some of this, but throws away the result.
175
+ libat_ld_is_gold=no
176
+ if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
177
+ libat_ld_is_gold=yes
178
+ fi
179
+ changequote(,)
180
+ ldver=`$LD --version 2>/dev/null |
181
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
182
+ changequote([,])
183
+ libat_gnu_ld_version=`echo $ldver | \
184
+ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
185
+
186
+ # Set --gc-sections.
187
+ if test "$with_gnu_ld" = "notbroken"; then
188
+ # GNU ld it is! Joy and bunny rabbits!
189
+
190
+ # All these tests are for C++; save the language and the compiler flags.
191
+ # Need to do this so that g++ won't try to link in libstdc++
192
+ ac_test_CFLAGS="${CFLAGS+set}"
193
+ ac_save_CFLAGS="$CFLAGS"
194
+ CFLAGS='-x c++ -Wl,--gc-sections'
195
+
196
+ # Check for -Wl,--gc-sections
197
+ # XXX This test is broken at the moment, as symbols required for linking
198
+ # are now in libsupc++ (not built yet). In addition, this test has
199
+ # cored on solaris in the past. In addition, --gc-sections doesn't
200
+ # really work at the moment (keeps on discarding used sections, first
201
+ # .eh_frame and now some of the glibc sections for iconv).
202
+ # Bzzzzt. Thanks for playing, maybe next time.
203
+ AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
204
+ AC_TRY_RUN([
205
+ int main(void)
206
+ {
207
+ try { throw 1; }
208
+ catch (...) { };
209
+ return 0;
210
+ }
211
+ ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
212
+ if test "$ac_test_CFLAGS" = set; then
213
+ CFLAGS="$ac_save_CFLAGS"
214
+ else
215
+ # this is the suspicious part
216
+ CFLAGS=''
217
+ fi
218
+ if test "$ac_sectionLDflags" = "yes"; then
219
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
220
+ fi
221
+ AC_MSG_RESULT($ac_sectionLDflags)
222
+ fi
223
+
224
+ # Set linker optimization flags.
225
+ if test x"$with_gnu_ld" = x"yes"; then
226
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
227
+ fi
228
+
229
+ AC_SUBST(SECTION_LDFLAGS)
230
+ AC_SUBST(OPT_LDFLAGS)
231
+ ])
232
+
233
+
234
+ dnl
235
+ dnl If GNU ld is in use, check to see if tricky linker opts can be used. If
236
+ dnl the native linker is in use, all variables will be defined to something
237
+ dnl safe (like an empty string).
238
+ dnl
239
+ dnl Defines:
240
+ dnl SECTION_LDFLAGS='-Wl,--gc-sections' if possible
241
+ dnl OPT_LDFLAGS='-Wl,-O1' if possible
242
+ dnl LD (as a side effect of testing)
243
+ dnl Sets:
244
+ dnl with_gnu_ld
245
+ dnl libat_ld_is_gold (possibly)
246
+ dnl libat_gnu_ld_version (possibly)
247
+ dnl
248
+ dnl The last will be a single integer, e.g., version 1.23.45.0.67.89 will
249
+ dnl set libat_gnu_ld_version to 12345. Zeros cause problems.
250
+ dnl
251
+ AC_DEFUN([LIBFFI_CHECK_LINKER_FEATURES], [
252
+ # If we're not using GNU ld, then there's no point in even trying these
253
+ # tests. Check for that first. We should have already tested for gld
254
+ # by now (in libtool), but require it now just to be safe...
255
+ test -z "$SECTION_LDFLAGS" && SECTION_LDFLAGS=''
256
+ test -z "$OPT_LDFLAGS" && OPT_LDFLAGS=''
257
+ AC_REQUIRE([AC_PROG_LD])
258
+ AC_REQUIRE([AC_PROG_AWK])
259
+
260
+ # The name set by libtool depends on the version of libtool. Shame on us
261
+ # for depending on an impl detail, but c'est la vie. Older versions used
262
+ # ac_cv_prog_gnu_ld, but now it's lt_cv_prog_gnu_ld, and is copied back on
263
+ # top of with_gnu_ld (which is also set by --with-gnu-ld, so that actually
264
+ # makes sense). We'll test with_gnu_ld everywhere else, so if that isn't
265
+ # set (hence we're using an older libtool), then set it.
266
+ if test x${with_gnu_ld+set} != xset; then
267
+ if test x${ac_cv_prog_gnu_ld+set} != xset; then
268
+ # We got through "ac_require(ac_prog_ld)" and still not set? Huh?
269
+ with_gnu_ld=no
270
+ else
271
+ with_gnu_ld=$ac_cv_prog_gnu_ld
272
+ fi
273
+ fi
274
+
275
+ # Start by getting the version number. I think the libtool test already
276
+ # does some of this, but throws away the result.
277
+ libat_ld_is_gold=no
278
+ if $LD --version 2>/dev/null | grep 'GNU gold'> /dev/null 2>&1; then
279
+ libat_ld_is_gold=yes
280
+ fi
281
+ changequote(,)
282
+ ldver=`$LD --version 2>/dev/null |
283
+ sed -e 's/GNU gold /GNU ld /;s/GNU ld version /GNU ld /;s/GNU ld ([^)]*) /GNU ld /;s/GNU ld \([0-9.][0-9.]*\).*/\1/; q'`
284
+ changequote([,])
285
+ libat_gnu_ld_version=`echo $ldver | \
286
+ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'`
287
+
288
+ # Set --gc-sections.
289
+ if test "$with_gnu_ld" = "notbroken"; then
290
+ # GNU ld it is! Joy and bunny rabbits!
291
+
292
+ # All these tests are for C++; save the language and the compiler flags.
293
+ # Need to do this so that g++ won't try to link in libstdc++
294
+ ac_test_CFLAGS="${CFLAGS+set}"
295
+ ac_save_CFLAGS="$CFLAGS"
296
+ CFLAGS='-x c++ -Wl,--gc-sections'
297
+
298
+ # Check for -Wl,--gc-sections
299
+ # XXX This test is broken at the moment, as symbols required for linking
300
+ # are now in libsupc++ (not built yet). In addition, this test has
301
+ # cored on solaris in the past. In addition, --gc-sections doesn't
302
+ # really work at the moment (keeps on discarding used sections, first
303
+ # .eh_frame and now some of the glibc sections for iconv).
304
+ # Bzzzzt. Thanks for playing, maybe next time.
305
+ AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
306
+ AC_TRY_RUN([
307
+ int main(void)
308
+ {
309
+ try { throw 1; }
310
+ catch (...) { };
311
+ return 0;
312
+ }
313
+ ], [ac_sectionLDflags=yes],[ac_sectionLDflags=no], [ac_sectionLDflags=yes])
314
+ if test "$ac_test_CFLAGS" = set; then
315
+ CFLAGS="$ac_save_CFLAGS"
316
+ else
317
+ # this is the suspicious part
318
+ CFLAGS=''
319
+ fi
320
+ if test "$ac_sectionLDflags" = "yes"; then
321
+ SECTION_LDFLAGS="-Wl,--gc-sections $SECTION_LDFLAGS"
322
+ fi
323
+ AC_MSG_RESULT($ac_sectionLDflags)
324
+ fi
325
+
326
+ # Set linker optimization flags.
327
+ if test x"$with_gnu_ld" = x"yes"; then
328
+ OPT_LDFLAGS="-Wl,-O1 $OPT_LDFLAGS"
329
+ fi
330
+
331
+ AC_SUBST(SECTION_LDFLAGS)
332
+ AC_SUBST(OPT_LDFLAGS)
333
+ ])
334
+
335
+
336
+ dnl
337
+ dnl Add version tags to symbols in shared library (or not), additionally
338
+ dnl marking other symbols as private/local (or not).
339
+ dnl
340
+ dnl --enable-symvers=style adds a version script to the linker call when
341
+ dnl creating the shared library. The choice of version script is
342
+ dnl controlled by 'style'.
343
+ dnl --disable-symvers does not.
344
+ dnl + Usage: LIBFFI_ENABLE_SYMVERS[(DEFAULT)]
345
+ dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
346
+ dnl choose a default style based on linker characteristics. Passing
347
+ dnl 'no' disables versioning.
348
+ dnl
349
+ AC_DEFUN([LIBFFI_ENABLE_SYMVERS], [
350
+
351
+ LIBFFI_ENABLE(symvers,yes,[=STYLE],
352
+ [enables symbol versioning of the shared library],
353
+ [permit yes|no|gnu*|sun])
354
+
355
+ # If we never went through the LIBFFI_CHECK_LINKER_FEATURES macro, then we
356
+ # don't know enough about $LD to do tricks...
357
+ AC_REQUIRE([LIBFFI_CHECK_LINKER_FEATURES])
358
+
359
+ # Turn a 'yes' into a suitable default.
360
+ if test x$enable_symvers = xyes ; then
361
+ # FIXME The following test is too strict, in theory.
362
+ if test $enable_shared = no || test "x$LD" = x; then
363
+ enable_symvers=no
364
+ else
365
+ if test $with_gnu_ld = yes ; then
366
+ enable_symvers=gnu
367
+ else
368
+ case ${target_os} in
369
+ # Sun symbol versioning exists since Solaris 2.5.
370
+ solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
371
+ enable_symvers=sun ;;
372
+ *)
373
+ enable_symvers=no ;;
374
+ esac
375
+ fi
376
+ fi
377
+ fi
378
+
379
+ # Check if 'sun' was requested on non-Solaris 2 platforms.
380
+ if test x$enable_symvers = xsun ; then
381
+ case ${target_os} in
382
+ solaris2*)
383
+ # All fine.
384
+ ;;
385
+ *)
386
+ # Unlikely to work.
387
+ AC_MSG_WARN([=== You have requested Sun symbol versioning, but])
388
+ AC_MSG_WARN([=== you are not targetting Solaris 2.])
389
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
390
+ enable_symvers=no
391
+ ;;
392
+ esac
393
+ fi
394
+
395
+ # Check to see if libgcc_s exists, indicating that shared libgcc is possible.
396
+ if test $enable_symvers != no; then
397
+ AC_MSG_CHECKING([for shared libgcc])
398
+ ac_save_CFLAGS="$CFLAGS"
399
+ CFLAGS=' -lgcc_s'
400
+ AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes, libat_shared_libgcc=no)
401
+ CFLAGS="$ac_save_CFLAGS"
402
+ if test $libat_shared_libgcc = no; then
403
+ cat > conftest.c <<EOF
404
+ int main (void) { return 0; }
405
+ EOF
406
+ changequote(,)dnl
407
+ libat_libgcc_s_suffix=`${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS \
408
+ -shared -shared-libgcc -o conftest.so \
409
+ conftest.c -v 2>&1 >/dev/null \
410
+ | sed -n 's/^.* -lgcc_s\([^ ]*\) .*$/\1/p'`
411
+ changequote([,])dnl
412
+ rm -f conftest.c conftest.so
413
+ if test x${libat_libgcc_s_suffix+set} = xset; then
414
+ CFLAGS=" -lgcc_s$libat_libgcc_s_suffix"
415
+ AC_TRY_LINK(, [return 0;], libat_shared_libgcc=yes)
416
+ CFLAGS="$ac_save_CFLAGS"
417
+ fi
418
+ fi
419
+ AC_MSG_RESULT($libat_shared_libgcc)
420
+ fi
421
+
422
+ # For GNU ld, we need at least this version. The format is described in
423
+ # LIBFFI_CHECK_LINKER_FEATURES above.
424
+ libat_min_gnu_ld_version=21400
425
+ # XXXXXXXXXXX libat_gnu_ld_version=21390
426
+
427
+ # Check to see if unspecified "yes" value can win, given results above.
428
+ # Change "yes" into either "no" or a style name.
429
+ if test $enable_symvers != no && test $libat_shared_libgcc = yes; then
430
+ if test $with_gnu_ld = yes; then
431
+ if test $libat_gnu_ld_version -ge $libat_min_gnu_ld_version ; then
432
+ enable_symvers=gnu
433
+ elif test $libat_ld_is_gold = yes ; then
434
+ enable_symvers=gnu
435
+ else
436
+ # The right tools, the right setup, but too old. Fallbacks?
437
+ AC_MSG_WARN(=== Linker version $libat_gnu_ld_version is too old for)
438
+ AC_MSG_WARN(=== full symbol versioning support in this release of GCC.)
439
+ AC_MSG_WARN(=== You would need to upgrade your binutils to version)
440
+ AC_MSG_WARN(=== $libat_min_gnu_ld_version or later and rebuild GCC.)
441
+ if test $libat_gnu_ld_version -ge 21200 ; then
442
+ # Globbing fix is present, proper block support is not.
443
+ dnl AC_MSG_WARN([=== Dude, you are soooo close. Maybe we can fake it.])
444
+ dnl enable_symvers=???
445
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
446
+ enable_symvers=no
447
+ else
448
+ # 2.11 or older.
449
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
450
+ enable_symvers=no
451
+ fi
452
+ fi
453
+ elif test $enable_symvers = sun; then
454
+ : All interesting versions of Sun ld support sun style symbol versioning.
455
+ else
456
+ # just fail for now
457
+ AC_MSG_WARN([=== You have requested some kind of symbol versioning, but])
458
+ AC_MSG_WARN([=== either you are not using a supported linker, or you are])
459
+ AC_MSG_WARN([=== not building a shared libgcc_s (which is required).])
460
+ AC_MSG_WARN([=== Symbol versioning will be disabled.])
461
+ enable_symvers=no
462
+ fi
463
+ fi
464
+ if test $enable_symvers = gnu; then
465
+ AC_DEFINE(LIBFFI_GNU_SYMBOL_VERSIONING, 1,
466
+ [Define to 1 if GNU symbol versioning is used for libatomic.])
467
+ fi
468
+
469
+ AM_CONDITIONAL(LIBFFI_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
470
+ AM_CONDITIONAL(LIBFFI_BUILD_VERSIONED_SHLIB_GNU, test $enable_symvers = gnu)
471
+ AM_CONDITIONAL(LIBFFI_BUILD_VERSIONED_SHLIB_SUN, test $enable_symvers = sun)
472
+ AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers)
473
+ ])