Strip LTO symbols from distributed .a/.o files
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@archlinux.org>
This commit is contained in:
parent
4a0891f49d
commit
c118a61f62
1 changed files with 13 additions and 0 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue