|
77a0fb82
|
2022-10-10T17:59:04
|
|
Flush output before aborting (#740)
Co-authored-by: Andreas Schwab <schwab@suse.de>
|
|
a1467200
|
2022-09-26T11:41:48
|
|
Never link pthread for android
|
|
55bcc477
|
2022-09-24T22:03:52
|
|
Test idea borrowed from cpython
|
|
e79f1948
|
2022-09-24T17:11:30
|
|
Add test case transcribed from cpython
|
|
f26b56e1
|
2022-09-19T08:15:22
|
|
Add new files for distribution
|
|
acf0ce9e
|
2022-09-18T11:04:54
|
|
Add test case
|
|
b49308ea
|
2022-09-18T08:26:23
|
|
Add missing ABI_ATTR
|
|
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 <>
|
|
5e010474
|
2022-09-15T16:57:59
|
|
Fix test case for 64-bit mingw
|
|
305cde79
|
2022-09-15T15:50:35
|
|
Passes on 64bit mingw
|
|
98d4ad65
|
2022-09-15T09:42:53
|
|
Fix test headers
|
|
4d0a0384
|
2022-09-15T07:58:26
|
|
msvc requires the printf change, not mingw
|
|
19e8354f
|
2022-09-14T07:36:06
|
|
Fix test case
|
|
4932f351
|
2022-09-14T07:08:06
|
|
Improve test case
|
|
819b01ce
|
2022-09-14T07:07:15
|
|
Add test case
|
|
b2344575
|
2022-09-06T12:43:08
|
|
Fix unwindtest on macos
|
|
b4cf3d64
|
2022-09-04T07:32:18
|
|
Prune warnings from sparc64 linux ld
|
|
c248764d
|
2022-05-29T07:27:32
|
|
Update testsuite Makefile
|
|
55f80b02
|
2022-05-28T14:17:53
|
|
New test cases
|
|
de95947a
|
2022-05-24T03:04:43
|
|
Fix check for invalid varargs arguments. (#707)
|
|
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).
|
|
e770fb76
|
2022-05-22T20:43:41
|
|
Clean up types
|
|
4fa6239f
|
2021-12-23T14:27:32
|
|
testsuite/libffi.call: fix mismatching return types (#679)
Co-authored-by: Andreas Schwab <schwab@suse.de>
|
|
03596285
|
2021-07-29T10:16:42
|
|
No more xfail for alpha
|
|
43e4ad4d
|
2021-07-29T07:55:59
|
|
Test passing structs by value
|
|
be0b3b6e
|
2021-07-16T21:51:03
|
|
Fix CHECK
|
|
7db17442
|
2021-07-16T11:30:01
|
|
Don't check the whole buffer, just what we printed.
|
|
8bcf5947
|
2021-07-16T11:26:02
|
|
Fix test case
|
|
c96b0577
|
2021-07-16T11:16:39
|
|
Fix test check
|
|
4ed23be8
|
2021-07-16T11:08:01
|
|
Fix test check
|
|
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
|
|
1ed0aa73
|
2021-06-28T18:45:11
|
|
Fix warnings
|
|
0a2cc2ec
|
2021-06-28T14:59:07
|
|
Add missing test cases to distribution
|
|
ee3ef737
|
2021-06-28T11:51:35
|
|
Add tests for single entry structs (#653)
|
|
f08c5ace
|
2021-06-28T07:24:19
|
|
Fix the assertions in cls-24byte (#652)
* Fix the assertions in cls-24byte
* Update print statement too
|
|
9fa94c60
|
2021-06-27T11:02:33
|
|
Print more information when an assertion fails in test suite (#649)
|
|
91eaadfb
|
2021-06-27T09:49:31
|
|
Fix signature of function pointer in cls_dbls_struct (#648)
|
|
c0b210c7
|
2021-06-26T10:55:57
|
|
Remove test case
|
|
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>
|
|
8d83c7c1
|
2021-06-25T19:50:33
|
|
Make test methods static (#644)
|
|
fa1ef887
|
2021-06-22T08:48:24
|
|
Avoid undefined behaviour
|
|
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.
|
|
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>
|
|
6eb38863
|
2021-06-09T15:45:31
|
|
Remove reference to old test case
|
|
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>
|
|
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.
|
|
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>
|
|
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>
|
|
2e90bb55
|
2020-06-07T14:31:06
|
|
Add gcc bug tests back
|
|
5dcb741f
|
2019-11-23T10:24:58
|
|
Move nested_struct3 test to closures directory
|
|
1aca3330
|
2019-11-23T09:42:04
|
|
Add missing closing brace
|
|
c72b82f4
|
2019-11-23T08:48:53
|
|
Remove junk file from dist
|
|
642d40ee
|
2019-11-23T07:49:58
|
|
Account for moved test files
|
|
049da08a
|
2019-11-23T07:44:26
|
|
Add dejagnu directives accidentally removed
|
|
36730f5d
|
2019-11-22T19:49:38
|
|
Move closure test to closure directory
|
|
c88c0e92
|
2019-11-22T19:27:34
|
|
More more closure tests to the closure test directory
|
|
332a539e
|
2019-11-22T18:54:30
|
|
Move closure tests so we can easily XFAIL them for some targets
|
|
1761a106
|
2019-11-22T18:53:09
|
|
Remove gccbug detection. GCC is good now.
|
|
91a7fbe9
|
2019-11-20T07:16:41
|
|
Fix or1k lack-of-g++ checking in testsuite
|
|
bd3a4687
|
2019-11-19T17:14:23
|
|
No C++ for or1k-unknown-elf
|
|
d6e4f96b
|
2019-11-19T13:36:49
|
|
No C++ for or1k
|
|
49701868
|
2019-11-19T10:07:16
|
|
Disable type warnings for or1k.
|
|
262cf74f
|
2019-11-19T10:06:57
|
|
No c++ for or1k-elf
|
|
188de63c
|
2019-11-07T12:03:19
|
|
Mark xfail for m68k and alpha.
|
|
1d605944
|
2019-10-24T05:25:11
|
|
Add missing dist files.
|
|
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.
|
|
09f9d856
|
2019-10-09T16:26:06
|
|
Making the change to correct the comment when SUN (#521)
and GCC are used together
|
|
042ef8c3
|
2019-02-12T08:50:30
|
|
Remove -Os testing. No ABI impact, and helps trim log lengths.
|
|
8206253f
|
2018-05-09T10:50:46
|
|
Mark some cases as xfail due to GCC bug
|
|
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.
|
|
801c1bd7
|
2018-04-05T14:27:32
|
|
Fix issue #421 (#422)
Fantastic - thanks for digging into this.
|
|
7b7638eb
|
2018-04-02T08:24:44
|
|
disable msabi testing for now
|
|
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
|
|
48bdb028
|
2018-03-29T07:22:57
|
|
Trim some optimization tests
|
|
fa72b054
|
2018-03-29T07:10:23
|
|
Remove warning message from clang
|
|
746c3ce2
|
2018-03-29T07:01:14
|
|
Expand ABI tests on x86. Testsuite bug fixes.
|
|
e8cf1338
|
2018-03-27T14:12:02
|
|
msvc c99 hack
|
|
a3e20940
|
2018-03-27T11:58:42
|
|
More msvc hacks
|
|
a82b456e
|
2018-03-27T11:49:46
|
|
msvc fixes
|
|
85b6b209
|
2018-03-27T11:35:23
|
|
Force literals to float (msvc warning)
|
|
5c2ca479
|
2018-03-27T04:01:37
|
|
Remove uninitialized warning. Fix #163.
|
|
247e44b3
|
2018-03-18T07:01:54
|
|
Fix return values
|
|
1f99701f
|
2018-03-17T22:49:58
|
|
Make tests compile/run standalone
|
|
a33bfa9b
|
2018-03-17T07:17:24
|
|
xfail unwind tests for moxie
|
|
d2f7e788
|
2018-03-14T09:06:38
|
|
Fix test cases with short results
|
|
16313cb2
|
2018-03-13T08:52:30
|
|
Support compiler specific warning suppression flags
|
|
cca6d1fb
|
2018-03-13T08:51:34
|
|
Support compiler specific warning suppression flags
|
|
9291f941
|
2018-03-13T08:37:21
|
|
Add bhaible's missing Makefile
|
|
bede01d8
|
2018-03-13T07:53:33
|
|
Remove stray directory
|
|
ddf7a8f7
|
2018-03-13T07:47:57
|
|
Update test list for dist
|
|
6186261c
|
2018-03-12T21:53:18
|
|
Add Bruno Haible and Bill Triggs' libffi testsuite
|
|
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>
|
|
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.
|
|
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.
|
|
c9c2aa24
|
2017-03-15T09:58:39
|
|
Revert previous two changes. clang/MacOS problem can only be solved within dejagnu.
|
|
5a8fca94
|
2017-03-15T09:52:39
|
|
Fix typo
|
|
5b10a019
|
2017-03-15T09:34:01
|
|
Work around dejagnu/clang problems
|
|
c5b408ee
|
2016-09-04T09:17:46
|
|
xfail the unwindtest for osx as per issue #279
|
|
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>
|
|
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>
|