autoPatchelfHook: Only check PT_INTERP on execs

If the ELF file is not an executable, we do not get a PT_INTERP section,
because after all, it's a *shared* library.

So instead of checking for PT_INTERP (to avoid statically linked
executables) for all ELF files, we add another check to see if it's an
executable and *only* skip it when it is and there's no PT_INTERP.

Signed-off-by: aszlig <aszlig@nix.build>
This commit is contained in:
aszlig 2018-09-25 04:11:33 +02:00
parent 58a97dfb49
commit 9920215d00
No known key found for this signature in database
GPG Key ID: 684089CE67EBB691

View File

@ -155,8 +155,10 @@ autoPatchelf() {
# outside of this function.
while IFS= read -r -d $'\0' file; do
isELF "$file" || continue
# dynamically linked?
readelf -l "$file" | grep -q "^ *INTERP\\>" || continue
if isExecutable "$file"; then
# Skip if the executable is statically linked.
readelf -l "$file" | grep -q "^ *INTERP\\>" || continue
fi
autoPatchelfFile "$file"
done < <(find "$prefix" -type f -print0)
}