[PATCH] ld: Disable ifunc tests on Solaris
Rainer Orth
ro@CeBiTec.Uni-Bielefeld.DE
Wed Apr 1 13:46:14 GMT 2020
Hi H.J.,
> On Wed, Apr 1, 2020 at 4:16 AM Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>>
>> A couple of ld ifunc tests currently FAIL on 64-bit Solaris/x86:
>>
>> FAIL: ld-ifunc/ifunc-10-x86-64
>> FAIL: ld-ifunc/ifunc-11-x86-64
>> FAIL: ld-ifunc/ifunc-12-x86-64
>> FAIL: ld-ifunc/ifunc-13-x86-64
>> FAIL: ld-ifunc/ifunc-14a-x86-64
>> FAIL: ld-ifunc/ifunc-14b-x86-64
>> FAIL: ld-ifunc/ifunc-14c-x86-64
>> FAIL: ld-ifunc/ifunc-14d-x86-64
>> FAIL: ld-ifunc/ifunc-14e-x86-64
>> FAIL: ld-ifunc/ifunc-14f-x86-64
>> FAIL: ld-ifunc/ifunc-15-x86-64
>> FAIL: ld-ifunc/ifunc-17a-x86-64
>> FAIL: ld-ifunc/ifunc-17b-x86-64
>> FAIL: ld-ifunc/ifunc-2-local-x86-64-now
>> FAIL: ld-ifunc/ifunc-2-local-x86-64
>> FAIL: ld-ifunc/ifunc-2-x86-64-now
>> FAIL: ld-ifunc/ifunc-2-x86-64
>> FAIL: ld-ifunc/ifunc-20-x86-64
>> FAIL: ld-ifunc/pr17154-x86-64-now
>> FAIL: ld-ifunc/pr17154-x86-64
>>
>> For one, the actuall error is weird:
>>
>> ./ld-new: target elf64-x86-64 not found
>> failed with: <./ld-new: target elf64-x86-64 not found>, no expected output
>> FAIL: ld-ifunc/ifunc-10-x86-64
>>
>> although ld -V does report the elf_x86_64 emulation as supported:
>>
>> $ ./ld/ld-new -V
>> GNU ld (GNU Binutils) 2.34.50.20200328
>> Supported emulations:
>> elf_x86_64_sol2
>> elf_x86_64
>> [...]
>>
>> When using ld -m elf_x86_64_sol2 instead, one of the testcases links
>> successfully.
>>
>> However, there's no point in pursuing this: Solaris does not support
>> ifunc, as can be seen in <sys/elf.h>:
>>
>> /*
>> * GNU/Linux specific symbol type not used by Solaris
>> */
>> #define STT_GNU_IFUNC 10
>>
>> and never will, given that it has symbol capabilities as solution to
>> effectively the same problem:
>>
>> http://www.linker-aliens.org/blogs/rie/entry/symbol_capabilitie/
>>
>> Therefore I'd like to disable ifunc testing on Solaris completely.
>> There are two possible solutions:
>>
>> * Explicitly reject Solaris in ld/testsuite/ld-ifunc/ifunc.exp.
>>
>> * Remove Solaris from binutils/testsuite/lib/binutils-common.exp
>> (supports_gnu_osabi). The comment there seems confusing:
>>
>> # True if the ELF target supports setting the ELF header OSABI field
>> # to ELFOSABI_GNU or ELFOSABI_FREEBSD, a requirement for STT_GNU_IFUNC
>> # symbol and SHF_GNU_MBIND section support.
>>
>> Why wouldn't one be able to set the OSABI field? It's a file after
>> all ;-) Isn't the question if the extensions covered by ELFOSABI_GNU
>> are handled at runtime?
>>
>> Whatever the case, it seems right to disable this on Solaris: the
>> ifunc part is covered above. SHF_GNU_MBIND is in the OS-specific
>> range and conflicts with
>>
>> #define SHF_SUNW_REALLOC 0x01000000 /* internal: krtld realloc */
>>
>> While the comment suggests this might be relocatable without too much
>> problems, the description of mbind (no formal spec AFAICS, just the
>> comment in the binutils patch submission) strongly suggests that this
>> isn't relevant to Solaris at all.
>>
>> Indirectly, clearing supports_gnu_osabi on Solaris disables
>> supports_gnu_unique. Again, Solaris <sys/elf.h> has
>>
>> /*
>> * GNU/Linux specific binding not used by Solaris
>> */
>> #define STB_GNU_UNIQUE 10
>>
>> so this seems the right thing to do.
>>
>> * Either way, one can remove the explicit mentions of *-*-solaris2* in
>> quite a number of (but not all) the ld-ifunc dump file notarget lists.
>> I suspect a similar solution is possible for the other targets
>> routinely listed there (*-*-lynxos *-*-nacl* *-*-nto*), but I know
>> nothing about those and will thus leave them alone.
>>
>> I went for the supports_gnu_osabi solution, but there's one fallout: two
>> gas tests now XPASS because the are xfail'ed for !supports_gnu_osabi:
>>
>> XPASS: mbind sections 12
>> XPASS: mbind section contents 16
>> XPASS: mbind sections 16
>> XPASS: mbind section contents 16
>>
>> I could either add notarget: *-*-solaris2* to those or (seems to make
>> more sense to me) just change
>>
>> #xfail: ![supports_gnu_osabi]
>>
>> to notarget (if that works).
>>
>> Tested on x86_64-pc-solaris2.11, i386-pc-solaris2.11,
>> x86_64-pc-linux-gnu, and i686-pc-linux-gnu.
>>
>> Rainer
>>
>> --
>> -----------------------------------------------------------------------------
>> Rainer Orth, Center for Biotechnology, Bielefeld University
>>
>>
>> 2020-04-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
>>
>> ld:
>> * testsuite/ld-ifunc/ifunc-10-i386.d: Remove *-*-solaris2* from
>> notarget.
>> * ifunc-11-i386.d: Likewise.
>> * ifunc-12-i386.d: Likewise.
>> * ifunc-13-i386.d: Likewise.
>> * ifunc-14a-i386.d: Likewise.
>> * ifunc-14b-i386.d: Likewise.
>> * ifunc-14c-i386.d: Likewise.
>> * ifunc-14d-i386.d: Likewise.
>> * ifunc-14e-i386.d: Likewise.
>> * ifunc-14f-i386.d: Likewise.
>> * ifunc-15-i386.d: Likewise.
>> * ifunc-16-i386-now.d: Likewise.
>> * ifunc-16-i386.d: Likewise.
>> * ifunc-17a-i386.d: Likewise.
>> * ifunc-17b-i386.d: Likewise.
>> * ifunc-18a-i386.d: Likewise.
>> * ifunc-18b-i386.d: Likewise.
>> * ifunc-19a-i386.d: Likewise.
>> * ifunc-19b-i386.d: Likewise.
>> * ifunc-2-i386-now.d: Likewise.
>> * ifunc-2-i386.d: Likewise.
>> * ifunc-2-local-i386-now.d: Likewise.
>> * ifunc-2-local-i386.d: Likewise.
>> * ifunc-20-i386.d: Likewise.
>> * ifunc-21-i386.d: Likewise.
>> * ifunc-22-i386.d: Likewise.
>> * ifunc-5a-i386.d: Likewise.
>> * ifunc-5a-local-i386.d: Likewise.
>> * ifunc-5b-i386.d: Likewise.
>> * ifunc-5b-local-i386.d: Likewise.
>> * ifunc-5r-local-i386.d: Likewise.
>> * ifunc-6a-i386.d: Likewise.
>> * ifunc-6b-i386.d: Likewise.
>> * ifunc-7a-i386.d: Likewise.
>> * ifunc-7b-i386.d: Likewise.
>> * ifunc-8-i386.d: Likewise.
>> * ifunc-9-i386.d: Likewise.
>> * pr17154-i386-now.d: Likewise.
>> * pr17154-i386.d: Likewise.
>>
>> * ifunc-23a-x86.d: Remove notarget.
>> * ifunc-24a-x86.d: Likewise.
>> * ifunc-25a-x86.d: Likewise.
>
> The above is OK.
thanks.
>> binutils:
>> * testsuite/lib/binutils-common.exp (supports_gnu_osabi): Don't
>> enable on *-*-solaris*.
>>
>
> This makes senses to me. Since you are Solaris owner, I think it is OK.
Except that I'm not ;-) Even so, there remains the matter of the gas
tests XPASSing now. I've since verified that the attached patchlet
works, making the affected tests UNSUPPORTED. This change affects
non-Solaris targets, too, of course.
Is this ok, together with the binutils-common.exp change?
Thanks.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
gas:
* testsuite/gas/elf/section12a.d: Use notarget instead of xfail.
* testsuite/gas/elf/section12b.d: Likewise.
* testsuite/gas/elf/section16a.d: Likewise.
* testsuite/gas/elf/section16b.d: Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gas-mbind.patch
Type: text/x-patch
Size: 1632 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20200401/2df1ec5b/attachment.bin>
More information about the Binutils
mailing list