[PATCH v2] Improve IFUNC check
Fangrui Song
maskray@google.com
Thu Mar 5 19:47:00 GMT 2020
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
More information about the Libc-alpha
mailing list