#664257 document Architecture name definitions

Package:
debian-policy
Source:
debian-policy
Submitter:
Matthias Klose
Date:
2022-01-27 18:15:02 UTC
Severity:
normal
Tags:
#664257#5
Date:
2012-03-17 06:03:09 UTC
From:
To:
While we strive to get multiarch ready for squeeze, there is currently nothing
to point to what the multiarch tuples actually mean, neither on the Debian side
nor on some kind of standards side like the FHS or LSB.  This has to be
documented on the Debian side, and better be incorporated into standards like
the FHS or LSB.

The current state is http://wiki.debian.org/Multiarch/Tuples, deriving from
http://wiki.debian.org/Multiarch/TuplesAbandoned. An email to debian-ports
didn't get any feedback. From my point of view such a wiki page should be
self-contained and be usable as a reference for upstream projects.  My current
concern is that upstream builds of GCC and binutils are currently broken and
patch submissions to GCC are on hold until such a definition is available at
least on the Debian side.

#664257#10
Date:
2012-03-17 13:06:16 UTC
From:
To:
Matthias Klose wrote:
many of which are almost certainly wrong):

 i386-linux-gnu: Intel ia32 ABI, ELF, Linux syscalls, glibc 2.x.
	psABI is documented in the System V ABI Intel386 architecture
	processor supplement: http://www.sco.com/developers/devspecs/

 x86_64-linux-gnu: Likewise, but using the AMD64 psABI as documented
	in abi.pdf: http://x86-64.org/documentation/

 sparc-linux-gnu: Likewise, but with the SPARC psABI as documented
	in psABI3rd.pdf: http://www.sparc.com/standards/
	Debian uses the v8plus ABI, but I think that is
	backward-compatible with the old svr4 ABI and doesn't have to be
	part of the definition.

 sparc64-linux-gnu: Likewise, but with the SPARC v9 64-bit psABI.
	Not sure where the reference documentation is for that.

 alpha-linux-gnu: Likewise, but with the Tru64 UNIX Calling Standard
	for Alpha Systems:
http://www.openwatcom.org/ftp/devel/docs/alpha%20calling%20standard.pdf

 m68k-linux-gnu: Likewise, but with the Motorola 68000 Family
	Processor Supplement to the System V ABI which doesn't seem to
	be available oneline. (?)

 arm-linux-gnueabi: ARM's "new" GNU EABI for Linux, soft float, 32 bit.
	Documented at http://wiki.debian.org/ArmEabiPort which refers to
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf
http://www.codesourcery.com/gnu_toolchains/arm/arm_gnu_linux_abi.pdf

 arm-linux-gnueabihf: likewise but with hard float

#664257#15
Date:
2012-03-19 13:53:14 UTC
From:
To:
Jonathan Nieder <jrnieder@gmail.com> writes:

Did you read the wiki page?

If I had to define the multiarch tuple I would say:

The multiarch tuple uniquly defines the calling convention used in a
binary or library. For convenience the first GNU triplet implementing a
calling convention is used where possible or suitably extended to remain
unique.

If there are multiple libraries with different ABIs but with the same
calling convention (e.g. i386, i486, i586, ...) so that they can be
interchanged without binaries needing to be recompiled then they share a
multiarch tuple (i386-linux-gnu).

On the other hand if one ABI has multiple calling conventions (hard/soft
floats on arm) then the multiarch tuples must differ for each calling
convention.

MfG
        Goswin

#664257#20
Date:
2012-03-19 14:34:23 UTC
From:
To:
Goswin von Brederlow wrote:
system library structures, and so on form the ABI for a given tuple
that I was giving examples of not what the upstream gcc folks were
looking for?  I'm not sure I understand the point of your question.

Ah, maybe this is where we are talking past each other: I read this as
a request to pin down and document the definition of each multiarch
tuple.  Perhaps you read it as a request to pin down and document the
definition of the term "multiarch tuple", without necessarily pinning
down the details for each arch.

It would certainly be useful to clarify which is needed before
deciding which to spend time on, so thanks for asking.  Matthias?

Thanks for a useful clarification.
Jonathan

#664257#25
Date:
2012-03-19 14:50:31 UTC
From:
To:
first thing would be the documentation of each tuple currently used by Debian
(including the ones used for the non-default biarch multilibs). If we can come
up with a definition of "multiarch tuple" later that's fine, but given that we
did abandon the earlier approach I'm not sure that's possible.

   Matthias

#664257#30
Date:
2012-03-21 10:26:46 UTC
From:
To:
Matthias Klose <doko@debian.org> writes:

Should we even have biarch in the multiarch world?

The biarch libs and foreign libs installed through multiarch implement
the same ABI/calling convention/functionality. They are basically
interchangable.

To make them truely interchangable the multiarch tuple for biarch libs
should be the same as they would have if they were the native
one. E.g. the i386-linux-gnu for 32bit libs on amd64 [using amd64 as
example from now on]. And they should use the same paths. If there is no
native equivalent for some biarch lib then just make up some multiarch
tuple based on the gnu triplet. The only thing that matters is that it
uniquly identifies the calling convention of the lib.


For Debian (wheezy+x) I would like to see gcc-multilib depend on
libc6:i386 instead of libc6-i386. Or maybe remove multilib support
alltogether and use i486-linux-gnu-gcc (a cross compiler) instead. gcc
-m32 could remain for compatibility but call i486-linux-gnu-gcc.

After all with multiarch having anything build for 32bit in amd64 is
wastefull as it just duplicates the package already in i386. Same with
ppc / ppc64, ...

MfG
        Goswin

#664257#35
Date:
2012-03-21 14:30:26 UTC
From:
To:
multilib libraries should continue to build.

no. adding cross-architecture build dependencies doesn't add to the build
stability. The possibility to call another version or target compiler from the
driver was removed upstream, so I doubt somebody want to re-add it again, and I
won't carry this as a downstream patch (so please get the done in stage1 for 4.8
if you are interested in that).

yes, but you are quick to waste my own time. Patches which do not go upstream do
require an extra maintenance effort as seen for the split build (gcc, gcj, ...)
and the hardening patches.  A lot of multilib packages can be dropped,
but the ones built from gcc and glibc should continue to build.

#664257#40
Date:
2012-03-22 17:14:01 UTC
From:
To:
Matthias Klose <doko@debian.org> writes:

Time will tell.

Nobody is talking about cross-architecture build dependencies.

As said building 32bit stuff on amd64 in the multiarch world is
pointless. The same stuff can just be gotten from i386 directly.

And if no source builds 32bit stuff on amd64 then we do not need
multilib.

And if nothing needs multilib then you do not need to build it and thus
do not need to build-depend on cross-architecture stuff to build it.

Fair enough. Overall it would make no sense that I have to call
armel-linux-gnu-gcc to build for arm but gcc -m32 to build for i386 in a
multiarch world [again example with amd64 as native arch].

Nobody is holding a gun to your head and forcing you to invest any
time. Although I would say dropping multilib would rather safe you a lot
of time and maintainance effort than cost you anything. And since
multilib is enabled in debian/* there is no patch that would need to go
upstream.

Wheezy+x is a long way in the future so lets just wait and see. There is
still a lot of work to do for multiarch before dropping multilib support
from gcc can even be considered. No point arguing about that now.

MfG
        Goswin

#664257#45
Date:
2012-04-11 17:00:35 UTC
From:
To:
I've updated http://wiki.debian.org/Multiarch/Tuples with lots more
information such as links to external ABI specs where I could find
them. I based this on Jonathan Nieder's initial email (thanks!) and
filled in from there. For the non-Linux ports a bit more help would be
useful; I don't know where the Hurd/kFreeBSD ports are specified
externally, if indeed they are at all.

Review/comments/corrections welcome. I hope this helps with what
you're looking for, Matthias?

#664257#50
Date:
2012-04-18 03:16:51 UTC
From:
To:
Hi Matthias,

Steve McIntyre wrote:

I think the Multiarch/Tuples wiki page is now in a sane state, though
as always it could presumably be improved even more.  I think future
required improvements can be tracked separately.  Do you mind if this
bug is closed?

Thanks much,
Jonathan

#664257#55
Date:
2012-04-18 13:51:59 UTC
From:
To:
severity 664257 important
thanks

lowered the severity. IMO it should stay open until multiarch is incorporated
into the FHS and/or the LSB.

  Matthias

#664257#68
Date:
2012-04-20 14:55:09 UTC
From:
To:
Matthias Klose writes ("Bug#664257: multiarch tuples are not documented/defined"):

We do not normally keep a bug open in the Debian BTS that cannot be
fixed in Debian.

What change to the Debian operating system, or to processes,
documents, infrastructure or organisational arrangements, maintained
by the Debian project, is this bug requesting ?

Ian.

#664257#73
Date:
2012-04-20 15:04:42 UTC
From:
To:
I won't fight for this. But it's some kind of Debian responsibility to
address/forward these.  Just filing this with the FHS and/or LSB is likely
getting ignored.  If you have better ways to track progress with this issue,
please tell here.

#664257#78
Date:
2012-04-20 20:35:52 UTC
From:
To:
]] Matthias Klose

JFTR, the FHS and the LSB has a bug tracker, so while filing those might
does not guarantee they'll be fixed, it won't just get dropped on the
floor either.

#664257#83
Date:
2012-04-25 09:19:36 UTC
From:
To:
Ian Jackson <ijackson@chiark.greenend.org.uk> writes:

Aren't the Upstream and Forwarded tags exactly for this situation?

MfG
        Goswin

#664257#88
Date:
2012-04-25 13:46:19 UTC
From:
To:
Goswin von Brederlow writes ("Re: Bug#664257: multiarch tuples are not documented/defined"):
...

No.

Upstream means that we agree that the problem is a bug in Debian, but
that the bug is also in the upstream code - ie, we have inherited it
from upstream.

Forwarded means that we agree that the problem is a bug in Debian; we
think that the best way to fix it is to engage with upstream (and
perhaps take their fix in due course, or perhaps cherry pick it); and
we have therefore notified upstream via their bug tracker.

These overlap.  Normally Forwarded would imply Upstream although I
guess there might be bizarre situations where we would (for example)
ask for upstream help or advice with fixing a bug which manifests only
in Debian.

But neither of them is appropriate if the bug cannot be fixed by any
change in Debian (a package, process, document, or whatever).

Ian.

#664257#93
Date:
2012-04-26 22:58:08 UTC
From:
To:
Ian Jackson <ijackson@chiark.greenend.org.uk> writes:
in Debian.

The bug is also in the upstream code since upstream does not document
the tuples and we inherited that from them.

So the bug should be reported in upstreams BTS and then tagged as
forwarded. Once they add the multiarch tuples we can cherry pick that or
wait for the next release. That all seems to fit perfectly with your
description.

Ok, we also created the problem by inventing the multiarch tuples. But
still, we want upstream to fix this and don't want to diverge from
them.

I don't agree with that. Where does it say that and how is that usefull?

For one thing a bug can always be fixed in Debian wth enough work if it
is fixable at all. It just might not be the right thing to do. For
example the multiarch tuples could be added to Debian policy with the
proper exceptions to the FHS and so on.

MfG
        Goswin

#664257#98
Date:
2012-04-26 23:25:26 UTC
From:
To:
reassign 664257 debian-policy 3.9.3.1
affects 664257 =
tags 664257 = upstream
quit

Goswin von Brederlow wrote:

Fine, reassigning to policy.

Never say I didn't do anything for you... :)

Policy maintainers, see http://wiki.debian.org/Multiarch/Tuples for a
nice table to incorporate.  Ultimately we would like to see this,
along with some more text to make it precise, in some LSB document
such as the FHS.

Thanks for your work, and hope that helps,
Jonathan

#664257#111
Date:
2012-04-26 23:31:33 UTC
From:
To:
Goswin von Brederlow writes ("Re: Bug#664257: multiarch tuples are not documented/defined"):

They are now documented on the wiki, as previously noted in this
thread.

I'm not sure exactly what you mean.  In which upstream package,
shipped by Debian, do you think this documentation should be ?
Are you saying that this bug report should now be regarded as a
request to move the documentation from the wiki to some source
package ?

Should I file a bug in the Debian BTS about the fact that my
employer's Microsoft Exchange server corrupts emails ?

I really don't see the difference, in principle ...

To be honest what I mostly seem to understand from your contributions
to this bug a general but rather unfocused hostility to multiarch.  It
is of course fine for you not to like multiarch.  But the purpose of
the BTS is not to be an outlet for gripes; if it were I have plenty of
my own.  The purpose of the BTS is for us to track specific problems,
the correction of which lies in our power.

But I'm wasting too much of everyone's time arguing about the state of
this now-non-bug.  It would be better just to let it sit and rot in
the BTS so this will be my last message here.

Ian.

#664257#116
Date:
2012-04-27 00:06:02 UTC
From:
To:
Trimming the cc list down to something somewhat less large.

Jonathan Nieder <jrnieder@gmail.com> writes:
for LSB to incorporate something.  If this table should go into Debian
Policy (which at first glance seems like a reasonable idea), then that
will be the criteria for closing the bug.  If people want to bring this
forward with LSB, a bug against debian-policy is not the mechanism for
doing that.

#664257#121
Date:
2012-04-27 06:41:01 UTC
From:
To:
Hi Russ et al,

The patch below documents the Architecture field.  It doesn't cover
architecture tuples yet, but presumably once the description of
architectures is in good shape it would not be hard to add a mapping
from Debian arches to pathnames to section 9.1.5.

Some concerns:

 - what should the normative content be?  It would not be too strange
   to put a firmware file that happens to be a MIPS binary in an
   "Architecture: i386" or "Architecture: all" package, and I think
   it is important to keep permitting that.

   How should this be worded to permit that sort of thing while still
   making it clear that a package installing MIPS DSOs as NSS plugins
   under /usr/lib/nss ought to use architecture: mips or mipsel?

 - what happens if an ABI document is just wrong?  (For example, I
   have no idea whether the m68k psABI is accurate.)

 - the notion of ABI in the multiarch sense is surprisingly
   slippery.  Corrections and clarifications to the definition used
   below could be useful --- the important notion of "which objects
   can share a process image?" didn't manage to find its way in.

 - is it okay to rely so heavily on external resources?  Is it safe to
   assume that the reader can look up link targets when needed, or
   does link text need to be unambiguous?  Would we need to include a
   summary or copy of some of the cited standards in case they
   disappear?

I didn't include the full table from [1], though it might make a nice
appendix.  If the text is working as it ought to, then it should be
possible to infer the omitted values (endianness, sizeof(long), and so
on) from the descriptions below.

My hope is that this documentation might make it easier to explain the
purpose and semantics of the Multiarch: field later.

Improvements welcome, of course.  What do you think?

[1] http://wiki.debian.org/Multiarch/Tuples

 policy.sgml |  192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 191 insertions(+), 1 deletion(-)

diff --git a/policy.sgml b/policy.sgml
index 52dbb26a..1a7ed748 100644
--- a/policy.sgml
+++ b/policy.sgml
@@ -1423,6 +1423,25 @@

       </sect>

+      <sect id="architecture">
+	<heading>Architecture</heading>
+
+	<p>
+	  Every Debian binary package must have an <tt>Architecture</tt>
+	  control field which describes the ABI used by dynamically-linked
+	  binaries and public shared libraries in the package and
+	  packages it interacts with.  For example, packages built to run
+	  on a 32-bit Intel-architecture GNU/Linux system would use an
+	  <tt>Architecture</tt> of <tt>i386</tt>.
+	</p>
+
+	<p>
+	  Unless otherwise specified, dependencies specified using the
+	  <tt>Suggests</tt>, <tt>Depends</tt>, <tt>Recommends</tt>, and
+	  <tt>Pre-Depends</tt> fields refer to packages of the same
+	  architecture.
+	</p>
+      </sect>
     </chapt>


@@ -2945,7 +2964,7 @@ Package: libc6
 	    <list>
 		<item>
 		  A unique single word identifying a Debian machine
-		  architecture as described in <ref id="arch-spec">.
+		  architecture as described in <ref id="arch-short-name">.
 		</item>
 		<item>
 		  An architecture wildcard identifying a set of Debian
@@ -3052,6 +3071,177 @@ Package: libc6
 	    See <ref id="debianrules"> for information on how to get
 	    the architecture for the build process.
 	  </p>
+
+	  <sect2 id="arch-short-name">
+	    <heading>Debian architecture names</heading>
+
+	    <p>
+	      Binary programs and public shared libraries in binary
+	      packages must use the appropriate binary format,
+	      basic operating system interface, and procedure linkage
+	      convention declared in the <tt>Architecture</tt> field.
+	      <footnote>
+		The <tt>Architecture</tt> field indicates the system
+		ABI but not the precise instruction set or system
+		libraries used: the former is generally determined by
+		convention with exceptions noted in the package
+		description or using hwcap paths, and the latter
+		expressed using package dependencies.
+	      </footnote>
+	    </p>
+
+	    <p>
+	      <taglist>
+		<tag><tt>alpha</tt></tag>
+		<item>
+		  GNU/Linux,
+		  <url id="http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V51A_HTML/ARH9MBTE/TITLE.HTM"
+		    name="Tru64 5.1 Calling Standard for Alpha Systems">
+		</item>
+
+		<tag><tt>arm</tt></tag>
+		<item>
+		  GNU/Linux, little endian,
+		  <url id="http://infocenter.arm.com/help/topic/com.arm.doc.dui0041c/BGBGFIDA.html"
+		    name="ARM Procedure Call Standard (obsolete)">
+		</item>
+
+		<tag><tt>armel</tt></tag>
+		<item>
+		  GNU/Linux, little endian,
+		  <url id="https://sourcery.mentor.com/GNUToolchain/kbentry39"
+		    name="ARM GNU/Linux ABI 1.0">
+		</item>
+
+		<tag><tt>armhf</tt></tag>
+		<item>
+		  GNU/Linux, little endian,
+		  <url id="https://sourcery.mentor.com/GNUToolchain/kbentry39"
+		    name="ARM GNU/Linux ABI 1.0">,
+		  except that function calls use VFP Register Arguments
+		  as described in the
+		  <url id="http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042a/IHI0042A_aapcs.pdf"
+		    name="Procedure Call Standard for the ARM Architecture">,
+		  section 6.
+		</item>
+
+		<tag><tt>hppa</tt></tag>
+		<item>
+		  <url id="http://wiki.parisc-linux.org/ToolChain"
+		    name="PA-RISC Linux 32-bit ELF">
+		</item>
+
+		<tag><tt>hurd-i386</tt></tag>
+		<item>
+		  GNU/Hurd,
+		  <url id="http://refspecs.linuxbase.org/elf/abi386-4.pdf"
+		    name="Intel IA-32 psABI">,
+		  16-byte stack alignment
+		</item>
+
+		<tag><tt>kfreebsd-i386</tt></tag>
+		<item>
+		  GNU/kernel of FreeBSD,
+		  <url id="http://refspecs.linuxbase.org/elf/abi386-4.pdf"
+		    name="Intel IA-32 psABI">,
+		  16-byte stack alignment
+		</item>
+
+		<tag><tt>i386</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA32/LSB-Core-IA32/elf-ia32.html"
+		    name="LSB IA32 4.1">,
+		  16-byte stack alignment
+		</item>
+
+		<tag><tt>ia64</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-IA64/LSB-Core-IA64/elf-ia64.html"
+		    name="LSB IA64 4.1">
+		</item>
+
+		<tag><tt>m68k</tt></tag>
+		<item>
+		  GNU/Linux, Motorola 68000 psABI (ISBN 978-0138776633)
+		</item>
+
+		<tag><tt>mips</tt></tag>
+		<item>
+		  GNU/Linux, big endian,
+		  <url id="http://refspecs.linuxbase.org/elf/mipsabi.pdf"
+		    name="MIPS o32 ABI">
+		</item>
+
+		<tag><tt>mipsel</tt></tag>
+		<item>
+		  GNU/Linux, little endian,
+		  <url id="http://refspecs.linuxbase.org/elf/mipsabi.pdf"
+		    name="MIPS o32 ABI">
+		</item>
+
+		<tag><tt>powerpc</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html"
+		    name="LSB PPC32 4.1">
+		</item>
+
+		<tag><tt>powerpcspe</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC32/LSB-Core-PPC32/elf-ppc32.html"
+		    name="LSB PPC32 4.1">,
+		  except that function calls and relocations use the e500
+		  convention described in the ATR-SPE portion of the
+		  <url id="https://www.power.org/resources/downloads/Power-Arch-32-bit-ABI-supp-1.0.tgz"
+		    name="Power Architecture 32-bit ABI Supplement 1.0">
+		</item>
+
+		<tag><tt>ppc64</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-PPC64/LSB-Core-PPC64/elf-ppc64.html"
+		    name="LSB PPC64 4.1">
+		</item>
+
+		<tag><tt>s390</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390/LSB-Core-S390/elf-s390.html"
+		    name="LSB S390 4.1">
+		</item>
+
+		<tag><tt>s390x</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-S390X/LSB-Core-S390X/elf-s390x.html"
+		    name="LSB S390X 4.1">
+		</item>
+
+		<tag><tt>sparc</tt></tag>
+		<item>
+		GNU/Linux,
+		  <url id="http://www.sparc.com/standards/psABI3rd.pdf"
+		    name="32-bit SPARC psABI">
+		</item>
+
+		<tag><tt>sparc64</tt></tag>
+		<item>
+		  GNU/Linux,
+		  <url id="http://www.sparc.com/standards/64.psabi.1.35.ps.Z"
+		    name="64-bit SPARCv9 psABI">
+		</item>
+
+		<tag><tt>kfreebsd-amd64</tt></tag>
+		<item>
+		  GNU/kernel of FreeBSD,
+		  <url id="http://x86-64.org/documentation/abi.pdf"
+		    name="AMD64 psABI">
+		</item>
+
+		<tag><tt>amd64</tt></tag>
+		<item>
+		  <url id="http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/elf-amd64.html"
+		    name="LSB AMD64 4.1">
+		</item>
+	      </taglist>
+	    </p>
+	  </sect2>
 	</sect1>

 	<sect1 id="f-Essential">

#664257#126
Date:
2012-04-27 08:27:16 UTC
From:
To:
Ian Jackson <ijackson@chiark.greenend.org.uk> writes:

Yes, like Jonathan wrote:

Jonathan Nieder <jrnieder@gmail.com> writes:

I was more thinking along the line of forwarded, as in filing it in the
upstream BTS someone mentioned before and getting in touch with the FHS
people and convince them to add them. Obviously just setting the tag
alone is not doing anything to resolve the issue.

Ian Jackson <ijackson@chiark.greenend.org.uk> writes:

The difference is that Debian does not contain Microsoft Exchange but it
does contain the FHS and other LSB stuff.

He said to the person advocating multiarch for the last 6 years.

Clearly I'm not the person to convince others to add multiarch tupples
to their specs. So someone with decent debating skills please pick up
this issue and get in contact with the FHS/LSB people.

MfG
        Goswin

#664257#131
Date:
2012-04-27 08:29:37 UTC
From:
To:
Goswin von Brederlow wrote:

I don't see why or why not.  But it isn't really about convincing ---
I'd be hard pressed to find someone who _doesn't_ want this stuff
documented better.

#664257#142
Date:
2014-03-23 16:31:13 UTC
From:
To:
First, thanks Jonathan a lot for providing this patch. While this is
not the full story this gives us a better basis to document multiarch.

Another similar case are binaries optimised for a sub architecture.
(e.g. SSE2 optimised libraries).

For most practical purpose, the exact ABI is decided by the C compiler.
Thus we can expect gcc/clang upstream to deal with that.

Again, for most practical purpose, what matter is to be able to match the compiler
documentation with Debian documentation. If the compiler documentations states
that ABI=foo target "LSB IA64 4.1" and the Debian document says to target
"LSB IA64 4.1", then the developer know this is the right option without having
to read the ABI document.

I am very tempted to merge your patch except for the first paragraph:

Some words about architecture-independent packages are in order.

But outside that, is there objections to merging this patch ?
Seconds ?

Cheers,

#664257#145
Date:
2014-03-23 16:31:13 UTC
From:
To:
First, thanks Jonathan a lot for providing this patch. While this is
not the full story this gives us a better basis to document multiarch.

Another similar case are binaries optimised for a sub architecture.
(e.g. SSE2 optimised libraries).

For most practical purpose, the exact ABI is decided by the C compiler.
Thus we can expect gcc/clang upstream to deal with that.

Again, for most practical purpose, what matter is to be able to match the compiler
documentation with Debian documentation. If the compiler documentations states
that ABI=foo target "LSB IA64 4.1" and the Debian document says to target
"LSB IA64 4.1", then the developer know this is the right option without having
to read the ABI document.

I am very tempted to merge your patch except for the first paragraph:

Some words about architecture-independent packages are in order.

But outside that, is there objections to merging this patch ?
Seconds ?

Cheers,

#664257#150
Date:
2014-07-30 14:25:32 UTC
From:
To:
Hello all,

Here a slightly modified version of Jonathan patch that mention Architecture:all
packages.

Please comment or second it. I would like to commit it soon as a start to
multiarch documentation in policy.

Cheers,

#664257#153
Date:
2014-07-30 14:25:32 UTC
From:
To:
Hello all,

Here a slightly modified version of Jonathan patch that mention Architecture:all
packages.

Please comment or second it. I would like to commit it soon as a start to
multiarch documentation in policy.

Cheers,

#664257#158
Date:
2014-07-30 14:56:26 UTC
From:
To:
Independently of this bug report, I think moving part of the multiarch
specification from the wiki to the policy is a good idea.

Cheers,

#664257#163
Date:
2014-08-02 19:18:39 UTC
From:
To:
Bill Allombert <ballombe@debian.org> writes:

[...]

Seconded, although I suggest sorting the taglist alphabetically when
applying.

#664257#166
Date:
2014-08-02 19:18:39 UTC
From:
To:
Bill Allombert <ballombe@debian.org> writes:

[...]

Seconded, although I suggest sorting the taglist alphabetically when
applying.

#664257#171
Date:
2018-12-30 09:20:38 UTC
From:
To:
Hi all,

it is at least second time as we needed to have a discussion about
tool-chains for Xtensa based devices (for firmware-ath9k-htc and for
esp8266). With the time we will get probably more discussions for
similar platforms.
Since there is no official or documented statement or naming schema for
debian, it will be good if we can start to work in the right direction.

The problematic of this platform can be described as follow:
"The Xtensa processor architecture is a configurable and extensible
synthesizable 32-bit RISC processor core. SoC and processor designers
can select from a variety of options, such as instruction-set extensions
(for example, narrow instructions, floating point instructions, etc.),
memory, cache, and interrupt configurations. Moreover, Xtensa processors
also support custom-defined instructions and registers. Nevertheless,
all Xtensa processors share a common base instruction set architecture,
thereby ensuring compatibility of third party application software and
development tools."
See http://wiki.linux-xtensa.org/index.php/Supported_Processors

As you can see, there are number of devices or configuration able to run
linux on Xtensa:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/xtensa/configs?h=v4.20

It means, this discussion related not only to bare-metal configurations.

So far, binutils and GCC do not support a usual way to dynamically
configure for some specific platform. Usually "configuration" is
distributed as set of patches against binutils and gcc with related
project. It means, there is no way to provide a tool-chain which is able
to cover all configurations.

There is a project to provide a way to use architecture related
configurations as a plugin against binutils or gcc:
https://github.com/jcmvbkbc/xtensa-dynconfig

Even if we will move to xtensa-dynconfig, we should use normalized names
for plugins.

By analyzing different xtensa toolchain patches I made following
assumptions:
- all Xtensa architectures designed as customizable, but not all vendors
customize it.
- code build for some base version of Xtensa, will always run on the
custom version of this architecture but not other way around.

Based on this assumptions and experience with MIPS names I would suggest
following naming schema:
<arch_main_name><arch_variant><vendor_customization>

arch_main_name - usually xtensa
arch_variant - for example lx2, or 106micro
vendor_customization - it is hard to get any description from vendor, so
i would suggest to use one of chip names used with this customization.
In case of Atheros devices, we have same CPU variant for ar9271 and
ar7010, may be other controller use same variant as well. Since ar9271
is more popular, using this chipname should be enough.

Atheros ar9271 is using Xtensa LX2.1.0, so the name would probably be:
xtensa-lx2.1.0-ar9271
or
xtensalx2.1.0ar9271

esp8266 seems to use Xtensa Diamond 106Micro, so the name would be:
xtensa-d106micro-esp8266
or
xtensad106microesp8266

As reference I redirect initial discussion for binutils-xtensa-lx106.

Am 29.12.18 um 19:37 schrieb Jonathan McDowell:

My reasoning is following:
Xtensa is undocumented mess of assumptions and esoteric believes. This
discussion showed it just one more time. If some one will seek how to
support next chip running Xtensa, this person should start from scratch.
Even if it is plain unchanged platform provided by Tensilica/Cadence.
With nearly no help from any company to identify and sort things we
spread our man power to support in some case just same architecture or
variant.

I've got attention to this issue, only because it may cover architecture
of other package. After some investigation, I can say - no, it is not.
Alone the time needed to investigate what architecture it is and is it
similar with other arch, is an indicator for huge issues in this case.

For the archive, here is short summary for some of know chips using
Xtensa https://wikidevi.com/wiki/Xtensa, hope it will save time for some
one.

As independent review for this package i would suggest:
- please clean binutils-xtensa-lx106/debian/overlay. Convert it from dos
to unix formatting and create a diff against mainline projects. It will
help to see what was actually changed.
- please change the package name.
searching for existing accepted binutils for not linux will give:
binutils-arm-none-eabi
binutils-avr
binutils-h8300-hms
binutils-i686-gnu
binutils-i686-kfreebsd-gnu
binutils-m68hc1x
binutils-mingw-w64
binutils-mingw-w64-i686
binutils-mingw-w64-x86-64
binutils-msp430
binutils-x86-64-kfreebsd-gnu
binutils-z80

In most cases we use chip name or architecture. binutils-xtensa-lx106 is
confusing, lx106 is not official xtensa platform, not official chip name
and even not architecture specified in esp8266 documentation. It seems
to be some kind of tradition.

Since MIPS seems to have long list of architecture variants, similar
rule should be applied for Xtensa:
binutils-mips-linux-gnu
binutils-mips64-linux-gnuabi64
binutils-mips64-linux-gnuabin32
binutils-mips64el-linux-gnuabi64
binutils-mips64el-linux-gnuabin32
binutils-mipsel-linux-gnu
binutils-mipsisa32r6-linux-gnu
binutils-mipsisa32r6el-linux-gnu
binutils-mipsisa64r6-linux-gnuabi64
binutils-mipsisa64r6-linux-gnuabin32
binutils-mipsisa64r6el-linux-gnuabi64
binutils-mipsisa64r6el-linux-gnuabin32

It can be: bintuils-xtensa106mesp8266 or
bintuils-xtensa106micro-esp8266, which will be translated as "ESP8266
specific architecture based on Xtensa 106Micro"
Some one who will seek for all utils for 106micro should be able to find it.
- I would recommend to clarify real CPU architecture with Espressif or
Cadence. In case it is a plain Xtensa Diamond 106Micro architecture,
most of name related issues will be solved and this package will be
clearly interesting for other users.

#664257#176
Date:
2022-01-27 17:56:45 UTC
From:
To: