[PATCH cygport 1/2] postinst: Never remove an existing .gnu_debuglink

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Feb 1 19:22:20 GMT 2022


Hi Jon,

On Feb  1 17:25, Jon Turney wrote:
> Be more careful not to remove an existing .gnu_debuglink, even if we
> think this package has no useful debug symbols.
> 
> (Some versions of 'llvm-objdump -l' fail to find line number info even
> though it's there.  Don't break a package which manages it's own debug
> symbols (e.g. cygwin) when that happens.)
> ---
>  lib/src_postinst.cygpart | 28 ++++++++++++++++++----------
>  1 file changed, 18 insertions(+), 10 deletions(-)
> 
> diff --git a/lib/src_postinst.cygpart b/lib/src_postinst.cygpart
> index d8bb226..e29b2cb 100644
> --- a/lib/src_postinst.cygpart
> +++ b/lib/src_postinst.cygpart
> @@ -1051,23 +1051,31 @@ __prepstrip() {
>  
>  			lines=$(${objdump} -d -l "${exe}" 2>/dev/null | sed -ne "s|.*\(/usr/src/debug/${PF}/.*\):[0-9]*$|\1|gp" | sort -u | tee -a ${T}/.dbgsrc.out | wc -l);

Shouldn't lines be computed *after* the new check for .gnu_deb?  After
all, it's still pretty time-consuming and if the .gnu_deb check kicks in
it's never tested...

>  
> -			if (( lines == 0 ))
> +			# we expect --add-gnu-debuglink to fail if a
> +			# .gnu_debuglink section already exists (e.g. binutils,
> +			# which uses hardlinks, or cygwin which creates a custom
> +			# .dbg file), but leave it alone to make sure we don't
> +			# mess it up.
> +			if ${objdump} -h "${exe}" | grep -q '\.gnu_deb'
>  			then
> -				${objcopy} --strip-all "${exe}";
>  				continue;
>  			fi
>  
> -			# --add-gnu-debuglink will fail if .gnu_debuglink section
> -			# already exists, e.g. binutils, which uses hardlinks,
> -			# or cygwin which creates a custom .dbg file
> -			if ! ${objdump} -h "${exe}" | grep -q '\.gnu_deb'
> +			# only create split debuginfo if it's going to contain
> +			# some symbols for which this package has the
> +			# corresponding source files
> +			if (( lines == 0 ))
>  			then
> -				dodir "${dbg%/*}";
> -				${objcopy} --long-section-names enable --add-gnu-debuglink=/dev/null --only-keep-debug "${exe}" "${D}${dbg}";
> -				chmod 0644 "${D}${dbg}";
>  				${objcopy} --strip-all "${exe}";
> -				${objcopy} --long-section-names enable --add-gnu-debuglink="${D}${dbg}" "${exe}" 2>/dev/null;
> +				continue;
>  			fi
> +
> +			dodir "${dbg%/*}";
> +			${objcopy} --long-section-names enable --add-gnu-debuglink=/dev/null --only-keep-debug "${exe}" "${D}${dbg}";
> +			chmod 0644 "${D}${dbg}";
> +			${objcopy} --strip-all "${exe}";
> +			${objcopy} --long-section-names enable --add-gnu-debuglink="${D}${dbg}" "${exe}" 2>/dev/null;
> +
>  		fi
>  	done
>  }
> -- 
> 2.34.1


More information about the Cygwin-apps mailing list