1859 Commits

Author SHA1 Message Date
Anthony Green
1b6b176a28
Update README.md to mention SH targets v3.5.0-rc1 2025-06-05 06:17:56 -04:00
Anthony Green
bac99f2f3f
Release candidate 1 for 3.5.0. Windows build fixes. (#916)
* refactor(ci): improve wget retry logic in .ci/install.sh

* build(github-actions): use static runtime library in build

* refactor(ffi.h.in): export version API

* chore: update libffi version to 3.5.0-rc1
2025-06-05 06:12:10 -04:00
Anthony Green
3c54639eb8
refactor(ci): improve wget retry logic in .ci/install.sh (#915) 2025-06-04 19:20:37 -04:00
Anthony Green
d6b1f34232 refactor: move and modify unix-noexec.exp and site.exp files 2025-06-04 11:24:11 -04:00
Anthony Green
d38abaf9db feat(testsuite): add Emscripten support to libffi.closures tests 2025-06-04 07:57:21 -04:00
Anthony Green
2d8868ace7
Update generate-darwin-source-and-headers.py (#914) 2025-06-04 07:04:53 -04:00
Anthony Green
5ad529fb0d
Many CI testing fixes and improvements. (#913) 2025-06-03 19:12:49 -04:00
Anthony Green
2529b40dbd chore: update version to 3.5.0-rc0 in documentation and configuration files v3.5.0-rc0 2025-06-02 20:42:47 -04:00
Anthony Green
3ee0dc41b6 chore: update version to 3.5.0-pre0 in version.texi 2025-06-02 20:41:27 -04:00
Anthony Green
55d84b0cb9 docs: update README with new libffi release information 2025-06-02 20:40:44 -04:00
Anthony Green
854ce7be85
Make 3.5.0-pre0 release. Build and publish Windows binaries. Clean up testing. (#912)
This commit removes many platforms from the testing workflow.
They will be added back in future commits.
2025-06-02 20:18:46 -04:00
JupiterRider
022929b1fc
doc now shows the correct calculation for version number (#911) 2025-06-01 07:30:51 -04:00
Anthony Green
dcc9e93b8a Add Issue labeler Action 2025-05-28 14:32:02 -04:00
Anthony Green
9ee7341dba feat(README): add details for next version release in history section 2025-05-26 08:19:32 -04:00
Anthony Green
4094362f54 refactor: enhance assembler pseudo-ops and compiler flag checking 2025-05-26 08:19:15 -04:00
Anthony Green
be4e59e399 chore: update version to 3.5.0 and libtool version to 10:0:2 2025-05-26 08:19:00 -04:00
Anthony Green
dc9b1332f7 chore: update Makefile.am configurations 2025-05-26 08:18:40 -04:00
Anthony Green
c9a3a06f9b feat(libffi): upgrade to version 3.5.0 and add version API 2025-05-26 08:18:13 -04:00
Anthony Green
64d5e122f7 docs: update required installations in README.md 2025-05-25 16:09:59 -04:00
Anthony Green
5b253476d1 chore(testsuite): remove mingw64-align.c from Makefile and delete file 2025-05-25 13:33:51 -04:00
Anthony Green
f9c60855da Add custom github issue labels for gail 2025-05-24 08:11:37 -04:00
Anthony Green
c6f1610509 feat(testsuite): add mingw64-align.c to test alignment in structs 2025-04-27 08:59:12 -04:00
Anthony Green
571177adcb feat(testsuite): add longjmp test to Makefile and implement longjmp test code 2025-04-27 08:30:35 -04:00
David Tenty
562cb53b5d
Add initializer (#904) 2025-04-25 05:07:57 -04:00
Peter Bergner
aea22de28e
powerpc: Fix closures on powerpc64-linux when statically linking (#900) (#902)
Closures on powerpc64-linux using static trampolines do not work when
statically linking libffi.  The problem is the usage of tramp_globals.text
in libffi assumes it contains the entry point address of the first trampoline.
Powerpc's ffi_tramp_arch code returns &trampoline_code_table which for ABIs
that use function descriptors, ends up returning trampoline_code_table's
function descriptor address instead of its entry point address.  Update
the code to always return the entry point address for all ABIs.
2025-04-18 11:09:45 -04:00
Sam James
a431b47822
pa: add .note.GNU-stack marker to linux.S (#899)
Similarly to f515eac04cf8e5f594d5d9dee5fb7dfc3a186a4c, add a .note.GNU-stack
marker to pa/linux.S as it doesn't need an executable stack. Absence of the
note means that GNU Binutils will consider it as needing an executable stack
and mark it as such automatically.

When building libffi on HPPA with `-Wl,--warn-warn-execstack`, we get:
```
ld: warning: src/pa/.libs/linux.o: missing .note.GNU-stack section implies executable stack
ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
```

That becomes more problematic with glibc-2.41 which forbids dlopen()
of a library with an executable stack, and libffi is commonly dlopen()'d,
especially by Python.

I suspect the reason it didn't show up on Debian is that since February,
Debian has been building Binutils with --disable-default-execstack.

Bug: https://bugs.gentoo.org/953805
Bug: https://github.com/libffi/libffi/issues/898
2025-04-15 05:30:27 -04:00
Sam James
6a99edb808
testsuite: add two tests to Makefile.am (#893)
* Add libffi.call/overread.c and libffi.call/x32.c to Makefile.am
  so they're included in dist tarballs

* Fix indentation and rewrap
v3.4.8
2025-04-09 22:44:45 -04:00
Anthony Green
bfb5b005a0 feat: Update version of libffi to 3.4.8 with various fixes and enhancements 2025-04-09 10:32:42 -04:00
Peter Bergner
3429ed6b94
powerpc: Add static trampoline support (#894) (#895)
Add static trampoline support to all three powerpc Linux ABIs, specifically
powerpc-linux (32-bit SYSV BE), powerpc64-linux (64-bit ELFv1 BE) and
powerpc64le-linux (64-bit ELFv2 LE).  This follows the s390x implementation
and does not introduce a ffi_closure_*_alt function, but rather jumps
directly to the ffi_closure_* function itself.  If compiling with
--with-gcc-arch=power10 and pc-relative is enabled, we use a simpler and
smaller trampoline that utilizes Power10's new pc-relative load instructions.
2025-04-08 06:52:37 -04:00
mikulas-patocka
bb1a84ed97
Add the "ABI_ATTR" attribute to called functions (#891) (#892)
I accidentally omitted the "ABI_ATTR" attribute, so that the testsuite
fails when testing the Microsoft ABI.

Fixes: fe203ffbb2bd ("Fix bugs in the x86-64 and x32 target (#887) (#889)")

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-03-30 06:07:59 -04:00
mikulas-patocka
fe203ffbb2
Fix bugs in the x86-64 and x32 target (#887) (#889)
This commit fixes two bugs in ffi in the x86-64 target. The bugs were
introduced by the commit d21881f55ed4a44d464c9091871e69b0bb47611a ("Fix
x86/ffi64 calls with 6 gp and some sse registers").

The first bug is that when we pass an argument with less than 8 bytes,
ffi will read memory beyond argument end, causing a crash if the argument
is located just before the end of the mapped region.

The second bug is in the x32 ABI - pointers in x32 are 4-byte, but GCC
assumes that the pointer values in the registers are zero-extended. ffi
doesn't respect this assumption, causing crashes in the called library.

For example, when we compile this function for x32:
int fn(int *a)
{
	if (a)
		return *a;
	return -1;
}
we get this code:
fn:
	testq   %rdi, %rdi
	je      .L3
	movl    (%edi), %eax
	ret
.L3:
	movl    $-1, %eax
	ret
When we call this function using ffi with the argument NULL, the function
crashes because top 4 bytes of the RDI register are not cleared.


Fixes: d21881f55ed4 ("Fix x86/ffi64 calls with 6 gp and some sse registers (#848)")

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-03-26 20:31:49 -04:00
Nikita Samusev
cf69efabca
Update the Simple Example to fix a compile error (#886)
Fixes the following error:
candidate function not viable: no known conversion from 'int (const char *)' to 'void (*)()' for 2nd argument
2025-03-08 06:41:02 -05:00
fossdd
89c99d738f
MIPS: Dont import asm/sgidefs.h on linux (#885)
Removed from Linux since Linux 3.7

Ref: https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=61730c538f8281efa7ac12596da9f3f9a31b9272
2025-02-28 16:10:10 -05:00
Bill Roberts
5ceddf4071
aarch64: add PAC to GNU Notes (#882)
While PAC was enabled, the bit to indicate support in the GNU Notes
section of the ELF was missing.

Before:
readelf -n ./aarch64-unknown-linux-gnu/.libs/libffi.so

Displaying notes found in: .note.gnu.property
  Owner                Data size 	Description
  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
      Properties: AArch64 feature: BTI

This was caused by this file not having PAC indicated in GNU Notes and
the linker discarding it:
File: ./aarch64-unknown-linux-gnu/src/aarch64/sysv.o

Displaying notes found in: .note.gnu.property
  Owner                Data size        Description
  GNU                  0x00000010       NT_GNU_PROPERTY_TYPE_0
      Properties: AArch64 feature: BTI

Now it has it:
File: ./aarch64-unknown-linux-gnu/src/aarch64/sysv.o

Displaying notes found in: .note.gnu.property
  Owner                Data size        Description
  GNU                  0x00000010       NT_GNU_PROPERTY_TYPE_0
      Properties: AArch64 feature: BTI, PAC

As well as the output shared object:
readelf -n ./aarch64-unknown-linux-gnu/.libs/libffi.so

Displaying notes found in: .note.gnu.property
  Owner                Data size 	Description
  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
      Properties: AArch64 feature: BTI, PAC

Fixes: #881

Signed-off-by: Bill Roberts <bill.roberts@arm.com>
2025-02-20 05:25:21 -05:00
Anthony Green
1716f81e9a feat: remove nios2 support
Acked-by: Anthony Green <green@moxielogic.com>
v3.4.7
2025-02-08 11:32:05 -05:00
Anthony Green
252c0f4636 chore: Bump version to 3.4.7 and update change log 2025-02-08 09:37:58 -05:00
Kleis Auke Wolthuizen
adfe4489c1
Emscripten: remove support for -sWASM_BIGINT=0 (#874)
* Emscripten: cleanup

* Emscripten: remove support for `-sWASM_BIGINT=0`

* Emscripten: remove redundant CircleCI config

* Emscripten: modernize CI

* Ensure test helper methods are static

Similar to #644.

* Fix test failures in `cls_multi_{s,u}shortchar`
2025-01-31 15:41:56 -05:00
Matthew Flatt
2f34cf639c
x86 Darwin returns structs of size 1, 2, 4, and 8 in registers (#876) 2025-01-31 15:40:40 -05:00
zye2-sc
a0d8074a67
Disable go closures on Android (#877)
* x18 register shouldn't be used on Android due to the shadow call stack feature in llvm
* https://source.android.com/docs/security/test/shadow-call-stack
2025-01-31 15:40:00 -05:00
杨萧玉
d77b9fefa2
Fix config.sub on Apple platforms (#860)
* update config.sub

* update config.sub
2024-12-13 05:38:01 -05:00
Satadru Pramanik, DO, MPH, MEng
593cb01a46
Add mold linker to linker checks. (#866)
Signed-off-by: Satadru Pramanik <satadru@gmail.com>
2024-12-13 05:37:15 -05:00
Icenowy Zheng
f515eac04c
MIPS: add .note.GNU-stack section to assembly sources (#872)
To build ELF shared libraries that do not require executable stack on
MIPS, every object file linked should have a .note.GNU-stack section,
otherwise the linker defaults to executable stack.

As libffi shouldn't require executable stack, add the .note.GNU-stack
section to the assembly source files under src/mips, like other
architectures.

Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
2024-12-13 05:36:02 -05:00
Eddy S.
458b2ae282
Add static trampoline support for s390 (#862)
* added static trampoline support for s390

* enable static tramp only for  s390x 64bit
2024-11-16 07:03:24 -05:00
Joseph Myers
0859f84312
Fix testsuite for C23 va_start (#861)
In the C23 revision of the C standard, `va_start` ignores its second
argument, which is no longer required (previously the last named
function parameter - which the compiler knows anyway, so it's
redundant information).

This has the consequence for the libffi testsuite, when making GCC
default to `-std=gnu23`, of making two tests fail with warnings about
an unused function argument (only passed to `va_start` and not
otherwise used).  Fix those test failures by explicitly casting the
argument to `void`.
2024-10-24 14:26:58 -04:00
Ivan Tadeu Ferreira Antunes Filho
8308bed5b2
Move cfi_startproc after CNAME(label) (#857)
This is a fix for https://github.com/libffi/libffi/issues/852: error: invalid CFI advance_loc expression on apple targets.

The CFI for darwin arm64 was broken because the CNAME macro was being used after the
cfi_startproc macro.
2024-09-20 06:01:23 -04:00
KJ Tsanaktsidis
01db744b4a
Disable ASAN in ffi_call_int functions (#858)
The pattern for several of the architectures is for ffi_call_int to
stack-allocate some arguments + the registers, and then
ffi_call_$ARCH will pop the top of that structure into registers, and
then adjust the stack pointer such that the alloca'd buffer _becomes_
the stack-passed arguments for the function being called.

If libffi is compiled with ASAN, then there will be a redzone inserted
after the alloca'd buffer which is marked as poisoned. This redzone
appears beyond the end of $sp upon entry to the called function.

If the called function does anything to use this stack memory, ASAN will
notice that it's poisoned and report an error.

This commit fixes the situation (on the architectures that I have access
to) disabling instrumentation for ffi_call_int; that means there will be
no alloca redzone left on the shadow-stack.
2024-09-20 06:00:49 -04:00
Sam James
f7e4992789
testsuite: fix dejagnu directive typo (#859) 2024-09-20 05:58:06 -04:00
Anthony Green
084f36903f Merge remote-tracking branch 'refs/remotes/origin/master' 2024-09-15 12:32:58 -04:00
Anthony Green
92d384df19 Fix floating point compare 2024-09-15 12:32:29 -04:00
Richard Barnes
348e70ef1c
Suppress unused variable warning in dlmalloc.c (#843)
Allows `-Wunused-but-set-variable` to pass
2024-09-15 07:39:51 -04:00