Skip to content

lib,src,test,doc: add node:ffi module#62072

Closed
cjihrig wants to merge 23 commits intonodejs:mainfrom
cjihrig:ffi
Closed

lib,src,test,doc: add node:ffi module#62072
cjihrig wants to merge 23 commits intonodejs:mainfrom
cjihrig:ffi

Conversation

@cjihrig
Copy link
Copy Markdown
Contributor

@cjihrig cjihrig commented Mar 2, 2026

This is not ready for review yet. Just opening to see if this is something the project is still interested in.

@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/gyp
  • @nodejs/security-wg

@nodejs-github-bot nodejs-github-bot added build Issues and PRs related to build files or the CI. dependencies Pull requests that update a dependency file. needs-ci PRs that need a full CI run. labels Mar 2, 2026
@anonrig
Copy link
Copy Markdown
Member

anonrig commented Mar 2, 2026

Yes

Copy link
Copy Markdown
Member

@Qard Qard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks very cool! I'm glad to see someone has picked this back up. 🙂

I did a quick review and it all looks good. My only comment is there seems to be a bunch of static strings and a private symbol which we might want to define in env_properties.h.

Comment thread src/node_ffi.cc Outdated
@cjihrig cjihrig force-pushed the ffi branch 2 times, most recently from 9462e4d to 631d73a Compare March 10, 2026 03:46
@cjihrig cjihrig added the request-ci Add this label to start a Jenkins CI on a PR. label Mar 18, 2026
@github-actions github-actions bot added request-ci-failed An error occurred while starting CI via request-ci label, and manual interventon is needed. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Mar 18, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Failed to start CI
   ⚠  No approving reviews found
   ✘  Refusing to run CI on potentially unsafe PR
https://github.com/nodejs/node/actions/runs/23272564448

@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

anonrig
anonrig previously approved these changes Mar 18, 2026
@anonrig anonrig added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci-failed An error occurred while starting CI via request-ci label, and manual interventon is needed. labels Mar 18, 2026
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Mar 18, 2026
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@cjihrig
Copy link
Copy Markdown
Contributor Author

cjihrig commented Mar 18, 2026

@anonrig I cancelled that CI run to save resources. I started https://ci.nodejs.org/job/node-test-pull-request/71877/ manually, and it's currently running.

@jasnell jasnell dismissed anonrig’s stale review March 19, 2026 00:26

given that this is still draft and @cjihrig indicated it's not ready for review, a sign off is not yet appropriate.

mcollina
mcollina previously approved these changes Mar 19, 2026
Copy link
Copy Markdown
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina mcollina added request-ci Add this label to start a Jenkins CI on a PR. and removed request-ci Add this label to start a Jenkins CI on a PR. labels Mar 19, 2026
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@jasnell jasnell dismissed mcollina’s stale review March 19, 2026 03:40

given that this is still draft and @cjihrig indicated it's not ready for review, a sign off is not yet appropriate.

@jasnell
Copy link
Copy Markdown
Member

jasnell commented Mar 19, 2026

@cjihrig ... definitely interested in seeing ffi land. I was hoping @bengl's prior efforts would make progress. Once you feel this is ready to go, I'll be happy to review.

@cjihrig cjihrig marked this pull request as ready for review April 1, 2026 14:41
Copy link
Copy Markdown
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina
Copy link
Copy Markdown
Member

mcollina commented Apr 1, 2026

@cjihrig @ShogunPanda this now conflicts, can you rebase?

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.69%. Comparing base (726b220) to head (5a69e55).
⚠️ Report is 17 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #62072      +/-   ##
==========================================
- Coverage   89.81%   89.69%   -0.13%     
==========================================
  Files         699      706       +7     
  Lines      216331   218043    +1712     
  Branches    41355    41726     +371     
==========================================
+ Hits       194294   195565    +1271     
- Misses      14156    14411     +255     
- Partials     7881     8067     +186     
Files with missing lines Coverage Δ
lib/ffi.js 95.85% <ø> (ø)
lib/internal/bootstrap/realm.js 96.21% <ø> (+<0.01%) ⬆️
lib/internal/process/permission.js 100.00% <ø> (ø)
lib/internal/process/pre_execution.js 98.63% <ø> (+1.40%) ⬆️
src/env.cc 85.61% <ø> (+0.50%) ⬆️
src/ffi/data.cc 78.77% <ø> (ø)
src/ffi/types.cc 59.67% <ø> (ø)
src/node_binding.cc 82.74% <ø> (ø)
src/node_builtins.cc 76.28% <ø> (+0.04%) ⬆️
src/node_ffi.cc 69.07% <ø> (ø)
... and 8 more

... and 32 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@ShogunPanda
Copy link
Copy Markdown
Contributor

@justjake I see your objection but I'd like to land this since there are already a lot of commits. We can eventually follow up your proposal in a future PR, what do you think?

Copy link
Copy Markdown
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina mcollina added commit-queue Add this label to land a pull request using GitHub Actions. and removed commit-queue Add this label to land a pull request using GitHub Actions. labels Apr 13, 2026
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Apr 13, 2026
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

@ShogunPanda ShogunPanda added the commit-queue Add this label to land a pull request using GitHub Actions. label Apr 14, 2026
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Apr 14, 2026
@ShogunPanda ShogunPanda added commit-queue Add this label to land a pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. labels Apr 14, 2026
@nodejs-github-bot nodejs-github-bot added the commit-queue-failed An error occurred while landing this pull request using GitHub Actions. label Apr 14, 2026
@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

Commit Queue failed
- Loading data for nodejs/node/pull/62072
✔  Done loading data for nodejs/node/pull/62072
----------------------------------- PR info ------------------------------------
Title      lib,src,test,doc: add node:ffi module (#62072)
Author     Colin Ihrig <cjihrig@gmail.com> (@cjihrig)
Branch     cjihrig:ffi -> nodejs:main
Labels     build, needs-ci, dependencies
Commits    23
 - lib,src,test,doc: add node:ffi module
 - ffi: Refactor to simpler API.
 - fix: Various improvements.
 - fix the build
 - fix lint
 - remove test fixture readme
 - remove extra test file
 - tests
 - fix: Various improvements. (#6)
 - test: fixed build on Windows (#7)
 - src: formatted files
 - fixup
 - fixup
 - test: fixed failures
 - src: formatted files
 - src: fix arguments handling
 - test: formatted files
 - test: fix test library
 - deps: fix build on Windows
 - src: add suffix and types
 - fix: fix build
 - fix: fix build
 - fix: fix aix build
Committers 1
 - Paolo Insogna <paolo@cowtech.it>
PR-URL: https://github.com/nodejs/node/pull/62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
--------------------------------------------------------------------------------
   ℹ  This PR was created on Mon, 02 Mar 2026 14:43:52 GMT
   ✔  Approvals: 1
   ✔  - Matteo Collina (@mcollina) (TSC): https://github.com/nodejs/node/pull/62072#pullrequestreview-4097491528
   ✔  Last GitHub CI successful
   ℹ  Last Full PR CI on 2026-04-13T09:13:41Z: https://ci.nodejs.org/job/node-test-pull-request/72665/
- Querying data for job/node-test-pull-request/72665/
✔  Build data downloaded
   ✔  Last Jenkins CI successful
--------------------------------------------------------------------------------
   ✔  No git cherry-pick in progress
   ✔  No git am in progress
   ✔  No git rebase in progress
--------------------------------------------------------------------------------
- Bringing origin/main up to date...
From https://github.com/nodejs/node
 * branch                  main       -> FETCH_HEAD
✔  origin/main is now up-to-date
- Downloading patch for 62072
From https://github.com/nodejs/node
 * branch                  refs/pull/62072/merge -> FETCH_HEAD
✔  Fetched commits as d080801b01cf..5a69e55bc0f8
--------------------------------------------------------------------------------
Auto-merging configure.py
[main a050f9361d] lib,src,test,doc: add node:ffi module
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Feb 25 16:14:20 2026 -0500
 251 files changed, 79178 insertions(+), 12 deletions(-)
 create mode 100644 deps/libffi/ChangeLog.old
 create mode 100644 deps/libffi/LICENSE
 create mode 100644 deps/libffi/LICENSE-BUILDTOOLS
 create mode 100644 deps/libffi/Makefile.am
 create mode 100644 deps/libffi/README.md
 create mode 100644 deps/libffi/acinclude.m4
 create mode 100755 deps/libffi/autogen.sh
 create mode 100644 deps/libffi/config.guess
 create mode 100755 deps/libffi/config.sub
 create mode 100644 deps/libffi/configure.ac
 create mode 100644 deps/libffi/configure.host
 create mode 100644 deps/libffi/doc/Makefile.am
 create mode 100644 deps/libffi/doc/libffi.texi
 create mode 100644 deps/libffi/doc/version.texi
 create mode 100644 deps/libffi/generate-configure-headers.py
 create mode 100755 deps/libffi/generate-darwin-source-and-headers.py
 create mode 100644 deps/libffi/generate-headers.py
 create mode 100644 deps/libffi/include/Makefile.am
 create mode 100644 deps/libffi/include/ffi.h.in
 create mode 100644 deps/libffi/include/ffi_cfi.h
 create mode 100644 deps/libffi/include/ffi_common.h
 create mode 100644 deps/libffi/include/tramp.h
 create mode 100644 deps/libffi/libffi.gyp
 create mode 100644 deps/libffi/libffi.map.in
 create mode 100644 deps/libffi/libffi.pc.in
 create mode 100755 deps/libffi/libtool-ldflags
 create mode 100644 deps/libffi/libtool-version
 create mode 100644 deps/libffi/m4/asmcfi.m4
 create mode 100644 deps/libffi/m4/ax_append_flag.m4
 create mode 100644 deps/libffi/m4/ax_cc_maxopt.m4
 create mode 100644 deps/libffi/m4/ax_cflags_warn_all.m4
 create mode 100644 deps/libffi/m4/ax_check_compile_flag.m4
 create mode 100644 deps/libffi/m4/ax_compiler_vendor.m4
 create mode 100644 deps/libffi/m4/ax_configure_args.m4
 create mode 100644 deps/libffi/m4/ax_enable_builddir.m4
 create mode 100644 deps/libffi/m4/ax_gcc_archflag.m4
 create mode 100644 deps/libffi/m4/ax_gcc_x86_cpuid.m4
 create mode 100644 deps/libffi/m4/ax_prepend_flag.m4
 create mode 100644 deps/libffi/m4/ax_require_defined.m4
 create mode 100644 deps/libffi/make_sunver.pl
 create mode 100644 deps/libffi/man/Makefile.am
 create mode 100644 deps/libffi/man/ffi.3
 create mode 100644 deps/libffi/man/ffi_call.3
 create mode 100644 deps/libffi/man/ffi_prep_cif.3
 create mode 100644 deps/libffi/man/ffi_prep_cif_var.3
 create mode 100644 deps/libffi/msvc_build/aarch64/aarch64_include/ffi.h
 create mode 100644 deps/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h
 create mode 100755 deps/libffi/msvcc.sh
 create mode 100644 deps/libffi/src/aarch64/ffi.c
 create mode 100644 deps/libffi/src/aarch64/ffitarget.h
 create mode 100644 deps/libffi/src/aarch64/internal.h
 create mode 100644 deps/libffi/src/aarch64/sysv.S
 create mode 100644 deps/libffi/src/aarch64/win64_armasm.S
 create mode 100644 deps/libffi/src/alpha/ffi.c
 create mode 100644 deps/libffi/src/alpha/ffitarget.h
 create mode 100644 deps/libffi/src/alpha/internal.h
 create mode 100644 deps/libffi/src/alpha/osf.S
 create mode 100644 deps/libffi/src/arc/arcompact.S
 create mode 100644 deps/libffi/src/arc/ffi.c
 create mode 100644 deps/libffi/src/arc/ffitarget.h
 create mode 100644 deps/libffi/src/arm/ffi.c
 create mode 100644 deps/libffi/src/arm/ffitarget.h
 create mode 100644 deps/libffi/src/arm/internal.h
 create mode 100644 deps/libffi/src/arm/sysv.S
 create mode 100644 deps/libffi/src/arm/sysv_msvc_arm32.S
 create mode 100644 deps/libffi/src/avr32/ffi.c
 create mode 100644 deps/libffi/src/avr32/ffitarget.h
 create mode 100644 deps/libffi/src/avr32/sysv.S
 create mode 100644 deps/libffi/src/bfin/ffi.c
 create mode 100644 deps/libffi/src/bfin/ffitarget.h
 create mode 100644 deps/libffi/src/bfin/sysv.S
 create mode 100644 deps/libffi/src/closures.c
 create mode 100644 deps/libffi/src/cris/ffi.c
 create mode 100644 deps/libffi/src/cris/ffitarget.h
 create mode 100644 deps/libffi/src/cris/sysv.S
 create mode 100644 deps/libffi/src/csky/ffi.c
 create mode 100644 deps/libffi/src/csky/ffitarget.h
 create mode 100644 deps/libffi/src/csky/sysv.S
 create mode 100644 deps/libffi/src/debug.c
 create mode 100644 deps/libffi/src/dlmalloc.c
 create mode 100644 deps/libffi/src/frv/eabi.S
 create mode 100644 deps/libffi/src/frv/ffi.c
 create mode 100644 deps/libffi/src/frv/ffitarget.h
 create mode 100644 deps/libffi/src/ia64/ffi.c
 create mode 100644 deps/libffi/src/ia64/ffitarget.h
 create mode 100644 deps/libffi/src/ia64/ia64_flags.h
 create mode 100644 deps/libffi/src/ia64/unix.S
 create mode 100644 deps/libffi/src/java_raw_api.c
 create mode 100644 deps/libffi/src/kvx/asm.h
 create mode 100644 deps/libffi/src/kvx/ffi.c
 create mode 100644 deps/libffi/src/kvx/ffitarget.h
 create mode 100644 deps/libffi/src/kvx/sysv.S
 create mode 100644 deps/libffi/src/loongarch64/ffi.c
 create mode 100644 deps/libffi/src/loongarch64/ffitarget.h
 create mode 100644 deps/libffi/src/loongarch64/sysv.S
 create mode 100644 deps/libffi/src/m32r/ffi.c
 create mode 100644 deps/libffi/src/m32r/ffitarget.h
 create mode 100644 deps/libffi/src/m32r/sysv.S
 create mode 100644 deps/libffi/src/m68k/ffi.c
 create mode 100644 deps/libffi/src/m68k/ffitarget.h
 create mode 100644 deps/libffi/src/m68k/sysv.S
 create mode 100644 deps/libffi/src/m88k/ffi.c
 create mode 100644 deps/libffi/src/m88k/ffitarget.h
 create mode 100644 deps/libffi/src/m88k/obsd.S
 create mode 100644 deps/libffi/src/metag/ffi.c
 create mode 100644 deps/libffi/src/metag/ffitarget.h
 create mode 100644 deps/libffi/src/metag/sysv.S
 create mode 100644 deps/libffi/src/microblaze/ffi.c
 create mode 100644 deps/libffi/src/microblaze/ffitarget.h
 create mode 100644 deps/libffi/src/microblaze/sysv.S
 create mode 100644 deps/libffi/src/mips/ffi.c
 create mode 100644 deps/libffi/src/mips/ffitarget.h
 create mode 100644 deps/libffi/src/mips/n32.S
 create mode 100644 deps/libffi/src/mips/o32.S
 create mode 100644 deps/libffi/src/moxie/eabi.S
 create mode 100644 deps/libffi/src/moxie/ffi.c
 create mode 100644 deps/libffi/src/moxie/ffitarget.h
 create mode 100644 deps/libffi/src/or1k/ffi.c
 create mode 100644 deps/libffi/src/or1k/ffitarget.h
 create mode 100644 deps/libffi/src/or1k/sysv.S
 create mode 100644 deps/libffi/src/pa/ffi.c
 create mode 100644 deps/libffi/src/pa/ffi64.c
 create mode 100644 deps/libffi/src/pa/ffitarget.h
 create mode 100644 deps/libffi/src/pa/hpux32.S
 create mode 100644 deps/libffi/src/pa/hpux64.S
 create mode 100644 deps/libffi/src/pa/linux.S
 create mode 100644 deps/libffi/src/powerpc/aix.S
 create mode 100644 deps/libffi/src/powerpc/aix_closure.S
 create mode 100644 deps/libffi/src/powerpc/asm.h
 create mode 100644 deps/libffi/src/powerpc/darwin.S
 create mode 100644 deps/libffi/src/powerpc/darwin_closure.S
 create mode 100644 deps/libffi/src/powerpc/ffi.c
 create mode 100644 deps/libffi/src/powerpc/ffi_darwin.c
 create mode 100644 deps/libffi/src/powerpc/ffi_linux64.c
 create mode 100644 deps/libffi/src/powerpc/ffi_powerpc.h
 create mode 100644 deps/libffi/src/powerpc/ffi_sysv.c
 create mode 100644 deps/libffi/src/powerpc/ffitarget.h
 create mode 100644 deps/libffi/src/powerpc/internal.h
 create mode 100644 deps/libffi/src/powerpc/linux64.S
 create mode 100644 deps/libffi/src/powerpc/linux64_closure.S
 create mode 100644 deps/libffi/src/powerpc/ppc_closure.S
 create mode 100644 deps/libffi/src/powerpc/sysv.S
 create mode 100644 deps/libffi/src/powerpc/t-aix
 create mode 100644 deps/libffi/src/prep_cif.c
 create mode 100644 deps/libffi/src/raw_api.c
 create mode 100644 deps/libffi/src/riscv/ffi.c
 create mode 100644 deps/libffi/src/riscv/ffitarget.h
 create mode 100644 deps/libffi/src/riscv/sysv.S
 create mode 100644 deps/libffi/src/s390/ffi.c
 create mode 100644 deps/libffi/src/s390/ffitarget.h
 create mode 100644 deps/libffi/src/s390/internal.h
 create mode 100644 deps/libffi/src/s390/sysv.S
 create mode 100644 deps/libffi/src/sh/ffi.c
 create mode 100644 deps/libffi/src/sh/ffitarget.h
 create mode 100644 deps/libffi/src/sh/sysv.S
 create mode 100644 deps/libffi/src/sh64/ffi.c
 create mode 100644 deps/libffi/src/sh64/ffitarget.h
 create mode 100644 deps/libffi/src/sh64/sysv.S
 create mode 100644 deps/libffi/src/sparc/ffi.c
 create mode 100644 deps/libffi/src/sparc/ffi64.c
 create mode 100644 deps/libffi/src/sparc/ffitarget.h
 create mode 100644 deps/libffi/src/sparc/internal.h
 create mode 100644 deps/libffi/src/sparc/v8.S
 create mode 100644 deps/libffi/src/sparc/v9.S
 create mode 100644 deps/libffi/src/tile/ffi.c
 create mode 100644 deps/libffi/src/tile/ffitarget.h
 create mode 100644 deps/libffi/src/tile/tile.S
 create mode 100644 deps/libffi/src/tramp.c
 create mode 100644 deps/libffi/src/types.c
 create mode 100644 deps/libffi/src/vax/elfbsd.S
 create mode 100644 deps/libffi/src/vax/ffi.c
 create mode 100644 deps/libffi/src/vax/ffitarget.h
 create mode 100644 deps/libffi/src/wasm/ffi.c
 create mode 100644 deps/libffi/src/wasm/ffitarget.h
 create mode 100644 deps/libffi/src/x86/asmnames.h
 create mode 100644 deps/libffi/src/x86/ffi.c
 create mode 100644 deps/libffi/src/x86/ffi64.c
 create mode 100644 deps/libffi/src/x86/ffitarget.h
 create mode 100644 deps/libffi/src/x86/ffiw64.c
 create mode 100644 deps/libffi/src/x86/internal.h
 create mode 100644 deps/libffi/src/x86/internal64.h
 create mode 100644 deps/libffi/src/x86/sysv.S
 create mode 100644 deps/libffi/src/x86/sysv_intel.S
 create mode 100644 deps/libffi/src/x86/unix64.S
 create mode 100644 deps/libffi/src/x86/win64.S
 create mode 100644 deps/libffi/src/x86/win64_intel.S
 create mode 100644 deps/libffi/src/xtensa/ffi.c
 create mode 100644 deps/libffi/src/xtensa/ffitarget.h
 create mode 100644 deps/libffi/src/xtensa/sysv.S
 create mode 100644 deps/libffi/stamp-h.in
 create mode 100644 doc/api/ffi.md
 create mode 100644 lib/ffi.js
 create mode 100644 src/ffi/dynamic_library.cc
 create mode 100644 src/ffi/node_ffi.cc
 create mode 100644 src/ffi/node_ffi.h
 create mode 100644 src/ffi/pointer_object.cc
 create mode 100644 src/ffi/types.cc
 create mode 100644 src/ffi/unsafe_callback.cc
 create mode 100644 src/ffi/unsafe_fn_pointer.cc
 create mode 100644 src/ffi/unsafe_pointer.cc
 create mode 100644 src/ffi/unsafe_pointer_view.cc
 create mode 100644 src/permission/ffi_permission.cc
 create mode 100644 src/permission/ffi_permission.h
 create mode 100644 test/ffi/.gitignore
 create mode 100644 test/ffi/ffi.status
 create mode 100644 test/ffi/fixture_library/README.md
 create mode 100644 test/ffi/fixture_library/binding.gyp
 create mode 100644 test/ffi/fixture_library/ffi_test_library.c
 create mode 100644 test/ffi/test-ffi-call.js
 create mode 100644 test/ffi/test-ffi-callback.js
 create mode 100644 test/ffi/test-ffi-calls.js
 create mode 100644 test/ffi/test-ffi-dynamic-library.js
 create mode 100644 test/ffi/test-ffi-module.js
 create mode 100644 test/ffi/test-ffi-permissions.js
 create mode 100644 test/ffi/test-ffi-struct-basic.js
 create mode 100644 test/ffi/test-ffi-struct-complex.js
 create mode 100644 test/ffi/test-ffi-struct-types.js
 create mode 100644 test/ffi/test-ffi-unsafe-fn-pointer.js
 create mode 100644 test/ffi/test-ffi-unsafe-pointer-view.js
 create mode 100644 test/ffi/test-ffi-unsafe-pointer.js
 create mode 100644 test/ffi/testcfg.py
 create mode 100644 test/parallel/test-permission-allow-ffi-cli.js
Auto-merging configure.py
[main cb77eaa7f4] ffi: Refactor to simpler API.
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Mar 12 11:28:00 2026 +0100
 47 files changed, 3764 insertions(+), 5225 deletions(-)
 create mode 100644 src/ffi/data.cc
 delete mode 100644 src/ffi/dynamic_library.cc
 delete mode 100644 src/ffi/node_ffi.cc
 delete mode 100644 src/ffi/node_ffi.h
 delete mode 100644 src/ffi/pointer_object.cc
 delete mode 100644 src/ffi/unsafe_callback.cc
 delete mode 100644 src/ffi/unsafe_fn_pointer.cc
 delete mode 100644 src/ffi/unsafe_pointer.cc
 delete mode 100644 src/ffi/unsafe_pointer_view.cc
 create mode 100644 src/node_ffi.cc
 create mode 100644 src/node_ffi.h
 create mode 100644 test/ffi/ffi-test-common.js
 create mode 100644 test/ffi/fixture_library/ffi_test_library.def
 delete mode 100644 test/ffi/test-ffi-call.js
 delete mode 100644 test/ffi/test-ffi-callback.js
 create mode 100644 test/ffi/test-ffi-memory.js
 delete mode 100644 test/ffi/test-ffi-struct-basic.js
 delete mode 100644 test/ffi/test-ffi-struct-complex.js
 delete mode 100644 test/ffi/test-ffi-struct-types.js
 delete mode 100644 test/ffi/test-ffi-unsafe-fn-pointer.js
 delete mode 100644 test/ffi/test-ffi-unsafe-pointer-view.js
 delete mode 100644 test/ffi/test-ffi-unsafe-pointer.js
Auto-merging configure.py
[main a5167aae12] fix: Various improvements.
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Tue Mar 17 13:32:46 2026 +0100
 32 files changed, 502 insertions(+), 95 deletions(-)
 create mode 100644 test/parallel/test-ffi-missing-build.js
 create mode 100755 tools/dep_updaters/update-libffi.sh
[main 76d1218124] fix the build
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Mar 18 21:05:43 2026 -0400
 1 file changed, 8 insertions(+), 4 deletions(-)
[main f6870739f5] fix lint
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Mar 18 21:26:00 2026 -0400
 14 files changed, 356 insertions(+), 376 deletions(-)
[main bd7fe57d59] remove test fixture readme
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Mar 18 21:52:43 2026 -0400
 1 file changed, 42 deletions(-)
 delete mode 100644 test/ffi/fixture_library/README.md
[main 76fd5a0566] remove extra test file
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Mar 18 21:54:48 2026 -0400
 1 file changed, 43 deletions(-)
 delete mode 100644 test/ffi/fixture_library/ffi_test_library.def
[main 9908960f9b] tests
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Mar 18 22:47:54 2026 -0400
 7 files changed, 369 insertions(+), 355 deletions(-)
 create mode 100644 test/ffi/test-ffi-weakref-calls.js
Auto-merging configure.py
[main 832a1e5674] fix: Various improvements. (#6)
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Wed Mar 25 22:29:38 2026 +0100
 39 files changed, 1726 insertions(+), 821 deletions(-)
 create mode 100644 deps/libffi/preprocess_asm.py
 create mode 100644 src/ffi/data.h
 create mode 100644 src/ffi/types.h
 create mode 100644 test/ffi/test-ffi-permission-allow-cli.js
 create mode 100644 test/ffi/test-ffi-permission-audit.js
 delete mode 100644 test/parallel/test-permission-allow-ffi-cli.js
[main 563a0ba176] test: fixed build on Windows (#7)
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Fri Mar 27 13:19:57 2026 +0100
 3 files changed, 89 insertions(+), 74 deletions(-)
[main 5bfabf72cc] src: formatted files
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Apr 2 20:32:32 2026 +0200
 2 files changed, 6 insertions(+), 9 deletions(-)
[main 7d755b33f5] fixup
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Fri Apr 3 08:21:10 2026 +0200
 5 files changed, 127 insertions(+), 72 deletions(-)
[main 411a991d63] fixup
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Fri Apr 3 09:13:07 2026 +0200
 1 file changed, 23 insertions(+), 17 deletions(-)
[main 5a8cb62053] test: fixed failures
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Tue Apr 7 13:16:52 2026 +0200
 2 files changed, 12 insertions(+), 9 deletions(-)
[main 7cdfdff8e2] src: formatted files
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Tue Apr 7 14:15:43 2026 +0200
 1 file changed, 1 deletion(-)
[main 6597fce628] src: fix arguments handling
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Apr 9 11:19:05 2026 +0200
 2 files changed, 31 insertions(+), 15 deletions(-)
[main 0495d535f5] test: formatted files
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Apr 9 11:48:29 2026 +0200
 1 file changed, 7 insertions(+), 7 deletions(-)
[main b895e0309f] test: fix test library
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Apr 9 13:08:21 2026 +0200
 1 file changed, 12 insertions(+), 7 deletions(-)
[main da840f0a40] deps: fix build on Windows
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Thu Apr 9 17:11:41 2026 +0200
 1 file changed, 34 insertions(+), 1 deletion(-)
[main 8d936bbc81] src: add suffix and types
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Sun Apr 12 15:34:00 2026 +0200
 5 files changed, 108 insertions(+), 1 deletion(-)
[main a667698b52] fix: fix build
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Mon Apr 13 06:18:30 2026 +0200
 1 file changed, 7 insertions(+), 1 deletion(-)
[main 368020b71f] fix: fix build
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Mon Apr 13 06:58:53 2026 +0200
 2 files changed, 51 insertions(+), 8 deletions(-)
[main b6e07db0a3] fix: fix aix build
 Author: Paolo Insogna <paolo@cowtech.it>
 Date: Mon Apr 13 08:50:02 2026 +0200
 1 file changed, 4 insertions(+), 7 deletions(-)
   ✔  Patches applied
There are 23 commits in the PR. Attempting autorebase.
(node:387) [DEP0190] DeprecationWarning: Passing args to a child process with shell option true can lead to security vulnerabilities, as the arguments are not escaped, only concatenated.
(Use `node --trace-deprecation ...` to show where the warning was created)
Rebasing (2/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: https://github.com/nodejs/node/pull/62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
--------------------------------------------------------------------------------
[detached HEAD 648f0af1e8] PR-URL: https://github.com/nodejs/node/pull/62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
 Author: cjihrig <cjihrig@gmail.com>
 Date: Wed Feb 25 16:14:20 2026 -0500
 251 files changed, 79178 insertions(+), 12 deletions(-)
 create mode 100644 deps/libffi/ChangeLog.old
 create mode 100644 deps/libffi/LICENSE
 create mode 100644 deps/libffi/LICENSE-BUILDTOOLS
 create mode 100644 deps/libffi/Makefile.am
 create mode 100644 deps/libffi/README.md
 create mode 100644 deps/libffi/acinclude.m4
 create mode 100755 deps/libffi/autogen.sh
 create mode 100644 deps/libffi/config.guess
 create mode 100755 deps/libffi/config.sub
 create mode 100644 deps/libffi/configure.ac
 create mode 100644 deps/libffi/configure.host
 create mode 100644 deps/libffi/doc/Makefile.am
 create mode 100644 deps/libffi/doc/libffi.texi
 create mode 100644 deps/libffi/doc/version.texi
 create mode 100644 deps/libffi/generate-configure-headers.py
 create mode 100755 deps/libffi/generate-darwin-source-and-headers.py
 create mode 100644 deps/libffi/generate-headers.py
 create mode 100644 deps/libffi/include/Makefile.am
 create mode 100644 deps/libffi/include/ffi.h.in
 create mode 100644 deps/libffi/include/ffi_cfi.h
 create mode 100644 deps/libffi/include/ffi_common.h
 create mode 100644 deps/libffi/include/tramp.h
 create mode 100644 deps/libffi/libffi.gyp
 create mode 100644 deps/libffi/libffi.map.in
 create mode 100644 deps/libffi/libffi.pc.in
 create mode 100755 deps/libffi/libtool-ldflags
 create mode 100644 deps/libffi/libtool-version
 create mode 100644 deps/libffi/m4/asmcfi.m4
 create mode 100644 deps/libffi/m4/ax_append_flag.m4
 create mode 100644 deps/libffi/m4/ax_cc_maxopt.m4
 create mode 100644 deps/libffi/m4/ax_cflags_warn_all.m4
 create mode 100644 deps/libffi/m4/ax_check_compile_flag.m4
 create mode 100644 deps/libffi/m4/ax_compiler_vendor.m4
 create mode 100644 deps/libffi/m4/ax_configure_args.m4
 create mode 100644 deps/libffi/m4/ax_enable_builddir.m4
 create mode 100644 deps/libffi/m4/ax_gcc_archflag.m4
 create mode 100644 deps/libffi/m4/ax_gcc_x86_cpuid.m4
 create mode 100644 deps/libffi/m4/ax_prepend_flag.m4
 create mode 100644 deps/libffi/m4/ax_require_defined.m4
 create mode 100644 deps/libffi/make_sunver.pl
 create mode 100644 deps/libffi/man/Makefile.am
 create mode 100644 deps/libffi/man/ffi.3
 create mode 100644 deps/libffi/man/ffi_call.3
 create mode 100644 deps/libffi/man/ffi_prep_cif.3
 create mode 100644 deps/libffi/man/ffi_prep_cif_var.3
 create mode 100644 deps/libffi/msvc_build/aarch64/aarch64_include/ffi.h
 create mode 100644 deps/libffi/msvc_build/aarch64/aarch64_include/fficonfig.h
 create mode 100755 deps/libffi/msvcc.sh
 create mode 100644 deps/libffi/src/aarch64/ffi.c
 create mode 100644 deps/libffi/src/aarch64/ffitarget.h
 create mode 100644 deps/libffi/src/aarch64/internal.h
 create mode 100644 deps/libffi/src/aarch64/sysv.S
 create mode 100644 deps/libffi/src/aarch64/win64_armasm.S
 create mode 100644 deps/libffi/src/alpha/ffi.c
 create mode 100644 deps/libffi/src/alpha/ffitarget.h
 create mode 100644 deps/libffi/src/alpha/internal.h
 create mode 100644 deps/libffi/src/alpha/osf.S
 create mode 100644 deps/libffi/src/arc/arcompact.S
 create mode 100644 deps/libffi/src/arc/ffi.c
 create mode 100644 deps/libffi/src/arc/ffitarget.h
 create mode 100644 deps/libffi/src/arm/ffi.c
 create mode 100644 deps/libffi/src/arm/ffitarget.h
 create mode 100644 deps/libffi/src/arm/internal.h
 create mode 100644 deps/libffi/src/arm/sysv.S
 create mode 100644 deps/libffi/src/arm/sysv_msvc_arm32.S
 create mode 100644 deps/libffi/src/avr32/ffi.c
 create mode 100644 deps/libffi/src/avr32/ffitarget.h
 create mode 100644 deps/libffi/src/avr32/sysv.S
 create mode 100644 deps/libffi/src/bfin/ffi.c
 create mode 100644 deps/libffi/src/bfin/ffitarget.h
 create mode 100644 deps/libffi/src/bfin/sysv.S
 create mode 100644 deps/libffi/src/closures.c
 create mode 100644 deps/libffi/src/cris/ffi.c
 create mode 100644 deps/libffi/src/cris/ffitarget.h
 create mode 100644 deps/libffi/src/cris/sysv.S
 create mode 100644 deps/libffi/src/csky/ffi.c
 create mode 100644 deps/libffi/src/csky/ffitarget.h
 create mode 100644 deps/libffi/src/csky/sysv.S
 create mode 100644 deps/libffi/src/debug.c
 create mode 100644 deps/libffi/src/dlmalloc.c
 create mode 100644 deps/libffi/src/frv/eabi.S
 create mode 100644 deps/libffi/src/frv/ffi.c
 create mode 100644 deps/libffi/src/frv/ffitarget.h
 create mode 100644 deps/libffi/src/ia64/ffi.c
 create mode 100644 deps/libffi/src/ia64/ffitarget.h
 create mode 100644 deps/libffi/src/ia64/ia64_flags.h
 create mode 100644 deps/libffi/src/ia64/unix.S
 create mode 100644 deps/libffi/src/java_raw_api.c
 create mode 100644 deps/libffi/src/kvx/asm.h
 create mode 100644 deps/libffi/src/kvx/ffi.c
 create mode 100644 deps/libffi/src/kvx/ffitarget.h
 create mode 100644 deps/libffi/src/kvx/sysv.S
 create mode 100644 deps/libffi/src/loongarch64/ffi.c
 create mode 100644 deps/libffi/src/loongarch64/ffitarget.h
 create mode 100644 deps/libffi/src/loongarch64/sysv.S
 create mode 100644 deps/libffi/src/m32r/ffi.c
 create mode 100644 deps/libffi/src/m32r/ffitarget.h
 create mode 100644 deps/libffi/src/m32r/sysv.S
 create mode 100644 deps/libffi/src/m68k/ffi.c
 create mode 100644 deps/libffi/src/m68k/ffitarget.h
 create mode 100644 deps/libffi/src/m68k/sysv.S
 create mode 100644 deps/libffi/src/m88k/ffi.c
 create mode 100644 deps/libffi/src/m88k/ffitarget.h
 create mode 100644 deps/libffi/src/m88k/obsd.S
 create mode 100644 deps/libffi/src/metag/ffi.c
 create mode 100644 deps/libffi/src/metag/ffitarget.h
 create mode 100644 deps/libffi/src/metag/sysv.S
 create mode 100644 deps/libffi/src/microblaze/ffi.c
 create mode 100644 deps/libffi/src/microblaze/ffitarget.h
 create mode 100644 deps/libffi/src/microblaze/sysv.S
 create mode 100644 deps/libffi/src/mips/ffi.c
 create mode 100644 deps/libffi/src/mips/ffitarget.h
 create mode 100644 deps/libffi/src/mips/n32.S
 create mode 100644 deps/libffi/src/mips/o32.S
 create mode 100644 deps/libffi/src/moxie/eabi.S
 create mode 100644 deps/libffi/src/moxie/ffi.c
 create mode 100644 deps/libffi/src/moxie/ffitarget.h
 create mode 100644 deps/libffi/src/or1k/ffi.c
 create mode 100644 deps/libffi/src/or1k/ffitarget.h
 create mode 100644 deps/libffi/src/or1k/sysv.S
 create mode 100644 deps/libffi/src/pa/ffi.c
 create mode 100644 deps/libffi/src/pa/ffi64.c
 create mode 100644 deps/libffi/src/pa/ffitarget.h
 create mode 100644 deps/libffi/src/pa/hpux32.S
 create mode 100644 deps/libffi/src/pa/hpux64.S
 create mode 100644 deps/libffi/src/pa/linux.S
 create mode 100644 deps/libffi/src/powerpc/aix.S
 create mode 100644 deps/libffi/src/powerpc/aix_closure.S
 create mode 100644 deps/libffi/src/powerpc/asm.h
 create mode 100644 deps/libffi/src/powerpc/darwin.S
 create mode 100644 deps/libffi/src/powerpc/darwin_closure.S
 create mode 100644 deps/libffi/src/powerpc/ffi.c
 create mode 100644 deps/libffi/src/powerpc/ffi_darwin.c
 create mode 100644 deps/libffi/src/powerpc/ffi_linux64.c
 create mode 100644 deps/libffi/src/powerpc/ffi_powerpc.h
 create mode 100644 deps/libffi/src/powerpc/ffi_sysv.c
 create mode 100644 deps/libffi/src/powerpc/ffitarget.h
 create mode 100644 deps/libffi/src/powerpc/internal.h
 create mode 100644 deps/libffi/src/powerpc/linux64.S
 create mode 100644 deps/libffi/src/powerpc/linux64_closure.S
 create mode 100644 deps/libffi/src/powerpc/ppc_closure.S
 create mode 100644 deps/libffi/src/powerpc/sysv.S
 create mode 100644 deps/libffi/src/powerpc/t-aix
 create mode 100644 deps/libffi/src/prep_cif.c
 create mode 100644 deps/libffi/src/raw_api.c
 create mode 100644 deps/libffi/src/riscv/ffi.c
 create mode 100644 deps/libffi/src/riscv/ffitarget.h
 create mode 100644 deps/libffi/src/riscv/sysv.S
 create mode 100644 deps/libffi/src/s390/ffi.c
 create mode 100644 deps/libffi/src/s390/ffitarget.h
 create mode 100644 deps/libffi/src/s390/internal.h
 create mode 100644 deps/libffi/src/s390/sysv.S
 create mode 100644 deps/libffi/src/sh/ffi.c
 create mode 100644 deps/libffi/src/sh/ffitarget.h
 create mode 100644 deps/libffi/src/sh/sysv.S
 create mode 100644 deps/libffi/src/sh64/ffi.c
 create mode 100644 deps/libffi/src/sh64/ffitarget.h
 create mode 100644 deps/libffi/src/sh64/sysv.S
 create mode 100644 deps/libffi/src/sparc/ffi.c
 create mode 100644 deps/libffi/src/sparc/ffi64.c
 create mode 100644 deps/libffi/src/sparc/ffitarget.h
 create mode 100644 deps/libffi/src/sparc/internal.h
 create mode 100644 deps/libffi/src/sparc/v8.S
 create mode 100644 deps/libffi/src/sparc/v9.S
 create mode 100644 deps/libffi/src/tile/ffi.c
 create mode 100644 deps/libffi/src/tile/ffitarget.h
 create mode 100644 deps/libffi/src/tile/tile.S
 create mode 100644 deps/libffi/src/tramp.c
 create mode 100644 deps/libffi/src/types.c
 create mode 100644 deps/libffi/src/vax/elfbsd.S
 create mode 100644 deps/libffi/src/vax/ffi.c
 create mode 100644 deps/libffi/src/vax/ffitarget.h
 create mode 100644 deps/libffi/src/wasm/ffi.c
 create mode 100644 deps/libffi/src/wasm/ffitarget.h
 create mode 100644 deps/libffi/src/x86/asmnames.h
 create mode 100644 deps/libffi/src/x86/ffi.c
 create mode 100644 deps/libffi/src/x86/ffi64.c
 create mode 100644 deps/libffi/src/x86/ffitarget.h
 create mode 100644 deps/libffi/src/x86/ffiw64.c
 create mode 100644 deps/libffi/src/x86/internal.h
 create mode 100644 deps/libffi/src/x86/internal64.h
 create mode 100644 deps/libffi/src/x86/sysv.S
 create mode 100644 deps/libffi/src/x86/sysv_intel.S
 create mode 100644 deps/libffi/src/x86/unix64.S
 create mode 100644 deps/libffi/src/x86/win64.S
 create mode 100644 deps/libffi/src/x86/win64_intel.S
 create mode 100644 deps/libffi/src/xtensa/ffi.c
 create mode 100644 deps/libffi/src/xtensa/ffitarget.h
 create mode 100644 deps/libffi/src/xtensa/sysv.S
 create mode 100644 deps/libffi/stamp-h.in
 create mode 100644 doc/api/ffi.md
 create mode 100644 lib/ffi.js
 create mode 100644 src/ffi/dynamic_library.cc
 create mode 100644 src/ffi/node_ffi.cc
 create mode 100644 src/ffi/node_ffi.h
 create mode 100644 src/ffi/pointer_object.cc
 create mode 100644 src/ffi/types.cc
 create mode 100644 src/ffi/unsafe_callback.cc
 create mode 100644 src/ffi/unsafe_fn_pointer.cc
 create mode 100644 src/ffi/unsafe_pointer.cc
 create mode 100644 src/ffi/unsafe_pointer_view.cc
 create mode 100644 src/permission/ffi_permission.cc
 create mode 100644 src/permission/ffi_permission.h
 create mode 100644 test/ffi/.gitignore
 create mode 100644 test/ffi/ffi.status
 create mode 100644 test/ffi/fixture_library/README.md
 create mode 100644 test/ffi/fixture_library/binding.gyp
 create mode 100644 test/ffi/fixture_library/ffi_test_library.c
 create mode 100644 test/ffi/test-ffi-call.js
 create mode 100644 test/ffi/test-ffi-callback.js
 create mode 100644 test/ffi/test-ffi-calls.js
 create mode 100644 test/ffi/test-ffi-dynamic-library.js
 create mode 100644 test/ffi/test-ffi-module.js
 create mode 100644 test/ffi/test-ffi-permissions.js
 create mode 100644 test/ffi/test-ffi-struct-basic.js
 create mode 100644 test/ffi/test-ffi-struct-complex.js
 create mode 100644 test/ffi/test-ffi-struct-types.js
 create mode 100644 test/ffi/test-ffi-unsafe-fn-pointer.js
 create mode 100644 test/ffi/test-ffi-unsafe-pointer-view.js
 create mode 100644 test/ffi/test-ffi-unsafe-pointer.js
 create mode 100644 test/ffi/testcfg.py
 create mode 100644 test/parallel/test-permission-allow-ffi-cli.js
Rebasing (3/46)
Rebasing (4/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
ffi: Refactor to simpler API.

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 37b440a29b] ffi: Refactor to simpler API.
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Mar 12 11:28:00 2026 +0100
47 files changed, 3764 insertions(+), 5225 deletions(-)
create mode 100644 src/ffi/data.cc
delete mode 100644 src/ffi/dynamic_library.cc
delete mode 100644 src/ffi/node_ffi.cc
delete mode 100644 src/ffi/node_ffi.h
delete mode 100644 src/ffi/pointer_object.cc
delete mode 100644 src/ffi/unsafe_callback.cc
delete mode 100644 src/ffi/unsafe_fn_pointer.cc
delete mode 100644 src/ffi/unsafe_pointer.cc
delete mode 100644 src/ffi/unsafe_pointer_view.cc
create mode 100644 src/node_ffi.cc
create mode 100644 src/node_ffi.h
create mode 100644 test/ffi/ffi-test-common.js
create mode 100644 test/ffi/fixture_library/ffi_test_library.def
delete mode 100644 test/ffi/test-ffi-call.js
delete mode 100644 test/ffi/test-ffi-callback.js
create mode 100644 test/ffi/test-ffi-memory.js
delete mode 100644 test/ffi/test-ffi-struct-basic.js
delete mode 100644 test/ffi/test-ffi-struct-complex.js
delete mode 100644 test/ffi/test-ffi-struct-types.js
delete mode 100644 test/ffi/test-ffi-unsafe-fn-pointer.js
delete mode 100644 test/ffi/test-ffi-unsafe-pointer-view.js
delete mode 100644 test/ffi/test-ffi-unsafe-pointer.js
Rebasing (5/46)
Rebasing (6/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fix: Various improvements.

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 915fb9c253] fix: Various improvements.
Author: Paolo Insogna <paolo@cowtech.it>
Date: Tue Mar 17 13:32:46 2026 +0100
32 files changed, 502 insertions(+), 95 deletions(-)
create mode 100644 test/parallel/test-ffi-missing-build.js
create mode 100755 tools/dep_updaters/update-libffi.sh
Rebasing (7/46)
Rebasing (8/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 05d7ca3ea9] PR-URL: #62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Author: cjihrig <cjihrig@gmail.com>
Date: Wed Mar 18 21:05:43 2026 -0400
1 file changed, 8 insertions(+), 4 deletions(-)
Rebasing (9/46)
Rebasing (10/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 8c5700a9ee] PR-URL: #62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Author: cjihrig <cjihrig@gmail.com>
Date: Wed Mar 18 21:26:00 2026 -0400
14 files changed, 356 insertions(+), 376 deletions(-)
Rebasing (11/46)
Rebasing (12/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 556e0ba6af] PR-URL: #62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Author: cjihrig <cjihrig@gmail.com>
Date: Wed Mar 18 21:52:43 2026 -0400
1 file changed, 42 deletions(-)
delete mode 100644 test/ffi/fixture_library/README.md
Rebasing (13/46)
Rebasing (14/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 65e228a25e] PR-URL: #62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Author: cjihrig <cjihrig@gmail.com>
Date: Wed Mar 18 21:54:48 2026 -0400
1 file changed, 43 deletions(-)
delete mode 100644 test/ffi/fixture_library/ffi_test_library.def
Rebasing (15/46)
Rebasing (16/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 97e5f7e8e0] PR-URL: #62072 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Author: cjihrig <cjihrig@gmail.com>
Date: Wed Mar 18 22:47:54 2026 -0400
7 files changed, 369 insertions(+), 355 deletions(-)
create mode 100644 test/ffi/test-ffi-weakref-calls.js
Rebasing (17/46)
Rebasing (18/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fix: Various improvements. (#6)

  • src,deps,test: various improvements

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • deps,test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • deps,test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • deps,test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • deps,test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • doc,lib: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • deps: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>


Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 0f0e4eb73d] fix: Various improvements. (#6)
Author: Paolo Insogna <paolo@cowtech.it>
Date: Wed Mar 25 22:29:38 2026 +0100
39 files changed, 1726 insertions(+), 821 deletions(-)
create mode 100644 deps/libffi/preprocess_asm.py
create mode 100644 src/ffi/data.h
create mode 100644 src/ffi/types.h
create mode 100644 test/ffi/test-ffi-permission-allow-cli.js
create mode 100644 test/ffi/test-ffi-permission-audit.js
delete mode 100644 test/parallel/test-permission-allow-ffi-cli.js
Rebasing (19/46)
Rebasing (20/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
test: fixed build on Windows (#7)

  • test: fixed build on Windows

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • test: fixed build on Windows

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • test: fixed build on Windows

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • test: fixed build on Windows

Signed-off-by: Paolo Insogna <paolo@cowtech.it>

  • test: removed useless file

Signed-off-by: Paolo Insogna <paolo@cowtech.it>


Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 6c996c0789] test: fixed build on Windows (#7)
Author: Paolo Insogna <paolo@cowtech.it>
Date: Fri Mar 27 13:19:57 2026 +0100
3 files changed, 89 insertions(+), 74 deletions(-)
Rebasing (21/46)
Rebasing (22/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
src: formatted files

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD efd1113b66] src: formatted files
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Apr 2 20:32:32 2026 +0200
2 files changed, 6 insertions(+), 9 deletions(-)
Rebasing (23/46)
Rebasing (24/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fixup

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 311fbafe6f] fixup
Author: Paolo Insogna <paolo@cowtech.it>
Date: Fri Apr 3 08:21:10 2026 +0200
5 files changed, 127 insertions(+), 72 deletions(-)
Rebasing (25/46)
Rebasing (26/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fixup

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD ba6afc2f85] fixup
Author: Paolo Insogna <paolo@cowtech.it>
Date: Fri Apr 3 09:13:07 2026 +0200
1 file changed, 23 insertions(+), 17 deletions(-)
Rebasing (27/46)
Rebasing (28/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
test: fixed failures

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 079e758906] test: fixed failures
Author: Paolo Insogna <paolo@cowtech.it>
Date: Tue Apr 7 13:16:52 2026 +0200
2 files changed, 12 insertions(+), 9 deletions(-)
Rebasing (29/46)
Rebasing (30/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
src: formatted files

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD e6b9b3c481] src: formatted files
Author: Paolo Insogna <paolo@cowtech.it>
Date: Tue Apr 7 14:15:43 2026 +0200
1 file changed, 1 deletion(-)
Rebasing (31/46)
Rebasing (32/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
src: fix arguments handling

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 89810eef8a] src: fix arguments handling
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Apr 9 11:19:05 2026 +0200
2 files changed, 31 insertions(+), 15 deletions(-)
Rebasing (33/46)
Rebasing (34/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
test: formatted files

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 23f28b9c26] test: formatted files
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Apr 9 11:48:29 2026 +0200
1 file changed, 7 insertions(+), 7 deletions(-)
Rebasing (35/46)
Rebasing (36/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
test: fix test library

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 1a2f3af71d] test: fix test library
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Apr 9 13:08:21 2026 +0200
1 file changed, 12 insertions(+), 7 deletions(-)
Rebasing (37/46)
Rebasing (38/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
deps: fix build on Windows

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 7569172e99] deps: fix build on Windows
Author: Paolo Insogna <paolo@cowtech.it>
Date: Thu Apr 9 17:11:41 2026 +0200
1 file changed, 34 insertions(+), 1 deletion(-)
Rebasing (39/46)
Rebasing (40/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
src: add suffix and types

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD b476439047] src: add suffix and types
Author: Paolo Insogna <paolo@cowtech.it>
Date: Sun Apr 12 15:34:00 2026 +0200
5 files changed, 108 insertions(+), 1 deletion(-)
Rebasing (41/46)
Rebasing (42/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fix: fix build

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD d010b296af] fix: fix build
Author: Paolo Insogna <paolo@cowtech.it>
Date: Mon Apr 13 06:18:30 2026 +0200
1 file changed, 7 insertions(+), 1 deletion(-)
Rebasing (43/46)
Rebasing (44/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fix: fix build

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD ed396bef73] fix: fix build
Author: Paolo Insogna <paolo@cowtech.it>
Date: Mon Apr 13 06:58:53 2026 +0200
2 files changed, 51 insertions(+), 8 deletions(-)
Rebasing (45/46)
Rebasing (46/46)
Executing: git node land --amend --yes
--------------------------------- New Message ----------------------------------
fix: fix aix build

Signed-off-by: Paolo Insogna <paolo@cowtech.it>
PR-URL: #62072
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>

[detached HEAD 62e42fa7e1] fix: fix aix build
Author: Paolo Insogna <paolo@cowtech.it>
Date: Mon Apr 13 08:50:02 2026 +0200
1 file changed, 4 insertions(+), 7 deletions(-)
Successfully rebased and updated refs/heads/main.

ℹ Add commit-queue-squash label to land the PR as one commit, or commit-queue-rebase to land as separate commits.

https://github.com/nodejs/node/actions/runs/24391540215

ShogunPanda added a commit that referenced this pull request Apr 14, 2026
PR-URL: #62072
Co-authored-by: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Bryan English <bryan@bryanenglish.com>
@ShogunPanda
Copy link
Copy Markdown
Contributor

Landed in d0fa608

Comment thread src/node_ffi.cc
FPrintF(stderr,
"Callbacks can only be invoked on the system thread they were "
"created on\n");
ABORT();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can understand that this may be a bit tricky but I think ideally we shouldn't do a hard abort on the process. If we can find a way to throw a regular exception that would be better.

Comment thread src/node_ffi.cc

if (args.Length() > 0) {
if (!args[0]->IsObject() || args[0]->IsArray()) {
env->ThrowTypeError("Functions signatures must be an object");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should use the THROW_ERR_... so it throws a proper Node.js error.

@RafaelGSS RafaelGSS added semver-minor PRs that contain new features and should be released in the next minor version. notable-change PRs with changes that should be highlighted in changelogs. labels Apr 14, 2026
@github-actions
Copy link
Copy Markdown
Contributor

The notable-change PRs with changes that should be highlighted in changelogs. label has been added by @RafaelGSS.

Please suggest a text for the release notes if you'd like to include a more detailed summary, then proceed to update the PR description with the text or a link to the notable change suggested text comment. Otherwise, the commit will be placed in the Other Notable Changes section.

@tianxiadys
Copy link
Copy Markdown

Why close this PR

@ShogunPanda
Copy link
Copy Markdown
Contributor

@justjake As promised, I addressed your requests in #62762

It would be nice to support ArrayBuffer and ArrayBufferView in addition to the Buffer class to avoid needing to allocate the wrapper, unless there's some particular runtime reason Buffer is required, or automatic Buffer pooling mitigates this.

  • ffi.exportArrayBufferView(arrayBufferView: { buffer: ArrayBufferLike, byteLength: number, byteOffset: number }): bigint

I added both exportArrayBuffer and exportArrayBufferView.

  • ffi.toArrayBuffer(ptr: bigint, byteLength: number, options?: { copy?: boolean }): ArrayBuffer
    • Avoids allocating Buffer if caller wants to interpret as eg const point3d = new Float32Array(ffi.toArrayBuffer(ptr, 12, false))

Sorry, I'm not willing to change the option at the moment since no further expansion is foreseen. Since this is experimental, we can re-review in a future moment.

Also, it feels limiting to not be able to directly get a pointer to a Buffer/ArrayBuffer's memory from JavaScript.

I just added getRawPointer.

@justjake
Copy link
Copy Markdown

@ShogunPanda i was literally about to reply to you saying "of course great to merge your progress & thanks for your hard work"

CleanShot 2026-04-15 at 11 29 02@2x

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Issues and PRs related to build files or the CI. commit-queue Add this label to land a pull request using GitHub Actions. commit-queue-failed An error occurred while landing this pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. dependencies Pull requests that update a dependency file. needs-ci PRs that need a full CI run. notable-change PRs with changes that should be highlighted in changelogs. semver-minor PRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.