The most important field in a function call is often the one the source code did not spell.
A programmer may write:
struct Big make_big(long long seed);The ABI may need a different shape:
make_big(result_storage, seed)That is the claim: the source-level function signature is not the full call packet. It tells the programmer what expression is legal. It does not necessarily tell the binary where the return storage lives, how the callee receives an object pointer, which runtime context arrives first, or whether a thunk has adjusted the receiver before control reaches the final implementation.
The cleanest artifact is a large structure return. In one fixture, the source function returns a record by value:
struct SretRecord make_sret_record(unsigned long long seed,
unsigned long long tag);At the ABI layer, several platforms turn that return value into an incoming storage channel. On Windows x64, the caller-allocated return storage can arrive as the first argument, shifting the visible values right. On System V AMD64, MEMORY-class returns use caller-provided storage in RDI as if it were the first argument. On AArch64, the indirect result location has a dedicated role in x8, so the visible seed and tag can remain in x0 and x1.
Same source shape. Different hidden-field placement.
The pattern does not stop with structure returns. A C++ member function needs a receiver even when the object sits outside the parentheses:
counter.add(5);The callee still needs something like:
Counter_add(object, 5)JNI makes the runtime version explicit: native methods receive JNIEnv * first, then either the object or class, then the ordinary Java parameters.
The boundary is important. Hidden arguments are not hacks, and the source signature is not dishonest. It is faithful at its layer. The mistake is carrying that layer across a real ABI or FFI boundary and assuming the visible parameter list is the complete wire format.
The safer question is not only: what are the parameters?
It is: what are the ABI-visible fields?
Read the full essay on lospino.so: Hidden Arguments Are Everywhere
Original essay published on lospino.so on 2026-06-03. This Substack dispatch is an adapted pointer to the canonical version, not a mirrored copy.

