commit:     51f6ad158fc3de14df3f87d1242ff950b2189f05
Author:     Alex Xu (Hello71) <alex_y_xu <AT> yahoo <DOT> ca>
AuthorDate: Sat Mar 11 17:27:23 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat May  4 01:32:47 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=51f6ad15

estrip: Don't use splitdebug for .o files

As the process_ar comment explained, object files cannot be splitdebug.

Bug: https://bugs.gentoo.org/787623 ("www-client/firefox[clang]: .gnu_debuglink 
is busted when using LLD")
Fixes: 51579fb34c19 ("prepstrip: add support for elfutils strip")
Signed-off-by: Alex Xu (Hello71) <alex_y_xu <AT> yahoo.ca>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 bin/estrip | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/bin/estrip b/bin/estrip
index 2d9d50922a..640645be63 100755
--- a/bin/estrip
+++ b/bin/estrip
@@ -280,9 +280,6 @@ dedup_elf_debug() {
 
 # Usage: save_elf_debug <src> <inode_debug> [splitdebug]
 save_elf_debug() {
-       ${FEATURES_splitdebug} || return 0
-       ${PORTAGE_RESTRICT_splitdebug} && return 0
-
        debug-print-function "${FUNCNAME}" "$@"
 
        # NOTE: Debug files must be installed in
@@ -390,7 +387,7 @@ process_elf() {
 
        if ${strip_this} ; then
                # See if we can split & strip at the same time
-               if [[ -n ${SPLIT_STRIP_FLAGS} ]] ; then
+               if ${splitdebug} && [[ -n ${SPLIT_STRIP_FLAGS} ]] ; then
                        local shortname="${x##*/}.debug"
                        local 
splitdebug="${tmpdir}/splitdebug/${shortname}.${BASHPID:-$(__bashpid)}"
 
@@ -401,7 +398,9 @@ process_elf() {
                                "${x}"
                        save_elf_debug "${x}" "${inode_link}_debug" 
"${splitdebug}"
                else
-                       save_elf_debug "${x}" "${inode_link}_debug"
+                       if ${splitdebug} ; then
+                               save_elf_debug "${x}" "${inode_link}_debug"
+                       fi
                        ${already_stripped} || ${STRIP} ${strip_flags} "${x}"
                fi
        fi
@@ -431,7 +430,7 @@ process_ar() {
                # There is no concept of splitdebug for objects not yet
                # linked in (only for finally linked ELFs), so we have to
                # retain the debug info in the archive itself.
-               if ! ${FEATURES_splitdebug} || ${PORTAGE_RESTRICT_splitdebug} ; 
then
+               if ! ${splitdebug} ; then
                        ${STRIP} -g "${x}" && ${RANLIB} "${x}"
                fi
        fi
@@ -542,6 +541,12 @@ do
                set +o noglob
        fi
 
+       if ${FEATURES_splitdebug} && ! ${PORTAGE_RESTRICT_splitdebug} ; then
+               splitdebug=true
+       else
+               splitdebug=false
+       fi
+
        # In Prefix we are usually an unprivileged user, so we can't strip
        # unwritable objects.  Make them temporarily writable for the
        # stripping.
@@ -564,6 +569,7 @@ do
                ${f} == *"SB shared object"* ]] ; then
                process_elf "${x}" "${inode_link}" ${PORTAGE_STRIP_FLAGS}
        elif [[ ${f} == *"SB relocatable"* ]] ; then
+               [[ ${x} == *.ko ]] || splitdebug=false
                process_elf "${x}" "${inode_link}" ${SAFE_STRIP_FLAGS}
        fi
 

Reply via email to