diff mbox

ARM: Use different linker path for hardfloat ABI

Message ID 20120402210653.GC28152@dannf.org
State New
Headers show

Commit Message

dann frazier April 2, 2012, 9:06 p.m. UTC
On Fri, Mar 30, 2012 at 06:52:34PM +0100, Richard Earnshaw wrote:
> On 29/03/12 20:34, dann frazier wrote:
> > This is an updated version of a patch Debian and Ubuntu are using to
> > use an alternate linker path for hardfloat binaries. The difference
> > with this one is that it covers the case where no float flag
> > was passed in, defaulting to the softfloat path.
> > 
> > 2012-03-29  dann frazier <dann.frazier@canonical.com>
> > 
> > 	* config/arm/linux-elf.h: Use alternate linker path
> >           for hardfloat ABI
> > 
> > Index: gcc/config/arm/linux-elf.h
> > ===================================================================
> > --- gcc/config/arm/linux-elf.h	(revision 185708)
> > +++ gcc/config/arm/linux-elf.h	(working copy)
> > @@ -59,14 +59,21 @@
> >  
> >  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
> >  
> > -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
> > +#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
> > +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
> >  
> >  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
> >     %{static:-Bstatic} \
> >     %{shared:-shared} \
> >     %{symbolic:-Bsymbolic} \
> >     %{rdynamic:-export-dynamic} \
> > -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
> > +   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
> > +   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
> > +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
> > +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
> > +   %{!mfloat-abi: \
> > +     %{!msoft-float: \
> > +       %{!mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "}}} \
> >     -X \
> >     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
> >     SUBTARGET_EXTRA_LINK_SPEC
> > 
> 
> Looks to me as though this will break the old Linux ABI.  While we've
> marked that as deprecated, it hasn't been removed as yet.  So I think
> this patch either needs to wait until that removal has taken place, or
> provide the relevant updates to maintain the old ABI support.

Thanks for your review. You're right, this does appear to break the
old ABI - that was a misunderstanding on my part. I think this fixes
the problem:

Comments

Andrew Haley April 3, 2012, 9:29 a.m. UTC | #1
On 04/02/2012 10:06 PM, dann frazier wrote:
> On Fri, Mar 30, 2012 at 06:52:34PM +0100, Richard Earnshaw wrote:
>> On 29/03/12 20:34, dann frazier wrote:
>>> This is an updated version of a patch Debian and Ubuntu are using to
>>> use an alternate linker path for hardfloat binaries. The difference
>>> with this one is that it covers the case where no float flag
>>> was passed in, defaulting to the softfloat path.
>>>
>>> 2012-03-29  dann frazier <dann.frazier@canonical.com>
>>>
>>> 	* config/arm/linux-elf.h: Use alternate linker path
>>>           for hardfloat ABI
>>>
>>> Index: gcc/config/arm/linux-elf.h
>>> ===================================================================
>>> --- gcc/config/arm/linux-elf.h	(revision 185708)
>>> +++ gcc/config/arm/linux-elf.h	(working copy)
>>> @@ -59,14 +59,21 @@
>>>  
>>>  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
>>>  
>>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
>>> +#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
>>> +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
>>>  
>>>  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
>>>     %{static:-Bstatic} \
>>>     %{shared:-shared} \
>>>     %{symbolic:-Bsymbolic} \
>>>     %{rdynamic:-export-dynamic} \
>>> -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
>>> +   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>> +   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>> +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>> +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>> +   %{!mfloat-abi: \
>>> +     %{!msoft-float: \
>>> +       %{!mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "}}} \
>>>     -X \
>>>     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
>>>     SUBTARGET_EXTRA_LINK_SPEC
>>>
>>
>> Looks to me as though this will break the old Linux ABI.  While we've
>> marked that as deprecated, it hasn't been removed as yet.  So I think
>> this patch either needs to wait until that removal has taken place, or
>> provide the relevant updates to maintain the old ABI support.
> 
> Thanks for your review. You're right, this does appear to break the
> old ABI - that was a misunderstanding on my part. I think this fixes
> the problem:

But what about those of us who are using hard-float but not the
Debian liker path?  It'll break, surely.  This looks to be like
it's Debian-specific.

Andrew.


> Index: gcc/config/arm/linux-elf.h
> ===================================================================
> --- gcc/config/arm/linux-elf.h	(revision 185708)
> +++ gcc/config/arm/linux-elf.h	(working copy)
> @@ -60,13 +60,17 @@
>  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
>  
>  #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
> +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
>  
>  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
>     %{static:-Bstatic} \
>     %{shared:-shared} \
>     %{symbolic:-Bsymbolic} \
>     %{rdynamic:-export-dynamic} \
> -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
> +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
> +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
> +   %{!mfloat-abi: \
> +     %{!mhard-float:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
>     -X \
>     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
>     SUBTARGET_EXTRA_LINK_SPEC
>
Richard Earnshaw April 3, 2012, 10:45 a.m. UTC | #2
On 03/04/12 10:29, Andrew Haley wrote:
> On 04/02/2012 10:06 PM, dann frazier wrote:
>> On Fri, Mar 30, 2012 at 06:52:34PM +0100, Richard Earnshaw wrote:
>>> On 29/03/12 20:34, dann frazier wrote:
>>>> This is an updated version of a patch Debian and Ubuntu are using to
>>>> use an alternate linker path for hardfloat binaries. The difference
>>>> with this one is that it covers the case where no float flag
>>>> was passed in, defaulting to the softfloat path.
>>>>
>>>> 2012-03-29  dann frazier <dann.frazier@canonical.com>
>>>>
>>>> 	* config/arm/linux-elf.h: Use alternate linker path
>>>>           for hardfloat ABI
>>>>
>>>> Index: gcc/config/arm/linux-elf.h
>>>> ===================================================================
>>>> --- gcc/config/arm/linux-elf.h	(revision 185708)
>>>> +++ gcc/config/arm/linux-elf.h	(working copy)
>>>> @@ -59,14 +59,21 @@
>>>>  
>>>>  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
>>>>  
>>>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
>>>> +#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
>>>> +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
>>>>  
>>>>  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
>>>>     %{static:-Bstatic} \
>>>>     %{shared:-shared} \
>>>>     %{symbolic:-Bsymbolic} \
>>>>     %{rdynamic:-export-dynamic} \
>>>> -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
>>>> +   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>> +   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>> +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>> +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>> +   %{!mfloat-abi: \
>>>> +     %{!msoft-float: \
>>>> +       %{!mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "}}} \
>>>>     -X \
>>>>     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
>>>>     SUBTARGET_EXTRA_LINK_SPEC
>>>>
>>>
>>> Looks to me as though this will break the old Linux ABI.  While we've
>>> marked that as deprecated, it hasn't been removed as yet.  So I think
>>> this patch either needs to wait until that removal has taken place, or
>>> provide the relevant updates to maintain the old ABI support.
>>
>> Thanks for your review. You're right, this does appear to break the
>> old ABI - that was a misunderstanding on my part. I think this fixes
>> the problem:
> 
> But what about those of us who are using hard-float but not the
> Debian liker path?  It'll break, surely.  This looks to be like
> it's Debian-specific.
> 

Are you trying to tell me that some distros are using /lib/ld-linux.so.3
directly for hard-float?  Sigh, you distro guys need to start talking to
each other, rather than just going of inventing things ...

If, so then there's only one way to sort out this mess.

/lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
/lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
/lib/ld-linux.so.3 legacy symlink to one of the above.

Or something of this nature.

All this is outside of GCC's remit though and I'm not in a position to
drive any of it through.

:-( :-( :-(

R.
Richard Biener April 3, 2012, 10:51 a.m. UTC | #3
On Tue, Apr 3, 2012 at 12:45 PM, Richard Earnshaw <rearnsha@arm.com> wrote:
> On 03/04/12 10:29, Andrew Haley wrote:
>> On 04/02/2012 10:06 PM, dann frazier wrote:
>>> On Fri, Mar 30, 2012 at 06:52:34PM +0100, Richard Earnshaw wrote:
>>>> On 29/03/12 20:34, dann frazier wrote:
>>>>> This is an updated version of a patch Debian and Ubuntu are using to
>>>>> use an alternate linker path for hardfloat binaries. The difference
>>>>> with this one is that it covers the case where no float flag
>>>>> was passed in, defaulting to the softfloat path.
>>>>>
>>>>> 2012-03-29  dann frazier <dann.frazier@canonical.com>
>>>>>
>>>>>    * config/arm/linux-elf.h: Use alternate linker path
>>>>>           for hardfloat ABI
>>>>>
>>>>> Index: gcc/config/arm/linux-elf.h
>>>>> ===================================================================
>>>>> --- gcc/config/arm/linux-elf.h     (revision 185708)
>>>>> +++ gcc/config/arm/linux-elf.h     (working copy)
>>>>> @@ -59,14 +59,21 @@
>>>>>
>>>>>  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
>>>>>
>>>>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
>>>>> +#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
>>>>> +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
>>>>>
>>>>>  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
>>>>>     %{static:-Bstatic} \
>>>>>     %{shared:-shared} \
>>>>>     %{symbolic:-Bsymbolic} \
>>>>>     %{rdynamic:-export-dynamic} \
>>>>> -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
>>>>> +   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>>> +   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>>> +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>>> +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>>> +   %{!mfloat-abi: \
>>>>> +     %{!msoft-float: \
>>>>> +       %{!mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "}}} \
>>>>>     -X \
>>>>>     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
>>>>>     SUBTARGET_EXTRA_LINK_SPEC
>>>>>
>>>>
>>>> Looks to me as though this will break the old Linux ABI.  While we've
>>>> marked that as deprecated, it hasn't been removed as yet.  So I think
>>>> this patch either needs to wait until that removal has taken place, or
>>>> provide the relevant updates to maintain the old ABI support.
>>>
>>> Thanks for your review. You're right, this does appear to break the
>>> old ABI - that was a misunderstanding on my part. I think this fixes
>>> the problem:
>>
>> But what about those of us who are using hard-float but not the
>> Debian liker path?  It'll break, surely.  This looks to be like
>> it's Debian-specific.
>>
>
> Are you trying to tell me that some distros are using /lib/ld-linux.so.3
> directly for hard-float?  Sigh, you distro guys need to start talking to
> each other, rather than just going of inventing things ...
>
> If, so then there's only one way to sort out this mess.
>
> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
> /lib/ld-linux.so.3 legacy symlink to one of the above.
>
> Or something of this nature.
>
> All this is outside of GCC's remit though and I'm not in a position to
> drive any of it through.
>
> :-( :-( :-(

Now, I wonder why the dynamic linker cannot figure out the ABI itself
by means of using ELF flags or so?

Richard.

> R.
>
>
Richard Earnshaw April 3, 2012, 10:53 a.m. UTC | #4
On 03/04/12 11:51, Richard Guenther wrote:
> On Tue, Apr 3, 2012 at 12:45 PM, Richard Earnshaw <rearnsha@arm.com> wrote:
>> On 03/04/12 10:29, Andrew Haley wrote:
>>> On 04/02/2012 10:06 PM, dann frazier wrote:
>>>> On Fri, Mar 30, 2012 at 06:52:34PM +0100, Richard Earnshaw wrote:
>>>>> On 29/03/12 20:34, dann frazier wrote:
>>>>>> This is an updated version of a patch Debian and Ubuntu are using to
>>>>>> use an alternate linker path for hardfloat binaries. The difference
>>>>>> with this one is that it covers the case where no float flag
>>>>>> was passed in, defaulting to the softfloat path.
>>>>>>
>>>>>> 2012-03-29  dann frazier <dann.frazier@canonical.com>
>>>>>>
>>>>>>    * config/arm/linux-elf.h: Use alternate linker path
>>>>>>           for hardfloat ABI
>>>>>>
>>>>>> Index: gcc/config/arm/linux-elf.h
>>>>>> ===================================================================
>>>>>> --- gcc/config/arm/linux-elf.h     (revision 185708)
>>>>>> +++ gcc/config/arm/linux-elf.h     (working copy)
>>>>>> @@ -59,14 +59,21 @@
>>>>>>
>>>>>>  #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
>>>>>>
>>>>>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
>>>>>> +#define LINUX_DYNAMIC_LINKER_SF "/lib/ld-linux.so.3"
>>>>>> +#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
>>>>>>
>>>>>>  #define LINUX_TARGET_LINK_SPEC  "%{h*} \
>>>>>>     %{static:-Bstatic} \
>>>>>>     %{shared:-shared} \
>>>>>>     %{symbolic:-Bsymbolic} \
>>>>>>     %{rdynamic:-export-dynamic} \
>>>>>> -   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
>>>>>> +   %{msoft-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>>>> +   %{mfloat-abi=soft*:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "} \
>>>>>> +   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>>>> +   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
>>>>>> +   %{!mfloat-abi: \
>>>>>> +     %{!msoft-float: \
>>>>>> +       %{!mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_SF "}}} \
>>>>>>     -X \
>>>>>>     %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
>>>>>>     SUBTARGET_EXTRA_LINK_SPEC
>>>>>>
>>>>>
>>>>> Looks to me as though this will break the old Linux ABI.  While we've
>>>>> marked that as deprecated, it hasn't been removed as yet.  So I think
>>>>> this patch either needs to wait until that removal has taken place, or
>>>>> provide the relevant updates to maintain the old ABI support.
>>>>
>>>> Thanks for your review. You're right, this does appear to break the
>>>> old ABI - that was a misunderstanding on my part. I think this fixes
>>>> the problem:
>>>
>>> But what about those of us who are using hard-float but not the
>>> Debian liker path?  It'll break, surely.  This looks to be like
>>> it's Debian-specific.
>>>
>>
>> Are you trying to tell me that some distros are using /lib/ld-linux.so.3
>> directly for hard-float?  Sigh, you distro guys need to start talking to
>> each other, rather than just going of inventing things ...
>>
>> If, so then there's only one way to sort out this mess.
>>
>> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
>> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
>> /lib/ld-linux.so.3 legacy symlink to one of the above.
>>
>> Or something of this nature.
>>
>> All this is outside of GCC's remit though and I'm not in a position to
>> drive any of it through.
>>
>> :-( :-( :-(
> 
> Now, I wonder why the dynamic linker cannot figure out the ABI itself
> by means of using ELF flags or so?
> 

There are no ELF flags for this in executables.  The attributes only
apply to object files and anyway they are too expensive to decode at run
time.

R.
Jakub Jelinek April 3, 2012, 11:01 a.m. UTC | #5
On Tue, Apr 03, 2012 at 11:45:30AM +0100, Richard Earnshaw wrote:
> If, so then there's only one way to sort out this mess.
> 
> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader

The above scheme is a Debianism which no other distro is using.

	Jakub
Richard Earnshaw April 3, 2012, 4:09 p.m. UTC | #6
On 03/04/12 12:01, Jakub Jelinek wrote:
> On Tue, Apr 03, 2012 at 11:45:30AM +0100, Richard Earnshaw wrote:
>> If, so then there's only one way to sort out this mess.
>>
>> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
>> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
> 
> The above scheme is a Debianism which no other distro is using.
> 
> 	Jakub
> 

Not really, it's just a naming convention for where the config-specific
dynamic loader lives.  It doesn't affect where the remaining shared
libraries live.

The subdirectories could be called fred and jim and it would still work.
 The only thing required is that this part of the naming scheme be
agreed amongst the distros.

This looks to me like it's turning into a bike-shed painting excerise
between the distros out there.  That's really sad.

R.
Andrew Haley April 3, 2012, 4:17 p.m. UTC | #7
On 04/03/2012 05:09 PM, Richard Earnshaw wrote:
> On 03/04/12 12:01, Jakub Jelinek wrote:
>> On Tue, Apr 03, 2012 at 11:45:30AM +0100, Richard Earnshaw wrote:
>>> If, so then there's only one way to sort out this mess.
>>>
>>> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
>>> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
>>
>> The above scheme is a Debianism which no other distro is using.
>>
>> 	Jakub
>>
> 
> Not really, it's just a naming convention for where the config-specific
> dynamic loader lives.  It doesn't affect where the remaining shared
> libraries live.
> 
> The subdirectories could be called fred and jim and it would still work.
>  The only thing required is that this part of the naming scheme be
> agreed amongst the distros.
> 
> This looks to me like it's turning into a bike-shed painting excerise
> between the distros out there.  That's really sad.

I don't think we ever even had the discussion: Debian invented their
Debian-internal scheme for managing multiple ABIs.  They have in the past
used patched versions of gcc, as in the case of x86_64.

Andrew.
Michael Hope April 3, 2012, 9:18 p.m. UTC | #8
On 4 April 2012 04:17, Andrew Haley <aph@redhat.com> wrote:
> On 04/03/2012 05:09 PM, Richard Earnshaw wrote:
>> On 03/04/12 12:01, Jakub Jelinek wrote:
>>> On Tue, Apr 03, 2012 at 11:45:30AM +0100, Richard Earnshaw wrote:
>>>> If, so then there's only one way to sort out this mess.
>>>>
>>>> /lib/arm-linux-gnueabi/ld-linux.so.3  Location of soft-float loader
>>>> /lib/arm-linux-gnueabihf/ld-linux.so.3 Location of hard-float loader
>>>
>>> The above scheme is a Debianism which no other distro is using.
>>>
>>>      Jakub
>>>
>>
>> Not really, it's just a naming convention for where the config-specific
>> dynamic loader lives.  It doesn't affect where the remaining shared
>> libraries live.
>>
>> The subdirectories could be called fred and jim and it would still work.
>>  The only thing required is that this part of the naming scheme be
>> agreed amongst the distros.
>>
>> This looks to me like it's turning into a bike-shed painting excerise
>> between the distros out there.  That's really sad.
>
> I don't think we ever even had the discussion: Debian invented their
> Debian-internal scheme for managing multiple ABIs.  They have in the past
> used patched versions of gcc, as in the case of x86_64.

(cc'ed cross-distro as the discussion is also going on there[1].  This
patch continues that)

I like the idea of incompatible binaries having different loaders.
The path doesn't matter but the concept does.  Like i686/x86_64, it
gives distros the option to install different binaries alongside each
other for compatibility, performance, or upgrade reasons.  The
compatibility cost is nice and low and lets Debian do some interesting
cross development things.

No one has released a hard float based distro yet.  We have time to
discuss and fix this so we don't get in the crazy situation where a
third party binary only runs on some distros.

-- Michael

[1] http://lists.linaro.org/pipermail/cross-distro/2012-March/000135.html
and http://lists.linaro.org/pipermail/cross-distro/2012-April/thread.html
Jakub Jelinek April 3, 2012, 11:11 p.m. UTC | #9
On Wed, Apr 04, 2012 at 09:18:59AM +1200, Michael Hope wrote:
> >> The subdirectories could be called fred and jim and it would still work.
> >>  The only thing required is that this part of the naming scheme be
> >> agreed amongst the distros.
> >>
> >> This looks to me like it's turning into a bike-shed painting excerise
> >> between the distros out there.  That's really sad.
> >
> > I don't think we ever even had the discussion: Debian invented their
> > Debian-internal scheme for managing multiple ABIs.  They have in the past
> > used patched versions of gcc, as in the case of x86_64.
> 
> (cc'ed cross-distro as the discussion is also going on there[1].  This
> patch continues that)
> 
> I like the idea of incompatible binaries having different loaders.
> The path doesn't matter but the concept does.  Like i686/x86_64, it
> gives distros the option to install different binaries alongside each
> other for compatibility, performance, or upgrade reasons.  The
> compatibility cost is nice and low and lets Debian do some interesting
> cross development things.

Does the dynamic linker itself contain any routines that depend on the
soft/hard ABI?  That would quite surprise me, so I don't see the point of
having different dynamic linkers for those ABIs.  One dynamic linker should
handle both just fine.

> No one has released a hard float based distro yet.  We have time to
> discuss and fix this so we don't get in the crazy situation where a
> third party binary only runs on some distros.

Isn't e.g. Fedora 17/armv7hl a hard float based distro?

	Jakub
Michael Hope April 3, 2012, 11:48 p.m. UTC | #10
On 4 April 2012 11:11, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Apr 04, 2012 at 09:18:59AM +1200, Michael Hope wrote:
>> >> The subdirectories could be called fred and jim and it would still work.
>> >>  The only thing required is that this part of the naming scheme be
>> >> agreed amongst the distros.
>> >>
>> >> This looks to me like it's turning into a bike-shed painting excerise
>> >> between the distros out there.  That's really sad.
>> >
>> > I don't think we ever even had the discussion: Debian invented their
>> > Debian-internal scheme for managing multiple ABIs.  They have in the past
>> > used patched versions of gcc, as in the case of x86_64.
>>
>> (cc'ed cross-distro as the discussion is also going on there[1].  This
>> patch continues that)
>>
>> I like the idea of incompatible binaries having different loaders.
>> The path doesn't matter but the concept does.  Like i686/x86_64, it
>> gives distros the option to install different binaries alongside each
>> other for compatibility, performance, or upgrade reasons.  The
>> compatibility cost is nice and low and lets Debian do some interesting
>> cross development things.
>
> Does the dynamic linker itself contain any routines that depend on the
> soft/hard ABI?  That would quite surprise me, so I don't see the point of
> having different dynamic linkers for those ABIs.  One dynamic linker should
> handle both just fine.
>
>> No one has released a hard float based distro yet.  We have time to
>> discuss and fix this so we don't get in the crazy situation where a
>> third party binary only runs on some distros.
>
> Isn't e.g. Fedora 17/armv7hl a hard float based distro?

Yip, as is Ubuntu Precise, Debian unstable, and a skew of Gentoo.
None have been released yet.  Here's my understanding:

Fedora 17:
 * ARM is a secondary architecture
 * Alpha 1 release is out
 * Has both a ARMv5 soft float and ARMv7 hard float build

Ubuntu Precise:
 * ARM is a primary architecture
 * Beta 2 is out
 * ARMv7 hard float by default with ARMv7 softfp being community supported

Debian:
 * ARM is a primary architecture
 * Has a ARMv4T soft float and in-development ARMv7 hard float

openSUSE:
 * Kicked off at a hackfest in September 2011
 * Have a ARMv5T soft float and ARMv7 hard float build

Gentoo:
 * I'm unsure (help?)
 * The Gentoo manual suggests ARMv7 softfp is the default

-- Michael
Peter Robinson April 4, 2012, midnight UTC | #11
On Wed, Apr 4, 2012 at 12:48 AM, Michael Hope <michael.hope@linaro.org> wrote:
> On 4 April 2012 11:11, Jakub Jelinek <jakub@redhat.com> wrote:
>> On Wed, Apr 04, 2012 at 09:18:59AM +1200, Michael Hope wrote:
>>> >> The subdirectories could be called fred and jim and it would still work.
>>> >>  The only thing required is that this part of the naming scheme be
>>> >> agreed amongst the distros.
>>> >>
>>> >> This looks to me like it's turning into a bike-shed painting excerise
>>> >> between the distros out there.  That's really sad.
>>> >
>>> > I don't think we ever even had the discussion: Debian invented their
>>> > Debian-internal scheme for managing multiple ABIs.  They have in the past
>>> > used patched versions of gcc, as in the case of x86_64.
>>>
>>> (cc'ed cross-distro as the discussion is also going on there[1].  This
>>> patch continues that)
>>>
>>> I like the idea of incompatible binaries having different loaders.
>>> The path doesn't matter but the concept does.  Like i686/x86_64, it
>>> gives distros the option to install different binaries alongside each
>>> other for compatibility, performance, or upgrade reasons.  The
>>> compatibility cost is nice and low and lets Debian do some interesting
>>> cross development things.
>>
>> Does the dynamic linker itself contain any routines that depend on the
>> soft/hard ABI?  That would quite surprise me, so I don't see the point of
>> having different dynamic linkers for those ABIs.  One dynamic linker should
>> handle both just fine.
>>
>>> No one has released a hard float based distro yet.  We have time to
>>> discuss and fix this so we don't get in the crazy situation where a
>>> third party binary only runs on some distros.
>>
>> Isn't e.g. Fedora 17/armv7hl a hard float based distro?
>
> Yip, as is Ubuntu Precise, Debian unstable, and a skew of Gentoo.
> None have been released yet.  Here's my understanding:
>
> Fedora 17:
>  * ARM is a secondary architecture
>  * Alpha 1 release is out
>  * Has both a ARMv5 soft float and ARMv7 hard float build

Beta isn't far off and we're working toward Primary Arch.

> Ubuntu Precise:
>  * ARM is a primary architecture
>  * Beta 2 is out
>  * ARMv7 hard float by default with ARMv7 softfp being community supported
>
> Debian:
>  * ARM is a primary architecture
>  * Has a ARMv4T soft float and in-development ARMv7 hard float
>
> openSUSE:
>  * Kicked off at a hackfest in September 2011
>  * Have a ARMv5T soft float and ARMv7 hard float build

Is only hard float, they haven't ruled out doing v5 soft float but
it's not their current focus.

Peter
Paulo César Pereira de Andrade April 4, 2012, 12:56 a.m. UTC | #12
Em 3 de abril de 2012 20:48, Michael Hope <michael.hope@linaro.org> escreveu:
> On 4 April 2012 11:11, Jakub Jelinek <jakub@redhat.com> wrote:
>> On Wed, Apr 04, 2012 at 09:18:59AM +1200, Michael Hope wrote:
>>> >> The subdirectories could be called fred and jim and it would still work.
>>> >>  The only thing required is that this part of the naming scheme be
>>> >> agreed amongst the distros.
>>> >>
>>> >> This looks to me like it's turning into a bike-shed painting excerise
>>> >> between the distros out there.  That's really sad.
>>> >
>>> > I don't think we ever even had the discussion: Debian invented their
>>> > Debian-internal scheme for managing multiple ABIs.  They have in the past
>>> > used patched versions of gcc, as in the case of x86_64.
>>>
>>> (cc'ed cross-distro as the discussion is also going on there[1].  This
>>> patch continues that)
>>>
>>> I like the idea of incompatible binaries having different loaders.
>>> The path doesn't matter but the concept does.  Like i686/x86_64, it
>>> gives distros the option to install different binaries alongside each
>>> other for compatibility, performance, or upgrade reasons.  The
>>> compatibility cost is nice and low and lets Debian do some interesting
>>> cross development things.
>>
>> Does the dynamic linker itself contain any routines that depend on the
>> soft/hard ABI?  That would quite surprise me, so I don't see the point of
>> having different dynamic linkers for those ABIs.  One dynamic linker should
>> handle both just fine.
>>
>>> No one has released a hard float based distro yet.  We have time to
>>> discuss and fix this so we don't get in the crazy situation where a
>>> third party binary only runs on some distros.
>>
>> Isn't e.g. Fedora 17/armv7hl a hard float based distro?
>
> Yip, as is Ubuntu Precise, Debian unstable, and a skew of Gentoo.
> None have been released yet.  Here's my understanding:
>
> Fedora 17:
>  * ARM is a secondary architecture
>  * Alpha 1 release is out
>  * Has both a ARMv5 soft float and ARMv7 hard float build
>
> Ubuntu Precise:
>  * ARM is a primary architecture
>  * Beta 2 is out
>  * ARMv7 hard float by default with ARMv7 softfp being community supported
>
> Debian:
>  * ARM is a primary architecture
>  * Has a ARMv4T soft float and in-development ARMv7 hard float
>
> openSUSE:
>  * Kicked off at a hackfest in September 2011
>  * Have a ARMv5T soft float and ARMv7 hard float build
>
> Gentoo:
>  * I'm unsure (help?)
>  * The Gentoo manual suggests ARMv7 softfp is the default

  I did two ports of Mandriva to armv7. One of my choice to use softfp,
and another hardfp port to be compatible with other distros. But other
than a previous armv5 port, there is not much else of Mandriva arm,
so, it would be "good to have" to be able to run binaries for either
without resorting to a chroot, and only testing purposes.

  Bumping major or calling it ld-linux-foo.so.3 is out of question?

> -- Michael
>
> _______________________________________________
> cross-distro mailing list
> cross-distro@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/cross-distro

Paulo
Michael Hope April 4, 2012, 1:34 a.m. UTC | #13
2012/4/4 Paulo César Pereira de Andrade
<paulo.cesar.pereira.de.andrade@gmail.com>:
> Em 3 de abril de 2012 20:48, Michael Hope <michael.hope@linaro.org> escreveu:

<snip>

>> Yip, as is Ubuntu Precise, Debian unstable, and a skew of Gentoo.
>> None have been released yet.  Here's my understanding:
>>
>> Fedora 17:
>>  * ARM is a secondary architecture
>>  * Alpha 1 release is out
>>  * Has both a ARMv5 soft float and ARMv7 hard float build
>>
>> Ubuntu Precise:
>>  * ARM is a primary architecture
>>  * Beta 2 is out
>>  * ARMv7 hard float by default with ARMv7 softfp being community supported
>>
>> Debian:
>>  * ARM is a primary architecture
>>  * Has a ARMv4T soft float and in-development ARMv7 hard float
>>
>> openSUSE:
>>  * Kicked off at a hackfest in September 2011
>>  * Have a ARMv5T soft float and ARMv7 hard float build
>>
>> Gentoo:
>>  * I'm unsure (help?)
>>  * The Gentoo manual suggests ARMv7 softfp is the default
>
>  I did two ports of Mandriva to armv7. One of my choice to use softfp,
> and another hardfp port to be compatible with other distros. But other
> than a previous armv5 port, there is not much else of Mandriva arm,
> so, it would be "good to have" to be able to run binaries for either
> without resorting to a chroot, and only testing purposes.
>
>  Bumping major or calling it ld-linux-foo.so.3 is out of question?

I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
questions here though: can the hard float loader have a different path
and, if so, what should it be?  We're still working on the first part.

-- Michael
Jakub Jelinek April 4, 2012, 6:54 a.m. UTC | #14
On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
> >  I did two ports of Mandriva to armv7. One of my choice to use softfp,
> > and another hardfp port to be compatible with other distros. But other
> > than a previous armv5 port, there is not much else of Mandriva arm,
> > so, it would be "good to have" to be able to run binaries for either
> > without resorting to a chroot, and only testing purposes.
> >
> >  Bumping major or calling it ld-linux-foo.so.3 is out of question?
> 
> I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
> questions here though: can the hard float loader have a different path
> and, if so, what should it be?  We're still working on the first part.

If the agreement is that arm 32-bit softfp really needs to be installable
alongside 32-bit hardfp (and alongside aarch64), then IMHO it should do it
like all other multilib ports (x86_64/i?86/x32, s390/s390x, ppc/ppc64, the
various MIPS variants) and what FSB says, e.g. use
/lib/ld-linux.so.3 and */lib dirs for softfp,
/libhf/ld-linux.so.3 and */libhf dirs for hardfp and
/lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
MULTILIB_OSDIRNAMES, etc., have it configured in glibc, and for those that
choose the Debian layout instead, if it is added somehow configurable into
upstream gcc/glibc of course handle it similarly there.  I just wonder why
that hasn't been done 10 years ago and only needs doing now (of course,
aarch64 is going to be new, talking now about the 32-bit softfp vs. hardfp).

One needs to wonder also why arm hasn't switched to 128-bit long double when
all other mainstream architectures did (I hope at least aarch64 will use it
by default).

	Jakub
Andrew Haley April 4, 2012, 8:59 a.m. UTC | #15
On 04/03/2012 11:53 AM, Richard Earnshaw wrote:
>> Now, I wonder why the dynamic linker cannot figure out the ABI itself
>> > by means of using ELF flags or so?
>> > 
> There are no ELF flags for this in executables.  The attributes only
> apply to object files and anyway they are too expensive to decode at run
> time.

Isn't that the core problem, then?  We have incompatible libraries
and executables but they aren't marked as such.

Andrew.
Joseph Myers April 4, 2012, 9:15 a.m. UTC | #16
On Wed, 4 Apr 2012, Jakub Jelinek wrote:

> If the agreement is that arm 32-bit softfp really needs to be installable
> alongside 32-bit hardfp (and alongside aarch64), then IMHO it should do it
> like all other multilib ports (x86_64/i?86/x32, s390/s390x, ppc/ppc64, the
> various MIPS variants) and what FSB says, e.g. use
> /lib/ld-linux.so.3 and */lib dirs for softfp,
> /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
> /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
> arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
> MULTILIB_OSDIRNAMES, etc., have it configured in glibc, and for those that
> choose the Debian layout instead, if it is added somehow configurable into
> upstream gcc/glibc of course handle it similarly there.  I just wonder why
> that hasn't been done 10 years ago and only needs doing now (of course,
> aarch64 is going to be new, talking now about the 32-bit softfp vs. hardfp).

Exactly.  The default should follow the existing practice for other 
architectures.

> One needs to wonder also why arm hasn't switched to 128-bit long double when
> all other mainstream architectures did (I hope at least aarch64 will use it
> by default).

The AArch64 ABI (generic, not GNU/Linux, and draft, still subject to 
incompatible change) is public and used 128-bit long double the last time 
I checked.

My presumption is that there has been no demand for long double wider than 
double among 32-bit ARM users.
Michael Hope April 4, 2012, 10:50 p.m. UTC | #17
On 4 April 2012 18:54, Jakub Jelinek <jakub@redhat.com> wrote:
> On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
>> >  I did two ports of Mandriva to armv7. One of my choice to use softfp,
>> > and another hardfp port to be compatible with other distros. But other
>> > than a previous armv5 port, there is not much else of Mandriva arm,
>> > so, it would be "good to have" to be able to run binaries for either
>> > without resorting to a chroot, and only testing purposes.
>> >
>> >  Bumping major or calling it ld-linux-foo.so.3 is out of question?
>>
>> I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
>> questions here though: can the hard float loader have a different path
>> and, if so, what should it be?  We're still working on the first part.
>
> If the agreement is that arm 32-bit softfp really needs to be installable
> alongside 32-bit hardfp (and alongside aarch64), then IMHO it should do it
> like all other multilib ports (x86_64/i?86/x32, s390/s390x, ppc/ppc64, the
> various MIPS variants) and what FSB says, e.g. use
> /lib/ld-linux.so.3 and */lib dirs for softfp,
> /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
> /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
> arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
> MULTILIB_OSDIRNAMES, etc., have it configured in glibc

OK.  This gives a different path for the hard float loader and lets
the Debian guys add on top of that.  I'll ping them and see what they
think.

> and for those that
> choose the Debian layout instead, if it is added somehow configurable into
> upstream gcc/glibc of course handle it similarly there.

Agreed.

> I just wonder why that hasn't been done 10 years ago and only needs doing now

FPUs have only become common on ARM in the last few years.  softfp was
a good interim work around but performance is significantly better
with hard float.

> (of course, aarch64 is going to be new, talking now about the 32-bit softfp vs. hardfp).

Yip.  I assume something like /lib64 to stay consistent with other
architectures.  aarch64 is hard float only.

-- Michael
Dennis Gilmore April 5, 2012, 1:34 p.m. UTC | #18
El Wed, 4 Apr 2012 08:54:12 +0200
Jakub Jelinek <jakub@redhat.com> escribió:
> On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
> > >  I did two ports of Mandriva to armv7. One of my choice to use
> > > softfp, and another hardfp port to be compatible with other
> > > distros. But other than a previous armv5 port, there is not much
> > > else of Mandriva arm, so, it would be "good to have" to be able
> > > to run binaries for either without resorting to a chroot, and
> > > only testing purposes.
> > >
> > >  Bumping major or calling it ld-linux-foo.so.3 is out of question?
> > 
> > I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
> > questions here though: can the hard float loader have a different
> > path and, if so, what should it be?  We're still working on the
> > first part.
> 
> If the agreement is that arm 32-bit softfp really needs to be
> installable alongside 32-bit hardfp (and alongside aarch64), then
> IMHO it should do it like all other multilib ports (x86_64/i?86/x32,
> s390/s390x, ppc/ppc64, the various MIPS variants) and what FSB says,
> e.g. use /lib/ld-linux.so.3 and */lib dirs for softfp,
> /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
> /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
> arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
> MULTILIB_OSDIRNAMES, etc., have it configured in glibc, and for those
> that choose the Debian layout instead, if it is added somehow
> configurable into upstream gcc/glibc of course handle it similarly
> there.  I just wonder why that hasn't been done 10 years ago and only
> needs doing now (of course, aarch64 is going to be new, talking now
> about the 32-bit softfp vs. hardfp).

Fedora at least plans to not support installing hfp and sfp on the same
system, while not completely decided I don't think we will be
supporting running 32 bit arm binaries on 64 bit arm.  there is not
 a legacy support use case that I can think of i.e. existing common
 proprietary software. Though I imagine that we will use /lib64 for
 consistency with existing 64 bit arches.

Dennis
Steve McIntyre April 5, 2012, 2:32 p.m. UTC | #19
On Wed, Apr 04, 2012 at 01:11:33AM +0200, Jakub Jelinek wrote:
>On Wed, Apr 04, 2012 at 09:18:59AM +1200, Michael Hope wrote:
>> >> The subdirectories could be called fred and jim and it would still work.
>> >>  The only thing required is that this part of the naming scheme be
>> >> agreed amongst the distros.
>> >>
>> >> This looks to me like it's turning into a bike-shed painting excerise
>> >> between the distros out there.  That's really sad.
>> >
>> > I don't think we ever even had the discussion: Debian invented their
>> > Debian-internal scheme for managing multiple ABIs.  They have in the past
>> > used patched versions of gcc, as in the case of x86_64.
>> 
>> (cc'ed cross-distro as the discussion is also going on there[1].  This
>> patch continues that)
>> 
>> I like the idea of incompatible binaries having different loaders.
>> The path doesn't matter but the concept does.  Like i686/x86_64, it
>> gives distros the option to install different binaries alongside each
>> other for compatibility, performance, or upgrade reasons.  The
>> compatibility cost is nice and low and lets Debian do some interesting
>> cross development things.
>
>Does the dynamic linker itself contain any routines that depend on the
>soft/hard ABI?  That would quite surprise me, so I don't see the point of
>having different dynamic linkers for those ABIs.  One dynamic linker should
>handle both just fine.

That's been discussed previously, yes. While technically quite
feasible in terms of code, there's enough potential for confusion that
we though it was just simpler to use two different linker binaries.

Cheers,
Steve McIntyre April 5, 2012, 2:38 p.m. UTC | #20
On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
>2012/4/4 Paulo César Pereira de Andrade
>>
>>  I did two ports of Mandriva to armv7. One of my choice to use softfp,
>> and another hardfp port to be compatible with other distros. But other
>> than a previous armv5 port, there is not much else of Mandriva arm,
>> so, it would be "good to have" to be able to run binaries for either
>> without resorting to a chroot, and only testing purposes.
>>
>>  Bumping major or calling it ld-linux-foo.so.3 is out of question?
>
>I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
>questions here though: can the hard float loader have a different path
>and, if so, what should it be?  We're still working on the first part.

We've previously discussed changing the name or the version number of
the linker, but there was a worry that compatibility would be
broken. Apparently the Meego folks have released a hard-float system
using ld-linux.so.3 and were concerned about this.

Cheers,
Mike Frysinger April 5, 2012, 3:09 p.m. UTC | #21
On Thursday 05 April 2012 10:38:07 Steve McIntyre wrote:
> On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
> >2012/4/4 Paulo César Pereira de Andrade
> >
> >>  I did two ports of Mandriva to armv7. One of my choice to use softfp,
> >> and another hardfp port to be compatible with other distros. But other
> >> than a previous armv5 port, there is not much else of Mandriva arm,
> >> so, it would be "good to have" to be able to run binaries for either
> >> without resorting to a chroot, and only testing purposes.
> >> 
> >>  Bumping major or calling it ld-linux-foo.so.3 is out of question?
> >
> >I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
> >questions here though: can the hard float loader have a different path
> >and, if so, what should it be?  We're still working on the first part.
> 
> We've previously discussed changing the name or the version number of
> the linker, but there was a worry that compatibility would be
> broken. Apparently the Meego folks have released a hard-float system
> using ld-linux.so.3 and were concerned about this.

i'm not sure how changing the leading dir components but leaving the base path 
the same would be any more or less work for meego to maintain backwards 
compatibility.  whatever random path is picked, they're going to be broken, as 
the ELF encodes the full path to the ldso.
-mike
Paulo César Pereira de Andrade April 5, 2012, 3:38 p.m. UTC | #22
Em 5 de abril de 2012 12:09, Mike Frysinger <vapier@gentoo.org> escreveu:
> On Thursday 05 April 2012 10:38:07 Steve McIntyre wrote:
>> On Wed, Apr 04, 2012 at 01:34:30PM +1200, Michael Hope wrote:
>> >2012/4/4 Paulo César Pereira de Andrade
>> >
>> >>  I did two ports of Mandriva to armv7. One of my choice to use softfp,
>> >> and another hardfp port to be compatible with other distros. But other
>> >> than a previous armv5 port, there is not much else of Mandriva arm,
>> >> so, it would be "good to have" to be able to run binaries for either
>> >> without resorting to a chroot, and only testing purposes.
>> >>
>> >>  Bumping major or calling it ld-linux-foo.so.3 is out of question?
>> >
>> >I suspect /lib/ld-linux-$foo.so.3 would be fine.  There's two
>> >questions here though: can the hard float loader have a different path
>> >and, if so, what should it be?  We're still working on the first part.
>>
>> We've previously discussed changing the name or the version number of
>> the linker, but there was a worry that compatibility would be
>> broken. Apparently the Meego folks have released a hard-float system
>> using ld-linux.so.3 and were concerned about this.
>
> i'm not sure how changing the leading dir components but leaving the base path
> the same would be any more or less work for meego to maintain backwards
> compatibility.  whatever random path is picked, they're going to be broken, as
> the ELF encodes the full path to the ldso.
> -mike

  I guess now it is too late to defer --with-float=hard for 64 bit armv8, but
besides possibly tedious, full rebuilds of, (hopefully) yet to be released
hardfp distros per se is not a bad thing.

  My suggestion for lib$color is $color == vfp (one could choose neon :-),
and then it is a distro choice if using /lib as software float to be able to
install the same binaries on armv4+, or build with vfp but use software float
abi so that armv4+ binaries work.

  Major issue IMO is that things are being done thinking too much on
the now, so, hardfp is good to support nvidia drivers, and plain soft float
(armv5) is good for raspberry pi...

> _______________________________________________
> cross-distro mailing list
> cross-distro@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/cross-distro

Paulo
Adam Conrad April 9, 2012, 8:48 p.m. UTC | #23
On Thu, Apr 05, 2012 at 10:50:50AM +1200, Michael Hope wrote:
> On 4 April 2012 18:54, Jakub Jelinek <jakub@redhat.com> wrote:
> >
> > If the agreement is that arm 32-bit softfp really needs to be installable
> > alongside 32-bit hardfp (and alongside aarch64), then IMHO it should do it
> > like all other multilib ports (x86_64/i?86/x32, s390/s390x, ppc/ppc64, the
> > various MIPS variants) and what FSB says, e.g. use
> > /lib/ld-linux.so.3 and */lib dirs for softfp,
> > /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
> > /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
> > arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
> > MULTILIB_OSDIRNAMES, etc., have it configured in glibc
> 
> OK.  This gives a different path for the hard float loader and lets
> the Debian guys add on top of that.  I'll ping them and see what they
> think.

The problem here that everyone !Debian isn't taking into account is that
multilib paths don't solve our use-case.  Multilib paths only solve the
case of multiple ABIs on the same base processor family.  As soon as you
combine x86, arm, power, etc, you end up with overlaps (or, the potential
for overlaps; the fact that various arches accidentally have different
majors keeps those overlaps to a minimum right now, but that's not by
design).

Honestly, this is something we should have solved two decades ago, but the
very idea that someone would want to do what Debian is now doing didn't
occur to any of us.  That's cool.  We didn't think of it back then.  That's
no excuse to continue with the status quo just because it's the status quo.

To be perfectly clear here, we don't care where the linker goes (really, we
don't), we just want it to be both arch and ABI unique.  If that means
taking a crc32 of a rot-13 of the compiler flags used to define the ABI,
and then stuffing the linker in /lib/gobbledygook/ld-linux.so, so be it.

If this means setting up a (very) lightweight process with the LSB, where
everytime a new distro proposes a shiny new arch/ABI, they submit it, and
the LSB assigns them an ABI serial, and we all then agree to toss the
linker in /lib/abi-00002345/ld-linux, that works too.  Don't care.  Really
don't care.

This isn't about trying to force people to switch from multilib to multi-
arch, where the former is clearly working fine for them.  It's not.  This
is purely about people bikeshedding about paths they consider un-pretty,
while (I hope not maliciously or knowingly?) causing potential overlap and
breakage for those of us for whom this actually matters and isn't purely
a color selection exercise.

In the short term, due to sheer luck, /libhf/ld-linux.so.3 would work for
us, purely because that doesn't overlap with any other linkers that Debian
currently ships.  The fact that the multilib path happens to work doesn't
make it correct for our use-case, and certainly doesn't make it correct
ongoing.

Ultimately, however, I want this solved.  We thought we had this solved at
Plumbers last fall.  To hear now that we "didn't involve everyone" is
disheartening, given that we ("we" being Debian and Ubuntu) were well
outnumbered in that room by people from RedHat, Fedora, ChromeOS, and
Gentoo.  We all agreed on something back then, and now that I'm three
weeks away from shipping an armhf distro, it's all exploded yet again into
Bikeshed Part III: The Revenge of Purple Paint.

I really want to ship a compiler than stuffs the "correct" and agreed
upon linker in headers.  I don't want to see third parties build binaries
on Ubuntu that don't run on Fedora.  No one wants to see that, I think.

Obviously, conversely (though this is much less hassle), I need to be
able to ship a linker symlink that matches expectations, so that binaries
built on Fedora will run on Ubuntu.  Again, I'm sure we all want that.

So, pretty please, can we (A) address the concerns here without people
putting up the "Unique paths are Debian trying to force multi-arch on us"
straw man, and (B) agree to *something*, before I ship something that
conforms to a standard agreed upon more than half a year ago that is now
a cause for contention?  Pretty please?  With sugar on top?  Kthx.

> > (of course, aarch64 is going to be new, talking now about the 32-bit softfp vs. hardfp).
> 
> Yip.  I assume something like /lib64 to stay consistent with other
> architectures.  aarch64 is hard float only.

I expect that most distros will probably ship their aarch64 libraries
in /lib64 (Debian and Ubuntu won't, but that's fine) to keep consistent
with their other 64-bit ports, but where you put libraries is entirely
unrelated to where the linker lives.  You could have all your libraries
in /root/.trash/ and if the linker lives in a canonical location and
can resolve that, that's fine.  I will still (obviously, I think, from
my comments above) argue that the linker should live in a guaranteed
unique location.  Overlap with other arches in /lib64 is certainly far
more likely than overlap in /libhf.

... Adam Conrad
Mike Frysinger April 9, 2012, 11:14 p.m. UTC | #24
On Monday 09 April 2012 16:48:06 Adam Conrad wrote:
> On Thu, Apr 05, 2012 at 10:50:50AM +1200, Michael Hope wrote:
> > On 4 April 2012 18:54, Jakub Jelinek wrote:
> > > If the agreement is that arm 32-bit softfp really needs to be
> > > installable alongside 32-bit hardfp (and alongside aarch64), then IMHO
> > > it should do it like all other multilib ports (x86_64/i?86/x32,
> > > s390/s390x, ppc/ppc64, the various MIPS variants) and what FSB says,
> > > e.g. use
> > > /lib/ld-linux.so.3 and */lib dirs for softfp,
> > > /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
> > > /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
> > > arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
> > > MULTILIB_OSDIRNAMES, etc., have it configured in glibc
> > 
> > OK.  This gives a different path for the hard float loader and lets
> > the Debian guys add on top of that.  I'll ping them and see what they
> > think.
> 
> The problem here that everyone !Debian isn't taking into account is that
> multilib paths don't solve our use-case.  Multilib paths only solve the
> case of multiple ABIs on the same base processor family.  As soon as you
> combine x86, arm, power, etc, you end up with overlaps

and the problem there is that you're assuming anyone !Debian sees this as a 
problem.  so, once again, do not use the armhf standardization work to 
backdoor multiarch.  if you want to talk about multiarch, then start a new 
thread to do that.

> Ultimately, however, I want this solved.  We thought we had this solved at
> Plumbers last fall.  To hear now that we "didn't involve everyone" is
> disheartening, given that we ("we" being Debian and Ubuntu) were well
> outnumbered in that room by people from RedHat, Fedora, ChromeOS, and
> Gentoo.

tbh, i thought the ldso discussion was more "we've been talking about this for 
a long time, so let's just go with XXX" and then people moved on to the next 
topic (which was defining exactly what "hard float abi" meant wrt compiler 
flags).  further, it seemed like we had distro representation there, but not 
mainline gcc people.

> So, pretty please, can we (A) address the concerns here without people
> putting up the "Unique paths are Debian trying to force multi-arch on us"
> straw man, and (B) agree to *something*, before I ship something that
> conforms to a standard agreed upon more than half a year ago that is now
> a cause for contention?  Pretty please?  With sugar on top?  Kthx.

again, saying "/lib/<tuple>/<ldso>" isn't multiarch is bunk.  but it sounds 
like you're fine with /libhf/, so there isn't anything left to thrash about 
there.
-mike
Adam Conrad April 9, 2012, 11:31 p.m. UTC | #25
On Mon, Apr 09, 2012 at 07:14:45PM -0400, Mike Frysinger wrote:
> 
> again, saying "/lib/<tuple>/<ldso>" isn't multiarch is bunk.  but it sounds 
> like you're fine with /libhf/, so there isn't anything left to thrash about 
> there.

I appreciate your careful reading of my email and the issues I outlined,
and I look forward to your new urbandictionary definition of the common
colloquialism "fine with".

A path for one file isn't multi-arch.  A unique path for linkers does help
facilitate multi-arch, but we're not forcing you to put libraries some
place you don't want to, implement new ideas you don't want to, or any
other such "bunk", as you so obviously impartially put it.

I realize that most people can't see past their own use case to understand
why a unique location for linkers is helpful, useful, and important for
some other people's use cases, but you either didn't read or chose to
ignore why using multilib paths just plain doesn't scale past a single
base architecture, and why that's a problem for people who aren't you.

This isn't about pushing multi-arch on others.  This isn't about pushing
multi-arch on others.  Also, this.  Isn't.  About.  Pushing.  Multi-arch.
On.  Others.  I don't know how much more clear I can make that.

If the QT guys filed a bug/feature request on libstdc++ asking to change
something that didn't break C++ standards, but facilitated some fancy
thing they were working on, my response wouldn't be "dude, I use GTK,
what do I care about your weird needs, screw you and your QT agenda", it
would be to ask them why they need the thing they need, evaluate how, if
in any way, that would impact other users, and work with them.

Using unique linker paths (for new architectures) hurts exactly zero
users, and this discussion has taken up FAR MORE developer time than
implementation ever would have.  Arguing against unique linker paths for
the reason that "we've never done that before" is not helpful, and it's
blatantly ignoring technical arguments and hiding them behind some bizarre
inter-distro conspiracy theory.

Maybe the conspiracy theory is fun for you.  I don't know.  It's not for
me.  We were told by GCC upstream that we needed distro consensus.  We
got that over half a year ago.  Now I'm told by distros that the patch
not being upstream is why they are backing out of said consensus.  Fun.

.... Adam Conrad
Mike Frysinger April 10, 2012, 4:01 a.m. UTC | #26
On Monday 09 April 2012 19:31:40 Adam Conrad wrote:
> I realize that most people can't see past their own use case to understand
> why a unique location for linkers is helpful, useful, and important for
> some other people's use cases, but you either didn't read or chose to
> ignore why using multilib paths just plain doesn't scale past a single
> base architecture, and why that's a problem for people who aren't you.

and as already stated, the proposed paths here, free of multiarch subpaths, 
satisfy the requirements that you've put forth
-mike
Jeff Law April 10, 2012, 4:16 a.m. UTC | #27
On 04/09/2012 05:14 PM, Mike Frysinger wrote:
>
> tbh, i thought the ldso discussion was more "we've been talking about this for
> a long time, so let's just go with XXX" and then people moved on to the next
> topic (which was defining exactly what "hard float abi" meant wrt compiler
> flags).  further, it seemed like we had distro representation there, but not
> mainline gcc people.
Actually Mike, there was at least one mainline GCC person there.  Me. 
Of course I was thrown into a discussion I knew nothing about, but the 
goal of having a standardized path to discover ld.so which worked across 
distros seems like goodness to me.  Honestly, I don't see what all the 
resistance is about.

Jeff
Mike Frysinger April 10, 2012, 4:44 a.m. UTC | #28
On Tuesday 10 April 2012 00:16:34 Jeff Law wrote:
> On 04/09/2012 05:14 PM, Mike Frysinger wrote:
> > tbh, i thought the ldso discussion was more "we've been talking about
> > this for a long time, so let's just go with XXX" and then people moved
> > on to the next topic (which was defining exactly what "hard float abi"
> > meant wrt compiler flags).  further, it seemed like we had distro
> > representation there, but not mainline gcc people.
> 
> Actually Mike, there was at least one mainline GCC person there.  Me.

my mistake.  i don't think we've met before, and that was a fairly busy time 
for me, so i probably missed things.  we should get a beer ;).

> Of course I was thrown into a discussion I knew nothing about

admittedly, that was the first time i've been in a linaro-related meeting 
before, and i hadn't been following linaro at all before (as the job i left 
before wasn't working on arm at all)

> goal of having a standardized path to discover ld.so which worked across
> distros seems like goodness to me.  Honestly, I don't see what all the
> resistance is about.

i think we have suggestions that would work for everyone ... but maybe this 
thread has gotten too big so we need to regroup with a summary
-mike
Adam Conrad April 10, 2012, 5:17 a.m. UTC | #29
On Tue, Apr 10, 2012 at 12:01:57AM -0400, Mike Frysinger wrote:
> On Monday 09 April 2012 19:31:40 Adam Conrad wrote:
> > I realize that most people can't see past their own use case to understand
> > why a unique location for linkers is helpful, useful, and important for
> > some other people's use cases, but you either didn't read or chose to
> > ignore why using multilib paths just plain doesn't scale past a single
> > base architecture, and why that's a problem for people who aren't you.
> 
> and as already stated, the proposed paths here, free of multiarch subpaths, 
> satisfy the requirements that you've put forth

Like I said, then, you didn't actually read or understand why proposing
multilib paths doesn't work.  You realize conceptually, I hope, that
there's no guarantee of uniqueness in lib/lib64/lib32/libsf/libhf once
you cross the base CPU architecture boundary, right?

Sure, I said that /libhf/ld-linux.so.3 would *accidentally* work for
us right now, due to sheer luck, and you're running with that as saying
that we clearly have no problem here worth solving.  When the next
architecture clashes with linkers on another (hint: it almost certainly
will), do we get to argue about this all over again in six months,
instead of codifying a new and saner practice now?

... Adam Conrad
Paulo César Pereira de Andrade April 10, 2012, 5:26 a.m. UTC | #30
Em 9 de abril de 2012 17:48, Adam Conrad <adconrad@debian.org> escreveu:
> On Thu, Apr 05, 2012 at 10:50:50AM +1200, Michael Hope wrote:
>> On 4 April 2012 18:54, Jakub Jelinek <jakub@redhat.com> wrote:
>> >
>> > If the agreement is that arm 32-bit softfp really needs to be installable
>> > alongside 32-bit hardfp (and alongside aarch64), then IMHO it should do it
>> > like all other multilib ports (x86_64/i?86/x32, s390/s390x, ppc/ppc64, the
>> > various MIPS variants) and what FSB says, e.g. use
>> > /lib/ld-linux.so.3 and */lib dirs for softfp,
>> > /libhf/ld-linux.so.3 and */libhf dirs for hardfp and
>> > /lib64/ld-linux.so.3 and */lib64 dirs for aarch64, have 32-bit
>> > arm-linux-gnueabi gcc configured for softfp/hardfp multilib with
>> > MULTILIB_OSDIRNAMES, etc., have it configured in glibc
>>
>> OK.  This gives a different path for the hard float loader and lets
>> the Debian guys add on top of that.  I'll ping them and see what they
>> think.
>
> The problem here that everyone !Debian isn't taking into account is that
> multilib paths don't solve our use-case.  Multilib paths only solve the
> case of multiple ABIs on the same base processor family.  As soon as you
> combine x86, arm, power, etc, you end up with overlaps (or, the potential
> for overlaps; the fact that various arches accidentally have different
> majors keeps those overlaps to a minimum right now, but that's not by
> design).
>
> Honestly, this is something we should have solved two decades ago, but the
> very idea that someone would want to do what Debian is now doing didn't
> occur to any of us.  That's cool.  We didn't think of it back then.  That's
> no excuse to continue with the status quo just because it's the status quo.
>
> To be perfectly clear here, we don't care where the linker goes (really, we
> don't), we just want it to be both arch and ABI unique.  If that means
> taking a crc32 of a rot-13 of the compiler flags used to define the ABI,
> and then stuffing the linker in /lib/gobbledygook/ld-linux.so, so be it.
>
> If this means setting up a (very) lightweight process with the LSB, where
> everytime a new distro proposes a shiny new arch/ABI, they submit it, and
> the LSB assigns them an ABI serial, and we all then agree to toss the
> linker in /lib/abi-00002345/ld-linux, that works too.  Don't care.  Really
> don't care.
>
> This isn't about trying to force people to switch from multilib to multi-
> arch, where the former is clearly working fine for them.  It's not.  This
> is purely about people bikeshedding about paths they consider un-pretty,
> while (I hope not maliciously or knowingly?) causing potential overlap and
> breakage for those of us for whom this actually matters and isn't purely
> a color selection exercise.
>
> In the short term, due to sheer luck, /libhf/ld-linux.so.3 would work for
> us, purely because that doesn't overlap with any other linkers that Debian
> currently ships.  The fact that the multilib path happens to work doesn't
> make it correct for our use-case, and certainly doesn't make it correct
> ongoing.
>
> Ultimately, however, I want this solved.  We thought we had this solved at
> Plumbers last fall.  To hear now that we "didn't involve everyone" is
> disheartening, given that we ("we" being Debian and Ubuntu) were well
> outnumbered in that room by people from RedHat, Fedora, ChromeOS, and
> Gentoo.  We all agreed on something back then, and now that I'm three
> weeks away from shipping an armhf distro, it's all exploded yet again into
> Bikeshed Part III: The Revenge of Purple Paint.
>
> I really want to ship a compiler than stuffs the "correct" and agreed
> upon linker in headers.  I don't want to see third parties build binaries
> on Ubuntu that don't run on Fedora.  No one wants to see that, I think.
>
> Obviously, conversely (though this is much less hassle), I need to be
> able to ship a linker symlink that matches expectations, so that binaries
> built on Fedora will run on Ubuntu.  Again, I'm sure we all want that.
>
> So, pretty please, can we (A) address the concerns here without people
> putting up the "Unique paths are Debian trying to force multi-arch on us"
> straw man, and (B) agree to *something*, before I ship something that
> conforms to a standard agreed upon more than half a year ago that is now
> a cause for contention?  Pretty please?  With sugar on top?  Kthx.
>
>> > (of course, aarch64 is going to be new, talking now about the 32-bit softfp vs. hardfp).
>>
>> Yip.  I assume something like /lib64 to stay consistent with other
>> architectures.  aarch64 is hard float only.
>
> I expect that most distros will probably ship their aarch64 libraries
> in /lib64 (Debian and Ubuntu won't, but that's fine) to keep consistent
> with their other 64-bit ports, but where you put libraries is entirely
> unrelated to where the linker lives.  You could have all your libraries
> in /root/.trash/ and if the linker lives in a canonical location and
> can resolve that, that's fine.  I will still (obviously, I think, from
> my comments above) argue that the linker should live in a guaranteed
> unique location.  Overlap with other arches in /lib64 is certainly far
> more likely than overlap in /libhf.

  Not trying to criticize, just attempt to show my view of the subject.
What I understand of Debian multiarch is the desire to be able to:
1. Mount the root directory from a file server in different computers.
  1.1. Computers share user home directories, can see binaries of
       other architectures, and can share "noarch" files, as that would
       be a bug if such files were wordsize or byte order dependent.
2. Boot different kernels (linux, freebsd, etc) and be able to have
   things just working. One kernel may even run binaries targeted
   to the other as they are the same architecture, a U*X is a U*X,
   or close enough.

  Last time I looked at Debian wiki, there was not yet a defined
plan for bin/x-y-z/ paths, so, I understand this is an "incremental"
work in progress, and first goal is to install close enough binaries
together, e.g. run a X Server and drivers built for one ABI and client
applications built for another. Having firefox for one abi, and all
of gtk, and a myriad of loadable modules for another can be painful
to maintain... Applications that link to different ABI libGL looks like
a possible common case. Talking about lib*GL, I believe this is
one of the main reasons of hardfp arm, and only when passing
lots of float/double by value from different DSOs. Other reason is
that newer arm C compiler will support only software float or
hardware float with hardfp abi, but enough about it :-)

  For the sake of a example, TeXLive ships mostly "noarch" files,
and pre built, statically linked binaries are installed in bin/dir with
"dir" being one of:

alpha-linux
amd64-freebsd
amd64-kfreebsd
i386-cygwin
i386-freebsd
i386-kfreebsd
i386-linux
i386-netbsd
i386-solaris
mips-irix
powerpc-aix
powerpc-linux
sparc-linux
sparc-solaris
universal-darwin
win32
x86_64-darwin
x86_64-linux
x86_64-solaris

> ... Adam Conrad
>
>
> _______________________________________________
> cross-distro mailing list
> cross-distro@lists.linaro.org
> http://lists.linaro.org/mailman/listinfo/cross-distro

Thanks,
Paulo
Jakub Jelinek April 10, 2012, 5:36 a.m. UTC | #31
On Tue, Apr 10, 2012 at 05:17:36AM +0000, Adam Conrad wrote:
> On Tue, Apr 10, 2012 at 12:01:57AM -0400, Mike Frysinger wrote:
> > On Monday 09 April 2012 19:31:40 Adam Conrad wrote:
> > > I realize that most people can't see past their own use case to understand
> > > why a unique location for linkers is helpful, useful, and important for
> > > some other people's use cases, but you either didn't read or chose to
> > > ignore why using multilib paths just plain doesn't scale past a single
> > > base architecture, and why that's a problem for people who aren't you.
> > 
> > and as already stated, the proposed paths here, free of multiarch subpaths, 
> > satisfy the requirements that you've put forth
> 
> Like I said, then, you didn't actually read or understand why proposing
> multilib paths doesn't work.  You realize conceptually, I hope, that
> there's no guarantee of uniqueness in lib/lib64/lib32/libsf/libhf once
> you cross the base CPU architecture boundary, right?

But you are incorrectly assuming that anyone outside Debian actually sees
that as a problem.  When we've designed multilib for Linux (following Irix
layout, which for some weird reason Debian was the only one which ignored
it), it hasn't been a goal and I don't see why it should be a goal now.
For crossing base CPU architecture boundaries we have for many years
--sysroot, you can't run natively the binaries/libraries anyway, while
for ABIs that you can run natively it is very common to run binaries for the
different native ABIs concurrently.

We really want consistency about the dynamic linker names etc. across
different targets and sneaking silently multiarch paths on one architecture
would make it inconsistent with all the others.  So, please just use
/libhf/ld-linux.so.3.

> will), do we get to argue about this all over again in six months,
> instead of codifying a new and saner practice now?

Not everybody agrees it is a saner practice.

	Jakub
Jeff Law April 10, 2012, 6:05 a.m. UTC | #32
On 04/09/2012 11:17 PM, Adam Conrad wrote:
>
> Like I said, then, you didn't actually read or understand why proposing
> multilib paths doesn't work.  You realize conceptually, I hope, that
> there's no guarantee of uniqueness in lib/lib64/lib32/libsf/libhf once
> you cross the base CPU architecture boundary, right?
But what you haven't done is make a case for why anyone should care 
about this problem.

>
> Sure, I said that /libhf/ld-linux.so.3 would *accidentally* work for
> us right now, due to sheer luck, and you're running with that as saying
> that we clearly have no problem here worth solving.  When the next
> architecture clashes with linkers on another (hint: it almost certainly
> will), do we get to argue about this all over again in six months,
> instead of codifying a new and saner practice now?
My understanding of that architecture is that it's being handled as 
completely different from it's prior implementations.  ie, the toolchain 
and other things are treating it as an entirely separate architecture 
even though there is some common lineage to prior implementations.

If the tools are treating this upcoming architecture as a separate and 
distinct architecture rather than as a variant of a prior architecture, 
then why do we have to worry about conflicting in the filesystem space?

And just to be clear, I'm not taking sides, merely pointing out that you 
haven't made the case in this forum in a way that folks understand why 
this is an important problem.

Jeff
Konstantinos Margaritis April 10, 2012, 9:18 a.m. UTC | #33
On Tue, 10 Apr 2012 07:36:07 +0200
Jakub Jelinek <jakub@redhat.com> wrote:
> We really want consistency about the dynamic linker names etc. across
> different targets and sneaking silently multiarch paths on one architecture
> would make it inconsistent with all the others.  So, please just use
> /libhf/ld-linux.so.3.

I personally find /libhf extremely ugly. If having a second path is a problem, how about using the triplet in the filename? Like:

/lib/ld-linux-arm-linux-gnueabihf.so.3

?

Unique per arch and not multiarched. And AFAIK, Linux can handle long filenames just fine...

Konstantinos
Dennis Gilmore April 10, 2012, 2:32 p.m. UTC | #34
On Tue, 10 Apr 2012 12:18:51 +0300
Konstantinos Margaritis <konstantinos.margaritis@linaro.org> wrote:

> On Tue, 10 Apr 2012 07:36:07 +0200
> Jakub Jelinek <jakub@redhat.com> wrote:
> > We really want consistency about the dynamic linker names etc.
> > across different targets and sneaking silently multiarch paths on
> > one architecture would make it inconsistent with all the others.
> > So, please just use /libhf/ld-linux.so.3.
> 
> I personally find /libhf extremely ugly. If having a second path is a
> problem, how about using the triplet in the filename? Like:
> 
> /lib/ld-linux-arm-linux-gnueabihf.so.3
> 
> ?
> 
> Unique per arch and not multiarched. And AFAIK, Linux can handle long
> filenames just fine...

every distro uses a unique triplet, by putting the triplet in there you
then need to get all distros to change to using the same triplets. I
personally prefer /libhfp rather than /libhf but I am ok with using
either. Any change from /lib  would need us to do a mass rebuild.
because while not 100% needed I would rather keep libraries with the
linker. the changes to rpm to support it would be somewhat minimal. we
have stated in Fedora though that we have no intention to support mixing
hfp and sfp on the same system.  we really do need to ensure consensus
for arm64 which I think should be /lib64 for 64 bit arch consistency.


Dennis
Konstantinos Margaritis April 10, 2012, 3:14 p.m. UTC | #35
On Tue, 10 Apr 2012 09:32:22 -0500
Dennis Gilmore <dennis@gilmore.net.au> wrote: 
> every distro uses a unique triplet, by putting the triplet in there you
> then need to get all distros to change to using the same triplets. I
> personally prefer /libhfp rather than /libhf but I am ok with using
> either. Any change from /lib  would need us to do a mass rebuild.
> because while not 100% needed I would rather keep libraries with the
> linker. the changes to rpm to support it would be somewhat minimal. we
> have stated in Fedora though that we have no intention to support mixing
> hfp and sfp on the same system.  we really do need to ensure consensus
> for arm64 which I think should be /lib64 for 64 bit arch consistency.

Ok, I respect that, what about using the actual ABI name, ie aapcs-vfp? or something that includes both the architecture and the eabi, (arm-hardfloat, armhf, armhfp, etc), but *in* the filename (excluding the case of using a separate directory as it's not too popular).

Also, I'm not suggesting changing the triplet or anything, just deciding on a unique name for the triplet. Debian's argument is that the default multilib solution is not future-proof and we would prefer something that is more unique. 

Regarding /lib64 for aarch64, that's an entirely different discussion, though I do agree it should be also be resolved sooner rather than later as well.

Regards

Konstantinos
Steve McIntyre April 10, 2012, 3:37 p.m. UTC | #36
On Tue, Apr 10, 2012 at 09:32:22AM -0500, Dennis Gilmore wrote:
>On Tue, 10 Apr 2012 12:18:51 +0300
>Konstantinos Margaritis <konstantinos.margaritis@linaro.org> wrote:
>
>> On Tue, 10 Apr 2012 07:36:07 +0200
>> Jakub Jelinek <jakub@redhat.com> wrote:
>> > We really want consistency about the dynamic linker names etc.
>> > across different targets and sneaking silently multiarch paths on
>> > one architecture would make it inconsistent with all the others.
>> > So, please just use /libhf/ld-linux.so.3.
>> 
>> I personally find /libhf extremely ugly. If having a second path is a
>> problem, how about using the triplet in the filename? Like:
>> 
>> /lib/ld-linux-arm-linux-gnueabihf.so.3
>> 
>> ?
>> 
>> Unique per arch and not multiarched. And AFAIK, Linux can handle long
>> filenames just fine...
>
>every distro uses a unique triplet, by putting the triplet in there you
>then need to get all distros to change to using the same triplets.

Aargh. Again, use of a standard triplet for arm hard-float was agreed
by all parties at the Plumbers' meeting last September. For exactly
this reason. Now it seems that a number of people have totally ignored
that consensus for the last six months.

>I personally prefer /libhfp rather than /libhf but I am ok with using
>either. Any change from /lib would need us to do a mass
>rebuild. because while not 100% needed I would rather keep libraries
>with the linker. the changes to rpm to support it would be somewhat
>minimal. we have stated in Fedora though that we have no intention to
>support mixing hfp and sfp on the same system.  we really do need to
>ensure consensus for arm64 which I think should be /lib64 for 64 bit
>arch consistency.

Precisely who in Redhat/Fedora land has the power to make decisions in
this area? We've been clearly wasting our time thus far trying to
negotiate agreements about the hard-float platform.

Cheers,
Michael Edwards April 10, 2012, 4:46 p.m. UTC | #37
FWIW, my use case for multiarch is not "sharing the root filesystem 
among multiple systems".  It's "sharing the non-lib namespace (/etc, 
/bin, data) among multiple instruction sets / ABI variants on the same 
system".  I don't need (/usr)?/s?bin to be decorated with a triplet, 
because the kernel picks a fresh ld.so variant at the execve() boundary; 
I am happy to mix ARM and x86 binaries (and Python and shell scripts) in 
/bin, and let the kernel (and binfmt_misc + qemu) sort it out.  I only 
need (/usr)?/lib to be disambiguated *at runtime* because ld.so is not 
as smart as the kernel.  (It's not just ld.so, of course; module/plugin 
loaders for everything from Python to Firefox have the same problem, and 
if they don't have the triplet in there somewhere then multiarch breaks 
them.)

As long as the kernel can find the right ld.so and each ld.so can find 
its own ld.so.conf, I don't really care where the libraries are put at 
runtime, as long as I can make it different for each ISA/ABI.  However, 
I do care how much autoconf / pkg-config / debhelper misery I have to go 
through each time I need to pull in another library dependency.  
Upstream build machinery can usually accommodate 
/just/about/anything/lib.  Trailing components like lib32, libhf, or 
lib-gnu-autoconf-triplet are not as consistently trivial.

Personally, I would like for all shared objects to live in 
(/usr)?/gnu-autoconf-triplet(-extranoise)?/lib, and for the kernel to 
take responsibility for pointing (/usr)?/lib at an overlay mount 
containing whatever makes sense for the currently running binary, a la 
/proc/self.  That way I can grandfather in binaries with ABI-ignorant 
hard-coded library paths, and still handle ISA variants.  The 
"extranoise" might be "neon", or "ssse3", or "android" (so that 
non-Android binaries on the same system don't see Android-specific 
libraries with stupidly generic names like libui.so).  And the overlay 
mount is so that I can, if I choose, build the vast majority of my 
system without NEON instructions (and thus not take the overhead of VFP 
context save/restore during timeslices that don't use actual floating 
point) and still use a subset of those libraries from NEON-anointed 
binaries (assuming I define some sensible way for the kernel to make 
that distinction).

That isn't necessarily the right solution, of course -- either at a 
technical level or in the light of the LSB process and other 
inter-distro politics.  But maybe it's at least a more plausible use 
case for 2012 than NFS-mounting /usr/local on a mix of sun4c, sun4u, and 
IRIX workstations.  (That never did work quite right ...)

Cheers,
- Michael
Mike Frysinger April 11, 2012, 3:09 a.m. UTC | #38
On Tuesday 10 April 2012 01:17:36 Adam Conrad wrote:
> On Tue, Apr 10, 2012 at 12:01:57AM -0400, Mike Frysinger wrote:
> > On Monday 09 April 2012 19:31:40 Adam Conrad wrote:
> > > I realize that most people can't see past their own use case to
> > > understand why a unique location for linkers is helpful, useful, and
> > > important for some other people's use cases, but you either didn't
> > > read or chose to ignore why using multilib paths just plain doesn't
> > > scale past a single base architecture, and why that's a problem for
> > > people who aren't you.
> > 
> > and as already stated, the proposed paths here, free of multiarch
> > subpaths, satisfy the requirements that you've put forth
> 
> Like I said, then, you didn't actually read or understand why proposing
> multilib paths doesn't work.  You realize conceptually, I hope, that
> there's no guarantee of uniqueness in lib/lib64/lib32/libsf/libhf once
> you cross the base CPU architecture boundary, right?

i don't see this as a problem

> Sure, I said that /libhf/ld-linux.so.3 would *accidentally* work for
> us right now, due to sheer luck, and you're running with that as saying
> that we clearly have no problem here worth solving.

my point was: it works today and has no clashes.  that satisfies the "omg we 
have to ship something $now" and satisfies the requirement that only the Debian 
people are putting forth (and has already been violated by many targets): the 
ldso must be unique across all arches/multilibs.

> When the next architecture clashes with linkers on another (hint: it almost
> certainly will), do we get to argue about this all over again in six months,
> instead of codifying a new and saner practice now?

i don't buy that it'll happen that soon (since ldso's don't get generated 
quickly), but that is certainly plenty of time for the Debian project to 
attempt to convince everyone else that multiarch isn't a waste of time.  and 
does so without holding up moving forward with a unified arm hardfloat abi.
-mike
Mike Frysinger April 11, 2012, 3:15 a.m. UTC | #39
On Tuesday 10 April 2012 12:46:49 Michael Edwards wrote:
> That way I can grandfather in binaries with ABI-ignorant
> hard-coded library paths, and still handle ISA variants.  The
> "extranoise" might be "neon", or "ssse3"

aren't ISA variants handled already by glibc ?  that's what the hwcaps stuff 
does -- you can put optimized versions in ISA-specific subdirs of the normal 
lib paths.  glibc will look for those first before falling back to the common 
libs.
-mike
Richard Earnshaw April 11, 2012, 10:55 a.m. UTC | #40
On 05/04/12 14:34, Dennis Gilmore wrote:
> Fedora at least plans to not support installing hfp and sfp on the same
> system, while not completely decided I don't think we will be
> supporting running 32 bit arm binaries on 64 bit arm.  there is not
>  a legacy support use case that I can think of i.e. existing common
>  proprietary software. Though I imagine that we will use /lib64 for
>  consistency with existing 64 bit arches.

Regardless of what Fedora wants to support in its own environments, it's
important that what they do doesn't prevent other distros from
supporting multiple flavours if they so wish.  That means that there
must be at least common agreement on the fundamental naming of the
dynamic loader (assuming that the libraries themselves can be found via
some config magic).

R.
Jeff Law April 11, 2012, 12:05 p.m. UTC | #41
On 04/10/2012 09:37 AM, Steve McIntyre wrote:
>
> Aargh. Again, use of a standard triplet for arm hard-float was agreed
> by all parties at the Plumbers' meeting last September. For exactly
> this reason. Now it seems that a number of people have totally ignored
> that consensus for the last six months.
More correctly, I don't think the ARM community disseminated the 
substance of that agreement to the GCC and other communities.

I think standardizing the triplet is a no-brainer and independent of 
whether or not the triplet shows up in the path/name of the dynamic 
linker.  Furthermore, the ARM GCC maintainers have the ability to 
standardize the triplet without a long debate on the subject.

Jeff
Michael Edwards April 11, 2012, 5:21 p.m. UTC | #42
On Tue, Apr 10, 2012 at 8:15 PM, Mike Frysinger <vapier@gentoo.org> wrote:
> On Tuesday 10 April 2012 12:46:49 Michael Edwards wrote:
>> That way I can grandfather in binaries with ABI-ignorant
>> hard-coded library paths, and still handle ISA variants.  The
>> "extranoise" might be "neon", or "ssse3"
>
> aren't ISA variants handled already by glibc ?  that's what the hwcaps stuff
> does -- you can put optimized versions in ISA-specific subdirs of the normal
> lib paths.  glibc will look for those first before falling back to the common
> libs.
> -mike

I stand corrected with regard to non-ABI-altering ISA variations --
except for the nightmare that is Bionic libc, which is out of scope
for the present discussion.  Googling reminds me that Ulrich covered
all this ground in his original document for Linaro (which appears to
have moved onto the Debian wiki as
http://wiki.debian.org/Multiarch/LibraryPathOverview).

So this really is about nothing but freezing the full ABI name (vs. a
two-character suffix) into the path to ld.so.  And, of course, the
implied commitment to resolve any residual ambiguities in the ABI
(__cxa_pure_virtual(), anyone?) and to prioritize spec conformance
over bug-for-bug compatibility
(https://bugs.launchpad.net/gcc-linaro/+bug/952565).  When you give
something a detailed name, people are more likely to assume that it
has a detailed spec, interchangeable among distros and over time.  For
better or for worse, perpetuating the /lib?? kludge doesn't give that
impression.

Cheers,
- Michael
diff mbox

Patch

Index: gcc/config/arm/linux-elf.h
===================================================================
--- gcc/config/arm/linux-elf.h	(revision 185708)
+++ gcc/config/arm/linux-elf.h	(working copy)
@@ -60,13 +60,17 @@ 
 #define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
 
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define LINUX_DYNAMIC_LINKER_HF "/lib/arm-linux-gnueabihf/ld-linux.so.3"
 
 #define LINUX_TARGET_LINK_SPEC  "%{h*} \
    %{static:-Bstatic} \
    %{shared:-shared} \
    %{symbolic:-Bsymbolic} \
    %{rdynamic:-export-dynamic} \
-   -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
+   %{mhard-float:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
+   %{mfloat-abi=hard:-dynamic-linker " LINUX_DYNAMIC_LINKER_HF "} \
+   %{!mfloat-abi: \
+     %{!mhard-float:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
    -X \
    %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
    SUBTARGET_EXTRA_LINK_SPEC