[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