[PATCH 3/4] In _IEEE_LIBM mode, use weak symbols instead of wrapper funcs

Corinna Vinschen vinschen@redhat.com
Wed Aug 29 14:01:00 GMT 2018


On Aug 27 14:28, Joel Sherrill wrote:
> On Mon, Aug 27, 2018 at 2:23 PM, Craig Howland <howland@lgsinnovations.com>
> wrote:
> 
> > On 08/27/2018 02:32 PM, keithp@keithp.com wrote:
> >
> >> From: Keith Packard <keithp@keithp.com>
> >>
> >> When the math library is compiled to just use bare IEEE_LIBM mode, many
> >> public functions are just wrappers around the __ieee754 version.
> >> Eliminate the extra function by creating a weak alias symbol for the
> >> public name directly from the ieee754 name.
> >>
> >> Signed-off-by: Keith Packard <keithp@keithp.com>
> >> ---
> >>   newlib/libm/math/e_acos.c       |  5 +++++
> >>   ...
> >>   86 files changed, 360 insertions(+), 197 deletions(-)
> >>
> >> diff --git a/newlib/libm/math/e_acos.c b/newlib/libm/math/e_acos.c
> >> index 319b1d56f..25509c0f0 100644
> >> --- a/newlib/libm/math/e_acos.c
> >> +++ b/newlib/libm/math/e_acos.c
> >> @@ -59,6 +59,11 @@ qS2 =  2.02094576023350569471e+00, /* 0x40002AE5,
> >> 0x9C598AC8 */
> >>   qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
> >>   qS4 =  7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
> >>   +#ifdef _IEEE_LIBM
> >> +double acos(double x)
> >> +       __attribute__((weak, alias("__ieee754_acos")));
> >> +#endif
> >> +
> >>   #ifdef __STDC__
> >>         double __ieee754_acos(double x)
> >>   #else
> >> ...
> >>
> > While this is a nice idea, it is a problem for targets which don't support
> > weak aliases (i.e. those without proper object file support for them).
> > (Does anyone know for certain if this is a real problem instead of just a
> > theoretical one?  (I'd guess so.)  All my Newlib targets are ELF.)  An
> > alternative implementation could be macro definitions in math.h.
> 
> 
> My suggestion is to use the macro __weak_reference() from newlib's
> sys/cdefs.h which appears to account for ELF and not-ELF.
> 
> This is from FreeBSD so I would have confidence that they got it right.

Sounds good to me.  Also... who's setting IEEE_LIBM and where?  I don't
see any way to set this in the entire tree.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20180829/7d586c35/attachment.sig>


More information about the Newlib mailing list