ffi 1.16.3 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +42 -0
  4. data/Gemfile +9 -2
  5. data/README.md +1 -1
  6. data/Rakefile +17 -5
  7. data/ext/ffi_c/AbstractMemory.c +39 -38
  8. data/ext/ffi_c/ArrayType.c +2 -2
  9. data/ext/ffi_c/Buffer.c +4 -4
  10. data/ext/ffi_c/Call.c +12 -6
  11. data/ext/ffi_c/Call.h +3 -2
  12. data/ext/ffi_c/DynamicLibrary.c +2 -2
  13. data/ext/ffi_c/FunctionInfo.c +1 -1
  14. data/ext/ffi_c/LastError.c +4 -4
  15. data/ext/ffi_c/MemoryPointer.c +2 -2
  16. data/ext/ffi_c/Pointer.c +14 -11
  17. data/ext/ffi_c/Struct.c +11 -4
  18. data/ext/ffi_c/StructLayout.c +13 -13
  19. data/ext/ffi_c/Type.c +17 -16
  20. data/ext/ffi_c/Types.c +7 -1
  21. data/ext/ffi_c/Types.h +0 -1
  22. data/ext/ffi_c/Variadic.c +6 -3
  23. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  24. data/ext/ffi_c/libffi/.github/workflows/build.yml +34 -15
  25. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +2 -1
  26. data/ext/ffi_c/libffi/LICENSE +1 -1
  27. data/ext/ffi_c/libffi/README.md +10 -5
  28. data/ext/ffi_c/libffi/configure +15 -15
  29. data/ext/ffi_c/libffi/configure.ac +2 -2
  30. data/ext/ffi_c/libffi/configure.host +1 -1
  31. data/ext/ffi_c/libffi/doc/libffi.texi +1 -1
  32. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  33. data/ext/ffi_c/libffi/include/ffi.h.in +2 -11
  34. data/ext/ffi_c/libffi/include/ffi_common.h +4 -2
  35. data/ext/ffi_c/libffi/libffi.map.in +5 -0
  36. data/ext/ffi_c/libffi/libtool-version +1 -1
  37. data/ext/ffi_c/libffi/ltmain.sh +8 -20
  38. data/ext/ffi_c/libffi/msvc_build/aarch64/aarch64_include/ffi.h +1 -1
  39. data/ext/ffi_c/libffi/src/aarch64/ffi.c +26 -13
  40. data/ext/ffi_c/libffi/src/aarch64/sysv.S +198 -46
  41. data/ext/ffi_c/libffi/src/closures.c +3 -3
  42. data/ext/ffi_c/libffi/src/debug.c +2 -2
  43. data/ext/ffi_c/libffi/src/dlmalloc.c +1 -1
  44. data/ext/ffi_c/libffi/src/loongarch64/ffi.c +3 -0
  45. data/ext/ffi_c/libffi/src/mips/ffi.c +12 -4
  46. data/ext/ffi_c/libffi/src/mips/n32.S +65 -14
  47. data/ext/ffi_c/libffi/src/powerpc/ffi_darwin.c +36 -24
  48. data/ext/ffi_c/libffi/src/sparc/ffi64.c +7 -1
  49. data/ext/ffi_c/libffi/src/tramp.c +1 -1
  50. data/ext/ffi_c/libffi/src/types.c +4 -6
  51. data/ext/ffi_c/libffi/src/wasm32/ffi.c +13 -0
  52. data/ext/ffi_c/libffi/src/x86/ffiw64.c +1 -1
  53. data/ext/ffi_c/libffi/testsuite/Makefile.am +79 -127
  54. data/ext/ffi_c/libffi/testsuite/Makefile.in +79 -127
  55. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +6 -0
  56. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +99 -0
  57. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +108 -0
  58. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +114 -0
  59. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +119 -0
  60. data/ext/ffi_c/libffi.darwin.mk +2 -2
  61. data/lib/ffi/autopointer.rb +1 -9
  62. data/lib/ffi/dynamic_library.rb +34 -5
  63. data/lib/ffi/enum.rb +0 -1
  64. data/lib/ffi/function.rb +1 -1
  65. data/lib/ffi/io.rb +2 -2
  66. data/lib/ffi/library.rb +23 -23
  67. data/lib/ffi/platform/aarch64-linux/types.conf +74 -3
  68. data/lib/ffi/pointer.rb +6 -6
  69. data/lib/ffi/struct.rb +4 -4
  70. data/lib/ffi/struct_layout.rb +2 -2
  71. data/lib/ffi/struct_layout_builder.rb +8 -8
  72. data/lib/ffi/types.rb +51 -49
  73. data/lib/ffi/version.rb +1 -1
  74. data/sig/ffi/abstract_memory.rbs +165 -0
  75. data/sig/ffi/auto_pointer.rbs +27 -0
  76. data/sig/ffi/buffer.rbs +18 -0
  77. data/sig/ffi/data_converter.rbs +10 -0
  78. data/sig/ffi/dynamic_library.rbs +9 -0
  79. data/sig/ffi/enum.rbs +38 -0
  80. data/sig/ffi/function.rbs +39 -0
  81. data/sig/ffi/library.rbs +42 -0
  82. data/sig/ffi/native_type.rbs +86 -0
  83. data/sig/ffi/pointer.rbs +42 -0
  84. data/sig/ffi/struct.rbs +76 -0
  85. data/sig/ffi/struct_by_reference.rbs +11 -0
  86. data/sig/ffi/struct_by_value.rbs +7 -0
  87. data/sig/ffi/struct_layout.rbs +9 -0
  88. data/sig/ffi/struct_layout_builder.rbs +5 -0
  89. data/sig/ffi/type.rbs +39 -0
  90. data/sig/ffi.rbs +26 -0
  91. data.tar.gz.sig +0 -0
  92. metadata +37 -18
  93. metadata.gz.sig +0 -0
@@ -647,9 +647,9 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs)
647
647
 
648
648
  case FFI_TYPE_POINTER:
649
649
  if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32)
650
- cif->flags += FFI_TYPE_UINT32 << (FFI_FLAG_BITS * 8);
650
+ cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8);
651
651
  else
652
- cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8);
652
+ cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8);
653
653
  break;
654
654
 
655
655
  case FFI_TYPE_FLOAT:
@@ -661,7 +661,7 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs)
661
661
  /* else fall through */
662
662
  case FFI_TYPE_DOUBLE:
663
663
  if (soft_float)
664
- cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8);
664
+ cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8);
665
665
  else
666
666
  cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8);
667
667
  break;
@@ -715,8 +715,16 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs)
715
715
  }
716
716
  break;
717
717
  }
718
+ case FFI_TYPE_UINT32:
719
+ /* In the N32 or N64 ABI unsigned 32-bit integer should be
720
+ *sign*-extended. */
721
+ cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8);
722
+ break;
723
+ case FFI_TYPE_SINT64:
724
+ cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8);
725
+ break;
718
726
  default:
719
- cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8);
727
+ cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8);
720
728
  break;
721
729
  }
722
730
  }
@@ -236,19 +236,54 @@ callit:
236
236
  # Shift the return type flag over
237
237
  SRL t6, 8*FFI_FLAG_BITS
238
238
 
239
- beq t6, FFI_TYPE_SINT32, retint
240
- bne t6, FFI_TYPE_INT, retuint32
241
- retint:
239
+ bne t6, FFI_TYPE_UINT64, retsint32
240
+
241
+ retuint64:
242
242
  jal t9
243
243
  REG_L t4, 4*FFI_SIZEOF_ARG($fp)
244
- REG_S v0, 0(t4)
244
+ sd v0, 0(t4)
245
245
  b epilogue
246
246
 
247
- retuint32:
248
- bne t6, FFI_TYPE_UINT32, retfloat
247
+ retsint32:
248
+ bne t6, FFI_TYPE_SINT32, retuint16
249
249
  jal t9
250
250
  REG_L t4, 4*FFI_SIZEOF_ARG($fp)
251
- sw v0, 0(t4)
251
+ sll v0, v0, 0
252
+ sd v0, 0(t4)
253
+ b epilogue
254
+
255
+ retuint16:
256
+ bne t6, FFI_TYPE_UINT16, retsint16
257
+ jal t9
258
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
259
+ andi v0, v0, 0xffff
260
+ sd v0, 0(t4)
261
+ b epilogue
262
+
263
+ retsint16:
264
+ bne t6, FFI_TYPE_SINT16, retuint8
265
+ jal t9
266
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
267
+ dsll v0, v0, 48
268
+ dsra v0, v0, 48
269
+ sd v0, 0(t4)
270
+ b epilogue
271
+
272
+ retuint8:
273
+ bne t6, FFI_TYPE_UINT8, retsint8
274
+ jal t9
275
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
276
+ andi v0, v0, 0xff
277
+ sd v0, 0(t4)
278
+ b epilogue
279
+
280
+ retsint8:
281
+ bne t6, FFI_TYPE_SINT8, retfloat
282
+ jal t9
283
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
284
+ sd v0, 0(t4)
285
+ dsll v0, v0, 56
286
+ dsra v0, v0, 56
252
287
  b epilogue
253
288
 
254
289
  retfloat:
@@ -585,19 +620,35 @@ $do_closure:
585
620
 
586
621
  jalr t9
587
622
 
623
+ cls_retuint64:
588
624
  # Return flags are in v0
589
- bne v0, FFI_TYPE_SINT32, cls_retuint32
625
+ bne v0, FFI_TYPE_UINT64, cls_retsint32
626
+ ld v0, V0_OFF2($sp)
627
+ b cls_epilogue
628
+
629
+ cls_retsint32:
630
+ bne v0, FFI_TYPE_SINT32, cls_retsint16
590
631
  lw v0, V0_OFF2($sp)
591
632
  b cls_epilogue
592
633
 
593
- cls_retuint32:
594
- bne v0, FFI_TYPE_UINT32, cls_retint
595
- lwu v0, V0_OFF2($sp)
634
+ cls_retsint16:
635
+ bne v0, FFI_TYPE_SINT16, cls_retuint16
636
+ lh v0, V0_OFF2($sp)
596
637
  b cls_epilogue
597
638
 
598
- cls_retint:
599
- bne v0, FFI_TYPE_INT, cls_retfloat
600
- REG_L v0, V0_OFF2($sp)
639
+ cls_retuint16:
640
+ bne v0, FFI_TYPE_UINT16, cls_retsint8
641
+ lhu v0, V0_OFF2($sp)
642
+ b cls_epilogue
643
+
644
+ cls_retsint8:
645
+ bne v0, FFI_TYPE_SINT8, cls_retuint8
646
+ lb v0, V0_OFF2($sp)
647
+ b cls_epilogue
648
+
649
+ cls_retuint8:
650
+ bne v0, FFI_TYPE_UINT8, cls_retfloat
651
+ lbu v0, V0_OFF2($sp)
601
652
  b cls_epilogue
602
653
 
603
654
  cls_retfloat:
@@ -623,38 +623,50 @@ darwin_adjust_aggregate_sizes (ffi_type *s)
623
623
  }
624
624
 
625
625
  /* Adjust the size of S to be correct for AIX.
626
- Word-align double unless it is the first member of a structure. */
626
+ Word-align double unless it is the first member of a structure recursively.
627
+ Return non-zero if we found a recursive first member aggregate of interest. */
627
628
 
628
- static void
629
- aix_adjust_aggregate_sizes (ffi_type *s)
629
+ static int
630
+ aix_adjust_aggregate_sizes (ffi_type *s, int outer_most_type_or_first_member)
630
631
  {
631
- int i;
632
+ int i, nested_first_member=0, final_align, rc=0;
632
633
 
633
634
  if (s->type != FFI_TYPE_STRUCT)
634
- return;
635
+ return 0;
635
636
 
636
637
  s->size = 0;
637
638
  for (i = 0; s->elements[i] != NULL; i++)
638
639
  {
639
- ffi_type *p;
640
+ ffi_type p;
640
641
  int align;
641
-
642
- p = s->elements[i];
643
- aix_adjust_aggregate_sizes (p);
644
- align = p->alignment;
645
- if (i != 0 && p->type == FFI_TYPE_DOUBLE)
646
- align = 4;
647
- s->size = FFI_ALIGN(s->size, align) + p->size;
642
+
643
+ /* nested aggregates layout differently on AIX, so take a copy of the type */
644
+ p = *(s->elements[i]);
645
+ if (i == 0)
646
+ nested_first_member = aix_adjust_aggregate_sizes(&p, outer_most_type_or_first_member);
647
+ else
648
+ aix_adjust_aggregate_sizes(&p, 0);
649
+ align = p.alignment;
650
+ if (i != 0 && p.type == FFI_TYPE_DOUBLE)
651
+ align = 4;
652
+ s->size = FFI_ALIGN(s->size, align) + p.size;
648
653
  }
649
-
650
- s->size = FFI_ALIGN(s->size, s->alignment);
651
-
652
- if (s->elements[0]->type == FFI_TYPE_UINT64
653
- || s->elements[0]->type == FFI_TYPE_SINT64
654
- || s->elements[0]->type == FFI_TYPE_DOUBLE
655
- || s->elements[0]->alignment == 8)
656
- s->alignment = s->alignment > 8 ? s->alignment : 8;
657
- /* Do not add additional tail padding. */
654
+
655
+ final_align=s->alignment;
656
+ if ((s->elements[0]->type == FFI_TYPE_UINT64
657
+ || s->elements[0]->type == FFI_TYPE_SINT64
658
+ || s->elements[0]->type == FFI_TYPE_DOUBLE
659
+ || s->elements[0]->alignment == 8 || nested_first_member)) {
660
+ final_align = s->alignment > 8 ? s->alignment : 8;
661
+ rc=1;
662
+ /* still use the adjusted alignment to calculate tail padding, but don't adjust the types alignment if
663
+ we aren't in the recursive first position */
664
+ if (outer_most_type_or_first_member)
665
+ s->alignment=final_align;
666
+ }
667
+
668
+ s->size = FFI_ALIGN(s->size, final_align);
669
+ return rc;
658
670
  }
659
671
 
660
672
  /* Perform machine dependent cif processing. */
@@ -682,9 +694,9 @@ ffi_prep_cif_machdep (ffi_cif *cif)
682
694
 
683
695
  if (cif->abi == FFI_AIX)
684
696
  {
685
- aix_adjust_aggregate_sizes (cif->rtype);
697
+ aix_adjust_aggregate_sizes (cif->rtype, 1);
686
698
  for (i = 0; i < cif->nargs; i++)
687
- aix_adjust_aggregate_sizes (cif->arg_types[i]);
699
+ aix_adjust_aggregate_sizes (cif->arg_types[i], 1);
688
700
  }
689
701
 
690
702
  /* Space for the frame pointer, callee's LR, CR, etc, and for
@@ -382,13 +382,19 @@ ffi_prep_args_v9(ffi_cif *cif, unsigned long *argp, void *rvalue, void **avalue)
382
382
  *argp++ = *(SINT32 *)a;
383
383
  break;
384
384
  case FFI_TYPE_UINT32:
385
- case FFI_TYPE_FLOAT:
386
385
  *argp++ = *(UINT32 *)a;
387
386
  break;
388
387
  case FFI_TYPE_SINT64:
389
388
  case FFI_TYPE_UINT64:
390
389
  case FFI_TYPE_POINTER:
390
+ *argp++ = *(UINT64 *)a;
391
+ break;
392
+ case FFI_TYPE_FLOAT:
393
+ flags |= SPARC_FLAG_FP_ARGS;
394
+ *argp++ = *(UINT32 *)a;
395
+ break;
391
396
  case FFI_TYPE_DOUBLE:
397
+ flags |= SPARC_FLAG_FP_ARGS;
392
398
  *argp++ = *(UINT64 *)a;
393
399
  break;
394
400
 
@@ -307,7 +307,7 @@ ffi_tramp_lock(void)
307
307
  }
308
308
 
309
309
  static void
310
- ffi_tramp_unlock()
310
+ ffi_tramp_unlock(void)
311
311
  {
312
312
  pthread_mutex_unlock (&tramp_globals_mutex);
313
313
  }
@@ -1,6 +1,6 @@
1
1
  /* -----------------------------------------------------------------------
2
- types.c - Copyright (c) 1996, 1998 Red Hat, Inc.
3
-
2
+ types.c - Copyright (c) 1996, 1998, 2024 Red Hat, Inc.
3
+
4
4
  Predefined ffi_types needed by libffi.
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining
@@ -87,7 +87,7 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const);
87
87
  #endif
88
88
 
89
89
  #ifdef __alpha__
90
- /* Even if we're not configured to default to 128-bit long double,
90
+ /* Even if we're not configured to default to 128-bit long double,
91
91
  maintain binary compatibility, as -mlong-double-128 can be used
92
92
  at any time. */
93
93
  /* Validate the hard-coded number below. */
@@ -95,14 +95,12 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const);
95
95
  # error FFI_TYPE_LONGDOUBLE out of date
96
96
  # endif
97
97
  const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL };
98
- #elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
98
+ #else
99
99
  FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST);
100
100
  #endif
101
101
 
102
102
  #ifdef FFI_TARGET_HAS_COMPLEX_TYPE
103
103
  FFI_COMPLEX_TYPEDEF(float, float, const);
104
104
  FFI_COMPLEX_TYPEDEF(double, double, const);
105
- #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
106
105
  FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST);
107
106
  #endif
108
- #endif
@@ -172,6 +172,19 @@ void,
172
172
  unbox_small_structs, (ffi_type type_ptr), {
173
173
  var type_id = FFI_TYPE__TYPEID(type_ptr);
174
174
  while (type_id === FFI_TYPE_STRUCT) {
175
+ // Don't unbox single element structs if they are bigger than 16 bytes. This
176
+ // is a work around for the fact that Python will give incorrect values for
177
+ // the size of the field in these cases: it says that the struct has pointer
178
+ // size and alignment and are of type pointer, even though it is more
179
+ // accurately a struct and has a larger size. Keeping it as a struct here
180
+ // will let us get the ABI right (which is in fact that the true argument is
181
+ // a pointer to the stack... so maybe Python issn't so wrong??)
182
+ //
183
+ // See the Python comment here:
184
+ // https://github.com/python/cpython/blob/a16a9f978f42b8a09297c1efbf33877f6388c403/Modules/_ctypes/stgdict.c#L718-L779
185
+ if (FFI_TYPE__SIZE(type_ptr) > 16) {
186
+ break;
187
+ }
175
188
  var elements = FFI_TYPE__ELEMENTS(type_ptr);
176
189
  var first_element = DEREF_U32(elements, 0);
177
190
  if (first_element === 0) {
@@ -227,7 +227,7 @@ EFI64(ffi_prep_closure_loc)(ffi_closure* closure,
227
227
  ffi_cif* cif,
228
228
  void (*fun)(ffi_cif*, void*, void**, void*),
229
229
  void *user_data,
230
- void *codeloc)
230
+ void *codeloc MAYBE_UNUSED)
231
231
  {
232
232
  static const unsigned char trampoline[FFI_TRAMPOLINE_SIZE - 8] = {
233
233
  /* endbr64 */
@@ -6,130 +6,82 @@ EXTRA_DEJAGNU_SITE_CONFIG=../local.exp
6
6
 
7
7
  CLEANFILES = *.exe core* *.log *.sum
8
8
 
9
- EXTRA_DIST = config/default.exp lib/libffi.exp lib/target-libpath.exp \
10
- lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \
11
- libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp \
12
- libffi.bhaible/test-call.c libffi.bhaible/test-callback.c \
13
- libffi.bhaible/testcases.c libffi.call/align_mixed.c \
14
- libffi.call/align_stdcall.c libffi.call/call.exp \
15
- libffi.call/err_bad_typedef.c libffi.call/ffitest.h \
16
- libffi.call/float.c libffi.call/float1.c libffi.call/float2.c \
17
- libffi.call/float3.c libffi.call/float4.c libffi.call/float_va.c \
18
- libffi.call/many.c libffi.call/many2.c libffi.call/many_double.c \
19
- libffi.call/many_mixed.c libffi.call/negint.c libffi.call/offsets.c \
20
- libffi.call/pr1172638.c libffi.call/promotion.c \
21
- libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \
22
- libffi.call/return_dbl1.c libffi.call/return_dbl2.c \
23
- libffi.call/return_fl.c libffi.call/return_fl1.c \
24
- libffi.call/return_fl2.c libffi.call/return_fl3.c \
25
- libffi.call/return_ldl.c libffi.call/return_ll.c \
26
- libffi.call/return_ll1.c libffi.call/return_sc.c \
27
- libffi.call/return_sl.c libffi.call/return_uc.c \
28
- libffi.call/return_ul.c libffi.call/struct1.c libffi.call/struct10.c \
29
- libffi.call/struct2.c libffi.call/struct3.c libffi.call/struct4.c \
30
- libffi.call/struct5.c libffi.call/struct6.c libffi.call/struct7.c \
31
- libffi.call/struct8.c libffi.call/struct9.c \
32
- libffi.call/uninitialized.c libffi.call/va_1.c libffi.call/va_2.c \
33
- libffi.call/va_3.c libffi.call/va_struct1.c libffi.call/va_struct2.c \
34
- libffi.call/va_struct3.c libffi.call/struct_by_value_big.c \
35
- libffi.call/struct_return_8H.c libffi.call/struct_return_2H.c \
36
- libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \
37
- libffi.call/struct_by_value_4.c libffi.call/struct_by_value_small.c \
38
- libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \
39
- libffi.call/strlen.c libffi.call/va_3.c \
40
- libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \
41
- libffi.call/struct_by_value_4.c libffi.closures/closure.exp \
42
- libffi.call/struct_by_value_3f.c libffi.call/struct_by_value_4f.c \
43
- libffi.call/s55.c libffi.call/bpo-38748.c \
44
- libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \
45
- libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c \
46
- libffi.closures/closure_fn4.c libffi.closures/closure_fn5.c \
47
- libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \
48
- libffi.closures/closure_simple.c libffi.closures/cls_12byte.c \
49
- libffi.closures/cls_16byte.c libffi.closures/cls_18byte.c \
50
- libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \
51
- libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c \
52
- libffi.closures/cls_24byte.c libffi.closures/cls_2byte.c \
53
- libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \
54
- libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c \
55
- libffi.closures/cls_4_1byte.c libffi.closures/cls_4byte.c \
56
- libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \
57
- libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c \
58
- libffi.closures/cls_6byte.c libffi.closures/cls_7_1_byte.c \
59
- libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \
60
- libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c \
61
- libffi.closures/cls_align_double.c libffi.closures/cls_align_float.c \
62
- libffi.closures/cls_align_longdouble.c \
63
- libffi.closures/cls_align_pointer.c \
64
- libffi.closures/cls_align_sint16.c libffi.closures/cls_align_sint32.c \
65
- libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \
66
- libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c \
67
- libffi.closures/cls_dbls_struct.c libffi.closures/cls_double.c \
68
- libffi.closures/cls_double_va.c libffi.closures/cls_float.c \
69
- libffi.closures/cls_longdouble_va.c \
70
- libffi.closures/cls_many_mixed_args.c \
71
- libffi.closures/cls_many_mixed_float_double.c \
72
- libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \
73
- libffi.closures/cls_multi_sshortchar.c \
74
- libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \
75
- libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c \
76
- libffi.closures/cls_pointer_stack.c libffi.closures/cls_schar.c \
77
- libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \
78
- libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c \
79
- libffi.closures/cls_uint.c libffi.closures/cls_uint_va.c \
80
- libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \
81
- libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c \
82
- libffi.closures/ffitest.h libffi.closures/nested_struct.c \
83
- libffi.closures/nested_struct1.c libffi.closures/nested_struct10.c \
84
- libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \
85
- libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c \
86
- libffi.closures/nested_struct3.c libffi.closures/nested_struct4.c \
87
- libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \
88
- libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c \
89
- libffi.closures/nested_struct9.c libffi.closures/problem1.c \
90
- libffi.closures/single_entry_structs1.c \
91
- libffi.closures/single_entry_structs2.c \
92
- libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c \
93
- libffi.closures/stret_large2.c libffi.closures/stret_medium.c \
94
- libffi.closures/stret_medium2.c libffi.closures/testclosure.c \
95
- libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc \
96
- libffi.closures/cls_align_longdouble_split.c \
97
- libffi.closures/cls_align_longdouble_split2.c \
98
- libffi.closures/cls_longdouble.c libffi.closures/huge_struct.c \
99
- libffi.complex/cls_align_complex.inc \
100
- libffi.complex/cls_align_complex_double.c \
101
- libffi.complex/cls_align_complex_float.c \
102
- libffi.complex/cls_align_complex_longdouble.c \
103
- libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c \
104
- libffi.complex/cls_complex_float.c \
105
- libffi.complex/cls_complex_longdouble.c \
106
- libffi.complex/cls_complex_struct.inc \
107
- libffi.complex/cls_complex_struct_double.c \
108
- libffi.complex/cls_complex_struct_float.c \
109
- libffi.complex/cls_complex_struct_longdouble.c \
110
- libffi.complex/cls_complex_va.inc \
111
- libffi.complex/cls_complex_va_double.c \
112
- libffi.complex/cls_complex_va_float.c \
113
- libffi.complex/cls_complex_va_longdouble.c libffi.complex/complex.exp \
114
- libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \
115
- libffi.complex/complex_defs_float.inc \
116
- libffi.complex/complex_defs_longdouble.inc \
117
- libffi.complex/complex_double.c libffi.complex/complex_float.c \
118
- libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \
119
- libffi.complex/ffitest.h libffi.complex/many_complex.inc \
120
- libffi.complex/many_complex_double.c \
121
- libffi.complex/many_complex_float.c \
122
- libffi.complex/many_complex_longdouble.c \
123
- libffi.complex/return_complex.inc libffi.complex/return_complex1.inc \
124
- libffi.complex/return_complex1_double.c \
125
- libffi.complex/return_complex1_float.c \
126
- libffi.complex/return_complex1_longdouble.c \
127
- libffi.complex/return_complex2.inc \
128
- libffi.complex/return_complex2_double.c \
129
- libffi.complex/return_complex2_float.c \
130
- libffi.complex/return_complex2_longdouble.c \
131
- libffi.complex/return_complex_double.c \
132
- libffi.complex/return_complex_float.c \
133
- libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \
134
- libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \
135
- libffi.go/static-chain.h
9
+ EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \
10
+ emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \
11
+ emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \
12
+ lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \
13
+ libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \
14
+ libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \
15
+ libffi.call/align_stdcall.c libffi.call/bpo_38748.c libffi.call/call.exp \
16
+ libffi.call/err_bad_typedef.c libffi.call/ffitest.h libffi.call/float.c \
17
+ libffi.call/float1.c libffi.call/float2.c libffi.call/float3.c \
18
+ libffi.call/float4.c libffi.call/float_va.c libffi.call/many.c \
19
+ libffi.call/many2.c libffi.call/many_double.c libffi.call/many_mixed.c \
20
+ libffi.call/negint.c libffi.call/offsets.c libffi.call/pr1172638.c \
21
+ libffi.call/promotion.c libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \
22
+ libffi.call/return_dbl1.c libffi.call/return_dbl2.c libffi.call/return_fl.c \
23
+ libffi.call/return_fl1.c libffi.call/return_fl2.c libffi.call/return_fl3.c \
24
+ libffi.call/return_ldl.c libffi.call/return_ll.c libffi.call/return_ll1.c \
25
+ libffi.call/return_sc.c libffi.call/return_sl.c libffi.call/return_uc.c \
26
+ libffi.call/return_ul.c libffi.call/s55.c libffi.call/strlen.c \
27
+ libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \
28
+ libffi.call/struct1.c libffi.call/struct10.c libffi.call/struct2.c \
29
+ libffi.call/struct3.c libffi.call/struct4.c libffi.call/struct5.c \
30
+ libffi.call/struct6.c libffi.call/struct7.c libffi.call/struct8.c \
31
+ libffi.call/struct9.c libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \
32
+ libffi.call/struct_by_value_3f.c libffi.call/struct_by_value_4.c libffi.call/struct_by_value_4f.c \
33
+ libffi.call/struct_by_value_big.c libffi.call/struct_by_value_small.c libffi.call/struct_return_2H.c \
34
+ libffi.call/struct_return_8H.c libffi.call/uninitialized.c libffi.call/va_1.c \
35
+ libffi.call/va_2.c libffi.call/va_3.c libffi.call/va_struct1.c \
36
+ libffi.call/va_struct2.c libffi.call/va_struct3.c libffi.call/callback.c \
37
+ libffi.call/callback2.c libffi.call/callback3.c libffi.call/callback4.c \
38
+ libffi.closures/closure.exp libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \
39
+ libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c libffi.closures/closure_fn4.c \
40
+ libffi.closures/closure_fn5.c libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \
41
+ libffi.closures/closure_simple.c libffi.closures/cls_12byte.c libffi.closures/cls_16byte.c \
42
+ libffi.closures/cls_18byte.c libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \
43
+ libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c libffi.closures/cls_24byte.c \
44
+ libffi.closures/cls_2byte.c libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \
45
+ libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c libffi.closures/cls_4_1byte.c \
46
+ libffi.closures/cls_4byte.c libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \
47
+ libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c libffi.closures/cls_6byte.c \
48
+ libffi.closures/cls_7_1_byte.c libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \
49
+ libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c libffi.closures/cls_align_double.c \
50
+ libffi.closures/cls_align_float.c libffi.closures/cls_align_longdouble.c libffi.closures/cls_align_longdouble_split.c \
51
+ libffi.closures/cls_align_longdouble_split2.c libffi.closures/cls_align_pointer.c libffi.closures/cls_align_sint16.c \
52
+ libffi.closures/cls_align_sint32.c libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \
53
+ libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c libffi.closures/cls_dbls_struct.c \
54
+ libffi.closures/cls_double.c libffi.closures/cls_double_va.c libffi.closures/cls_float.c \
55
+ libffi.closures/cls_longdouble.c libffi.closures/cls_longdouble_va.c libffi.closures/cls_many_mixed_args.c \
56
+ libffi.closures/cls_many_mixed_float_double.c libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \
57
+ libffi.closures/cls_multi_sshortchar.c libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \
58
+ libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c libffi.closures/cls_pointer_stack.c \
59
+ libffi.closures/cls_schar.c libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \
60
+ libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c libffi.closures/cls_uint.c \
61
+ libffi.closures/cls_uint_va.c libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \
62
+ libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c libffi.closures/ffitest.h \
63
+ libffi.closures/huge_struct.c libffi.closures/nested_struct.c libffi.closures/nested_struct1.c \
64
+ libffi.closures/nested_struct10.c libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \
65
+ libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c libffi.closures/nested_struct3.c \
66
+ libffi.closures/nested_struct4.c libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \
67
+ libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c libffi.closures/nested_struct9.c \
68
+ libffi.closures/problem1.c libffi.closures/single_entry_structs1.c libffi.closures/single_entry_structs2.c \
69
+ libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c libffi.closures/stret_large2.c \
70
+ libffi.closures/stret_medium.c libffi.closures/stret_medium2.c libffi.closures/testclosure.c \
71
+ libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc libffi.complex/cls_align_complex.inc \
72
+ libffi.complex/cls_align_complex_double.c libffi.complex/cls_align_complex_float.c libffi.complex/cls_align_complex_longdouble.c \
73
+ libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c libffi.complex/cls_complex_float.c \
74
+ libffi.complex/cls_complex_longdouble.c libffi.complex/cls_complex_struct.inc libffi.complex/cls_complex_struct_double.c \
75
+ libffi.complex/cls_complex_struct_float.c libffi.complex/cls_complex_struct_longdouble.c libffi.complex/cls_complex_va.inc \
76
+ libffi.complex/cls_complex_va_double.c libffi.complex/cls_complex_va_float.c libffi.complex/cls_complex_va_longdouble.c \
77
+ libffi.complex/complex.exp libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \
78
+ libffi.complex/complex_defs_float.inc libffi.complex/complex_defs_longdouble.inc libffi.complex/complex_double.c \
79
+ libffi.complex/complex_float.c libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \
80
+ libffi.complex/ffitest.h libffi.complex/many_complex.inc libffi.complex/many_complex_double.c \
81
+ libffi.complex/many_complex_float.c libffi.complex/many_complex_longdouble.c libffi.complex/return_complex.inc \
82
+ libffi.complex/return_complex1.inc libffi.complex/return_complex1_double.c libffi.complex/return_complex1_float.c \
83
+ libffi.complex/return_complex1_longdouble.c libffi.complex/return_complex2.inc libffi.complex/return_complex2_double.c \
84
+ libffi.complex/return_complex2_float.c libffi.complex/return_complex2_longdouble.c libffi.complex/return_complex_double.c \
85
+ libffi.complex/return_complex_float.c libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \
86
+ libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \
87
+ libffi.go/static-chain.h Makefile.am Makefile.in