[PATCH] ld: Disable ifunc tests on Solaris

H.J. Lu hjl.tools@gmail.com
Wed Apr 1 13:51:43 GMT 2020


On Wed, Apr 1, 2020 at 6:46 AM Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote:
>
> 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

We should make you the Solaris owner.

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

That is OK.

Thanks.

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


-- 
H.J.



More information about the Binutils mailing list