Strip ELF binaries to reduce size of initrd 80/239880/2 submit/tizen/20200807.075622
authorSlava Barinov <v.barinov@samsung.com>
Thu, 30 Jul 2020 08:22:45 +0000 (11:22 +0300)
committerSlava Barinov <v.barinov@samsung.com>
Mon, 3 Aug 2020 13:56:35 +0000 (16:56 +0300)
Change-Id: Ib3ee6925578a1ea060a4d61156d0fcfd04667c76
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
packaging/initrd-recovery.spec
src/initrd-recovery/mkinitrd-recovery.sh.in

index 3ddc709..f07dd67 100644 (file)
@@ -57,6 +57,14 @@ mkdir -p %{buildroot}%{_unitdir}/local-fs.target.wants
 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 and od
+install -m 0755 -D %{_bindir}/strip %{buildroot}%{initrd_recovery_libexec_dir}/strip
+install -m 0755 -D %{_bindir}/od %{buildroot}%{initrd_recovery_libexec_dir}/od
+
+
 %posttrans
 %{initrd_recovery_libexec_dir}/mkinitrd-recovery.sh
 rm -rf %{initrd_recovery_libexec_dir}
@@ -74,6 +82,9 @@ rm -rf %{_libdir}/initrd-recovery
 %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}/libbfd*
 
 %files -n reboot-param-helper
 %{_unitdir}/mnt-inform.mount
index dc2675c..a916fb3 100755 (executable)
@@ -14,6 +14,8 @@ RM="/bin/rm"
 TR="/bin/tr"
 GREP="/bin/grep"
 CUT="/bin/cut"
+STRIP="@INITRD_RECOVERY_LIBEXEC_DIR@/strip"
+OD="@INITRD_RECOVERY_LIBEXEC_DIR@/od"
 
 UNAME="/bin/uname"
 ARCH=`$UNAME -m`
@@ -131,6 +133,14 @@ do_copy() {
     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
+       # 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
 }
 
 #-----------------------------------------------------------------------------