The wrappers directory duplicated meson-scripts, which is what the
README tells projects to copy from. Fold the command -v and missing
submodule changes into meson-scripts and drop the duplicate.
Every repo carries identical configure and make wrappers, and they
have started to drift. Keep the canonical copies here so the bump
can sync them, and use command -v, as minimal images lack which.
-static-libstdc++ is for portable prebuilt binaries. A build against
system libraries should use the shared libstdc++ like any other distro
package, and Fedora does not even ship the static archive by default.
dpkg-buildflags now adds -Wl,--package-metadata=<url-encoded JSON>,
which ConfigParser rejects under its default interpolation. Machine
files are not interpolated, so turn it off.
The SDK's libsoup picked up the host's zstd, leaving
libsoup-3.0.pc requiring a libzstd the SDK doesn't ship. Pin
zstd off, and drop Brotli support which is of no use here.
Downloads from build.frida.re occasionally end early without an error,
which only surfaces when xz hits the missing end-of-stream marker and
fails the whole CI job. Download again, up to three attempts.
The 32-bit-hosted cl runs out of address space on V8's largest
translation units. On a 64-bit OS, pick the x64-hosted toolset that
targets x86 instead; it produces the same code.
Bump GLib, Meson, OpenSSL, ngtcp2, V8, libcxx, TinyCC, QuickJS,
compiler-rt, libsoup, lwIP, libbpf, and minizip-ng to their freshly
synced forks. V8 15.7 drops the shared_ro_heap option, and Meson's
option store API changed, so follow suit in meson_configure.py.
Rust signs no function pointer, so what is linked beside it was
built not to either. That left Gum unable to speak the ABI at all:
its trampolines returned to signed pointers as if they were plain,
and NativePointer#sign did nothing.
Sign, but leave out the type discrimination the kernel's own ABI
uses: a union of differently typed function pointers is how QuickJS
dispatches, and it cannot survive a discriminator per type. What
crosses to the kernel is signed where it crosses, as before.
The generic ARM flags name armv5t, which has neither Thumb-2 nor the
divide a Cortex-A7 has, and nothing took the float out of the ABI.
Clang also wants the eabi environment rather than elf.
The flavor is detected from the driver's own linker, which on macOS
is Apple's, while a bare-metal target links with LLD. LLD refuses
the option, so every link probe fails and each feature behind one
is detected as missing.
Rust's arm64e signs no function pointer and authenticates none, so
what is linked beside it must not either. Sign what crosses to the
kernel where it crosses.
Compile a machine whose config is kernel with the kernel's ABI,
against no system headers, and against the prefix being filled:
picolibc and the compiler-rt builtins are packages here, as they
are for a machine with no operating system at all.
Say the system is none, which is what a Darwin kernel is to
anything built here, and leave out the packages that belong to an
operating system.
Make a link work, since a build system asks its questions by
linking one: no dynamic linker, and the entry point named.
Read the config as a set of tags, thus a bare flavor says in its name
whether its code is position-independent: softfloat becomes
softfloat_nopic, and softfloat_msabi becomes softfloat_pic_msabi. This
also gives x86 a position-independent flavor, which it had no way to
name before.
A bare target is soft-float in each case now, thus remove the newlib
path that the other targets took.
The SDK that would have supplied a compiler is what is being built,
so either a triplet names the toolchain or the tools are named
outright. "No C compiler found" on a box full of them helps nobody.
The one we had suits a Linux module: System V, and not position
independent — the module loader resolves no GOT relocation, and the
kernel code model expects the top 2GB. A Windows kernel follows
another convention, and the agent's text is mapped a second time
into each instrumented process, shared, so that flavor is position
independent instead.
Soft float is what kernel mode means rather than what either
convention says, so both carry it. The convention is a property of
the machine rather than the toolchain, so it rides in the machine
file for whoever generates or inspects the code.
Everything in it is built -fno-pic, so a distribution whose driver
defaults to PIE rejects the resulting R_386_32 relocations outright.
Only 32-bit x86 minds, its addressing having nowhere else to go.
Straight to the linker: clang swallows the driver spelling when it is
gcc doing the link.
Share the soft-float flags both x86 bitnesses need and keep the
64-bit-only ones — the red zone, the kernel code model and the IBT
pair — with x86_64. clang has no i386 bare-metal triple under the
arch's own name, so map it to i686, and skip the hard-float arch
flags, which -mfpmath=sse would contradict.