[pacman-dev] [PATCH] Strip LTO symbols from distributed .a/.o files

Allan McRae allan at archlinux.org
Tue Mar 2 00:56:38 UTC 2021


GCC's LTO implementation emits bytecodes into .o files it generates.
These bytecodes are _not_ considered stable from one release of GCC
to the next. There we need to strip the LTO bytecode out of any .o
(and .a) file that gets installed into the package.

Signed-off-by: Allan McRae <allan at archlinux.org>
---

Note, this is an issue whether or not makepkg gets support for building
using with LTO as buildsystems may already enable it.

 scripts/libmakepkg/tidy/strip.sh.in | 13 +++++++++++++
 1 file changed, 13 insertions(+)

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
 }
-- 
2.30.0


More information about the pacman-dev mailing list