This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2] Improve IFUNC check
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: Fangrui Song <maskray at google dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Thu, 5 Mar 2020 17:06:15 -0300
- Subject: Re: [PATCH v2] Improve IFUNC check
- References: <20200205060922.5pbgm5hfj2r6vrl2@google.com> <20200206122422.GA1533826@aurel32.net> <20200206185300.7hfx7gfrrof63mda@google.com> <20200208093746.GA98572@aurel32.net> <20200210191425.52xvvdot7kunt2gc@google.com> <565d0b42-9e82-f4c0-ebf8-c72c842002ab@linaro.org> <20200305194704.n5z3pq63vhgrmgu7@google.com>
On 05/03/2020 16:47, Fangrui Song wrote:
> On 2020-03-05, Adhemerval Zanella wrote:
>>
>>
>> On 10/02/2020 16:14, Fangrui Song wrote:
>>> On 2020-02-08, Aurelien Jarno wrote:
>>>> On 2020-02-06 10:53, Fangrui Song wrote:
>>>>> On 2020-02-06, Aurelien Jarno wrote:
>>>>> > Hi,
>>>>> >
>>>>> > On 2020-02-04 22:09, Fangrui Song wrote:
>>>>> > > GNU ld's RISCV port does not support IFUNC. ld -no-pie produces no
>>>>> > > relocation and the test passed incorrectly. Be more rigid by testing
>>>>> > > IRELATIVE explicitly.
>>>>> >
>>>>> > Thanks for your patch and sorry for the time to answer, I was testing it
>>>>> > on many architectures. First of all I confirm it fixes the issue when
>>>>> > building glibc with PIE on mips* and riscv64. I also confirm it
>>>>> > introduces no regression on aarch64, armv5, armv7, hppa, m68k, powerpc,
>>>>> > ppc64, ppc64le, s390x and x86_64.
>>>>> >
>>>>> > However it wrongly detects that IFUNC is not supported on sparc64 when
>>>>> > PIE is not in use. Here is the output of of readelf for the non-PIE
>>>>> > case:
>>>>> >
>>>>> > | Relocation section '.rela.dyn'@offset 0x110 contains 1 entry:
>>>>> > |�� Offset��������� Info���������� Type���������� Sym. Value��� Sym. Name + Addend
>>>>> > | 000000200280� 0000000000f8 R_SPARC_JMP_IREL�������������������� 100128
>>>>>
>>>>> sparc64 -no-pie does not produce an R_SPARC_IRELATIVE. This looks weird.
>>>>> All other archs emit an R_*_IRELATIVE.
>>>>>
>>>>> Can you dump the assembly (including .text and .[i]plt)?
>>>>> Or can someone with sparc64 experience answer why sparc64 is different
>>>>> here?
>>>>
>>>> Here is the dump of the .iplt section:
>>>> Disassembly of section .iplt:
>>>>
>>>> 0000000000200200 <.iplt>:
>>>> ������ ...
>>>> �200280:������ 03 00 00 80���� sethi� %hi(0x20000), %g1
>>>> �200284:������ 30 6f ff e7���� b,a�� %xcc, 200220 <__start+0x1000f8>
>>>> �200288:������ 01 00 00 00���� nop
>>>> �20028c:������ 01 00 00 00���� nop
>>>> �200290:������ 01 00 00 00���� nop
>>>> �200294:������ 01 00 00 00���� nop
>>>> �200298:������ 01 00 00 00���� nop
>>>> �20029c:������ 01 00 00 00���� nop
>>>>
>>>> There is no .text nor .plt section.
>>>>
>>>> --�
>>>> Aurelien Jarno������������������������� GPG: 4096R/1DDD8C9B
>>>> aurelien@aurel32.net���������������� http://www.aurel32.net
>>>
>>> Attached PATCH v2.
>>>
>>> sparc64 has a non-conventional R_SPARC_JMP_IREL, along with conventional
>>> R_SPARC_IRELATIVE.
>>
>> LGTM, thanks.
>>
>> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> Can someone kindly commit on my behalf? I don't have the permission.
>
> Aurelien added a Tested-by: line https://sourceware.org/ml/libc-alpha/2020-02/msg00326.html
Done.