[PATCH] ld: Disable ifunc tests on Solaris

H.J. Lu hjl.tools@gmail.com
Wed Apr 1 11:26:23 GMT 2020


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.

>         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.

Thanks.

-- 
H.J.



More information about the Binutils mailing list