There are runtime clients of blocks that need to introspect and invoke a block "by hand". On x86 large structures are passed as an address of a stack local as the first parameter. "Blind" clients of a void* block API, like runtimes, need to know the difference.
This patch gathers the appropriate info and marks the block header for both global and local blocks. The ABI history of the flags is introduced in a comment. The new feature is marked with what amounts as a combo of the reintroduced (1<<29) field and the just introduced block signature marker (1<<30).
Unfortunately in my last patch I forgot to rename the macro that marks the signature field, so the macro name changes from the last patch to name its actual use but nothing else.
A unit test is attached which tests both i386 and x86_64.
clang-1.patch (2.73 KB)
blockstret.c (3.34 KB)