Bug 229876

Summary: [libm] Fix powl, cpow, cpowf, and cpowl imports from OpenBSD
Product: Base System Reporter: sgk
Component: binAssignee: Dimitry Andric <dim>
Status: Closed FIXED    
Severity: Affects Only Me CC: dim, numerics, pi, rhurlin
Priority: --- Keywords: patch
Version: CURRENTFlags: dim: mfc-stable11+
dim: mfc-stable10+
Hardware: Any   
OS: Any   
Attachments:
Description Flags
patch none

Description sgk 2018-07-18 22:17:50 UTC

    
Comment 1 sgk 2018-07-18 22:19:50 UTC
Created attachment 195262 [details]
patch
Comment 2 sgk 2018-07-18 22:20:07 UTC
Version 2.  After applying the patch, one can

% svn delete libm/msun/src/polevll.c
% svn commit libm/msun/src/polevll.c

* lib/msun/Makefile:
  . Remove polevll.c

* lib/msun/ld80/e_powl.c:
  . Copy contents of polevll.c to here.  This is the only consumer of
    these functions.  Make functions 'static inline'.
  . Make reducl a 'static inline' function.

* lib/msun/man/exp.3:
  . Remove BUGS section that no longer applies.

* lib/msun/src/math_private.h:
  . Remove prototypes of __p1evll() and __polevll()

* lib/msun/src/s_cpow.c:
* lib/msun/src/s_cpowf.c:
* lib/msun/src/s_cpowl.c
  . Use the CMPLX macro from either C99 or math_private.h (depends of
    compiler support) instead of the problematic use of complex I.
Comment 3 commit-hook freebsd_committer freebsd_triage 2018-07-19 18:45:13 UTC
A commit references this bug:

Author: dim
Date: Thu Jul 19 18:44:12 UTC 2018
New revision: 336497
URL: https://svnweb.freebsd.org/changeset/base/336497

Log:
  Fix powl, cpow, cpowf, and cpowl imports from OpenBSD

  This is a follow-up to r336299.

  * lib/msun/Makefile:
    . Remove polevll.c

  * lib/msun/ld80/e_powl.c:
    . Copy contents of polevll.c to here.  This is the only consumer of
      these functions.  Make functions 'static inline'.
    . Make reducl a 'static inline' function.

  * lib/msun/man/exp.3:
    . Remove BUGS section that no longer applies.

  * lib/msun/src/math_private.h:
    . Remove prototypes of __p1evll() and __polevll()

  * lib/msun/src/s_cpow.c:
  * lib/msun/src/s_cpowf.c:
  * lib/msun/src/s_cpowl.c
    . Use the CMPLX macro from either C99 or math_private.h (depends of
      compiler support) instead of the problematic use of complex I.

  Submitted by:	Steve Kargl <sgk@troutmask.apl.washington.edu>
  PR:		229876
  MFC after:	1 week

Changes:
  head/lib/msun/Makefile
  head/lib/msun/ld80/e_powl.c
  head/lib/msun/man/exp.3
  head/lib/msun/src/math_private.h
  head/lib/msun/src/polevll.c
  head/lib/msun/src/s_cpow.c
  head/lib/msun/src/s_cpowf.c
  head/lib/msun/src/s_cpowl.c
Comment 4 sgk 2018-07-19 23:23:52 UTC
You can fix the gcc problems with the missing CMPLX 
macros by adding 

#include "math_private.h"

to the 3 files.
Comment 5 commit-hook freebsd_committer freebsd_triage 2018-07-20 18:27:49 UTC
A commit references this bug:

Author: dim
Date: Fri Jul 20 18:27:31 UTC 2018
New revision: 336563
URL: https://svnweb.freebsd.org/changeset/base/336563

Log:
  Recommit r336497: Fix powl, cpow, cpowf, and cpowl imports from OpenBSD

  This is a follow-up to r336299.

  * lib/msun/Makefile:
    . Remove polevll.c

  * lib/msun/ld80/e_powl.c:
    . Copy contents of polevll.c to here.  This is the only consumer of
      these functions.  Make functions 'static inline'.
    . Make reducl a 'static inline' function.

  * lib/msun/man/exp.3:
    . Remove BUGS section that no longer applies.

  * lib/msun/src/math_private.h:
    . Remove prototypes of __p1evll() and __polevll()

  * lib/msun/src/s_cpow.c:
  * lib/msun/src/s_cpowf.c:
  * lib/msun/src/s_cpowl.c
    . Include math_private.h.
    . Use the CMPLX macro from either C99 or math_private.h (depends on
      compiler support) instead of the problematic use of complex I.

  Submitted by:	Steve Kargl <sgk@troutmask.apl.washington.edu>
  PR:		229876
  MFC after:	1 week

Changes:
  head/lib/msun/Makefile
  head/lib/msun/ld80/e_powl.c
  head/lib/msun/man/exp.3
  head/lib/msun/src/math_private.h
  head/lib/msun/src/polevll.c
  head/lib/msun/src/s_cpow.c
  head/lib/msun/src/s_cpowf.c
  head/lib/msun/src/s_cpowl.c
Comment 6 sgk 2018-07-20 18:36:22 UTC
dim,

Thanks for taking care of this bug.  Sorry about missing the
inclusion of math_private.h in he original patch.

steve
Comment 7 commit-hook freebsd_committer freebsd_triage 2018-07-27 17:40:36 UTC
A commit references this bug:

Author: dim
Date: Fri Jul 27 17:39:39 UTC 2018
New revision: 336767
URL: https://svnweb.freebsd.org/changeset/base/336767

Log:
  MFC r327400 (by eadler):

  cacos(3): correct spelling of 'I'

  In some cases we had 'i' instead of 'I'.

  PR:		195517
  Submitted by:	stephen

  MFC r329259 (by eadler):

  msun: signed overflow in atan2

  As a component of atan2(y, x), the case of x == 1.0 is farmed out to
  atan(y). The current implementation of this comparison is vulnerable
  to signed integer underflow (that is, undefined behavior), and it's
  performed in a somewhat more complicated way than it need be. Change
  it to not be quite so cute, rather directly comparing the high/low
  bits of x to the specific IEEE-754 bit pattern that encodes 1.0.

  Note that while there are three different e_atan* files in the
  relevant directory, only this one needs fixing. e_atan2f.c already
  compares against the full bit pattern encoding 1.0f, while
  e_atan2l.cuses bitwise-ands/ors/nots and so doesn't require a change.

  Closes #130

  Submitted by:	Jeff Walden (@jswalden github PR #130)
  Reviewed by:	bde

  MFC r334721 (by cem):

  clog.3, complex.3: Fix typos and igor style issues

  PR:		228783
  Reported by:	Karsten <freebsd-bugzilla AT kkoenig.net>

  MFC r336299 (by mmacy):

  msun: add ld80/ld128 powl, cpow, cpowf, cpowl from openbsd

  This corresponds to the latest status (hasn't changed in 9+
  years) from openbsd of ld80/ld128 powl, and source cpowf, cpow,
  cpowl (the complex power functions for float complex, double
  complex, and long double complex) which are required for C99
  compliance and were missing from FreeBSD. Also required for
  some numerical codes using complex numbered Hamiltonians.

  Thanks to jhb for tracking down the issue with making
  weak_reference compile on powerpc.

  When asked to review, bde said "I don't like it" - but
  provided no actionable feedback or superior implementations.

  Discussed with: jhb
  Submitted by: jmd
  Differential Revision: https://reviews.freebsd.org/D15919

  MFC r336563:

  Recommit r336497: Fix powl, cpow, cpowf, and cpowl imports from OpenBSD

  This is a follow-up to r336299.

  * lib/msun/Makefile:
    . Remove polevll.c

  * lib/msun/ld80/e_powl.c:
    . Copy contents of polevll.c to here.  This is the only consumer of
      these functions.  Make functions 'static inline'.
    . Make reducl a 'static inline' function.

  * lib/msun/man/exp.3:
    . Remove BUGS section that no longer applies.

  * lib/msun/src/math_private.h:
    . Remove prototypes of __p1evll() and __polevll()

  * lib/msun/src/s_cpow.c:
  * lib/msun/src/s_cpowf.c:
  * lib/msun/src/s_cpowl.c
    . Include math_private.h.
    . Use the CMPLX macro from either C99 or math_private.h (depends on
      compiler support) instead of the problematic use of complex I.

  Submitted by:	Steve Kargl <sgk@troutmask.apl.washington.edu>
  PR:		229876

Changes:
_U  stable/11/
  stable/11/include/complex.h
  stable/11/lib/msun/Makefile
  stable/11/lib/msun/Symbol.map
  stable/11/lib/msun/ld128/e_powl.c
  stable/11/lib/msun/ld80/e_powl.c
  stable/11/lib/msun/man/cacos.3
  stable/11/lib/msun/man/clog.3
  stable/11/lib/msun/man/complex.3
  stable/11/lib/msun/man/cpow.3
  stable/11/lib/msun/man/exp.3
  stable/11/lib/msun/src/e_atan2.c
  stable/11/lib/msun/src/e_pow.c
  stable/11/lib/msun/src/imprecise.c
  stable/11/lib/msun/src/math_private.h
  stable/11/lib/msun/src/s_cpow.c
  stable/11/lib/msun/src/s_cpowf.c
  stable/11/lib/msun/src/s_cpowl.c