← Back to team overview

cross-toolchain-base-devs team mailing list archive

Bug#991897: removal of the any/local-rtlddir-cross.diff patch broke cross builds

 

On 8/6/21 10:44 AM, Aurelien Jarno wrote:
> control: reassign -1 cross-toolchain-base-ports-46
> control: tag -1 + patch
> control: tag -1 - moreinfo
> control: tag -1 - unreproducible
> 
> On 2021-08-05 18:59, Aurelien Jarno wrote:
>> control: tag -1 + moreinfo
>> control: tag -1 + unreproducible
>>
>> On 2021-08-04 19:03, Matthias Klose wrote:
>>> Package: src:glibc
>>> Version: 2.31-13
>>> Severity: serious
>>> Tags: sid bullseye
>>>
>>> when cross-building glibc in the c-t-b packages, the libc.so linker file for
>>> some non-default multilib builds like the sparc build for sparc64 is broken,
>>> leading to build failures for at least all gcc-N cross multilib packages at least.
>>>
>>> $ cat usr/lib32/libc.so
>>> /* GNU ld script
>>>    Use the shared library, but some functions are only in
>>>    the static library, so try that secondarily.  */
>>> OUTPUT_FORMAT(elf32-sparc)
>>> GROUP ( /lib32/libc.so.6 /usr/lib32/libc_nonshared.a  AS_NEEDED (
>>> /lib/ld-linux.so.2 ) )
>>
>> Can you point me where you got that file? It doesn't make sense from the
>> path and the content point of view. Also it's not what I get in the
>> libc6-sparc-sparc64-cross package generated by building
>> cross-toolchain-base-ports in a bullseye chroot. I get instead:
>>
>> | cat /usr/sparc64-linux-gnu/lib32/libc.so  
>> | /* GNU ld script
>> |    Use the shared library, but some functions are only in
>> |    the static library, so try that secondarily.  */
>> | OUTPUT_FORMAT(elf32-sparc)
>> | GROUP ( /usr/sparc64-linux-gnu/lib32/libc.so.6 /usr/sparc64-linux-gnu/lib32/libc_nonshared.a  AS_NEEDED ( /usr/sparc64-linux-gnu/lib/ld-linux.so.2 ) )
>>
>>> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=985617#62 says that the
>>> maintainer is investigating, but apparently this never happened.
>>
>> I *did* investigate, and checked that the changes in the linker files
>> are correct. I have just done that again for both cross-toolchain-base
>> and cross-toolchain-base-ports. Here are the differences I observed on
>> the linker scripts:
> 
> I have ran a build of gcc-10-cross and gcc-10-cross-ports over the
> night. gcc-10-cross just built fine, but gcc-10-cross-ports indeed
> failed to build the sparc64 cross compiler as you reported.
> 
> It appears that the embedded copy of dpkg-cross decided to map the
> multiarch path to /usr/$triplet/lib, leaving lib32, lib64 or libx32 to
> the other multilib builds. This causes an issue for the dynamic linker
> symlink, which usually follows the upstream way of putting a 64-bit
> library in /lib64. At the end, it means the 32-bit dynamic linker
> ends-up in the /usr/triplet/lib directory containing the 64 bit
> libraries. This is not a big deal for most architectures, except when
> the 32- and 64-bit dynamic linkers have the same name like on sparc64.
> 
> The problem seems to have been identified, as one of the two is just
> removed in the debian/rules file, with this associated comment:
> 
> # FIXME: don't remove these here, but find out why these are left in the glibc build
> 
> The problem is that the removed one is the most useful one, breaking the
> assumption that /usr/$triplet/$rtld.so exists. The following patches
> fixes the issue for sparc64:
> 
> 
> diff -Nru cross-toolchain-base-ports-45/debian/rules cross-toolchain-base-ports-46/debian/rules
> --- cross-toolchain-base-ports-45/debian/rules	2021-03-03 15:22:03.000000000 +0100
> +++ cross-toolchain-base-ports-46/debian/rules	2021-08-06 10:31:22.000000000 +0200
> @@ -831,7 +831,7 @@
>  	case "$$pkgname" in \
>  	  libc6-mips32-mips64-cross|libc6-mips32-mips64el-cross) \
>  	    rm -f $$tmp/usr/*/lib/ld.so.1;; \
> -	  libc6-sparc-sparc64-cross) \
> +	  libc6-sparc64-cross) \
>  	    rm -f $$tmp/usr/*/lib/ld-linux.so.2;; \
>  	esac; \
>  	if [ 'lib$(libgcc_base)1-dbg-$${cross_arch}-cross' = $$pkgname ]; then \
> 
> I guess the same fix is needed for gcc-10-cross-mipsen, but I haven't
> been able to build it yet.

this fixes the gcc-N-cross-ports build, but leaves the libc.so with the wrong
path of ld-linux.so.2.  Do you intend to fix that, or should that be worked
around in the c-t-b package?

Matthias