[PATCH v3] elf: Escape sed delimiter in Makefile [BZ #25127]

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Fri Dec 22 14:07:05 GMT 2023



On 24/08/23 12:23, Shane Slattery wrote:
> This is v3 of the patch.
>     Now uses subst and shell variables for escaped string.
> 
> This patch proposes a fix for BZ report #25127.
> 
> Like mentioned in BZ #25127, the use of an @ character in glibc's
>     build path breaks two sed commands, as @ is the delimiter used.
>     This subsequently makes the build fail, as the path
>     is then considered part of the regex.
> 
> This commonly ends up affecting Jenkins concurrent builds, due to
>     it's default usage of @ in the workspace path for said builds.
> 
> While a patch was suggested in the original BZ report, this is only
>     a mitigation and doesn't fix the issue, i.e. the same issue would
>     occur with the character #.
> 
> The issue is fixed by escaping possible @'s in the path before
>     the path is used with sed later.
> 
> No regressions or further issues have been observed due to this change.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  elf/Makefile | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/elf/Makefile b/elf/Makefile
> index c00e2ccfc5..a1ff5cf28f 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -1291,8 +1291,9 @@ $(objpfx)librtld.map: $(objpfx)dl-allobjs.os $(common-objpfx)libc_pic.a
>  
>  # For lld, skip preceding addresses and values before matching the archive and the member.
>  $(objpfx)librtld.mk: $(objpfx)librtld.map Makefile
> +	common_objpfx_esc=$(subst @,\\\@,${common-objpfx}) ; \
>  	LC_ALL=C \
> -	sed -n 's@^[0-9a-f ]*$(common-objpfx)\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
> +	sed -n 's@^[0-9a-f ]*'$${common_objpfx_esc}'\([^(]*\)(\([^)]*\.os\)) *.*$$@\1 \2@p' \
>  	    $< | \
>  	while read lib file; do \
>  	  case $$lib in \
> @@ -1300,7 +1301,7 @@ $(objpfx)librtld.mk: $(objpfx)librtld.map Makefile
>  	    LC_ALL=C grep -F -l /$$file \
>  		  $(common-objpfx)stamp.os $(common-objpfx)*/stamp.os | \
>  	    LC_ALL=C \
> -	    sed 's@^$(common-objpfx)\([^/]*\)/stamp\.os$$@rtld-\1'" +=$$file@"\
> +	    sed 's@^'$${common_objpfx_esc}'\([^/]*\)/stamp\.os$$@rtld-\1'" +=$$file@"\
>  	    ;; \
>  	  */*.a) \
>  	    echo rtld-$${lib%%/*} += $$file ;; \


More information about the Libc-alpha mailing list