install -m 644 units/mnt-inform.mount %{buildroot}%{_unitdir}
ln -s ../mnt-inform.mount %{buildroot}%{_unitdir}/local-fs.target.wants
+# Pack libbfd for strip
+LIBBFD=$(ldd /usr/bin/strip | sed -ne '/libbfd/s/^[[:space:]]\(libbfd[^[:space:]]\+\).*$/\1/p')
+install -m 0755 -D %{_libdir}/${LIBBFD} %{buildroot}%{initrd_recovery_libexec_dir}/${LIBBFD}
+# Pack strip, od and readelf
+install -m 0755 -D %{_bindir}/strip %{buildroot}%{initrd_recovery_libexec_dir}/strip
+install -m 0755 -D %{_bindir}/od %{buildroot}%{initrd_recovery_libexec_dir}/od
+install -m 0755 -D %{_bindir}/readelf %{buildroot}%{initrd_recovery_libexec_dir}/readelf
+
%posttrans
%{initrd_recovery_libexec_dir}/mkinitrd-recovery.sh
rm -rf %{initrd_recovery_libexec_dir}
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/init
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/mkinitrd-recovery.sh
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/minireboot
+%attr(0775,root,root)%{initrd_recovery_libexec_dir}/strip
+%attr(0775,root,root)%{initrd_recovery_libexec_dir}/od
+%attr(0775,root,root)%{initrd_recovery_libexec_dir}/readelf
+%attr(0775,root,root)%{initrd_recovery_libexec_dir}/libbfd*
%files -n reboot-param-helper
%{_unitdir}/mnt-inform.mount
TR="/bin/tr"
GREP="/bin/grep"
CUT="/bin/cut"
+STRIP="@INITRD_RECOVERY_LIBEXEC_DIR@/strip"
+OD="@INITRD_RECOVERY_LIBEXEC_DIR@/od"
+READELF="@INITRD_RECOVERY_LIBEXEC_DIR@/readelf"
UNAME="/bin/uname"
ARCH=`$UNAME -m`
mkdir_p_parent $dst
"$CP" -f "$src" "$dst"
+
+ # Check first 4 bytes of file for x7fELF magic
+ type=$(echo -e `"$OD" -tx4 -N4 -An $dst`)
+ if [ x"$type" == x"464c457f" ]; then
+ # Check if libpthread is used
+ ("$READELF" -dW "$dst" | grep -e '(NEEDED).*\[libpthread.so' > /dev/null)
+ no_pthread=$?
+ # Exclude low-level libraries: libgcc, libc, librt, ld-linux, libpthread
+ basename "$dst" | grep -Eo '^(libgcc|libc\.so|librt|ld-linux|libpthread)' > /dev/null
+ not_system=$?
+
+ # Strip exception handling section if possible
+ if [ x"$no_pthread" == x"1" ] && [ x"$not_system" == x"1" ]; then
+ # Strip out the exception handling section to reduce binary
+ LD_LIBRARY_PATH="@INITRD_RECOVERY_LIBEXEC_DIR@" \
+ "$STRIP" --strip-unneeded -R .eh_frame -R .eh_frame_hdr "$dst"
+ fi
+ fi
}
#-----------------------------------------------------------------------------