I run one more iteration on a clean system - prelink is somehow altering MMAP/WAIT4 arguments of application. In prelinked version calls look like that:
mmap(<HEX>, 3967488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = <HEX>
in nonprelinked, respective call looks like that:
mmap(NULL, 3967488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = <HEX>
Look at the #1 argument - in prelinked it tries to force specific address, in nonprelinked it takes the default.
Major divergence appears here:
Prelinked (not working): wait4(22031, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL)
Unprelined (working): wait4(31256, 0x7ffde8467074, 0, NULL)
I run one more iteration on a clean system - prelink is somehow altering MMAP/WAIT4 arguments of application. In prelinked version calls look like that:
mmap(<HEX>, 3967488, PROT_READ| PROT_EXEC, MAP_PRIVATE| MAP_DENYWRITE, 3, 0) = <HEX>
in nonprelinked, respective call looks like that:
mmap(NULL, 3967488, PROT_READ| PROT_EXEC, MAP_PRIVATE| MAP_DENYWRITE, 3, 0) = <HEX>
Look at the #1 argument - in prelinked it tries to force specific address, in nonprelinked it takes the default.
Major divergence appears here:
Prelinked (not working):
wait4(22031, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL)
Unprelined (working):
wait4(31256, 0x7ffde8467074, 0, NULL)