public inbox for libc-ports@sourceware.org
 help / color / mirror / Atom feed
From: Michael Hope <michael.hope@linaro.org>
To: "Joseph S. Myers" <joseph@codesourcery.com>
Cc: dann frazier <dann.frazier@canonical.com>,
	Richard Earnshaw <rearnsha@arm.com>,
		"cross-distro@lists.linaro.org" <cross-distro@lists.linaro.org>,
		"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
	libc-ports@sourceware.org
Subject: Re: [PATCH] ARM: Use different linker path for hardfloat ABI
Date: Wed, 04 Apr 2012 23:33:00 -0000	[thread overview]
Message-ID: <CANLjY-mj8CHmxGoAt5Z3jOoFyA3O4-dxVZ9RRb78K57K-wssWg@mail.gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.64.1204040847100.21733@digraph.polyomino.org.uk>

On 4 April 2012 21:06, Joseph S. Myers <joseph@codesourcery.com> wrote:
> On Wed, 4 Apr 2012, Michael Hope wrote:
>
>> The tricky one is new GCC with old GLIBC.  GCC may have to do a
>> configure time test and fall back to /lib/ld-linux.so.3 if the hard
>> float loader is missing.
>
> I don't think that's appropriate for ABI issues.  If a different dynamic
> linker name is specified, GCC should use it unconditionally (and require
> new enough glibc or a glibc installation that was appropriately
> rearranged).

OK.  I want GCC 4.7.1 to use the new path.  Does this mean that
released versions of GLIBC and GCC 4.7.1 will be incompatible, or does
GLIBC pick the path up from GCC?

>> > I have no idea whether shlib-versions files naming a file in a
>> > subdirectory will work - but if not, you'd need to send a patch to
>> > libc-alpha to support dynamic linkers in subdirectories, with appropriate
>> > justification for why you are doing something different from all other
>> > architectures.
>>
>> Understood.  For now this is just a path.  There's more infrastructure
>> work needed if the path includes a directory.
>
> Formally it's just a path - but an important feature of GNU/Linux and the
> GNU toolchain is consistency between different architectures and existing
> upstream practice is that the dynamic linker is always in the same
> directory as the other associated libraries and that this has the form
> /lib<something>.  In the absence of a compelling reason, which I have not
> seen stated, to do otherwise for a single case, I think that existing
> practice should be followed with the dynamic linker being in a directory
> such as /libhf.

OK.  This matches Jakub's email.

> The "more infrastructure work needed" makes clear that you need libc-alpha
> buy-in *before* putting any patches into GCC or ports.

OK.  I'm glad we had this discussion as it had to start somewhere.
I'll do a follow up across gcc-patches, libc-alpha, and binutils.

> But maybe if you
> don't try to put the dynamic linker in a different directory from the
> other libraries, it's easier to support via existing mechanisms (setting
> slibdir differently if --enable-multiarch-directories or similar)?

OK.  /libhf may fit that better.

>> Do the MIPS or PowerPC loaders detect the ABI and change the library
>> path based on that?  I couldn't tell from the code.
>
> No, they don't detect the ABI.  Both ABIs (and, for Power, the e500v1 and
> e500v2 variants - compatible with soft-float at the function-calling level
> but with some glibc ABI differences with soft-float and with each other)
> use the same directories.

Sorry, I'm confused.  I had a poke about with MIPS and it uses
different argument registers for soft and hard float.  Soft float uses
$4 and hard float $f0.  Are there shims or similar installed by the
loader?

>> > (e) Existing practice for cases that do use different dynamic linkers is
>> > to use a separate library directory, not just dynamic linker name, as in
>> > lib32 and lib64 for MIPS or libx32 for x32; it's certainly a lot easier to
>> > make two sets of libraries work in parallel if you have separate library
>> > directories like that.
>>
>> Is this required, or should it be left to the distro to choose?  Once
>> the loader is in control then it can account for any distro specific
>> features, which may be the standard /lib and /usr/lib for single ABI
>> distros like Fedora or /usr/lib/$tuple for multiarch distros like
>> Ubuntu and Debian.
>
> I thought Fedora used the standard upstream /lib64 on x86_64 and so would
> naturally use a standard upstream /libhf where appropriate.

Good.  Dennis said the same.

>> > So it would seem more appropriate to define a directory libhf for ARM (meaning you need a binutils patch as well to
>> > handle that directory, I think)
>>
>> I'd like to leave that discussion for now.  The Debian goal is to
>> support incompatible ABIs and, past that, incompatible architectures.
>> libhf is ambiguous as you could have a MIPS hard float library
>> installed on the same system as an ARM hard float library.
>
> If you want both ARM and MIPS hard-float then I'd think you want both
> big-endian and little-endian ARM hard-float - but your patch defines the
> same dynamic linker name for both of those.

Big endian is extremely uncommon on ARM and I'd rather define it when
needed.  For strictness sake I'll change the patch to use the new path
for hard float little endian only.

So:
 * Big endian: undefined, defaults to /lib/ld-linux.so.3
 * Little endian, soft float: /lib/ld-linux.so.3
 * Little endian, hard float: /libhf/ld-linux.so.3

> Standard upstream practice supports having multiple variants that
> plausibly run on the same system at the same time, such as /lib and
> /lib64, and it seems reasonable to support hard and soft float variants
> that way via a directory such as /libhf.  The Debian-style paths are not
> the default on any other architecture and I don't think it's appropriate
> to make them the default for this particular case only.

OK.  Debian multiarch covers libraries and headers but not
executables.  As a MIPS hard float /usr/bin/ls would collide with an
ARM hard float /usr/bin/ls then it's fine for the loader names to
potentially collide as well.

In practice they wouldn't as most architecture has a subtily different
loader name (cf. ld.so.1 for MIPS, ld-linux.so.2 for i386, and
ld-linux.so.3 for ARM).

>> > and these different Debian-style names
>> > could be implemented separately in a multiarch patch if someone submits
>> > one that properly accounts for my review comments on previous patch
>> > versions (failure to produce such a fixed patch being why Debian multiarch
>> > directory support has not got into GCC so far).
>>
>> Agreed.  Note that this loader path discussion is unrelated to
>> multiarch.  It came from the same people so there's a family
>> resemblance.
>
> I think it's directly related, and that such a path is inappropriate by
> default; that ARM should be consistent with other architectures, and that
> if you want to support paths in such subdirectories that would be a
> separate multiarch patch series for GCC, binutils and glibc (but the
> PT_INTERP would still use /lib<whatever>/<name> without subdirectories in
> any case).

OK.  I'll ping the Debian guys to see if there's an advantage that I'm missing.

-- Michael

  parent reply	other threads:[~2012-04-04 23:33 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20120329193401.GA14860@dannf.org>
     [not found] ` <4F75F2E2.3030909@arm.com>
     [not found]   ` <20120402210653.GC28152@dannf.org>
     [not found]     ` <CANLjY-nk7ML5QMBd0bKRJBA9stUOdvu1tWZqmFHxpRzObzFw1Q@mail.gmail.com>
2012-04-03 22:56       ` Joseph S. Myers
2012-04-04  2:40         ` Michael Hope
2012-04-04  9:06           ` Joseph S. Myers
2012-04-04 12:10             ` Dennis Gilmore
2012-04-05 13:30               ` Konstantinos Margaritis
2012-04-05 14:13                 ` Niels de Vos
2012-04-05 15:08                 ` Mike Frysinger
2012-04-05 15:24                   ` Konstantinos Margaritis
2012-04-05 15:55                     ` Mike Frysinger
2012-04-05 16:25                       ` Konstantinos Margaritis
2012-04-10  4:10                         ` Mike Frysinger
2012-04-05 16:16                   ` Steve McIntyre
2012-04-05 17:36                     ` Mike Frysinger
2012-04-04 23:33             ` Michael Hope [this message]
2012-04-05  0:07               ` Joseph S. Myers
2012-04-05  1:17                 ` Michael Hope
2012-04-05 16:05                   ` Steve McIntyre
2012-04-05 16:03               ` Steve McIntyre
2012-04-05  1:32           ` dann frazier
2012-04-05 14:57         ` Steve McIntyre
2012-04-10 20:31         ` Carlos O'Donell
     [not found] <4F7AC2E1.6010000@redhat.com>
     [not found] ` <4F7AD4CA.8010000@arm.com>
     [not found]   ` <20120403110140.GG16117@tyan-ft48-01.lab.bos.redhat.com>
     [not found]     ` <4F7B20D2.8060608@arm.com>
     [not found]       ` <4F7B227F.7060905@redhat.com>
     [not found]         ` <CANLjY-mDvnn8NcVQfYoUUGZD72GbH7mgYjxWOGOzLMiUwNyp2Q@mail.gmail.com>
     [not found]           ` <20120403231133.GI16117@tyan-ft48-01.lab.bos.redhat.com>
     [not found]             ` <CANLjY-=dGK05kzvHVkuo3o7p_iE1cxfTi0f+t-RMmGW+37WSEg@mail.gmail.com>
     [not found]               ` <CAHAq8pE48=eY77adiKz3PEBapXwkPn6rjr3viMoUKpJq4x-G_A@mail.gmail.com>
     [not found]                 ` <CANLjY-k-sC86gmaTH+h-5o4_D2MOnQHB4ihhDhoPt1HbUzJp9w@mail.gmail.com>
     [not found]                   ` <20120404065412.GJ16117@tyan-ft48-01.lab.bos.redhat.com>
2012-04-04  9:16                     ` Joseph S. Myers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANLjY-mj8CHmxGoAt5Z3jOoFyA3O4-dxVZ9RRb78K57K-wssWg@mail.gmail.com \
    --to=michael.hope@linaro.org \
    --cc=cross-distro@lists.linaro.org \
    --cc=dann.frazier@canonical.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=joseph@codesourcery.com \
    --cc=libc-ports@sourceware.org \
    --cc=rearnsha@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).