A bug fix release for executable rewrites, symbol version definitions, and zsh
completion.
Bug fixes
- Fix overlapping load segment mappings when growing an executable's interpreter
and then rewriting its RPATH. Preserve writable coverage of.dynamicso the
dynamic loader can updateDT_DEBUG, fixing crashes in musl bootstrap GCC and
GNAT (#672). - Reuse the header load segment for further growth and reserve enough file and
virtual address space afterstripremoves padding, preventing later rewrites
from overlapping mappings or corrupting section contents (#672). - Keep the program header table covered by a load segment when repeated
executable rewrites split note segments and grow the table. This fixes invalid
PHDR coverage on x86_64 and an assertion failure on AArch64, including when
patching Grpc.Tools binaries (#675, #679). - Update
DT_VERDEFwhen.gnu.version_dis relocated, preventing the dynamic
loader from following stale symbol version definitions and crashing before
the program starts (#664, #665). - Fix zsh completion of options, OS ABI names, input files, library names, and
colon-separated directory lists (#677).
Verification and remaining limits
Source and generated source-tarball test suites each passed 71 tests with 4 skips.
The 224-input reproduction matrix has no new failures. Exact Grpc.Tools and
OpenCode reproductions pass on x86_64 and AArch64. Isolated dummy-JACK checks
cover Pianoteq audio generation, Audacity recording, and REAPER/Renoise connections.
Bitwig Studio 6.1.4 reaches its license screen, but its main/JACK case remains
unverified. Physical audio hardware and complete downstream package rebuilds
were not tested. Insync's debug-only QtWebEngineProcess.debug still rejects
patching with data offset extends past file end; retain the package workaround
that skips/removes that debug-only object.
Full changelog: 0.19.2...0.19.3