Re: [PATCH 3/4] In _IEEE_LIBM mode, use weak symbols instead of wrapper funcs
Joel Sherrill <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAF9ehCXiV9AVeQBYeAtr-WjaFg1vVjyX4O2jTyxUHNq+XaFWGA@mail.gmail.com> |
On Mon, Aug 27, 2018 at 2:23 PM, Craig Howland <[email protected]> wrote: > On 08/27/2018 02:32 PM, [email protected] wrote: > >> From: Keith Packard <[email protected]> >> >> 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 <[email protected]> >> --- >> 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. --joel > > Craig >