summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/libmakepkg/tidy/strip.sh.in13
1 files changed, 13 insertions, 0 deletions
diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 720b8eb3..ceb2a108 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -103,6 +103,16 @@ strip_file() {
rm -f "$tempfile"
}
+strip_lto() {
+ local binary=$1;
+
+ local tempfile=$(mktemp "$binary.XXXXXX")
+ if strip -R .gnu.lto_* -R .gnu.debuglto_* -N __gnu_lto_v1 "$binary" -o "$tempfile"; then
+ cat "$tempfile" > "$binary"
+ fi
+ rm -f "$tempfile"
+}
+
tidy_strip() {
if check_option "strip" "y"; then
@@ -121,6 +131,7 @@ tidy_strip() {
local binary strip_flags
find . -type f -perm -u+w -print0 2>/dev/null | while IFS= read -rd '' binary ; do
+ local STRIPLTO=0
case "$(LC_ALL=C readelf -h "$binary" 2>/dev/null)" in
*Type:*'DYN (Shared object file)'*) # Libraries (.so) or Relocatable binaries
strip_flags="$STRIP_SHARED";;
@@ -129,6 +140,7 @@ tidy_strip() {
*Type:*'REL (Relocatable file)'*) # Libraries (.a) or objects
if ar t "$binary" &>/dev/null; then # Libraries (.a)
strip_flags="$STRIP_STATIC"
+ STRIPLTO=1
elif [[ $binary = *'.ko' ]]; then # Kernel module
strip_flags="$STRIP_SHARED"
else
@@ -139,6 +151,7 @@ tidy_strip() {
continue ;;
esac
strip_file "$binary" ${strip_flags}
+ (( STRIPLTO )) && strip_lto "$binary"
done
fi
}