testsuite


Log

Author Commit Date CI Message
Anthony Green a1467200 2022-09-26T11:41:48 Never link pthread for android
Anthony Green 55bcc477 2022-09-24T22:03:52 Test idea borrowed from cpython
Anthony Green e79f1948 2022-09-24T17:11:30 Add test case transcribed from cpython
Anthony Green f26b56e1 2022-09-19T08:15:22 Add new files for distribution
Anthony Green acf0ce9e 2022-09-18T11:04:54 Add test case
Anthony Green b49308ea 2022-09-18T08:26:23 Add missing ABI_ATTR
Hans ee22ecbd 2022-09-18T01:56:25 Add MSYS configuration files (#728) * Add MSYS configuration files MSYS behaves very similiar to Cygwin, e.g. also __CYGWIN__ is defined. Now 'make check' passes on MSYS without extra patches. * Fix warning extra tokens at end of #endif in closures.c Extra tokens converted into a comment. Also nearby indentations corrected. * Fix missing prototype warning mkostemp() on Cygwin Cygwin requires also _GNU_SOURCE to be defined to enable mkostemp() prototype. * Fix warning label ‘out’ defined but not used in ffi functions Define same preprocessor conditions for goto and label visibility. * Fix warning label ‘out’ defined but not used and related indentations. Define same preprocessor conditions for goto and label visibility. Correct also related indentations. Co-authored-by: Hannes Müller <>
Anthony Green 5e010474 2022-09-15T16:57:59 Fix test case for 64-bit mingw
Anthony Green 305cde79 2022-09-15T15:50:35 Passes on 64bit mingw
Anthony Green 98d4ad65 2022-09-15T09:42:53 Fix test headers
Anthony Green 4d0a0384 2022-09-15T07:58:26 msvc requires the printf change, not mingw
Anthony Green 19e8354f 2022-09-14T07:36:06 Fix test case
Anthony Green 4932f351 2022-09-14T07:08:06 Improve test case
Anthony Green 819b01ce 2022-09-14T07:07:15 Add test case
Anthony Green b2344575 2022-09-06T12:43:08 Fix unwindtest on macos
Anthony Green b4cf3d64 2022-09-04T07:32:18 Prune warnings from sparc64 linux ld
Anthony Green c248764d 2022-05-29T07:27:32 Update testsuite Makefile
Anthony Green 55f80b02 2022-05-28T14:17:53 New test cases
Roland Schatz de95947a 2022-05-24T03:04:43 Fix check for invalid varargs arguments. (#707)
A. Wilcox e504f90f 2022-05-23T18:42:32 testsuite/libffi.closures: Fix PowerPC 64 (#709) -mlong-double-128 is only supported on glibc. This test still passes on glibc targets, and now passes on musl targets as well (which uses 64-bit ldbl).
Anthony Green e770fb76 2022-05-22T20:43:41 Clean up types
Andreas Schwab 4fa6239f 2021-12-23T14:27:32 testsuite/libffi.call: fix mismatching return types (#679) Co-authored-by: Andreas Schwab <schwab@suse.de>
Anthony Green 03596285 2021-07-29T10:16:42 No more xfail for alpha
Anthony Green 43e4ad4d 2021-07-29T07:55:59 Test passing structs by value
Anthony Green be0b3b6e 2021-07-16T21:51:03 Fix CHECK
Anthony Green 7db17442 2021-07-16T11:30:01 Don't check the whole buffer, just what we printed.
Anthony Green 8bcf5947 2021-07-16T11:26:02 Fix test case
Anthony Green c96b0577 2021-07-16T11:16:39 Fix test check
Anthony Green 4ed23be8 2021-07-16T11:08:01 Fix test check
Hood Chatham eb244724 2021-07-16T14:33:04 Use CHECK to assert more things in test suite (#654) * Use CHECK to assert more things in test suite * Use snprintf instead of sprintf * Fix va_struct1 and va_struct3
Anthony Green 1ed0aa73 2021-06-28T18:45:11 Fix warnings
Anthony Green 0a2cc2ec 2021-06-28T14:59:07 Add missing test cases to distribution
Hood Chatham ee3ef737 2021-06-28T11:51:35 Add tests for single entry structs (#653)
Hood Chatham f08c5ace 2021-06-28T07:24:19 Fix the assertions in cls-24byte (#652) * Fix the assertions in cls-24byte * Update print statement too
Hood Chatham 9fa94c60 2021-06-27T11:02:33 Print more information when an assertion fails in test suite (#649)
Hood Chatham 91eaadfb 2021-06-27T09:49:31 Fix signature of function pointer in cls_dbls_struct (#648)
Anthony Green c0b210c7 2021-06-26T10:55:57 Remove test case
Matthew Green 87429ce7 2021-06-26T08:49:45 This test includes a closure and must live in the closures test directory. (#645) Co-authored-by: Matthew Green <squidhacks@users.noreply.github.com>
Hood Chatham 8d83c7c1 2021-06-25T19:50:33 Make test methods static (#644)
Anthony Green fa1ef887 2021-06-22T08:48:24 Avoid undefined behaviour
Jakub Jelinek 5651bea2 2021-06-15T15:19:26 2021-06-15 Jakub Jelinek <jakub@redhat.com> * src/x86/ffi64.c (classify_argument): For FFI_TYPE_STRUCT set words to number of words needed for type->size + byte_offset bytes rather than just type->size bytes. Compute pos before the loop and check total size of the structure. * testsuite/libffi.call/nested_struct12.c: New test.
Cheng Jin e6eb59cd 2021-06-09T16:00:10 Add struct test to verify a nested float struct (#640) The test aims to check a nested float struct [float, [float,float]] to see whether it works good with libffi. Signed-off-by: Cheng Jin <jincheng@ca.ibm.com>
Anthony Green 6eb38863 2021-06-09T15:45:31 Remove reference to old test case
Sergei Trofimovich 58dfdf6a 2021-03-24T23:19:54 testsuite: fix compiler vendor detection on dash as /bin/sh (#594) In https://bugs.gentoo.org/753299 Paolo Pedroni reported a single test failure out of all libffi. Here is the minimal reproducer: ``` $ ./autogen $ CONFIG_SHELL=/bin/dash ./configure --host=x86_64-pc-linux-gnu $ make check RUNTESTFLAGS='complex.exp' ... FAIL: libffi.complex/cls_align_complex_float.c (test for excess errors) ``` This happens because under 'dash' shell autoconf generates slightly different style of string quotation in `config.log`: - on bash: `ax_cv_c_compiler_vendor=gnu` - on dash: `ax_cv_c_compiler_vendor='gnu'` To avoid shell quotation parsing the change just embeds `compiler_vendor` into `local.exp` at configure time. Reported-by: Paolo Pedroni Bug: https://bugs.gentoo.org/753299 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Anthony Green 205cf01b 2021-03-23T11:31:08 Bug #680. Don't accept floats or small ints as var args. (#628) * Bug #680. Don't accept floats or small ints as var args. * Bug #680. Don't accept floats or small ints as var args. * Bug #680. Don't accept floats or small ints as var args.
Madhavan T. Venkataraman 9ba55921 2021-03-05T10:07:30 Static tramp v5 (#624) * Static Trampolines Closure Trampoline Security Issue ================================= Currently, the trampoline code used in libffi is not statically defined in a source file (except for MACH). The trampoline is either pre-defined machine code in a data buffer. Or, it is generated at runtime. In order to execute a trampoline, it needs to be placed in a page with executable permissions. Executable data pages are attack surfaces for attackers who may try to inject their own code into the page and contrive to have it executed. The security settings in a system may prevent various tricks used in user land to write code into a page and to have it executed somehow. On such systems, libffi trampolines would not be able to run. Static Trampoline ================= To solve this problem, the trampoline code needs to be defined statically in a source file, compiled and placed in the text segment so it can be mapped and executed naturally without any tricks. However, the trampoline needs to be able to access the closure pointer at runtime. PC-relative data referencing ============================ The solution implemented in this patch set uses PC-relative data references. The trampoline is mapped in a code page. Adjacent to the code page, a data page is mapped that contains the parameters of the trampoline: - the closure pointer - pointer to the ABI handler to jump to The trampoline code uses an offset relative to its current PC to access its data. Some architectures support PC-relative data references in the ISA itself. E.g., X64 supports RIP-relative references. For others, the PC has to somehow be loaded into a general purpose register to do PC-relative data referencing. To do this, we need to define a get_pc() kind of function and call it to load the PC in a desired register. There are two cases: 1. The call instruction pushes the return address on the stack. In this case, get_pc() will extract the return address from the stack and load it in the desired register and return. 2. The call instruction stores the return address in a designated register. In this case, get_pc() will copy the return address to the desired register and return. Either way, the PC next to the call instruction is obtained. Scratch register ================ In order to do its job, the trampoline code would need to use a scratch register. Depending on the ABI, there may not be a register available for scratch. This problem needs to be solved so that all ABIs will work. The trampoline will save two values on the stack: - the closure pointer - the original value of the scratch register This is what the stack will look like: sp before trampoline ------> -------------------- | closure pointer | -------------------- | scratch register | sp after trampoline -------> -------------------- The ABI handler can do the following as needed by the ABI: - the closure pointer can be loaded in a desired register - the scratch register can be restored to its original value - the stack pointer can be restored to its original value (the value when the trampoline was invoked) To do this, I have defined prolog code for each ABI handler. The legacy trampoline jumps to the ABI handler directly. But the static trampoline defined in this patch jumps tp the prolog code which performs the above actions before jumping to the ABI handler. Trampoline Table ================ In order to reduce the trampoline memory footprint, the trampoline code would be defined as a code array in the text segment. This array would be mapped into the address space of the caller. The mapping would, therefore, contain a trampoline table. Adjacent to the trampoline table mapping, there will be a data mapping that contains a parameter table, one parameter block for each trampoline. The parameter block will contain: - a pointer to the closure - a pointer to the ABI handler The static trampoline code would finally look like this: - Make space on the stack for the closure and the scratch register by moving the stack pointer down - Store the original value of the scratch register on the stack - Using PC-relative reference, get the closure pointer - Store the closure pointer on the stack - Using PC-relative reference, get the ABI handler pointer - Jump to the ABI handler Mapping size ============ The size of the code mapping that contains the trampoline table needs to be determined on a per architecture basis. If a particular architecture supports multiple base page sizes, then the largest supported base page size needs to be chosen. E.g., we choose 16K for ARM64. Trampoline allocation and free ============================== Static trampolines are allocated in ffi_closure_alloc() and freed in ffi_closure_free(). Normally, applications use these functions. But there are some cases out there where the user of libffi allocates and manages its own closure memory. In such cases, static trampolines cannot be used. These will fall back to using legacy trampolines. The user has to make sure that the memory is executable. ffi_closure structure ===================== I did not want to make any changes to the size of the closure structure for this feature to guarantee compatibility. But the opaque static trampoline handle needs to be stored in the closure. I have defined it as follows: - char tramp[FFI_TRAMPOLINE_SIZE]; + union { + char tramp[FFI_TRAMPOLINE_SIZE]; + void *ftramp; + }; If static trampolines are used, then tramp[] is not needed to store a dynamic trampoline. That space can be reused to store the handle. Hence, the union. Architecture Support ==================== Support has been added for x64, i386, aarch64 and arm. Support for other architectures can be added very easily in the future. OS Support ========== Support has been added for Linux. Support for other OSes can be added very easily. Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> * x86: Support for Static Trampolines - Define the arch-specific initialization function ffi_tramp_arch () that returns trampoline size information to common code. - Define the trampoline code mapping and data mapping sizes. - Define the trampoline code table statically. Define two tables, actually, one with CET and one without. - Introduce a tiny prolog for each ABI handling function. The ABI handlers addressed are: - ffi_closure_unix64 - ffi_closure_unix64_sse - ffi_closure_win64 The prolog functions are called: - ffi_closure_unix64_alt - ffi_closure_unix64_sse_alt - ffi_closure_win64_alt The legacy trampoline jumps to the ABI handler. The static trampoline jumps to the prolog function. The prolog function uses the information provided by the static trampoline, sets things up for the ABI handler and then jumps to the ABI handler. - Call ffi_tramp_set_parms () in ffi_prep_closure_loc () to initialize static trampoline parameters. Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> * i386: Support for Static Trampolines - Define the arch-specific initialization function ffi_tramp_arch () that returns trampoline size information to common code. - Define the trampoline code table statically. Define two tables, actually, one with CET and one without. - Define the trampoline code table statically. - Introduce a tiny prolog for each ABI handling function. The ABI handlers addressed are: - ffi_closure_i386 - ffi_closure_STDCALL - ffi_closure_REGISTER The prolog functions are called: - ffi_closure_i386_alt - ffi_closure_STDCALL_alt - ffi_closure_REGISTER_alt The legacy trampoline jumps to the ABI handler. The static trampoline jumps to the prolog function. The prolog function uses the information provided by the static trampoline, sets things up for the ABI handler and then jumps to the ABI handler. - Call ffi_tramp_set_parms () in ffi_prep_closure_loc () to initialize static trampoline parameters. Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> * arm64: Support for Static Trampolines - Define the arch-specific initialization function ffi_tramp_arch () that returns trampoline size information to common code. - Define the trampoline code mapping and data mapping sizes. - Define the trampoline code table statically. - Introduce a tiny prolog for each ABI handling function. The ABI handlers addressed are: - ffi_closure_SYSV - ffi_closure_SYSV_V The prolog functions are called: - ffi_closure_SYSV_alt - ffi_closure_SYSV_V_alt The legacy trampoline jumps to the ABI handler. The static trampoline jumps to the prolog function. The prolog function uses the information provided by the static trampoline, sets things up for the ABI handler and then jumps to the ABI handler. - Call ffi_tramp_set_parms () in ffi_prep_closure_loc () to initialize static trampoline parameters. Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com> * arm: Support for Static Trampolines - Define the arch-specific initialization function ffi_tramp_arch () that returns trampoline size information to common code. - Define the trampoline code mapping and data mapping sizes. - Define the trampoline code table statically. - Introduce a tiny prolog for each ABI handling function. The ABI handlers addressed are: - ffi_closure_SYSV - ffi_closure_VFP The prolog functions are called: - ffi_closure_SYSV_alt - ffi_closure_VFP_alt The legacy trampoline jumps to the ABI handler. The static trampoline jumps to the prolog function. The prolog function uses the information provided by the static trampoline, sets things up for the ABI handler and then jumps to the ABI handler. - Call ffi_tramp_set_parms () in ffi_prep_closure_loc () to initialize static trampoline parameters. Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com>
Jeremy Huddleston Sequoia 93cf288d 2020-10-27T07:05:28 testsuite: Add a missing include of <inttypes.h> to fix build failure in test suite (#587) Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Anthony Green 2e90bb55 2020-06-07T14:31:06 Add gcc bug tests back
Anthony Green 5dcb741f 2019-11-23T10:24:58 Move nested_struct3 test to closures directory
Anthony Green 1aca3330 2019-11-23T09:42:04 Add missing closing brace
Anthony Green c72b82f4 2019-11-23T08:48:53 Remove junk file from dist
Anthony Green 642d40ee 2019-11-23T07:49:58 Account for moved test files
Anthony Green 049da08a 2019-11-23T07:44:26 Add dejagnu directives accidentally removed
Anthony Green 36730f5d 2019-11-22T19:49:38 Move closure test to closure directory
Anthony Green c88c0e92 2019-11-22T19:27:34 More more closure tests to the closure test directory
Anthony Green 332a539e 2019-11-22T18:54:30 Move closure tests so we can easily XFAIL them for some targets
Anthony Green 1761a106 2019-11-22T18:53:09 Remove gccbug detection. GCC is good now.
Anthony Green 91a7fbe9 2019-11-20T07:16:41 Fix or1k lack-of-g++ checking in testsuite
Anthony Green bd3a4687 2019-11-19T17:14:23 No C++ for or1k-unknown-elf
Anthony Green d6e4f96b 2019-11-19T13:36:49 No C++ for or1k
Anthony Green 49701868 2019-11-19T10:07:16 Disable type warnings for or1k.
Anthony Green 262cf74f 2019-11-19T10:06:57 No c++ for or1k-elf
Anthony Green 188de63c 2019-11-07T12:03:19 Mark xfail for m68k and alpha.
Anthony Green 1d605944 2019-10-24T05:25:11 Add missing dist files.
Anthony Green 825b2a35 2019-10-16T16:05:46 Test on arm32v7-linux-gnu, ppc64le-linux-gnu and aarch64-linux-gnu. Use docker images and qemu to test libffi for non-x86 architectures on travis-ci. Use the LIBFFI_TEST_OPTIMIZATION environment variable to force specific optimization levels at test time.
pichikaudaykiran 09f9d856 2019-10-09T16:26:06 Making the change to correct the comment when SUN (#521) and GCC are used together
Anthony Green 042ef8c3 2019-02-12T08:50:30 Remove -Os testing. No ABI impact, and helps trim log lengths.
Anthony Green 8206253f 2018-05-09T10:50:46 Mark some cases as xfail due to GCC bug
hjl-tools d3c54cf3 2018-05-02T06:19:58 Re-enable msabi testing (#436) * Revert "disable msabi testing for now" This reverts commit 7b7638eb0eac2adfa72f7ec9f254ba287c9947e2. * x86: Correct testing for 64-bit x86-64 Since passing -m32 to x86-64 compiler will generate i386 code, we need to check both __ILP32__ and __i386__ for 64-bit x86-64. * x86: Check __i386__ instead of i?86-*-* targets Since passing -m32 to x86-64 compiler will generate i386 code, we need to check __i386__ instead of i?86-*-* targets for i386 targets. * i386: Properly passing integer parameters in registers For thiscall and fastcall, if the paramter passed as 64-bit integer or struct, all following integer paramters will be passed on stack. * test: Add ABI_ATTR to callback_code Add ABI_ATTR to callback_code to properly test different ABIs.
Andreas Krebbel 801c1bd7 2018-04-05T14:27:32 Fix issue #421 (#422) Fantastic - thanks for digging into this.
Anthony Green 7b7638eb 2018-04-02T08:24:44 disable msabi testing for now
fwg af6773d6 2018-04-02T13:55:31 Fix appveyor windows build (#420) * Fix msvcc dll build by adding dllexport decorations to all API declarations * Fix appveyor build for VS 2013 Use the new -DFFI_BUILDING_DLL for producing a working DLL. Update the msvcc.sh wrapper script to successfully compile the testsuite files. * MSVC build: suppress warnings in testsuite * fix testsuite on appveyor
Anthony Green 48bdb028 2018-03-29T07:22:57 Trim some optimization tests
Anthony Green fa72b054 2018-03-29T07:10:23 Remove warning message from clang
Anthony Green 746c3ce2 2018-03-29T07:01:14 Expand ABI tests on x86. Testsuite bug fixes.
Anthony Green e8cf1338 2018-03-27T14:12:02 msvc c99 hack
Anthony Green a3e20940 2018-03-27T11:58:42 More msvc hacks
Anthony Green a82b456e 2018-03-27T11:49:46 msvc fixes
Anthony Green 85b6b209 2018-03-27T11:35:23 Force literals to float (msvc warning)
Anthony Green 5c2ca479 2018-03-27T04:01:37 Remove uninitialized warning. Fix #163.
Anthony Green 247e44b3 2018-03-18T07:01:54 Fix return values
Anthony Green 1f99701f 2018-03-17T22:49:58 Make tests compile/run standalone
Anthony Green a33bfa9b 2018-03-17T07:17:24 xfail unwind tests for moxie
Anthony Green d2f7e788 2018-03-14T09:06:38 Fix test cases with short results
Anthony Green 16313cb2 2018-03-13T08:52:30 Support compiler specific warning suppression flags
Anthony Green cca6d1fb 2018-03-13T08:51:34 Support compiler specific warning suppression flags
Anthony Green 9291f941 2018-03-13T08:37:21 Add bhaible's missing Makefile
Anthony Green bede01d8 2018-03-13T07:53:33 Remove stray directory
Anthony Green ddf7a8f7 2018-03-13T07:47:57 Update test list for dist
Anthony Green 6186261c 2018-03-12T21:53:18 Add Bruno Haible and Bill Triggs' libffi testsuite
Sergei Trofimovich 45da2fcb 2018-02-17T18:53:02 new test: return small struct The bug originally was discovered in https://bugs.gentoo.org/634190 where complicated callback was returning invalid data on ia64. This change adds minimal reproducer that fails only on ia64 as: FAIL: libffi.call/struct10.c -W -Wall -Wno-psabi -O0 execution test FAIL: libffi.call/struct10.c -W -Wall -Wno-psabi -O2 execution test FAIL: libffi.call/struct10.c -W -Wall -Wno-psabi -O3 execution test FAIL: libffi.call/struct10.c -W -Wall -Wno-psabi -Os execution test Test passes on amd64. The fix is in the following commit. Bug: https://bugs.gentoo.org/634190 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Saleem Abdulrasool 1fb788ac 2017-10-10T11:37:00 aarch64: fix index base register for AArch64 The base is passed in `x3`, not in `x2`. This fixes the indexing base so that the right value is used.
H.J. Lu b2a343ff 2017-10-25T04:36:49 Don't include WIN64/EFI64 for x32 Since x32 doesn't support WIN64/EFI64, don't include it for x32. Also x32 has sizeof size_t == 4. But TARGET should be X86_64.
Anthony Green c9c2aa24 2017-03-15T09:58:39 Revert previous two changes. clang/MacOS problem can only be solved within dejagnu.
Anthony Green 5a8fca94 2017-03-15T09:52:39 Fix typo
Anthony Green 5b10a019 2017-03-15T09:34:01 Work around dejagnu/clang problems
Anthony Green c5b408ee 2016-09-04T09:17:46 xfail the unwindtest for osx as per issue #279
Yuriy Kolerov ef8be84d 2016-07-29T21:01:38 Do not use fabsl() in float2.c test Some targets may support long double variables but in the same time may lack support of long double functions like fabsl(). Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
Yuriy Kolerov f3201733 2016-07-29T19:18:41 Fix output expectations in cls_dbls_struct.c test This test with invalid output expectations may fail on some targets (e.g. ARC processors). Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>
Yuriy Kolerov f74ea2dc 2016-07-28T20:57:09 Allow setting an arbitary value for blddirffi in testsuite It is useful when tests are executed not from build directory. So the path of the build directory may be passed through site.exp or runtest. Signed-off-by: Yuriy Kolerov <yuriy.kolerov@synopsys.com>