diff options
Diffstat (limited to 'scripts/libmakepkg')
-rw-r--r-- | scripts/libmakepkg/tidy/strip.sh.in | 13 |
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 } |