On Thu, Jan 24, 2019 at 04:38:19PM +0100, Helmut Grohne wrote: > Ultimately, this means that marking binutils-<triplet> M-A:foreign was > wrong. It means that binutils plays the same role as ruby, perl, python > and even make: you can load shared objects into it, but much of the time > you don't. All of the other examples are M-A:allowed, so I guess > binutils-<triplet> needs to become M-A:allowed as well. Given that gcc > Depends on binutils, binutils is M-A:no, and binutils Depends: > binutils-<triplet> without :any, the switch from M-A:foreign to > M-A:allowed should fix this this bug, but at the same time it would > break a fair number of use cases. We specifically have binutils-for-host > to allow using foreign binutils. Likely binutils-for-host should > Depends: binutils-<triplet>:any then. On the flip side, that means that > whenever you need plugins, you cannot use binutils-for-host. > > Now marking anything M-A:allowed is basically irreversible, because > people are going to use :any and all those deps break when removing > M-A:allowed. Therefore we should think hard about whether this is the > right route. I've added debian-cross@l.d.o to Cc to elicit some > feedback.
You can find the patch for binutils attached. binutils-<triplet> will become Multi-Arch: allowed. With this patch applied there are the following ways to depend on binutils: A Source package. A.A You want binutils for the host architecture -> binutils-for-host A.A You want binutils for the build architecture -> binutils-for-build B Binary package of architecture $ARCH. B.A You want binutils targeting the $ARCH. B.A.A Your package contains a plugin to load into binutils -> binutils-$ARCH B.A.B No plugin -> binutils-$ARCH:any B.B You want binutils targeting some executable architecture. B.B.A Your package contains a plugin to load into binutils -> binutils B.B.B No plugin -> binutils-for-build In #895251, I requested that gcc use triplet-prefixed tools to allow coinstalling binutils. It also made the architecture of binutils opaque (which is what this bug is about). After causing repeated problems, the relevant change was finally reverted via #915194. Now gcc uses unprefixed tools again. But it still prefers prefixed tools in /usr/<triplet> (which is what this bug is about). We'll should change that using triplet-prefixed tools explicitly at some point. gcc-8 presently Depends on "binutils". gcc-8-<target> will have to Depends binutils-<target> without a :any. With the patch, binutils will Depends: binutils-<triplet> without :any, so using gcc-8:amd64 with binutils-x86-64-linux-gnu:i386 will no longer be possible. So on the gcc side, the attached patch will work. src:arch-test uses binutils-<triplet>, but it is Architecure: all, so it pretty much doesn't matter whether the dependencies are annotated or not. src:cross-toolchain-base{,-port} conflicts with a number of binutils-<triplet>. That will continue to work. src:gcc-8-cross (and similar packages) Build-Depends binutils-<triplet>. The binutils patch will render these dependencies cross-unsatisfiable. They will need to be annotated :any or switched to binutils-for-host if we want to cross build gcc-8-cross. Matthias, will you handle these? src:linux Build-Depends binutils-<triplet>. The binutils patch will render these dependencies cross-unsatisfiable. They will need to be switched to binutils-for-host or annotated with :any (after checking that it doesn't use plugins). Maintainers Cced. So the attached patch will break cross building of gcc and linux. It won't break any native stuff and it'll fix the bug at hand. Helmut
diff --minimal -Nru binutils-2.31.1/debian/changelog binutils-2.31.1/debian/changelog --- binutils-2.31.1/debian/changelog 2019-02-27 22:30:21.000000000 +0100 +++ binutils-2.31.1/debian/changelog 2019-03-19 14:25:35.000000000 +0100 @@ -1,3 +1,13 @@ +binutils (2.31.1-15.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + + * Demote binutils-<target> from Multi-Arch: foreign to Multi-Arch: allowed. + (Closes: #920286) + * Let binutil-for-host Depends: binutils-<host>:any. + + -- Helmut Grohne <hel...@subdivi.de> Tue, 19 Mar 2019 14:25:35 +0100 + binutils (2.31.1-15) unstable; urgency=high * Fix PR ld/24276, taken from the trunk. Closes: #923246. diff --minimal -Nru binutils-2.31.1/debian/control binutils-2.31.1/debian/control --- binutils-2.31.1/debian/control 2019-02-19 13:39:31.000000000 +0100 +++ binutils-2.31.1/debian/control 2019-03-19 14:25:22.000000000 +0100 @@ -34,7 +34,7 @@ Package: binutils-for-host Architecture: any -Depends: ${binutils:native} (>= ${binutils:minver}), +Depends: ${binutils:native}:any (>= ${binutils:minver}), binutils-common (= ${binary:Version}), Multi-Arch: same Description: GNU assembler, linker and binary utilities for the host architecture @@ -192,7 +192,7 @@ Package: binutils-x86-64-linux-gnu Priority: optional Architecture: amd64 arm64 i386 ppc64el x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -218,7 +218,7 @@ Package: binutils-i686-linux-gnu Priority: optional Architecture: i386 amd64 arm64 ppc64el x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -244,7 +244,7 @@ Package: binutils-aarch64-linux-gnu Priority: optional Architecture: arm64 amd64 i386 x32 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -270,7 +270,7 @@ Package: binutils-arm-linux-gnueabihf Priority: optional Architecture: armhf amd64 i386 x32 arm64 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -296,7 +296,7 @@ Package: binutils-arm-linux-gnueabi Priority: optional Architecture: armel amd64 i386 x32 arm64 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -322,7 +322,7 @@ Package: binutils-mips-linux-gnu Priority: optional Architecture: mips amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -348,7 +348,7 @@ Package: binutils-mipsel-linux-gnu Priority: optional Architecture: mipsel amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -374,7 +374,7 @@ Package: binutils-mips64el-linux-gnuabi64 Priority: optional Architecture: mips64el amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -400,7 +400,7 @@ Package: binutils-powerpc64le-linux-gnu Priority: optional Architecture: ppc64el amd64 i386 x32 ppc64 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -426,7 +426,7 @@ Package: binutils-s390x-linux-gnu Priority: optional Architecture: s390x amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -452,7 +452,7 @@ Package: binutils-alpha-linux-gnu Priority: optional Architecture: alpha amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -478,7 +478,7 @@ Package: binutils-hppa-linux-gnu Priority: optional Architecture: hppa amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -504,7 +504,7 @@ Package: binutils-ia64-linux-gnu Priority: optional Architecture: ia64 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -530,7 +530,7 @@ Package: binutils-m68k-linux-gnu Priority: optional Architecture: m68k amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -556,7 +556,7 @@ Package: binutils-mips64-linux-gnuabi64 Priority: optional Architecture: mips64 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -582,7 +582,7 @@ Package: binutils-powerpc-linux-gnu Priority: optional Architecture: powerpc amd64 i386 x32 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -608,7 +608,7 @@ Package: binutils-powerpc-linux-gnuspe Priority: optional Architecture: powerpcspe amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -634,7 +634,7 @@ Package: binutils-powerpc64-linux-gnu Priority: optional Architecture: ppc64 amd64 i386 x32 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -660,7 +660,7 @@ Package: binutils-riscv64-linux-gnu Priority: optional Architecture: riscv64 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -686,7 +686,7 @@ Package: binutils-sh4-linux-gnu Priority: optional Architecture: sh4 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -712,7 +712,7 @@ Package: binutils-sparc64-linux-gnu Priority: optional Architecture: sparc64 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -738,7 +738,7 @@ Package: binutils-x86-64-linux-gnux32 Priority: optional Architecture: x32 amd64 arm64 i386 ppc64el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -764,7 +764,7 @@ Package: binutils-i686-gnu Priority: optional Architecture: hurd-i386 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -790,7 +790,7 @@ Package: binutils-x86-64-kfreebsd-gnu Priority: optional Architecture: kfreebsd-amd64 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -816,7 +816,7 @@ Package: binutils-i686-kfreebsd-gnu Priority: optional Architecture: kfreebsd-i386 amd64 i386 x32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -842,7 +842,7 @@ Package: binutils-mips64-linux-gnuabin32 Priority: optional Architecture: mipsn32 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -868,7 +868,7 @@ Package: binutils-mips64el-linux-gnuabin32 Priority: optional Architecture: mipsn32el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -894,7 +894,7 @@ Package: binutils-mipsisa64r6-linux-gnuabin32 Priority: optional Architecture: mipsn32r6 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -920,7 +920,7 @@ Package: binutils-mipsisa64r6el-linux-gnuabin32 Priority: optional Architecture: mipsn32r6el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -946,7 +946,7 @@ Package: binutils-mipsisa32r6-linux-gnu Priority: optional Architecture: mipsr6 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -972,7 +972,7 @@ Package: binutils-mipsisa32r6el-linux-gnu Priority: optional Architecture: mipsr6el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -998,7 +998,7 @@ Package: binutils-mipsisa64r6-linux-gnuabi64 Priority: optional Architecture: mips64r6 -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) @@ -1024,7 +1024,7 @@ Package: binutils-mipsisa64r6el-linux-gnuabi64 Priority: optional Architecture: mips64r6el -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) diff --minimal -Nru binutils-2.31.1/debian/control.cross.in binutils-2.31.1/debian/control.cross.in --- binutils-2.31.1/debian/control.cross.in 2018-03-08 03:32:41.000000000 +0100 +++ binutils-2.31.1/debian/control.cross.in 2019-03-19 14:24:56.000000000 +0100 @@ -2,7 +2,7 @@ Package: binutils-@target@ Priority: optional Architecture: @host_archs@ -Multi-Arch: foreign +Multi-Arch: allowed Depends: binutils-common (= ${binary:Version}), ${shlibs:Depends}, ${extraDepends} Suggests: binutils-doc (= ${source:Version}) diff --minimal -Nru binutils-2.31.1/debian/control.in binutils-2.31.1/debian/control.in --- binutils-2.31.1/debian/control.in 2019-02-19 13:39:20.000000000 +0100 +++ binutils-2.31.1/debian/control.in 2019-03-19 14:24:39.000000000 +0100 @@ -34,7 +34,7 @@ Package: binutils-for-host Architecture: any -Depends: ${binutils:native} (>= ${binutils:minver}), +Depends: ${binutils:native}:any (>= ${binutils:minver}), binutils-common (= ${binary:Version}), Multi-Arch: same Description: GNU assembler, linker and binary utilities for the host architecture