ffi 1.9.18 → 1.9.21

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 (366) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/Rakefile +14 -3
  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/README +164 -52
  17. data/ext/ffi_c/libffi/acinclude.m4 +381 -0
  18. data/ext/ffi_c/libffi/autogen.sh +2 -0
  19. data/ext/ffi_c/libffi/configure.ac +148 -256
  20. data/ext/ffi_c/libffi/configure.host +265 -4
  21. data/ext/ffi_c/libffi/doc/Makefile.am +3 -0
  22. data/ext/ffi_c/libffi/doc/libffi.texi +430 -45
  23. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  24. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +207 -0
  25. data/ext/ffi_c/libffi/include/Makefile.am +3 -3
  26. data/ext/ffi_c/libffi/include/ffi.h.in +107 -50
  27. data/ext/ffi_c/libffi/include/ffi_cfi.h +55 -0
  28. data/ext/ffi_c/libffi/include/ffi_common.h +32 -11
  29. data/ext/ffi_c/libffi/libffi.map.in +80 -0
  30. data/ext/ffi_c/libffi/libffi.pc.in +3 -2
  31. data/ext/ffi_c/libffi/libffi.xcodeproj/project.pbxproj +637 -0
  32. data/ext/ffi_c/libffi/libtool-ldflags +106 -0
  33. data/ext/ffi_c/libffi/libtool-version +1 -1
  34. data/ext/ffi_c/libffi/m4/asmcfi.m4 +13 -0
  35. data/ext/ffi_c/libffi/m4/ax_append_flag.m4 +69 -0
  36. data/ext/ffi_c/libffi/m4/ax_cc_maxopt.m4 +13 -8
  37. data/ext/ffi_c/libffi/m4/ax_cflags_warn_all.m4 +31 -104
  38. data/ext/ffi_c/libffi/m4/{ax_check_compiler_flags.m4 → ax_check_compile_flag.m4} +30 -34
  39. data/ext/ffi_c/libffi/m4/ax_compiler_vendor.m4 +32 -11
  40. data/ext/ffi_c/libffi/m4/ax_enable_builddir.m4 +6 -5
  41. data/ext/ffi_c/libffi/m4/ax_gcc_archflag.m4 +31 -21
  42. data/ext/ffi_c/libffi/man/Makefile.am +2 -2
  43. data/ext/ffi_c/libffi/man/ffi.3 +10 -0
  44. data/ext/ffi_c/libffi/man/ffi_prep_cif.3 +6 -4
  45. data/ext/ffi_c/libffi/man/ffi_prep_cif_var.3 +73 -0
  46. data/ext/ffi_c/libffi/msvcc.sh +72 -9
  47. data/ext/ffi_c/libffi/src/aarch64/ffi.c +941 -0
  48. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +81 -0
  49. data/ext/ffi_c/libffi/src/aarch64/internal.h +67 -0
  50. data/ext/ffi_c/libffi/src/aarch64/sysv.S +438 -0
  51. data/ext/ffi_c/libffi/src/alpha/ffi.c +335 -98
  52. data/ext/ffi_c/libffi/src/alpha/ffitarget.h +10 -1
  53. data/ext/ffi_c/libffi/src/alpha/internal.h +23 -0
  54. data/ext/ffi_c/libffi/src/alpha/osf.S +161 -266
  55. data/ext/ffi_c/libffi/src/arc/arcompact.S +135 -0
  56. data/ext/ffi_c/libffi/src/arc/ffi.c +266 -0
  57. data/ext/ffi_c/libffi/src/arc/ffitarget.h +53 -0
  58. data/ext/ffi_c/libffi/src/arm/ffi.c +597 -517
  59. data/ext/ffi_c/libffi/src/arm/ffitarget.h +24 -7
  60. data/ext/ffi_c/libffi/src/arm/internal.h +7 -0
  61. data/ext/ffi_c/libffi/src/arm/sysv.S +303 -417
  62. data/ext/ffi_c/libffi/src/avr32/ffitarget.h +6 -1
  63. data/ext/ffi_c/libffi/src/bfin/ffi.c +196 -0
  64. data/ext/ffi_c/libffi/src/bfin/ffitarget.h +43 -0
  65. data/ext/ffi_c/libffi/src/bfin/sysv.S +179 -0
  66. data/ext/ffi_c/libffi/src/closures.c +319 -44
  67. data/ext/ffi_c/libffi/src/cris/ffi.c +10 -7
  68. data/ext/ffi_c/libffi/src/cris/ffitarget.h +6 -1
  69. data/ext/ffi_c/libffi/src/debug.c +6 -1
  70. data/ext/ffi_c/libffi/src/dlmalloc.c +16 -11
  71. data/ext/ffi_c/libffi/src/frv/ffi.c +1 -1
  72. data/ext/ffi_c/libffi/src/frv/ffitarget.h +6 -1
  73. data/ext/ffi_c/libffi/src/ia64/ffi.c +11 -7
  74. data/ext/ffi_c/libffi/src/ia64/ffitarget.h +6 -1
  75. data/ext/ffi_c/libffi/src/java_raw_api.c +23 -5
  76. data/ext/ffi_c/libffi/src/m32r/ffi.c +1 -1
  77. data/ext/ffi_c/libffi/src/m32r/ffitarget.h +6 -1
  78. data/ext/ffi_c/libffi/src/m68k/ffi.c +87 -13
  79. data/ext/ffi_c/libffi/src/m68k/ffitarget.h +6 -1
  80. data/ext/ffi_c/libffi/src/m68k/sysv.S +119 -32
  81. data/ext/ffi_c/libffi/src/m88k/ffi.c +400 -0
  82. data/ext/ffi_c/libffi/src/m88k/ffitarget.h +49 -0
  83. data/ext/ffi_c/libffi/src/m88k/obsd.S +209 -0
  84. data/ext/ffi_c/libffi/src/metag/ffi.c +330 -0
  85. data/ext/ffi_c/libffi/{fficonfig.hw → src/metag/ffitarget.h} +22 -26
  86. data/ext/ffi_c/libffi/src/metag/sysv.S +311 -0
  87. data/ext/ffi_c/libffi/src/microblaze/ffi.c +321 -0
  88. data/ext/ffi_c/libffi/src/microblaze/ffitarget.h +53 -0
  89. data/ext/ffi_c/libffi/src/microblaze/sysv.S +302 -0
  90. data/ext/ffi_c/libffi/src/mips/ffi.c +95 -28
  91. data/ext/ffi_c/libffi/src/mips/ffitarget.h +9 -2
  92. data/ext/ffi_c/libffi/src/mips/n32.S +126 -56
  93. data/ext/ffi_c/libffi/src/mips/o32.S +148 -27
  94. data/ext/ffi_c/libffi/src/moxie/eabi.S +55 -82
  95. data/ext/ffi_c/libffi/src/moxie/ffi.c +40 -44
  96. data/ext/ffi_c/libffi/src/moxie/ffitarget.h +52 -0
  97. data/ext/ffi_c/libffi/src/nios2/ffi.c +304 -0
  98. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +52 -0
  99. data/ext/ffi_c/libffi/src/nios2/sysv.S +136 -0
  100. data/ext/ffi_c/libffi/src/or1k/ffi.c +328 -0
  101. data/ext/ffi_c/libffi/src/or1k/ffitarget.h +58 -0
  102. data/ext/ffi_c/libffi/src/or1k/sysv.S +107 -0
  103. data/ext/ffi_c/libffi/src/pa/ffitarget.h +8 -1
  104. data/ext/ffi_c/libffi/src/powerpc/aix.S +6 -6
  105. data/ext/ffi_c/libffi/src/powerpc/aix_closure.S +3 -1
  106. data/ext/ffi_c/libffi/src/powerpc/asm.h +2 -2
  107. data/ext/ffi_c/libffi/src/powerpc/darwin.S +2 -7
  108. data/ext/ffi_c/libffi/src/powerpc/darwin_closure.S +22 -26
  109. data/ext/ffi_c/libffi/src/powerpc/ffi.c +103 -1378
  110. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +25 -25
  111. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +945 -0
  112. data/ext/ffi_c/libffi/src/powerpc/ffi_powerpc.h +94 -0
  113. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +923 -0
  114. data/ext/ffi_c/libffi/src/powerpc/ffitarget.h +100 -44
  115. data/ext/ffi_c/libffi/src/powerpc/linux64.S +100 -59
  116. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +360 -108
  117. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +138 -68
  118. data/ext/ffi_c/libffi/src/powerpc/sysv.S +68 -112
  119. data/ext/ffi_c/libffi/src/prep_cif.c +108 -24
  120. data/ext/ffi_c/libffi/src/raw_api.c +18 -5
  121. data/ext/ffi_c/libffi/src/s390/ffi.c +294 -318
  122. data/ext/ffi_c/libffi/src/s390/ffitarget.h +9 -1
  123. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  124. data/ext/ffi_c/libffi/src/s390/sysv.S +257 -366
  125. data/ext/ffi_c/libffi/src/sh/ffi.c +4 -3
  126. data/ext/ffi_c/libffi/src/sh/ffitarget.h +6 -1
  127. data/ext/ffi_c/libffi/src/sh64/ffi.c +3 -2
  128. data/ext/ffi_c/libffi/src/sh64/ffitarget.h +6 -1
  129. data/ext/ffi_c/libffi/src/sparc/ffi.c +326 -527
  130. data/ext/ffi_c/libffi/src/sparc/ffi64.c +608 -0
  131. data/ext/ffi_c/libffi/src/sparc/ffitarget.h +20 -7
  132. data/ext/ffi_c/libffi/src/sparc/internal.h +26 -0
  133. data/ext/ffi_c/libffi/src/sparc/v8.S +364 -234
  134. data/ext/ffi_c/libffi/src/sparc/v9.S +340 -207
  135. data/ext/ffi_c/libffi/src/tile/ffi.c +355 -0
  136. data/ext/ffi_c/libffi/src/tile/ffitarget.h +65 -0
  137. data/ext/ffi_c/libffi/src/tile/tile.S +360 -0
  138. data/ext/ffi_c/libffi/src/types.c +43 -14
  139. data/ext/ffi_c/libffi/src/vax/elfbsd.S +195 -0
  140. data/ext/ffi_c/libffi/src/vax/ffi.c +276 -0
  141. data/ext/ffi_c/libffi/src/vax/ffitarget.h +49 -0
  142. data/ext/ffi_c/libffi/src/x86/asmnames.h +30 -0
  143. data/ext/ffi_c/libffi/src/x86/ffi.c +589 -500
  144. data/ext/ffi_c/libffi/src/x86/ffi64.c +338 -116
  145. data/ext/ffi_c/libffi/src/x86/ffitarget.h +55 -35
  146. data/ext/ffi_c/libffi/src/x86/ffiw64.c +287 -0
  147. data/ext/ffi_c/libffi/src/x86/internal.h +29 -0
  148. data/ext/ffi_c/libffi/src/x86/internal64.h +22 -0
  149. data/ext/ffi_c/libffi/src/x86/sysv.S +975 -400
  150. data/ext/ffi_c/libffi/src/x86/unix64.S +398 -299
  151. data/ext/ffi_c/libffi/src/x86/win64.S +222 -458
  152. data/ext/ffi_c/libffi/src/x86/win64_intel.S +237 -0
  153. data/ext/ffi_c/libffi/src/xtensa/ffi.c +298 -0
  154. data/ext/ffi_c/libffi/src/xtensa/ffitarget.h +53 -0
  155. data/ext/ffi_c/libffi/src/xtensa/sysv.S +253 -0
  156. data/ext/ffi_c/libffi/stamp-h.in +1 -0
  157. data/ext/ffi_c/libffi/testsuite/Makefile.am +78 -73
  158. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +120 -25
  159. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +21 -1
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +46 -0
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +4 -6
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/{closure_stdcall.c → closure_simple.c} +7 -16
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_12byte.c +4 -4
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_16byte.c +4 -4
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_18byte.c +4 -4
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_19byte.c +4 -4
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_1_1byte.c +4 -4
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte.c +4 -4
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_20byte1.c +4 -4
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_24byte.c +5 -5
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_2byte.c +4 -4
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3_1byte.c +4 -4
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte1.c +4 -4
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_3byte2.c +4 -4
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4_1byte.c +4 -4
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_4byte.c +4 -4
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5_1_byte.c +4 -4
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_5byte.c +4 -4
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_64byte.c +5 -5
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6_1_byte.c +4 -4
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_6byte.c +4 -4
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7_1_byte.c +4 -4
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_7byte.c +4 -4
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_8byte.c +4 -4
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte1.c +4 -4
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_9byte2.c +4 -4
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_double.c +4 -4
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_float.c +4 -4
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble.c +4 -4
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split.c +4 -6
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c +4 -6
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_pointer.c +4 -4
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint16.c +4 -4
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint32.c +4 -4
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_sint64.c +4 -4
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint16.c +4 -4
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint32.c +4 -4
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_align_uint64.c +4 -4
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_dbls_struct.c +4 -4
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_double_va.c +10 -9
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble.c +3 -3
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_longdouble_va.c +10 -9
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_args.c +70 -0
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_many_mixed_float_double.c +55 -0
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer.c +1 -1
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_pointer_stack.c +11 -9
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_struct_va1.c +114 -0
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uchar_va.c +44 -0
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_uint_va.c +45 -0
  210. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulong_va.c +45 -0
  211. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ulonglong.c +5 -5
  212. data/ext/ffi_c/libffi/testsuite/libffi.call/cls_ushort_va.c +44 -0
  213. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +2 -2
  214. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +23 -40
  215. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +3 -1
  216. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +6 -4
  217. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +4 -2
  218. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +107 -0
  219. data/ext/ffi_c/libffi/testsuite/libffi.call/huge_struct.c +18 -19
  220. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +6 -16
  221. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +57 -0
  222. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +70 -0
  223. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +78 -0
  224. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -1
  225. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct.c +6 -6
  226. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct1.c +8 -8
  227. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct10.c +6 -6
  228. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct11.c +121 -0
  229. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct2.c +5 -5
  230. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct3.c +5 -5
  231. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct4.c +5 -5
  232. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct5.c +5 -5
  233. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct6.c +6 -6
  234. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct7.c +5 -5
  235. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct8.c +6 -6
  236. data/ext/ffi_c/libffi/testsuite/libffi.call/nested_struct9.c +6 -6
  237. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +46 -0
  238. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +127 -0
  239. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +1 -0
  240. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +1 -1
  241. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +1 -1
  242. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +1 -1
  243. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large.c +7 -7
  244. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_large2.c +7 -7
  245. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium.c +5 -5
  246. data/ext/ffi_c/libffi/testsuite/libffi.call/stret_medium2.c +5 -5
  247. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +2 -2
  248. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +49 -0
  249. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +49 -0
  250. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +55 -0
  251. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +9 -7
  252. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +7 -7
  253. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +7 -6
  254. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +9 -8
  255. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +9 -8
  256. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +9 -9
  257. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +9 -9
  258. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +9 -8
  259. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +9 -8
  260. data/ext/ffi_c/libffi/testsuite/libffi.call/testclosure.c +2 -2
  261. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +61 -0
  262. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest.cc +3 -10
  263. data/ext/ffi_c/libffi/testsuite/{libffi.special → libffi.call}/unwindtest_ffi_call.cc +2 -1
  264. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +196 -0
  265. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +121 -0
  266. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +123 -0
  267. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +125 -0
  268. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +91 -0
  269. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +10 -0
  270. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +10 -0
  271. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +10 -0
  272. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +42 -0
  273. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +10 -0
  274. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +10 -0
  275. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +10 -0
  276. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +71 -0
  277. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +10 -0
  278. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +10 -0
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +10 -0
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +80 -0
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +10 -0
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +16 -0
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +10 -0
  284. data/ext/ffi_c/libffi/testsuite/{libffi.special/special.exp → libffi.complex/complex.exp} +9 -8
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +51 -0
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +7 -0
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +7 -0
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +7 -0
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +10 -0
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +10 -0
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +86 -0
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +10 -0
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +1 -0
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +78 -0
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +10 -0
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +10 -0
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +10 -0
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +37 -0
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +41 -0
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +10 -0
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +10 -0
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +10 -0
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +44 -0
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +10 -0
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +10 -0
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +10 -0
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +10 -0
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +10 -0
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +10 -0
  310. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +34 -0
  311. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +28 -0
  312. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +1 -0
  313. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +36 -0
  314. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +19 -0
  315. data/ffi.gemspec +2 -2
  316. data/lib/ffi/enum.rb +124 -0
  317. data/lib/ffi/library.rb +65 -13
  318. data/lib/ffi/platform.rb +7 -2
  319. data/lib/ffi/platform/sparc64-linux/types.conf +102 -0
  320. data/lib/ffi/platform/x86_64-windows/types.conf +113 -20
  321. data/lib/ffi/pointer.rb +1 -0
  322. data/lib/ffi/struct.rb +0 -2
  323. data/lib/ffi/version.rb +1 -1
  324. data/spec/ffi/bitmask_spec.rb +575 -0
  325. data/spec/ffi/fixtures/BitmaskTest.c +51 -0
  326. data/spec/ffi/rbx/memory_pointer_spec.rb +4 -0
  327. data/spec/ffi/struct_spec.rb +0 -4
  328. metadata +143 -51
  329. data/ext/ffi_c/libffi/Makefile.in +0 -1820
  330. data/ext/ffi_c/libffi/Makefile.vc +0 -141
  331. data/ext/ffi_c/libffi/Makefile.vc64 +0 -141
  332. data/ext/ffi_c/libffi/aclocal.m4 +0 -1873
  333. data/ext/ffi_c/libffi/build-ios.sh +0 -67
  334. data/ext/ffi_c/libffi/compile +0 -143
  335. data/ext/ffi_c/libffi/config.guess +0 -1501
  336. data/ext/ffi_c/libffi/config.sub +0 -1705
  337. data/ext/ffi_c/libffi/configure +0 -17191
  338. data/ext/ffi_c/libffi/depcomp +0 -630
  339. data/ext/ffi_c/libffi/doc/libffi.info +0 -593
  340. data/ext/ffi_c/libffi/doc/stamp-vti +0 -4
  341. data/ext/ffi_c/libffi/fficonfig.h.in +0 -199
  342. data/ext/ffi_c/libffi/include/Makefile.in +0 -487
  343. data/ext/ffi_c/libffi/include/ffi.h.vc +0 -427
  344. data/ext/ffi_c/libffi/include/ffi.h.vc64 +0 -427
  345. data/ext/ffi_c/libffi/install-sh +0 -520
  346. data/ext/ffi_c/libffi/ltmain.sh +0 -9636
  347. data/ext/ffi_c/libffi/m4/libtool.m4 +0 -7831
  348. data/ext/ffi_c/libffi/m4/ltoptions.m4 +0 -369
  349. data/ext/ffi_c/libffi/m4/ltsugar.m4 +0 -123
  350. data/ext/ffi_c/libffi/m4/ltversion.m4 +0 -23
  351. data/ext/ffi_c/libffi/m4/lt~obsolete.m4 +0 -98
  352. data/ext/ffi_c/libffi/man/Makefile.in +0 -466
  353. data/ext/ffi_c/libffi/mdate-sh +0 -201
  354. data/ext/ffi_c/libffi/missing +0 -376
  355. data/ext/ffi_c/libffi/src/arm/gentramp.sh +0 -118
  356. data/ext/ffi_c/libffi/src/arm/trampoline.S +0 -4450
  357. data/ext/ffi_c/libffi/src/x86/darwin.S +0 -444
  358. data/ext/ffi_c/libffi/src/x86/darwin64.S +0 -416
  359. data/ext/ffi_c/libffi/src/x86/freebsd.S +0 -458
  360. data/ext/ffi_c/libffi/src/x86/win32.S +0 -1065
  361. data/ext/ffi_c/libffi/testsuite/Makefile.in +0 -500
  362. data/ext/ffi_c/libffi/testsuite/lib/libffi-dg.exp +0 -300
  363. data/ext/ffi_c/libffi/testsuite/libffi.call/many_win32.c +0 -63
  364. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen_win32.c +0 -44
  365. data/ext/ffi_c/libffi/testsuite/libffi.special/ffitestcxx.h +0 -96
  366. data/ext/ffi_c/libffi/texinfo.tex +0 -7210
@@ -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
+ ])
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ exec autoreconf -v -f -i
@@ -1,14 +1,18 @@
1
1
  dnl Process this with autoconf to create configure
2
2
 
3
- AC_PREREQ(2.63)
3
+ AC_PREREQ(2.68)
4
4
 
5
- AC_INIT([libffi], [3.0.10], [http://sourceware.org/libffi.html])
5
+ AC_INIT([libffi], [3.99999], [http://github.com/libffi/libffi/issues])
6
6
  AC_CONFIG_HEADERS([fficonfig.h])
7
7
 
8
8
  AC_CANONICAL_SYSTEM
9
9
  target_alias=${target_alias-$host_alias}
10
10
 
11
- . ${srcdir}/configure.host
11
+ case "${host}" in
12
+ frv*-elf)
13
+ LDFLAGS=`echo $LDFLAGS | sed "s/\-B[^ ]*libgloss\/frv\///"`\ -B`pwd`/../libgloss/frv/
14
+ ;;
15
+ esac
12
16
 
13
17
  AX_ENABLE_BUILDDIR
14
18
 
@@ -25,9 +29,10 @@ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
25
29
  m4_define([_AC_ARG_VAR_PRECIOUS],[])
26
30
  save_CFLAGS=$CFLAGS
27
31
  AC_PROG_CC
32
+ AC_PROG_CXX
28
33
  CFLAGS=$save_CFLAGS
29
34
  m4_undefine([_AC_ARG_VAR_PRECIOUS])
30
- m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
35
+ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
31
36
 
32
37
  AC_SUBST(CFLAGS)
33
38
 
@@ -36,193 +41,46 @@ AM_PROG_CC_C_O
36
41
  AC_PROG_LIBTOOL
37
42
  AC_CONFIG_MACRO_DIR([m4])
38
43
 
44
+ # Test for 64-bit build.
45
+ AC_CHECK_SIZEOF([size_t])
46
+
47
+ AX_COMPILER_VENDOR
39
48
  AX_CC_MAXOPT
40
- AX_CFLAGS_WARN_ALL
49
+ # The AX_CFLAGS_WARN_ALL macro doesn't currently work for sunpro
50
+ # compiler.
51
+ if test "$ax_cv_c_compiler_vendor" != "sun"; then
52
+ AX_CFLAGS_WARN_ALL
53
+ fi
54
+
41
55
  if test "x$GCC" = "xyes"; then
42
56
  CFLAGS="$CFLAGS -fexceptions"
43
57
  fi
44
58
 
59
+ cat > local.exp <<EOF
60
+ set CC_FOR_TARGET "$CC"
61
+ set CXX_FOR_TARGET "$CXX"
62
+ EOF
63
+
45
64
  AM_MAINTAINER_MODE
46
65
 
47
66
  AC_CHECK_HEADERS(sys/mman.h)
48
- AC_CHECK_FUNCS(mmap)
67
+ AC_CHECK_FUNCS([mmap mkostemp])
49
68
  AC_FUNC_MMAP_BLACKLIST
50
69
 
51
70
  dnl The -no-testsuite modules omit the test subdir.
52
71
  AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)
53
72
 
54
73
  TARGETDIR="unknown"
55
- case "$host" in
56
- alpha*-*-*)
57
- TARGET=ALPHA; TARGETDIR=alpha;
58
- # Support 128-bit long double, changeable via command-line switch.
59
- HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)'
60
- ;;
61
-
62
- arm*-*-*)
63
- TARGET=ARM; TARGETDIR=arm
64
- ;;
65
-
66
- amd64-*-freebsd* | amd64-*-openbsd*)
67
- TARGET=X86_64; TARGETDIR=x86
68
- ;;
69
-
70
- amd64-*-freebsd*)
71
- TARGET=X86_64; TARGETDIR=x86
72
- ;;
73
-
74
- avr32*-*-*)
75
- TARGET=AVR32; TARGETDIR=avr32
76
- ;;
77
-
78
- cris-*-*)
79
- TARGET=LIBFFI_CRIS; TARGETDIR=cris
80
- ;;
81
-
82
- frv-*-*)
83
- TARGET=FRV; TARGETDIR=frv
84
- ;;
85
-
86
- hppa*-*-linux* | parisc*-*-linux* | hppa*-*-openbsd*)
87
- TARGET=PA_LINUX; TARGETDIR=pa
88
- ;;
89
- hppa*64-*-hpux*)
90
- TARGET=PA64_HPUX; TARGETDIR=pa
91
- ;;
92
- hppa*-*-hpux*)
93
- TARGET=PA_HPUX; TARGETDIR=pa
94
- ;;
95
-
96
- i?86-*-freebsd* | i?86-*-openbsd*)
97
- TARGET=X86_FREEBSD; TARGETDIR=x86
98
- ;;
99
- i?86-win32* | i?86-*-cygwin* | i?86-*-mingw* | i?86-*-os2* | i?86-*-interix*)
100
- TARGET=X86_WIN32; TARGETDIR=x86
101
- # All mingw/cygwin/win32 builds require -no-undefined for sharedlib.
102
- # We must also check with_cross_host to decide if this is a native
103
- # or cross-build and select where to install dlls appropriately.
104
- if test -n "$with_cross_host" &&
105
- test x"$with_cross_host" != x"no"; then
106
- AM_LTLDFLAGS='-no-undefined -bindir "$(toolexeclibdir)"';
107
- else
108
- AM_LTLDFLAGS='-no-undefined -bindir "$(bindir)"';
109
- fi
110
- ;;
111
- i?86-*-darwin*)
112
- TARGET=X86_DARWIN; TARGETDIR=x86
113
- ;;
114
- i?86-*-solaris2.1[[0-9]]*)
115
- TARGET=X86_64; TARGETDIR=x86
116
- ;;
117
- i?86-*-*)
118
- TARGET=X86; TARGETDIR=x86
119
- ;;
120
-
121
- ia64*-*-*)
122
- TARGET=IA64; TARGETDIR=ia64
123
- ;;
124
-
125
- m32r*-*-*)
126
- TARGET=M32R; TARGETDIR=m32r
127
- ;;
128
-
129
- m68k-*-*)
130
- TARGET=M68K; TARGETDIR=m68k
131
- ;;
132
-
133
- mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
134
- TARGET=MIPS; TARGETDIR=mips
135
- ;;
136
- mips*-*-linux* | mips*-*-openbsd*)
137
- # Support 128-bit long double for NewABI.
138
- HAVE_LONG_DOUBLE='defined(__mips64)'
139
- TARGET=MIPS; TARGETDIR=mips
140
- ;;
141
-
142
- powerpc*-*-linux* | powerpc-*-sysv*)
143
- TARGET=POWERPC; TARGETDIR=powerpc
144
- ;;
145
- powerpc-*-beos*)
146
- TARGET=POWERPC; TARGETDIR=powerpc
147
- ;;
148
- powerpc-*-darwin* | powerpc64-*-darwin*)
149
- TARGET=POWERPC_DARWIN; TARGETDIR=powerpc
150
- ;;
151
- powerpc-*-aix* | rs6000-*-aix*)
152
- TARGET=POWERPC_AIX; TARGETDIR=powerpc
153
- ;;
154
- powerpc-*-freebsd* | powerpc-*-openbsd*)
155
- TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
156
- ;;
157
- powerpc64-*-freebsd*)
158
- TARGET=POWERPC; TARGETDIR=powerpc
159
- ;;
160
- powerpc*-*-rtems*)
161
- TARGET=POWERPC; TARGETDIR=powerpc
162
- ;;
163
-
164
- s390-*-* | s390x-*-*)
165
- TARGET=S390; TARGETDIR=s390
166
- ;;
167
-
168
- sh-*-* | sh[[34]]*-*-*)
169
- TARGET=SH; TARGETDIR=sh
170
- ;;
171
- sh64-*-* | sh5*-*-*)
172
- TARGET=SH64; TARGETDIR=sh64
173
- ;;
174
-
175
- sparc*-*-*)
176
- TARGET=SPARC; TARGETDIR=sparc
177
- ;;
178
-
179
- x86_64-*-darwin*)
180
- TARGET=X86_DARWIN; TARGETDIR=x86
181
- ;;
182
-
183
- x86_64-*-cygwin* | x86_64-*-mingw*)
184
- TARGET=X86_WIN64; TARGETDIR=x86
185
- ;;
186
-
187
- x86_64-*-*)
188
- TARGET=X86_64; TARGETDIR=x86
189
- ;;
190
- esac
74
+ HAVE_LONG_DOUBLE_VARIANT=0
191
75
 
192
- AC_SUBST(AM_RUNTESTFLAGS)
193
- AC_SUBST(AM_LTLDFLAGS)
76
+ . ${srcdir}/configure.host
194
77
 
195
- if test $TARGETDIR = unknown; then
78
+ if test -n "${UNSUPPORTED}"; then
196
79
  AC_MSG_ERROR(["libffi has not been ported to $host."])
197
80
  fi
198
81
 
199
- AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS)
200
- AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
201
- AM_CONDITIONAL(X86, test x$TARGET = xX86)
202
- AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD)
203
- AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32)
204
- AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64)
205
- AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN)
206
- AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
207
- AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
208
- AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
209
- AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
210
- AM_CONDITIONAL(MOXIE, test x$TARGET = xMOXIE)
211
- AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
212
- AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX)
213
- AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN)
214
- AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD)
215
- AM_CONDITIONAL(ARM, test x$TARGET = xARM)
216
- AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32)
217
- AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS)
218
- AM_CONDITIONAL(FRV, test x$TARGET = xFRV)
219
- AM_CONDITIONAL(S390, test x$TARGET = xS390)
220
- AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64)
221
- AM_CONDITIONAL(SH, test x$TARGET = xSH)
222
- AM_CONDITIONAL(SH64, test x$TARGET = xSH64)
223
- AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX)
224
- AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
225
- AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
82
+ AC_SUBST(AM_RUNTESTFLAGS)
83
+ AC_SUBST(AM_LTLDFLAGS)
226
84
 
227
85
  AC_HEADER_STDC
228
86
  AC_CHECK_FUNCS(memcpy)
@@ -234,30 +92,27 @@ AC_CHECK_SIZEOF(long double)
234
92
  # Also AC_SUBST this variable for ffi.h.
235
93
  if test -z "$HAVE_LONG_DOUBLE"; then
236
94
  HAVE_LONG_DOUBLE=0
237
- if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
238
- if test $ac_cv_sizeof_long_double != 0; then
95
+ if test $ac_cv_sizeof_long_double != 0; then
96
+ if test $HAVE_LONG_DOUBLE_VARIANT != 0; then
97
+ AC_DEFINE(HAVE_LONG_DOUBLE_VARIANT, 1, [Define if you support more than one size of the long double type])
239
98
  HAVE_LONG_DOUBLE=1
240
- AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
99
+ else
100
+ if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then
101
+ HAVE_LONG_DOUBLE=1
102
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double])
103
+ fi
241
104
  fi
242
105
  fi
243
106
  fi
244
107
  AC_SUBST(HAVE_LONG_DOUBLE)
108
+ AC_SUBST(HAVE_LONG_DOUBLE_VARIANT)
245
109
 
246
110
  AC_C_BIGENDIAN
247
111
 
248
- AC_CACHE_CHECK([assembler .cfi pseudo-op support],
249
- libffi_cv_as_cfi_pseudo_op, [
250
- libffi_cv_as_cfi_pseudo_op=unknown
251
- AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],,
252
- [libffi_cv_as_cfi_pseudo_op=yes],
253
- [libffi_cv_as_cfi_pseudo_op=no])
254
- ])
255
- if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then
256
- AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1,
257
- [Define if your assembler supports .cfi_* directives.])
258
- fi
112
+ GCC_AS_CFI_PSEUDO_OP
259
113
 
260
- if test x$TARGET = xSPARC; then
114
+ case "$TARGET" in
115
+ SPARC)
261
116
  AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs],
262
117
  libffi_cv_as_sparc_ua_pcrel, [
263
118
  save_CFLAGS="$CFLAGS"
@@ -278,7 +133,7 @@ if test x$TARGET = xSPARC; then
278
133
  libffi_cv_as_register_pseudo_op, [
279
134
  libffi_cv_as_register_pseudo_op=unknown
280
135
  # Check if we have .register
281
- AC_TRY_COMPILE([asm (".register %g2, #scratch");],,
136
+ AC_TRY_COMPILE(,[asm (".register %g2, #scratch");],
282
137
  [libffi_cv_as_register_pseudo_op=yes],
283
138
  [libffi_cv_as_register_pseudo_op=no])
284
139
  ])
@@ -286,66 +141,63 @@ if test x$TARGET = xSPARC; then
286
141
  AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1,
287
142
  [Define if your assembler supports .register.])
288
143
  fi
289
- fi
144
+ ;;
290
145
 
291
- if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then
146
+ X86*)
292
147
  AC_CACHE_CHECK([assembler supports pc related relocs],
293
148
  libffi_cv_as_x86_pcrel, [
294
149
  libffi_cv_as_x86_pcrel=no
295
150
  echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s
296
- if $CC $CFLAGS -c conftest.s > /dev/null; then
297
- libffi_cv_as_x86_pcrel=yes
151
+ if $CC $CFLAGS -c conftest.s > /dev/null 2>&1; then
152
+ libffi_cv_as_x86_pcrel=yes
298
153
  fi
299
154
  ])
300
155
  if test "x$libffi_cv_as_x86_pcrel" = xyes; then
301
156
  AC_DEFINE(HAVE_AS_X86_PCREL, 1,
302
157
  [Define if your assembler supports PC relative relocs.])
303
158
  fi
304
-
305
- AC_CACHE_CHECK([assembler .ascii pseudo-op support],
306
- libffi_cv_as_ascii_pseudo_op, [
307
- libffi_cv_as_ascii_pseudo_op=unknown
308
- # Check if we have .ascii
309
- AC_TRY_COMPILE([asm (".ascii \\"string\\"");],,
310
- [libffi_cv_as_ascii_pseudo_op=yes],
311
- [libffi_cv_as_ascii_pseudo_op=no])
312
- ])
313
- if test "x$libffi_cv_as_ascii_pseudo_op" = xyes; then
314
- AC_DEFINE(HAVE_AS_ASCII_PSEUDO_OP, 1,
315
- [Define if your assembler supports .ascii.])
159
+ ;;
160
+
161
+ S390)
162
+ AC_CACHE_CHECK([compiler uses zarch features],
163
+ libffi_cv_as_s390_zarch, [
164
+ libffi_cv_as_s390_zarch=no
165
+ echo 'void foo(void) { bar(); bar(); }' > conftest.c
166
+ if $CC $CFLAGS -S conftest.c > /dev/null 2>&1; then
167
+ if grep -q brasl conftest.s; then
168
+ libffi_cv_as_s390_zarch=yes
169
+ fi
170
+ fi
171
+ ])
172
+ if test "x$libffi_cv_as_s390_zarch" = xyes; then
173
+ AC_DEFINE(HAVE_AS_S390_ZARCH, 1,
174
+ [Define if the compiler uses zarch features.])
316
175
  fi
176
+ ;;
177
+ esac
317
178
 
318
- AC_CACHE_CHECK([assembler .string pseudo-op support],
319
- libffi_cv_as_string_pseudo_op, [
320
- libffi_cv_as_string_pseudo_op=unknown
321
- # Check if we have .string
322
- AC_TRY_COMPILE([asm (".string \\"string\\"");],,
323
- [libffi_cv_as_string_pseudo_op=yes],
324
- [libffi_cv_as_string_pseudo_op=no])
325
- ])
326
- if test "x$libffi_cv_as_string_pseudo_op" = xyes; then
327
- AC_DEFINE(HAVE_AS_STRING_PSEUDO_OP, 1,
328
- [Define if your assembler supports .string.])
329
- fi
330
- fi
179
+ # On PaX enable kernels that have MPROTECT enable we can't use PROT_EXEC.
180
+ AC_ARG_ENABLE(pax_emutramp,
181
+ [ --enable-pax_emutramp enable pax emulated trampolines, for we can't use PROT_EXEC],
182
+ if test "$enable_pax_emutramp" = "yes"; then
183
+ AC_DEFINE(FFI_MMAP_EXEC_EMUTRAMP_PAX, 1,
184
+ [Define this if you want to enable pax emulated trampolines])
185
+ fi)
331
186
 
332
- if test x$TARGET = xX86_WIN64; then
333
- LT_SYS_SYMBOL_USCORE
334
- if test "x$sys_symbol_underscore" = xyes; then
335
- AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
336
- fi
187
+ LT_SYS_SYMBOL_USCORE
188
+ if test "x$sys_symbol_underscore" = xyes; then
189
+ AC_DEFINE(SYMBOL_UNDERSCORE, 1, [Define if symbols are underscored.])
337
190
  fi
338
191
 
339
-
340
192
  FFI_EXEC_TRAMPOLINE_TABLE=0
341
193
  case "$target" in
342
- *arm*-apple-darwin*)
194
+ *arm*-apple-darwin* | aarch64-apple-darwin*)
343
195
  FFI_EXEC_TRAMPOLINE_TABLE=1
344
196
  AC_DEFINE(FFI_EXEC_TRAMPOLINE_TABLE, 1,
345
197
  [Cannot use PROT_EXEC on this target, so, we revert to
346
198
  alternative means])
347
199
  ;;
348
- *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*)
200
+ *-apple-darwin* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
349
201
  AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1,
350
202
  [Cannot use malloc on this target, so, we revert to
351
203
  alternative means])
@@ -355,12 +207,28 @@ AM_CONDITIONAL(FFI_EXEC_TRAMPOLINE_TABLE, test x$FFI_EXEC_TRAMPOLINE_TABLE = x1)
355
207
  AC_SUBST(FFI_EXEC_TRAMPOLINE_TABLE)
356
208
 
357
209
  if test x$TARGET = xX86_64; then
358
- AC_CACHE_CHECK([assembler supports unwind section type],
210
+ AC_CACHE_CHECK([toolchain supports unwind section type],
359
211
  libffi_cv_as_x86_64_unwind_section_type, [
360
- libffi_cv_as_x86_64_unwind_section_type=yes
361
- echo '.section .eh_frame,"a",@unwind' > conftest.s
362
- if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
363
- libffi_cv_as_x86_64_unwind_section_type=no
212
+ cat > conftest1.s << EOF
213
+ .text
214
+ .globl foo
215
+ foo:
216
+ jmp bar
217
+ .section .eh_frame,"a",@unwind
218
+ bar:
219
+ EOF
220
+
221
+ cat > conftest2.c << EOF
222
+ extern void foo();
223
+ int main(){foo();}
224
+ EOF
225
+
226
+ libffi_cv_as_x86_64_unwind_section_type=no
227
+ # we ensure that we can compile _and_ link an assembly file containing an @unwind section
228
+ # since the compiler can support it and not the linker (ie old binutils)
229
+ if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \
230
+ $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then
231
+ libffi_cv_as_x86_64_unwind_section_type=yes
364
232
  fi
365
233
  ])
366
234
  if test "x$libffi_cv_as_x86_64_unwind_section_type" = xyes; then
@@ -374,13 +242,16 @@ if test "x$GCC" = "xyes"; then
374
242
  libffi_cv_ro_eh_frame, [
375
243
  libffi_cv_ro_eh_frame=no
376
244
  echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c
377
- if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then
378
- if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then
379
- libffi_cv_ro_eh_frame=yes
380
- elif grep '.section.*eh_frame.*#alloc' conftest.c \
381
- | grep -v '#write' > /dev/null; then
382
- libffi_cv_ro_eh_frame=yes
383
- fi
245
+ if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then
246
+ objdump -h conftest.o > conftest.dump 2>&1
247
+ libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1`
248
+ if test "x$libffi_eh_frame_line" != "x"; then
249
+ libffi_test_line=`expr $libffi_eh_frame_line + 1`p
250
+ sed -n $libffi_test_line conftest.dump > conftest.line
251
+ if grep READONLY conftest.line > /dev/null; then
252
+ libffi_cv_ro_eh_frame=yes
253
+ fi
254
+ fi
384
255
  fi
385
256
  rm -f conftest.*
386
257
  ])
@@ -411,6 +282,13 @@ if test "x$GCC" = "xyes"; then
411
282
  fi
412
283
  fi
413
284
 
285
+ AC_ARG_ENABLE(docs,
286
+ AC_HELP_STRING([--disable-docs],
287
+ [Disable building of docs (default: no)]),
288
+ [enable_docs=no],
289
+ [enable_docs=yes])
290
+ AM_CONDITIONAL(BUILD_DOCS, [test x$enable_docs = xyes])
291
+
414
292
  AH_BOTTOM([
415
293
  #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE
416
294
  #ifdef LIBFFI_ASM
@@ -430,6 +308,14 @@ AH_BOTTOM([
430
308
  AC_SUBST(TARGET)
431
309
  AC_SUBST(TARGETDIR)
432
310
 
311
+ changequote(<,>)
312
+ TARGET_OBJ=
313
+ for i in $SOURCES; do
314
+ TARGET_OBJ="${TARGET_OBJ} src/${TARGETDIR}/"`echo $i | sed 's/[cS]$/lo/'`
315
+ done
316
+ changequote([,])
317
+ AC_SUBST(TARGET_OBJ)
318
+
433
319
  AC_SUBST(SHELL)
434
320
 
435
321
  AC_ARG_ENABLE(debug,
@@ -442,13 +328,14 @@ AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
442
328
  AC_ARG_ENABLE(structs,
443
329
  [ --disable-structs omit code for struct support],
444
330
  if test "$enable_structs" = "no"; then
445
- AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.])
331
+ AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this if you do not want support for aggregate types.])
446
332
  fi)
333
+ AM_CONDITIONAL(FFI_DEBUG, test "$enable_debug" = "yes")
447
334
 
448
335
  AC_ARG_ENABLE(raw-api,
449
336
  [ --disable-raw-api make the raw api unavailable],
450
337
  if test "$enable_raw_api" = "no"; then
451
- AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.])
338
+ AC_DEFINE(FFI_NO_RAW_API, 1, [Define this if you do not want support for the raw API.])
452
339
  fi)
453
340
 
454
341
  AC_ARG_ENABLE(purify-safety,
@@ -457,31 +344,36 @@ AC_ARG_ENABLE(purify-safety,
457
344
  AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.])
458
345
  fi)
459
346
 
347
+ AC_ARG_ENABLE(multi-os-directory,
348
+ [ --disable-multi-os-directory
349
+ disable use of gcc --print-multi-os-directory to change the library installation directory])
350
+
460
351
  # These variables are only ever used when we cross-build to X86_WIN32.
461
352
  # And we only support this with GCC, so...
462
- if test x"$GCC" != x"no"; then
353
+ if test "x$GCC" = "xyes"; then
463
354
  if test -n "$with_cross_host" &&
464
355
  test x"$with_cross_host" != x"no"; then
465
- toolexecdir='$(exec_prefix)/$(target_alias)'
466
- toolexeclibdir='$(toolexecdir)/lib'
356
+ toolexecdir="${exec_prefix}"/'$(target_alias)'
357
+ toolexeclibdir="${toolexecdir}"/lib
467
358
  else
468
- toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
469
- toolexeclibdir='$(libdir)'
359
+ toolexecdir="${libdir}"/gcc-lib/'$(target_alias)'
360
+ toolexeclibdir="${libdir}"
361
+ fi
362
+ if test x"$enable_multi_os_directory" != x"no"; then
363
+ multi_os_directory=`$CC $CFLAGS -print-multi-os-directory`
364
+ case $multi_os_directory in
365
+ .) ;; # Avoid trailing /.
366
+ ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
367
+ esac
470
368
  fi
471
- multi_os_directory=`$CC -print-multi-os-directory`
472
- case $multi_os_directory in
473
- .) ;; # Avoid trailing /.
474
- *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
475
- esac
476
369
  AC_SUBST(toolexecdir)
477
- AC_SUBST(toolexeclibdir)
478
- fi
479
-
480
- if test "${multilib}" = "yes"; then
481
- multilib_arg="--enable-multilib"
482
370
  else
483
- multilib_arg=
371
+ toolexeclibdir="${libdir}"
484
372
  fi
373
+ AC_SUBST(toolexeclibdir)
374
+
375
+ # Check linker support.
376
+ LIBFFI_ENABLE_SYMVERS
485
377
 
486
378
  AC_CONFIG_COMMANDS(include, [test -d include || mkdir include])
487
379
  AC_CONFIG_COMMANDS(src, [
@@ -491,6 +383,6 @@ test -d src/$TARGETDIR || mkdir src/$TARGETDIR
491
383
 
492
384
  AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
493
385
 
494
- AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc)
386
+ AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile doc/Makefile libffi.pc)
495
387
 
496
388
  AC_OUTPUT