[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#715038: add mips64(el) mipsn32(el) support to eglibc



On Fri, Apr 25, 2014 at 10:25:55PM +0800, Yunqiang Su wrote:
> On Fri, Apr 25, 2014 at 10:25 PM, Yunqiang Su <wzssyqa@gmail.com> wrote:
> > I refresh this patch with 2.18-4, and
> >
> > let libc6 breaks:
> >
> >           libc6-mips64 [mips64 mips64el],
> >           libc6-mipsn32 [mipsn32 mipsn32el],
> >           libc6-mips32 [mips mipsel],
> >
> >
> > On Thu, Feb 27, 2014 at 9:20 AM, Yunqiang Su <wzssyqa@gmail.com> wrote:
> >> I refresh this patch with 2.18-3
> >>
> >> On Mon, Oct 7, 2013 at 9:50 AM, YunQiang Su <wzssyqa@gmail.com> wrote:
> >>> I refresh the patches with 2.17-93.
> >>> It's time to consider to merge it.
> >>>
> >>> Now we have about 7000 packages build successfully already.
> >>> This architecture may be in debian-ports in near future.

Please find my comments about this patch below.

> [ snip ]

> diff -urN a/debian/rules.d/build.mk b/debian/rules.d/build.mk
> --- a/debian/rules.d/build.mk	2014-03-02 15:01:31.000000000 +0000
> +++ b/debian/rules.d/build.mk	2014-04-25 14:14:27.708058521 +0000
> @@ -233,7 +233,7 @@
>  	# the multiarch ld.so doesn't look at the (non-standard) /lib32, so we
>  	# need path compatibility when biarch and multiarch packages are both
>  	# installed.
> -	case $(call xx,slibdir) in /lib32 | /lib64 | /libx32) \
> +	case $(call xx,slibdir) in /lib32 | /lib64 | /libx32 | /lib) \
>  	  mkdir -p debian/tmp-$(curpass)/etc/ld.so.conf.d; \
>  	  conffile="debian/tmp-$(curpass)/etc/ld.so.conf.d/zz_$(curpass)-biarch-compat.conf"; \
>  	  echo "# Legacy biarch compatibility support" > $$conffile; \

Why do you need this change? This will create a ld.so.conf entry even
for /lib, while ld.so should always be configured to look for /lib and
/lib/$(DEB_HOST_ARCH_MULTIARCH) without even an ld.so.conf entry.
Moreover, with this change such a file would be created for all
architectures, not only mips64.

Please look why ld.so doesn't look to /lib by default.

> diff -urN a/debian/rules.d/build.mk.orig b/debian/rules.d/build.mk.orig
> --- a/debian/rules.d/build.mk.orig	1970-01-01 00:00:00.000000000 +0000
> +++ b/debian/rules.d/build.mk.orig	2014-04-25 14:14:27.708058521 +0000

> [ snip ]

Please don't include such an orig file in your patch.

> [ snip ]

> diff -urN a/debian/rules.d/control.mk.orig b/debian/rules.d/control.mk.orig
> --- a/debian/rules.d/control.mk.orig	1970-01-01 00:00:00.000000000 +0000
> +++ b/debian/rules.d/control.mk.orig	2014-04-25 14:14:27.708058521 +0000

Same here

> [ snip ]

> diff -urN a/debian/rules.d/debhelper.mk b/debian/rules.d/debhelper.mk
> --- a/debian/rules.d/debhelper.mk	2014-03-02 15:01:31.000000000 +0000
> +++ b/debian/rules.d/debhelper.mk	2014-04-25 14:14:27.708058521 +0000
> @@ -223,7 +223,7 @@
>  	    pass="" \
>  	    suffix="" \
>  	    ;; \
> -	  *:/lib32 | *:/lib64 | *:/libx32 | *:/lib/arm-linux-gnueabi*) \
> +	  *:/lib32 | *:/lib64 | *:/libx32 | *:/lib | *:/lib/arm-linux-gnueabi*) \

I guess it's because the multilib o32 version is installed in /lib,
right? But see below.


>  	    templates="libc libc-dev" \
>  	    pass="-alt" \
>  	    suffix="-$(curpass)" \
> @@ -240,6 +240,9 @@
>  	    if [ "$$s" != "$$t" ] ; then \
>  	      cp $$s $$t ; \
>  	    fi ; \
> +		if [ "$$suffix" = "-mips32" ] ; then \
> +		   sed -e '/ld.so.conf.d /etc/d' -i $$t; \
> +	    fi ; \

What is that supposed to do?

>  	    sed -e "s#TMPDIR#debian/tmp-$$curpass#g" -i $$t; \
>  	    sed -e "s#RTLDDIR#$$rtlddir#g" -i $$t; \
>  	    sed -e "s#SLIBDIR#$$slibdir#g" -i $$t; \


> [ snip ]

> diff -urN a/debian/sysdeps/mips64el.mk b/debian/sysdeps/mips64el.mk
> --- a/debian/sysdeps/mips64el.mk	1970-01-01 00:00:00.000000000 +0000
> +++ b/debian/sysdeps/mips64el.mk	2014-04-25 14:14:27.712058556 +0000
> @@ -0,0 +1,54 @@
> +libc_add-ons = ports nptl $(add-ons)
> +libc_rtlddir = /lib64
> +
> +# build 32-bit (n32) alternative library
> +EGLIBC_PASSES += mipsn32
> +DEB_ARCH_REGULAR_PACKAGES += libc6-mipsn32 libc6-dev-mipsn32
> +mipsn32_add-ons = ports nptl $(add-ons)
> +mipsn32_configure_target = mips64el-linux-gnuabin32
> +mipsn32_CC = $(CC) -mabi=n32 -mno-plt
> +mipsn32_CXX = $(CXX) -mabi=n32 -mno-plt
> +libc6-mipsn32_shlib_dep = libc6-mipsn32 (>= $(shlib_dep_ver))
> +mipsn32_rtlddir = /lib32
> +mipsn32_slibdir = /lib32
> +mipsn32_libdir = /usr/lib32
> +mipsn32_extra_config_options := $(extra_config_options) --disable-profile
> +
> +# build 32-bit (o32) alternative library
> +EGLIBC_PASSES += mips32
> +DEB_ARCH_REGULAR_PACKAGES += libc6-mips32 libc6-dev-mips32
> +mips32_add-ons = ports nptl $(add-ons)
> +mips32_configure_target = mipsel-linux-gnu
> +mips32_CC = $(CC) -mabi=32 -mno-plt
> +mips32_CXX = $(CXX) -mabi=32 -mno-plt
> +libc6-mips32_shlib_dep = libc6-mips32 (>= $(shlib_dep_ver))
> +mips32_rtlddir = /lib
> +mips32_slibdir = /lib
> +mips32_libdir = /usr/lib

For what I understand there, the o32 library is installed in /lib, which
might conflict with the system libraries on some aspects. Wouldn't it be
better to install it in for example in /libo32 instead? Of course
rtlddir would stay in /lib to be conform with the ABI.

Note that it is only for the multilib packages, so basically the
toolchain (libc + compiler). mips o32 multiarch packages will of course
be installed in /usr/lib/mips-linux-gnu.

The same is also the case for the other mipsn32/mips64 .mk files.

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net


Reply to: