powerpc: Fix check-localplt from 99303f3871

Message ID 20260429124752.2697484-1-adhemerval.zanella@linaro.org (mailing list archive)
State Under Review
Delegated to: H.J. Lu
Headers
Series powerpc: Fix check-localplt from 99303f3871 |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
redhat-pt-bot/TryBot-32bit success Build for i686

Commit Message

Adhemerval Zanella Netto April 29, 2026, 12:47 p.m. UTC
  The misc/hash.c uses floating-point operations and powerpc softfp
also exports the same libgcc symbols, which creates extra PLT calls.
Use the same hack from divdi3-symbol-hacks.h to route such calls
internally.

Checked with build/check for powerpc-linux-gnu-soft.
---
 soft-fp/fixunssfsi.c                     | 1 +
 soft-fp/gesf2.c                          | 1 +
 soft-fp/lesf2.c                          | 2 ++
 sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
 4 files changed, 12 insertions(+)
  

Comments

H.J. Lu May 4, 2026, 1:56 p.m. UTC | #1
On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The misc/hash.c uses floating-point operations and powerpc softfp
> also exports the same libgcc symbols, which creates extra PLT calls.
> Use the same hack from divdi3-symbol-hacks.h to route such calls
> internally.
>
> Checked with build/check for powerpc-linux-gnu-soft.
> ---
>  soft-fp/fixunssfsi.c                     | 1 +
>  soft-fp/gesf2.c                          | 1 +
>  soft-fp/lesf2.c                          | 2 ++
>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
>  4 files changed, 12 insertions(+)
>
> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
> index 9e883a9769..1b17b04852 100644
> --- a/soft-fp/fixunssfsi.c
> +++ b/soft-fp/fixunssfsi.c
> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
>
>    return r;
>  }
> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
> index f7289982f1..455bb75d34 100644
> --- a/soft-fp/gesf2.c
> +++ b/soft-fp/gesf2.c
> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
>  }
>
>  strong_alias (__gesf2, __gtsf2);
> +strong_alias (__gesf2, __gesf2_internal)
> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
> index 2f4921f3ce..3b40b3c9b8 100644
> --- a/soft-fp/lesf2.c
> +++ b/soft-fp/lesf2.c
> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
>  }
>
>  strong_alias (__lesf2, __ltsf2);
> +strong_alias (__lesf2, __lesf2_internal);
> +strong_alias (__ltsf2, __ltsf2_internal);
> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> index 1faf282601..6f85c16bb8 100644
> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> @@ -19,3 +19,11 @@
>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
>
>  #include_next "symbol-hacks.h"
> +
> +#if !defined __ASSEMBLER__ \
> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
> +asm ("__fixunssfsi = __fixunssfsi_internal");
> +asm ("__ltsf2 = __ltsf2_internal");
> +asm ("__lesf2 = __lesf2_internal");
> +asm ("__gesf2 = __gesf2_internal");
> +#endif
> --
> 2.43.0
>

I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
define aliases and implement the symbol hack only if needed by defining
a unique macro when compiling the function definition.
  
Adhemerval Zanella Netto May 4, 2026, 2:41 p.m. UTC | #2
On 04/05/26 10:56, H.J. Lu wrote:
> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> The misc/hash.c uses floating-point operations and powerpc softfp
>> also exports the same libgcc symbols, which creates extra PLT calls.
>> Use the same hack from divdi3-symbol-hacks.h to route such calls
>> internally.
>>
>> Checked with build/check for powerpc-linux-gnu-soft.
>> ---
>>  soft-fp/fixunssfsi.c                     | 1 +
>>  soft-fp/gesf2.c                          | 1 +
>>  soft-fp/lesf2.c                          | 2 ++
>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
>>  4 files changed, 12 insertions(+)
>>
>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
>> index 9e883a9769..1b17b04852 100644
>> --- a/soft-fp/fixunssfsi.c
>> +++ b/soft-fp/fixunssfsi.c
>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
>>
>>    return r;
>>  }
>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
>> index f7289982f1..455bb75d34 100644
>> --- a/soft-fp/gesf2.c
>> +++ b/soft-fp/gesf2.c
>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
>>  }
>>
>>  strong_alias (__gesf2, __gtsf2);
>> +strong_alias (__gesf2, __gesf2_internal)
>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
>> index 2f4921f3ce..3b40b3c9b8 100644
>> --- a/soft-fp/lesf2.c
>> +++ b/soft-fp/lesf2.c
>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
>>  }
>>
>>  strong_alias (__lesf2, __ltsf2);
>> +strong_alias (__lesf2, __lesf2_internal);
>> +strong_alias (__ltsf2, __ltsf2_internal);
>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>> index 1faf282601..6f85c16bb8 100644
>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>> @@ -19,3 +19,11 @@
>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
>>
>>  #include_next "symbol-hacks.h"
>> +
>> +#if !defined __ASSEMBLER__ \
>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
>> +asm ("__fixunssfsi = __fixunssfsi_internal");
>> +asm ("__ltsf2 = __ltsf2_internal");
>> +asm ("__lesf2 = __lesf2_internal");
>> +asm ("__gesf2 = __gesf2_internal");
>> +#endif
>> --
>> 2.43.0
>>
> 
> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
> define aliases and implement the symbol hack only if needed by defining
> a unique macro when compiling the function definition.
I though about it, but these libgcc interfaces were a historical mistake and
only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like 
csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).

So I went to the simplest solution.
  
H.J. Lu May 4, 2026, 8:21 p.m. UTC | #3
On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 04/05/26 10:56, H.J. Lu wrote:
> > On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >> The misc/hash.c uses floating-point operations and powerpc softfp
> >> also exports the same libgcc symbols, which creates extra PLT calls.
> >> Use the same hack from divdi3-symbol-hacks.h to route such calls
> >> internally.
> >>
> >> Checked with build/check for powerpc-linux-gnu-soft.
> >> ---
> >>  soft-fp/fixunssfsi.c                     | 1 +
> >>  soft-fp/gesf2.c                          | 1 +
> >>  soft-fp/lesf2.c                          | 2 ++
> >>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
> >>  4 files changed, 12 insertions(+)
> >>
> >> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
> >> index 9e883a9769..1b17b04852 100644
> >> --- a/soft-fp/fixunssfsi.c
> >> +++ b/soft-fp/fixunssfsi.c
> >> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
> >>
> >>    return r;
> >>  }
> >> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
> >> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
> >> index f7289982f1..455bb75d34 100644
> >> --- a/soft-fp/gesf2.c
> >> +++ b/soft-fp/gesf2.c
> >> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
> >>  }
> >>
> >>  strong_alias (__gesf2, __gtsf2);
> >> +strong_alias (__gesf2, __gesf2_internal)
> >> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
> >> index 2f4921f3ce..3b40b3c9b8 100644
> >> --- a/soft-fp/lesf2.c
> >> +++ b/soft-fp/lesf2.c
> >> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
> >>  }
> >>
> >>  strong_alias (__lesf2, __ltsf2);
> >> +strong_alias (__lesf2, __lesf2_internal);
> >> +strong_alias (__ltsf2, __ltsf2_internal);
> >> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >> index 1faf282601..6f85c16bb8 100644
> >> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >> @@ -19,3 +19,11 @@
> >>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
> >>
> >>  #include_next "symbol-hacks.h"
> >> +
> >> +#if !defined __ASSEMBLER__ \
> >> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
> >> +asm ("__fixunssfsi = __fixunssfsi_internal");
> >> +asm ("__ltsf2 = __ltsf2_internal");
> >> +asm ("__lesf2 = __lesf2_internal");
> >> +asm ("__gesf2 = __gesf2_internal");
> >> +#endif
> >> --
> >> 2.43.0
> >>
> >
> > I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
> > define aliases and implement the symbol hack only if needed by defining
> > a unique macro when compiling the function definition.
> I though about it, but these libgcc interfaces were a historical mistake and
> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
>
> So I went to the simplest solution.

Do all soft-fp targets need these aliases?
  
Adhemerval Zanella Netto May 4, 2026, 8:46 p.m. UTC | #4
On 04/05/26 17:21, H.J. Lu wrote:
> On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 04/05/26 10:56, H.J. Lu wrote:
>>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>> The misc/hash.c uses floating-point operations and powerpc softfp
>>>> also exports the same libgcc symbols, which creates extra PLT calls.
>>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
>>>> internally.
>>>>
>>>> Checked with build/check for powerpc-linux-gnu-soft.
>>>> ---
>>>>  soft-fp/fixunssfsi.c                     | 1 +
>>>>  soft-fp/gesf2.c                          | 1 +
>>>>  soft-fp/lesf2.c                          | 2 ++
>>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
>>>>  4 files changed, 12 insertions(+)
>>>>
>>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
>>>> index 9e883a9769..1b17b04852 100644
>>>> --- a/soft-fp/fixunssfsi.c
>>>> +++ b/soft-fp/fixunssfsi.c
>>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
>>>>
>>>>    return r;
>>>>  }
>>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
>>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
>>>> index f7289982f1..455bb75d34 100644
>>>> --- a/soft-fp/gesf2.c
>>>> +++ b/soft-fp/gesf2.c
>>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
>>>>  }
>>>>
>>>>  strong_alias (__gesf2, __gtsf2);
>>>> +strong_alias (__gesf2, __gesf2_internal)
>>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
>>>> index 2f4921f3ce..3b40b3c9b8 100644
>>>> --- a/soft-fp/lesf2.c
>>>> +++ b/soft-fp/lesf2.c
>>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
>>>>  }
>>>>
>>>>  strong_alias (__lesf2, __ltsf2);
>>>> +strong_alias (__lesf2, __lesf2_internal);
>>>> +strong_alias (__ltsf2, __ltsf2_internal);
>>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>> index 1faf282601..6f85c16bb8 100644
>>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>> @@ -19,3 +19,11 @@
>>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
>>>>
>>>>  #include_next "symbol-hacks.h"
>>>> +
>>>> +#if !defined __ASSEMBLER__ \
>>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
>>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
>>>> +asm ("__ltsf2 = __ltsf2_internal");
>>>> +asm ("__lesf2 = __lesf2_internal");
>>>> +asm ("__gesf2 = __gesf2_internal");
>>>> +#endif
>>>> --
>>>> 2.43.0
>>>>
>>>
>>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
>>> define aliases and implement the symbol hack only if needed by defining
>>> a unique macro when compiling the function definition.
>> I though about it, but these libgcc interfaces were a historical mistake and
>> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
>> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
>> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
>>
>> So I went to the simplest solution.
> 
> Do all soft-fp targets need these aliases?
> 

No, but the glibc soft-fp objects are not built for these ABI anyway.
  
H.J. Lu May 4, 2026, 9 p.m. UTC | #5
On Tue, May 5, 2026 at 4:46 AM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 04/05/26 17:21, H.J. Lu wrote:
> > On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >>
> >>
> >> On 04/05/26 10:56, H.J. Lu wrote:
> >>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
> >>> <adhemerval.zanella@linaro.org> wrote:
> >>>>
> >>>> The misc/hash.c uses floating-point operations and powerpc softfp
> >>>> also exports the same libgcc symbols, which creates extra PLT calls.
> >>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
> >>>> internally.
> >>>>
> >>>> Checked with build/check for powerpc-linux-gnu-soft.
> >>>> ---
> >>>>  soft-fp/fixunssfsi.c                     | 1 +
> >>>>  soft-fp/gesf2.c                          | 1 +
> >>>>  soft-fp/lesf2.c                          | 2 ++
> >>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
> >>>>  4 files changed, 12 insertions(+)
> >>>>
> >>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
> >>>> index 9e883a9769..1b17b04852 100644
> >>>> --- a/soft-fp/fixunssfsi.c
> >>>> +++ b/soft-fp/fixunssfsi.c
> >>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
> >>>>
> >>>>    return r;
> >>>>  }
> >>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
> >>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
> >>>> index f7289982f1..455bb75d34 100644
> >>>> --- a/soft-fp/gesf2.c
> >>>> +++ b/soft-fp/gesf2.c
> >>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
> >>>>  }
> >>>>
> >>>>  strong_alias (__gesf2, __gtsf2);
> >>>> +strong_alias (__gesf2, __gesf2_internal)
> >>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
> >>>> index 2f4921f3ce..3b40b3c9b8 100644
> >>>> --- a/soft-fp/lesf2.c
> >>>> +++ b/soft-fp/lesf2.c
> >>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
> >>>>  }
> >>>>
> >>>>  strong_alias (__lesf2, __ltsf2);
> >>>> +strong_alias (__lesf2, __lesf2_internal);
> >>>> +strong_alias (__ltsf2, __ltsf2_internal);
> >>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>> index 1faf282601..6f85c16bb8 100644
> >>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>> @@ -19,3 +19,11 @@
> >>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
> >>>>
> >>>>  #include_next "symbol-hacks.h"
> >>>> +
> >>>> +#if !defined __ASSEMBLER__ \
> >>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
> >>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
> >>>> +asm ("__ltsf2 = __ltsf2_internal");
> >>>> +asm ("__lesf2 = __lesf2_internal");
> >>>> +asm ("__gesf2 = __gesf2_internal");
> >>>> +#endif
> >>>> --
> >>>> 2.43.0
> >>>>
> >>>
> >>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
> >>> define aliases and implement the symbol hack only if needed by defining
> >>> a unique macro when compiling the function definition.
> >> I though about it, but these libgcc interfaces were a historical mistake and
> >> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
> >> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
> >> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
> >>
> >> So I went to the simplest solution.
> >
> > Do all soft-fp targets need these aliases?
> >
>
> No, but the glibc soft-fp objects are not built for these ABI anyway.
>

There is

sysdeps/powerpc/nofpu/Makefile:sysdep_routines +=
$(gcc-single-routines) $(gcc-double-routines) \

Should symbol-hacks.h changes be added to sysdeps/powerpc/nofpu,
instead of sysdeps/powerpc/powerpc32?
  
H.J. Lu May 4, 2026, 9:08 p.m. UTC | #6
On Tue, May 5, 2026 at 5:00 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Tue, May 5, 2026 at 4:46 AM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
> >
> >
> >
> > On 04/05/26 17:21, H.J. Lu wrote:
> > > On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
> > > <adhemerval.zanella@linaro.org> wrote:
> > >>
> > >>
> > >>
> > >> On 04/05/26 10:56, H.J. Lu wrote:
> > >>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
> > >>> <adhemerval.zanella@linaro.org> wrote:
> > >>>>
> > >>>> The misc/hash.c uses floating-point operations and powerpc softfp
> > >>>> also exports the same libgcc symbols, which creates extra PLT calls.
> > >>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
> > >>>> internally.
> > >>>>
> > >>>> Checked with build/check for powerpc-linux-gnu-soft.
> > >>>> ---
> > >>>>  soft-fp/fixunssfsi.c                     | 1 +
> > >>>>  soft-fp/gesf2.c                          | 1 +
> > >>>>  soft-fp/lesf2.c                          | 2 ++
> > >>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
> > >>>>  4 files changed, 12 insertions(+)
> > >>>>
> > >>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
> > >>>> index 9e883a9769..1b17b04852 100644
> > >>>> --- a/soft-fp/fixunssfsi.c
> > >>>> +++ b/soft-fp/fixunssfsi.c
> > >>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
> > >>>>
> > >>>>    return r;
> > >>>>  }
> > >>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
> > >>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
> > >>>> index f7289982f1..455bb75d34 100644
> > >>>> --- a/soft-fp/gesf2.c
> > >>>> +++ b/soft-fp/gesf2.c
> > >>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
> > >>>>  }
> > >>>>
> > >>>>  strong_alias (__gesf2, __gtsf2);
> > >>>> +strong_alias (__gesf2, __gesf2_internal)
> > >>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
> > >>>> index 2f4921f3ce..3b40b3c9b8 100644
> > >>>> --- a/soft-fp/lesf2.c
> > >>>> +++ b/soft-fp/lesf2.c
> > >>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
> > >>>>  }
> > >>>>
> > >>>>  strong_alias (__lesf2, __ltsf2);
> > >>>> +strong_alias (__lesf2, __lesf2_internal);
> > >>>> +strong_alias (__ltsf2, __ltsf2_internal);
> > >>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> > >>>> index 1faf282601..6f85c16bb8 100644
> > >>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
> > >>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> > >>>> @@ -19,3 +19,11 @@
> > >>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
> > >>>>
> > >>>>  #include_next "symbol-hacks.h"
> > >>>> +
> > >>>> +#if !defined __ASSEMBLER__ \
> > >>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
> > >>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
> > >>>> +asm ("__ltsf2 = __ltsf2_internal");
> > >>>> +asm ("__lesf2 = __lesf2_internal");
> > >>>> +asm ("__gesf2 = __gesf2_internal");
> > >>>> +#endif
> > >>>> --
> > >>>> 2.43.0
> > >>>>
> > >>>
> > >>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
> > >>> define aliases and implement the symbol hack only if needed by defining
> > >>> a unique macro when compiling the function definition.
> > >> I though about it, but these libgcc interfaces were a historical mistake and
> > >> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
> > >> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
> > >> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
> > >>
> > >> So I went to the simplest solution.
> > >
> > > Do all soft-fp targets need these aliases?
> > >
> >
> > No, but the glibc soft-fp objects are not built for these ABI anyway.
> >
>
> There is
>
> sysdeps/powerpc/nofpu/Makefile:sysdep_routines +=
> $(gcc-single-routines) $(gcc-double-routines) \
>
> Should symbol-hacks.h changes be added to sysdeps/powerpc/nofpu,
> instead of sysdeps/powerpc/powerpc32?

I think we need single-symbol-hacks.h in soft-fp and a target which
uses $(gcc-single-routines) should just include it.
  
Adhemerval Zanella Netto May 5, 2026, 12:15 p.m. UTC | #7
On 04/05/26 18:08, H.J. Lu wrote:
> On Tue, May 5, 2026 at 5:00 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On Tue, May 5, 2026 at 4:46 AM Adhemerval Zanella Netto
>> <adhemerval.zanella@linaro.org> wrote:
>>>
>>>
>>>
>>> On 04/05/26 17:21, H.J. Lu wrote:
>>>> On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On 04/05/26 10:56, H.J. Lu wrote:
>>>>>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>
>>>>>>> The misc/hash.c uses floating-point operations and powerpc softfp
>>>>>>> also exports the same libgcc symbols, which creates extra PLT calls.
>>>>>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
>>>>>>> internally.
>>>>>>>
>>>>>>> Checked with build/check for powerpc-linux-gnu-soft.
>>>>>>> ---
>>>>>>>  soft-fp/fixunssfsi.c                     | 1 +
>>>>>>>  soft-fp/gesf2.c                          | 1 +
>>>>>>>  soft-fp/lesf2.c                          | 2 ++
>>>>>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
>>>>>>>  4 files changed, 12 insertions(+)
>>>>>>>
>>>>>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
>>>>>>> index 9e883a9769..1b17b04852 100644
>>>>>>> --- a/soft-fp/fixunssfsi.c
>>>>>>> +++ b/soft-fp/fixunssfsi.c
>>>>>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
>>>>>>>
>>>>>>>    return r;
>>>>>>>  }
>>>>>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
>>>>>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
>>>>>>> index f7289982f1..455bb75d34 100644
>>>>>>> --- a/soft-fp/gesf2.c
>>>>>>> +++ b/soft-fp/gesf2.c
>>>>>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
>>>>>>>  }
>>>>>>>
>>>>>>>  strong_alias (__gesf2, __gtsf2);
>>>>>>> +strong_alias (__gesf2, __gesf2_internal)
>>>>>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
>>>>>>> index 2f4921f3ce..3b40b3c9b8 100644
>>>>>>> --- a/soft-fp/lesf2.c
>>>>>>> +++ b/soft-fp/lesf2.c
>>>>>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
>>>>>>>  }
>>>>>>>
>>>>>>>  strong_alias (__lesf2, __ltsf2);
>>>>>>> +strong_alias (__lesf2, __lesf2_internal);
>>>>>>> +strong_alias (__ltsf2, __ltsf2_internal);
>>>>>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>> index 1faf282601..6f85c16bb8 100644
>>>>>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>> @@ -19,3 +19,11 @@
>>>>>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
>>>>>>>
>>>>>>>  #include_next "symbol-hacks.h"
>>>>>>> +
>>>>>>> +#if !defined __ASSEMBLER__ \
>>>>>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
>>>>>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
>>>>>>> +asm ("__ltsf2 = __ltsf2_internal");
>>>>>>> +asm ("__lesf2 = __lesf2_internal");
>>>>>>> +asm ("__gesf2 = __gesf2_internal");
>>>>>>> +#endif
>>>>>>> --
>>>>>>> 2.43.0
>>>>>>>
>>>>>>
>>>>>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
>>>>>> define aliases and implement the symbol hack only if needed by defining
>>>>>> a unique macro when compiling the function definition.
>>>>> I though about it, but these libgcc interfaces were a historical mistake and
>>>>> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
>>>>> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
>>>>> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
>>>>>
>>>>> So I went to the simplest solution.
>>>>
>>>> Do all soft-fp targets need these aliases?
>>>>
>>>
>>> No, but the glibc soft-fp objects are not built for these ABI anyway.
>>>
>>
>> There is
>>
>> sysdeps/powerpc/nofpu/Makefile:sysdep_routines +=
>> $(gcc-single-routines) $(gcc-double-routines) \
>>
>> Should symbol-hacks.h changes be added to sysdeps/powerpc/nofpu,
>> instead of sysdeps/powerpc/powerpc32?
> 
> I think we need single-symbol-hacks.h in soft-fp and a target which
> uses $(gcc-single-routines) should just include it.
> 

My point is now only powerpc requires such symbols, and it should be no
future ABI that would need it.  Maybe a better options would to move
$(gcc-single-routines) $(gcc-double-routines) to  powerpc specific folders,
but I went to simplest solution.
  
H.J. Lu May 5, 2026, 12:27 p.m. UTC | #8
On Tue, May 5, 2026 at 8:15 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 04/05/26 18:08, H.J. Lu wrote:
> > On Tue, May 5, 2026 at 5:00 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >>
> >> On Tue, May 5, 2026 at 4:46 AM Adhemerval Zanella Netto
> >> <adhemerval.zanella@linaro.org> wrote:
> >>>
> >>>
> >>>
> >>> On 04/05/26 17:21, H.J. Lu wrote:
> >>>> On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
> >>>> <adhemerval.zanella@linaro.org> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 04/05/26 10:56, H.J. Lu wrote:
> >>>>>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
> >>>>>> <adhemerval.zanella@linaro.org> wrote:
> >>>>>>>
> >>>>>>> The misc/hash.c uses floating-point operations and powerpc softfp
> >>>>>>> also exports the same libgcc symbols, which creates extra PLT calls.
> >>>>>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
> >>>>>>> internally.
> >>>>>>>
> >>>>>>> Checked with build/check for powerpc-linux-gnu-soft.
> >>>>>>> ---
> >>>>>>>  soft-fp/fixunssfsi.c                     | 1 +
> >>>>>>>  soft-fp/gesf2.c                          | 1 +
> >>>>>>>  soft-fp/lesf2.c                          | 2 ++
> >>>>>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
> >>>>>>>  4 files changed, 12 insertions(+)
> >>>>>>>
> >>>>>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
> >>>>>>> index 9e883a9769..1b17b04852 100644
> >>>>>>> --- a/soft-fp/fixunssfsi.c
> >>>>>>> +++ b/soft-fp/fixunssfsi.c
> >>>>>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
> >>>>>>>
> >>>>>>>    return r;
> >>>>>>>  }
> >>>>>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
> >>>>>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
> >>>>>>> index f7289982f1..455bb75d34 100644
> >>>>>>> --- a/soft-fp/gesf2.c
> >>>>>>> +++ b/soft-fp/gesf2.c
> >>>>>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
> >>>>>>>  }
> >>>>>>>
> >>>>>>>  strong_alias (__gesf2, __gtsf2);
> >>>>>>> +strong_alias (__gesf2, __gesf2_internal)
> >>>>>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
> >>>>>>> index 2f4921f3ce..3b40b3c9b8 100644
> >>>>>>> --- a/soft-fp/lesf2.c
> >>>>>>> +++ b/soft-fp/lesf2.c
> >>>>>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
> >>>>>>>  }
> >>>>>>>
> >>>>>>>  strong_alias (__lesf2, __ltsf2);
> >>>>>>> +strong_alias (__lesf2, __lesf2_internal);
> >>>>>>> +strong_alias (__ltsf2, __ltsf2_internal);
> >>>>>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>>>>> index 1faf282601..6f85c16bb8 100644
> >>>>>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>>>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
> >>>>>>> @@ -19,3 +19,11 @@
> >>>>>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
> >>>>>>>
> >>>>>>>  #include_next "symbol-hacks.h"
> >>>>>>> +
> >>>>>>> +#if !defined __ASSEMBLER__ \
> >>>>>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
> >>>>>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
> >>>>>>> +asm ("__ltsf2 = __ltsf2_internal");
> >>>>>>> +asm ("__lesf2 = __lesf2_internal");
> >>>>>>> +asm ("__gesf2 = __gesf2_internal");
> >>>>>>> +#endif
> >>>>>>> --
> >>>>>>> 2.43.0
> >>>>>>>
> >>>>>>
> >>>>>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
> >>>>>> define aliases and implement the symbol hack only if needed by defining
> >>>>>> a unique macro when compiling the function definition.
> >>>>> I though about it, but these libgcc interfaces were a historical mistake and
> >>>>> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
> >>>>> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
> >>>>> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
> >>>>>
> >>>>> So I went to the simplest solution.
> >>>>
> >>>> Do all soft-fp targets need these aliases?
> >>>>
> >>>
> >>> No, but the glibc soft-fp objects are not built for these ABI anyway.
> >>>
> >>
> >> There is
> >>
> >> sysdeps/powerpc/nofpu/Makefile:sysdep_routines +=
> >> $(gcc-single-routines) $(gcc-double-routines) \
> >>
> >> Should symbol-hacks.h changes be added to sysdeps/powerpc/nofpu,
> >> instead of sysdeps/powerpc/powerpc32?
> >
> > I think we need single-symbol-hacks.h in soft-fp and a target which
> > uses $(gcc-single-routines) should just include it.
> >
>
> My point is now only powerpc requires such symbols, and it should be no
> future ABI that would need it.  Maybe a better options would to move
> $(gcc-single-routines) $(gcc-double-routines) to  powerpc specific folders,
> but I went to simplest solution.

I prefer consistency.   Symbol hacks for $(gcc-single-routines) belong to
sysdeps/powerpc/nofpu.   Checking __NO_FPRS__ doesn't look nice.
  
Adhemerval Zanella Netto May 5, 2026, 12:29 p.m. UTC | #9
On 05/05/26 09:27, H.J. Lu wrote:
> On Tue, May 5, 2026 at 8:15 PM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 04/05/26 18:08, H.J. Lu wrote:
>>> On Tue, May 5, 2026 at 5:00 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>>>>
>>>> On Tue, May 5, 2026 at 4:46 AM Adhemerval Zanella Netto
>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>
>>>>>
>>>>>
>>>>> On 04/05/26 17:21, H.J. Lu wrote:
>>>>>> On Mon, May 4, 2026 at 10:41 PM Adhemerval Zanella Netto
>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 04/05/26 10:56, H.J. Lu wrote:
>>>>>>>> On Wed, Apr 29, 2026 at 8:48 PM Adhemerval Zanella
>>>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>>>
>>>>>>>>> The misc/hash.c uses floating-point operations and powerpc softfp
>>>>>>>>> also exports the same libgcc symbols, which creates extra PLT calls.
>>>>>>>>> Use the same hack from divdi3-symbol-hacks.h to route such calls
>>>>>>>>> internally.
>>>>>>>>>
>>>>>>>>> Checked with build/check for powerpc-linux-gnu-soft.
>>>>>>>>> ---
>>>>>>>>>  soft-fp/fixunssfsi.c                     | 1 +
>>>>>>>>>  soft-fp/gesf2.c                          | 1 +
>>>>>>>>>  soft-fp/lesf2.c                          | 2 ++
>>>>>>>>>  sysdeps/powerpc/powerpc32/symbol-hacks.h | 8 ++++++++
>>>>>>>>>  4 files changed, 12 insertions(+)
>>>>>>>>>
>>>>>>>>> diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
>>>>>>>>> index 9e883a9769..1b17b04852 100644
>>>>>>>>> --- a/soft-fp/fixunssfsi.c
>>>>>>>>> +++ b/soft-fp/fixunssfsi.c
>>>>>>>>> @@ -43,3 +43,4 @@ __fixunssfsi (SFtype a)
>>>>>>>>>
>>>>>>>>>    return r;
>>>>>>>>>  }
>>>>>>>>> +strong_alias (__fixunssfsi, __fixunssfsi_internal)
>>>>>>>>> diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
>>>>>>>>> index f7289982f1..455bb75d34 100644
>>>>>>>>> --- a/soft-fp/gesf2.c
>>>>>>>>> +++ b/soft-fp/gesf2.c
>>>>>>>>> @@ -47,3 +47,4 @@ __gesf2 (SFtype a, SFtype b)
>>>>>>>>>  }
>>>>>>>>>
>>>>>>>>>  strong_alias (__gesf2, __gtsf2);
>>>>>>>>> +strong_alias (__gesf2, __gesf2_internal)
>>>>>>>>> diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
>>>>>>>>> index 2f4921f3ce..3b40b3c9b8 100644
>>>>>>>>> --- a/soft-fp/lesf2.c
>>>>>>>>> +++ b/soft-fp/lesf2.c
>>>>>>>>> @@ -47,3 +47,5 @@ __lesf2 (SFtype a, SFtype b)
>>>>>>>>>  }
>>>>>>>>>
>>>>>>>>>  strong_alias (__lesf2, __ltsf2);
>>>>>>>>> +strong_alias (__lesf2, __lesf2_internal);
>>>>>>>>> +strong_alias (__ltsf2, __ltsf2_internal);
>>>>>>>>> diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>>>> index 1faf282601..6f85c16bb8 100644
>>>>>>>>> --- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>>>> +++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
>>>>>>>>> @@ -19,3 +19,11 @@
>>>>>>>>>  #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
>>>>>>>>>
>>>>>>>>>  #include_next "symbol-hacks.h"
>>>>>>>>> +
>>>>>>>>> +#if !defined __ASSEMBLER__ \
>>>>>>>>> +  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
>>>>>>>>> +asm ("__fixunssfsi = __fixunssfsi_internal");
>>>>>>>>> +asm ("__ltsf2 = __ltsf2_internal");
>>>>>>>>> +asm ("__lesf2 = __lesf2_internal");
>>>>>>>>> +asm ("__gesf2 = __gesf2_internal");
>>>>>>>>> +#endif
>>>>>>>>> --
>>>>>>>>> 2.43.0
>>>>>>>>>
>>>>>>>>
>>>>>>>> I think we should follow sysdeps/wordsize-32/divdi3-symbol-hacks.h to
>>>>>>>> define aliases and implement the symbol hack only if needed by defining
>>>>>>>> a unique macro when compiling the function definition.
>>>>>>> I though about it, but these libgcc interfaces were a historical mistake and
>>>>>>> only required for powerpc-linux-gnu-soft (other soft-fp ABIs, like
>>>>>>> csky-linux-gnuabiv2-soft, m68k-linux-gnu-coldfire-soft, mips*-linux-gnu-soft,
>>>>>>> or1k-linux-gnu-soft, sh4-linux-gnu-soft import its usage on libgcc).
>>>>>>>
>>>>>>> So I went to the simplest solution.
>>>>>>
>>>>>> Do all soft-fp targets need these aliases?
>>>>>>
>>>>>
>>>>> No, but the glibc soft-fp objects are not built for these ABI anyway.
>>>>>
>>>>
>>>> There is
>>>>
>>>> sysdeps/powerpc/nofpu/Makefile:sysdep_routines +=
>>>> $(gcc-single-routines) $(gcc-double-routines) \
>>>>
>>>> Should symbol-hacks.h changes be added to sysdeps/powerpc/nofpu,
>>>> instead of sysdeps/powerpc/powerpc32?
>>>
>>> I think we need single-symbol-hacks.h in soft-fp and a target which
>>> uses $(gcc-single-routines) should just include it.
>>>
>>
>> My point is now only powerpc requires such symbols, and it should be no
>> future ABI that would need it.  Maybe a better options would to move
>> $(gcc-single-routines) $(gcc-double-routines) to  powerpc specific folders,
>> but I went to simplest solution.
> 
> I prefer consistency.   Symbol hacks for $(gcc-single-routines) belong to
> sysdeps/powerpc/nofpu.   Checking __NO_FPRS__ doesn't look nice.
> 

Fair enough, I will update the patch with a nofpu symbol-hacks.h
  
Peter Bergner May 5, 2026, 1:11 p.m. UTC | #10
On 5/5/26 7:29 AM, Adhemerval Zanella Netto wrote:
> On 05/05/26 09:27, H.J. Lu wrote:
>> I prefer consistency.   Symbol hacks for $(gcc-single-routines) belong to
>> sysdeps/powerpc/nofpu.   Checking __NO_FPRS__ doesn't look nice.
>>
> 
> Fair enough, I will update the patch with a nofpu symbol-hacks.h

If the patch ends up changing powerpc specific files, consider that
pre-approved.

Peter
  

Patch

diff --git a/soft-fp/fixunssfsi.c b/soft-fp/fixunssfsi.c
index 9e883a9769..1b17b04852 100644
--- a/soft-fp/fixunssfsi.c
+++ b/soft-fp/fixunssfsi.c
@@ -43,3 +43,4 @@  __fixunssfsi (SFtype a)
 
   return r;
 }
+strong_alias (__fixunssfsi, __fixunssfsi_internal)
diff --git a/soft-fp/gesf2.c b/soft-fp/gesf2.c
index f7289982f1..455bb75d34 100644
--- a/soft-fp/gesf2.c
+++ b/soft-fp/gesf2.c
@@ -47,3 +47,4 @@  __gesf2 (SFtype a, SFtype b)
 }
 
 strong_alias (__gesf2, __gtsf2);
+strong_alias (__gesf2, __gesf2_internal)
diff --git a/soft-fp/lesf2.c b/soft-fp/lesf2.c
index 2f4921f3ce..3b40b3c9b8 100644
--- a/soft-fp/lesf2.c
+++ b/soft-fp/lesf2.c
@@ -47,3 +47,5 @@  __lesf2 (SFtype a, SFtype b)
 }
 
 strong_alias (__lesf2, __ltsf2);
+strong_alias (__lesf2, __lesf2_internal);
+strong_alias (__ltsf2, __ltsf2_internal);
diff --git a/sysdeps/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
index 1faf282601..6f85c16bb8 100644
--- a/sysdeps/powerpc/powerpc32/symbol-hacks.h
+++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
@@ -19,3 +19,11 @@ 
 #include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
 
 #include_next "symbol-hacks.h"
+
+#if !defined __ASSEMBLER__ \
+  && IS_IN (libc) && defined SHARED && defined __NO_FPRS__
+asm ("__fixunssfsi = __fixunssfsi_internal");
+asm ("__ltsf2 = __ltsf2_internal");
+asm ("__lesf2 = __lesf2_internal");
+asm ("__gesf2 = __gesf2_internal");
+#endif