HomePhabricator

[Driver] Properly use values-X[ca].o, values-xpg[46].o on Solaris

Description

[Driver] Properly use values-X[ca].o, values-xpg[46].o on Solaris

Builtins-*-sunos :: compiler_rt_logbf_test.c currently FAILs on Solaris, both SPARC and
x86, 32 and 64-bit.

It turned out that this is due to different behaviour of logb depending on the C
standard compiled for, as documented on logb(3M):

RETURN VALUES
       Upon successful completion, these functions return the exponent of x.

       If x is subnormal:

           o      For SUSv3-conforming applications compiled with the c99 com-
                  piler  driver  (see standards(7)), the exponent of x as if x
                  were normalized is returned.

           o      Otherwise, if compiled with the cc compiler  driver,  -1022,
                  -126,  and  -16382  are  returned  for  logb(), logbf(), and
                  logbl(), respectively.

Studio c99 and gcc control this by linking with the appropriate version of values-xpg[46].o, but clang uses neither of those.

The following patch fixes this by following what gcc does, as corrected some time ago in

Fix use of Solaris values-Xc.o (PR target/40411)
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg02350.html and
https://gcc.gnu.org/ml/gcc-patches/2018-01/msg02384.html.

Tested on x86_64-pc-solaris2.11, sparcv9-sun-solaris2.11, and x86_64-pc-linux-gnu.

Differential Revision: https://reviews.llvm.org/D64793

Details