diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/head/fenv.h | 54 | ||||
-rw-r--r-- | usr/src/head/floatingpoint.h | 95 | ||||
-rw-r--r-- | usr/src/head/iso/math_c99.h | 401 | ||||
-rw-r--r-- | usr/src/head/iso/math_iso.h | 118 | ||||
-rw-r--r-- | usr/src/head/math.h | 124 | ||||
-rw-r--r-- | usr/src/lib/libc/port/gen/posix_memalign.c | 30 | ||||
-rw-r--r-- | usr/src/pkg/manifests/system-test-libctest.mf | 2 | ||||
-rw-r--r-- | usr/src/test/libc-tests/runfiles/default.run | 2 | ||||
-rw-r--r-- | usr/src/test/libc-tests/tests/Makefile | 3 | ||||
-rw-r--r-- | usr/src/test/libc-tests/tests/posix_memalign.c | 92 |
10 files changed, 505 insertions, 416 deletions
diff --git a/usr/src/head/fenv.h b/usr/src/head/fenv.h index 66a2163b6d..617143e703 100644 --- a/usr/src/head/fenv.h +++ b/usr/src/head/fenv.h @@ -35,14 +35,6 @@ extern "C" { #endif -#ifndef __P -#ifdef __STDC__ -#define __P(p) p -#else -#define __P(p) () -#endif -#endif /* !defined(__P) */ - /* * Rounding modes */ @@ -62,8 +54,8 @@ extern "C" { #endif -extern int fegetround __P((void)); -extern int fesetround __P((int)); +extern int fegetround(void); +extern int fesetround(int); #if (defined(__i386) || defined(__amd64)) && \ (!defined(_STRICT_STDC) || defined(__EXTENSIONS__)) @@ -72,8 +64,8 @@ extern int fesetround __P((int)); #define FE_DBLPREC 2 #define FE_LDBLPREC 3 -extern int fegetprec __P((void)); -extern int fesetprec __P((int)); +extern int fegetprec(void); +extern int fesetprec(int); #endif @@ -102,11 +94,11 @@ extern int fesetprec __P((int)); typedef int fexcept_t; -extern int feclearexcept __P((int)); -extern int feraiseexcept __P((int)); -extern int fetestexcept __P((int)); -extern int fegetexceptflag __P((fexcept_t *, int)); -extern int fesetexceptflag __P((const fexcept_t *, int)); +extern int feclearexcept(int); +extern int feraiseexcept(int); +extern int fetestexcept(int); +extern int fegetexceptflag(fexcept_t *, int); +extern int fesetexceptflag(const fexcept_t *, int); #if !defined(_STRICT_STDC) || defined(__EXTENSIONS__) @@ -185,11 +177,11 @@ typedef struct fex_handler_data { void (*__handler)(); } fex_handler_t[FEX_NUM_EXC]; -extern int fex_get_handling __P((int)); -extern int fex_set_handling __P((int, int, void (*)())); +extern int fex_get_handling(int); +extern int fex_set_handling(int, int, void (*)()); -extern void fex_getexcepthandler __P((fex_handler_t *, int)); -extern void fex_setexcepthandler __P((const fex_handler_t *, int)); +extern void fex_getexcepthandler(fex_handler_t *, int); +extern void fex_setexcepthandler(const fex_handler_t *, int); #ifdef __STDC__ #include <stdio_tag.h> @@ -198,11 +190,11 @@ extern void fex_setexcepthandler __P((const fex_handler_t *, int)); typedef __FILE FILE; #endif #endif -extern FILE *fex_get_log __P((void)); -extern int fex_set_log __P((FILE *)); -extern int fex_get_log_depth __P((void)); -extern int fex_set_log_depth __P((int)); -extern void fex_log_entry __P((const char *)); +extern FILE *fex_get_log(void); +extern int fex_set_log(FILE *); +extern int fex_get_log_depth(void); +extern int fex_set_log_depth(int); +extern void fex_log_entry(const char *); #define __fex_handler_t fex_handler_t @@ -231,13 +223,13 @@ extern fenv_t __fenv_dfl_env; #define FE_DFL_ENV (&__fenv_dfl_env) -extern int fegetenv __P((fenv_t *)); -extern int fesetenv __P((const fenv_t *)); -extern int feholdexcept __P((fenv_t *)); -extern int feupdateenv __P((const fenv_t *)); +extern int fegetenv(fenv_t *); +extern int fesetenv(const fenv_t *); +extern int feholdexcept(fenv_t *); +extern int feupdateenv(const fenv_t *); #if !defined(_STRICT_STDC) || defined(__EXTENSIONS__) -extern void fex_merge_flags __P((const fenv_t *)); +extern void fex_merge_flags(const fenv_t *); #endif #ifdef __cplusplus diff --git a/usr/src/head/floatingpoint.h b/usr/src/head/floatingpoint.h index c8d658cc83..b1f49174c2 100644 --- a/usr/src/head/floatingpoint.h +++ b/usr/src/head/floatingpoint.h @@ -48,15 +48,6 @@ extern "C" { * IEEE floating-point arithmetic modes; * IEEE floating-point arithmetic exception handling. */ - -#ifndef __P -#ifdef __STDC__ -#define __P(p) p -#else -#define __P(p) () -#endif -#endif /* !defined(__P) */ - #if defined(__STDC__) && !defined(_FILEDEFED) #define _FILEDEFED typedef __FILE FILE; @@ -70,7 +61,7 @@ typedef void (*sigfpe_handler_type)(); /* Pointer to exception handler */ #define SIGFPE_IGNORE (void (*)())1 /* ignore this exception or code */ #define SIGFPE_ABORT (void (*)())2 /* force abort on exception */ -extern sigfpe_handler_type sigfpe __P((sigfpe_code_type, sigfpe_handler_type)); +extern sigfpe_handler_type sigfpe(sigfpe_code_type, sigfpe_handler_type); /* * Types for IEEE floating point. @@ -146,46 +137,46 @@ enum decimal_string_form { /* Valid decimal number string formats. */ nanstring_form /* nan(string) */ }; -extern void single_to_decimal __P((single *, decimal_mode *, decimal_record *, - fp_exception_field_type *)); -extern void double_to_decimal __P((double *, decimal_mode *, decimal_record *, - fp_exception_field_type *)); -extern void extended_to_decimal __P((extended *, decimal_mode *, - decimal_record *, fp_exception_field_type *)); -extern void quadruple_to_decimal __P((quadruple *, decimal_mode *, - decimal_record *, fp_exception_field_type *)); - -extern void decimal_to_single __P((single *, decimal_mode *, decimal_record *, - fp_exception_field_type *)); -extern void decimal_to_double __P((double *, decimal_mode *, decimal_record *, - fp_exception_field_type *)); -extern void decimal_to_extended __P((extended *, decimal_mode *, - decimal_record *, fp_exception_field_type *)); -extern void decimal_to_quadruple __P((quadruple *, decimal_mode *, - decimal_record *, fp_exception_field_type *)); - -extern void string_to_decimal __P((char **, int, int, decimal_record *, - enum decimal_string_form *, char **)); -extern void func_to_decimal __P((char **, int, int, decimal_record *, - enum decimal_string_form *, char **, - int (*)(void), int *, int (*)(int))); -extern void file_to_decimal __P((char **, int, int, decimal_record *, - enum decimal_string_form *, char **, - FILE *, int *)); - -extern char *seconvert __P((single *, int, int *, int *, char *)); -extern char *sfconvert __P((single *, int, int *, int *, char *)); -extern char *sgconvert __P((single *, int, int, char *)); -extern char *econvert __P((double, int, int *, int *, char *)); -extern char *fconvert __P((double, int, int *, int *, char *)); -extern char *gconvert __P((double, int, int, char *)); -extern char *qeconvert __P((quadruple *, int, int *, int *, char *)); -extern char *qfconvert __P((quadruple *, int, int *, int *, char *)); -extern char *qgconvert __P((quadruple *, int, int, char *)); - -extern char *ecvt __P((double, int, int *, int *)); -extern char *fcvt __P((double, int, int *, int *)); -extern char *gcvt __P((double, int, char *)); +extern void single_to_decimal(single *, decimal_mode *, decimal_record *, + fp_exception_field_type *); +extern void double_to_decimal(double *, decimal_mode *, decimal_record *, + fp_exception_field_type *); +extern void extended_to_decimal(extended *, decimal_mode *, + decimal_record *, fp_exception_field_type *); +extern void quadruple_to_decimal(quadruple *, decimal_mode *, + decimal_record *, fp_exception_field_type *); + +extern void decimal_to_single(single *, decimal_mode *, decimal_record *, + fp_exception_field_type *); +extern void decimal_to_double(double *, decimal_mode *, decimal_record *, + fp_exception_field_type *); +extern void decimal_to_extended(extended *, decimal_mode *, + decimal_record *, fp_exception_field_type *); +extern void decimal_to_quadruple(quadruple *, decimal_mode *, + decimal_record *, fp_exception_field_type *); + +extern void string_to_decimal(char **, int, int, decimal_record *, + enum decimal_string_form *, char **); +extern void func_to_decimal(char **, int, int, decimal_record *, + enum decimal_string_form *, char **, + int (*)(void), int *, int (*)(int)); +extern void file_to_decimal(char **, int, int, decimal_record *, + enum decimal_string_form *, char **, + FILE *, int *); + +extern char *seconvert(single *, int, int *, int *, char *); +extern char *sfconvert(single *, int, int *, int *, char *); +extern char *sgconvert(single *, int, int, char *); +extern char *econvert(double, int, int *, int *, char *); +extern char *fconvert(double, int, int *, int *, char *); +extern char *gconvert(double, int, int, char *); +extern char *qeconvert(quadruple *, int, int *, int *, char *); +extern char *qfconvert(quadruple *, int, int *, int *, char *); +extern char *qgconvert(quadruple *, int, int, char *); + +extern char *ecvt(double, int, int *, int *); +extern char *fcvt(double, int, int *, int *); +extern char *gcvt(double, int, char *); #if __cplusplus >= 199711L namespace std { @@ -194,8 +185,8 @@ namespace std { * ANSI C Standard says the following entry points should be * prototyped in <stdlib.h>. They are now, but weren't before. */ -extern double atof __P((const char *)); -extern double strtod __P((const char *, char **)); +extern double atof(const char *); +extern double strtod(const char *, char **); #if __cplusplus >= 199711L } diff --git a/usr/src/head/iso/math_c99.h b/usr/src/head/iso/math_c99.h index 72c4b30fc0..36cf150d1a 100644 --- a/usr/src/head/iso/math_c99.h +++ b/usr/src/head/iso/math_c99.h @@ -36,13 +36,16 @@ extern "C" { #endif -#ifndef __P -#ifdef __STDC__ -#define __P(p) p -#else -#define __P(p) () -#endif -#endif /* !defined(__P) */ +#undef FP_ZERO +#define FP_ZERO 0 +#undef FP_SUBNORMAL +#define FP_SUBNORMAL 1 +#undef FP_NORMAL +#define FP_NORMAL 2 +#undef FP_INFINITE +#define FP_INFINITE 3 +#undef FP_NAN +#define FP_NAN 4 #if defined(_STDC_C99) || _XOPEN_SOURCE - 0 >= 600 || defined(__C99FEATURES__) #if defined(__GNUC__) @@ -65,7 +68,12 @@ extern "C" { #if __GNUC__ >= 4 #define isnan(x) __builtin_isnan(x) #define isinf(x) __builtin_isinf(x) -#else +#define fpclassify(x) __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \ + FP_SUBNORMAL, FP_ZERO, x) +#define isfinite(x) __builtin_isfinite(x) +#define isnormal(x) __builtin_isnormal(x) +#define signbit(x) __builtin_signbit(x) +#else /* __GNUC__ >= 4 */ #define isnan(x) __extension__( \ { __typeof(x) __x_n = (x); \ __builtin_isunordered(__x_n, __x_n); }) @@ -73,7 +81,6 @@ extern "C" { { __typeof(x) __x_i = (x); \ __x_i == (__typeof(__x_i)) INFINITY || \ __x_i == (__typeof(__x_i)) (-INFINITY); }) -#endif #undef isfinite #define isfinite(x) __extension__( \ { __typeof(x) __x_f = (x); \ @@ -98,16 +105,17 @@ extern "C" { #if defined(_BIG_ENDIAN) #define signbit(x) __extension__( \ { __typeof(x) __x_s = (x); \ - (int) (*(unsigned *) &__x_s >> 31); }) + (int)(*(unsigned *)&__x_s >> 31); }) #elif defined(_LITTLE_ENDIAN) #define signbit(x) __extension__( \ { __typeof(x) __x_s = (x); \ (sizeof (__x_s) == sizeof (float) ? \ - (int) (*(unsigned *) &__x_s >> 31) : \ + (int)(*(unsigned *)&__x_s >> 31) : \ sizeof (__x_s) == sizeof (double) ? \ - (int) (((unsigned *) &__x_s)[1] >> 31) : \ - (int) (((unsigned short *) &__x_s)[4] >> 15)); }) -#endif + (int)(((unsigned *)&__x_s)[1] >> 31) : \ + (int)(((unsigned short *)&__x_s)[4] >> 15)); }) +#endif /* defined(_BIG_ENDIAN) */ +#endif /* __GNUC__ >= 4 */ /* * C99 7.12.14 comparison macros @@ -190,17 +198,6 @@ typedef long double float_t; typedef long double double_t; #endif -#undef FP_ZERO -#define FP_ZERO 0 -#undef FP_SUBNORMAL -#define FP_SUBNORMAL 1 -#undef FP_NORMAL -#define FP_NORMAL 2 -#undef FP_INFINITE -#define FP_INFINITE 3 -#undef FP_NAN -#define FP_NAN 4 - #undef FP_ILOGB0 #define FP_ILOGB0 (-2147483647) #undef FP_ILOGBNAN @@ -213,188 +210,188 @@ typedef long double double_t; #undef math_errhandling #define math_errhandling MATH_ERREXCEPT -extern double acosh __P((double)); -extern double asinh __P((double)); -extern double atanh __P((double)); - -extern double exp2 __P((double)); -extern double expm1 __P((double)); -extern int ilogb __P((double)); -extern double log1p __P((double)); -extern double log2 __P((double)); -extern double logb __P((double)); -extern double scalbn __P((double, int)); -extern double scalbln __P((double, long int)); - -extern double cbrt __P((double)); -extern double hypot __P((double, double)); - -extern double erf __P((double)); -extern double erfc __P((double)); -extern double lgamma __P((double)); -extern double tgamma __P((double)); - -extern double nearbyint __P((double)); -extern double rint __P((double)); -extern long int lrint __P((double)); -extern double round __P((double)); -extern long int lround __P((double)); -extern double trunc __P((double)); - -extern double remainder __P((double, double)); -extern double remquo __P((double, double, int *)); - -extern double copysign __P((double, double)); -extern double nan __P((const char *)); -extern double nextafter __P((double, double)); -extern double nexttoward __P((double, long double)); - -extern double fdim __P((double, double)); -extern double fmax __P((double, double)); -extern double fmin __P((double, double)); - -extern double fma __P((double, double, double)); - -extern float acosf __P((float)); -extern float asinf __P((float)); -extern float atanf __P((float)); -extern float atan2f __P((float, float)); -extern float cosf __P((float)); -extern float sinf __P((float)); -extern float tanf __P((float)); - -extern float acoshf __P((float)); -extern float asinhf __P((float)); -extern float atanhf __P((float)); -extern float coshf __P((float)); -extern float sinhf __P((float)); -extern float tanhf __P((float)); - -extern float expf __P((float)); -extern float exp2f __P((float)); -extern float expm1f __P((float)); -extern float frexpf __P((float, int *)); -extern int ilogbf __P((float)); -extern float ldexpf __P((float, int)); -extern float logf __P((float)); -extern float log10f __P((float)); -extern float log1pf __P((float)); -extern float log2f __P((float)); -extern float logbf __P((float)); -extern float modff __P((float, float *)); -extern float scalbnf __P((float, int)); -extern float scalblnf __P((float, long int)); - -extern float cbrtf __P((float)); -extern float fabsf __P((float)); -extern float hypotf __P((float, float)); -extern float powf __P((float, float)); -extern float sqrtf __P((float)); - -extern float erff __P((float)); -extern float erfcf __P((float)); -extern float lgammaf __P((float)); -extern float tgammaf __P((float)); - -extern float ceilf __P((float)); -extern float floorf __P((float)); -extern float nearbyintf __P((float)); -extern float rintf __P((float)); -extern long int lrintf __P((float)); -extern float roundf __P((float)); -extern long int lroundf __P((float)); -extern float truncf __P((float)); - -extern float fmodf __P((float, float)); -extern float remainderf __P((float, float)); -extern float remquof __P((float, float, int *)); - -extern float copysignf __P((float, float)); -extern float nanf __P((const char *)); -extern float nextafterf __P((float, float)); -extern float nexttowardf __P((float, long double)); - -extern float fdimf __P((float, float)); -extern float fmaxf __P((float, float)); -extern float fminf __P((float, float)); - -extern float fmaf __P((float, float, float)); - -extern long double acosl __P((long double)); -extern long double asinl __P((long double)); -extern long double atanl __P((long double)); -extern long double atan2l __P((long double, long double)); -extern long double cosl __P((long double)); -extern long double sinl __P((long double)); -extern long double tanl __P((long double)); - -extern long double acoshl __P((long double)); -extern long double asinhl __P((long double)); -extern long double atanhl __P((long double)); -extern long double coshl __P((long double)); -extern long double sinhl __P((long double)); -extern long double tanhl __P((long double)); - -extern long double expl __P((long double)); -extern long double exp2l __P((long double)); -extern long double expm1l __P((long double)); -extern long double frexpl __P((long double, int *)); -extern int ilogbl __P((long double)); -extern long double ldexpl __P((long double, int)); -extern long double logl __P((long double)); -extern long double log10l __P((long double)); -extern long double log1pl __P((long double)); -extern long double log2l __P((long double)); -extern long double logbl __P((long double)); -extern long double modfl __P((long double, long double *)); -extern long double scalbnl __P((long double, int)); -extern long double scalblnl __P((long double, long int)); - -extern long double cbrtl __P((long double)); -extern long double fabsl __P((long double)); -extern long double hypotl __P((long double, long double)); -extern long double powl __P((long double, long double)); -extern long double sqrtl __P((long double)); - -extern long double erfl __P((long double)); -extern long double erfcl __P((long double)); -extern long double lgammal __P((long double)); -extern long double tgammal __P((long double)); - -extern long double ceill __P((long double)); -extern long double floorl __P((long double)); -extern long double nearbyintl __P((long double)); -extern long double rintl __P((long double)); -extern long int lrintl __P((long double)); -extern long double roundl __P((long double)); -extern long int lroundl __P((long double)); -extern long double truncl __P((long double)); - -extern long double fmodl __P((long double, long double)); -extern long double remainderl __P((long double, long double)); -extern long double remquol __P((long double, long double, int *)); - -extern long double copysignl __P((long double, long double)); -extern long double nanl __P((const char *)); -extern long double nextafterl __P((long double, long double)); -extern long double nexttowardl __P((long double, long double)); - -extern long double fdiml __P((long double, long double)); -extern long double fmaxl __P((long double, long double)); -extern long double fminl __P((long double, long double)); - -extern long double fmal __P((long double, long double, long double)); +extern double acosh(double); +extern double asinh(double); +extern double atanh(double); + +extern double exp2(double); +extern double expm1(double); +extern int ilogb(double); +extern double log1p(double); +extern double log2(double); +extern double logb(double); +extern double scalbn(double, int); +extern double scalbln(double, long int); + +extern double cbrt(double); +extern double hypot(double, double); + +extern double erf(double); +extern double erfc(double); +extern double lgamma(double); +extern double tgamma(double); + +extern double nearbyint(double); +extern double rint(double); +extern long int lrint(double); +extern double round(double); +extern long int lround(double); +extern double trunc(double); + +extern double remainder(double, double); +extern double remquo(double, double, int *); + +extern double copysign(double, double); +extern double nan(const char *); +extern double nextafter(double, double); +extern double nexttoward(double, long double); + +extern double fdim(double, double); +extern double fmax(double, double); +extern double fmin(double, double); + +extern double fma(double, double, double); + +extern float acosf(float); +extern float asinf(float); +extern float atanf(float); +extern float atan2f(float, float); +extern float cosf(float); +extern float sinf(float); +extern float tanf(float); + +extern float acoshf(float); +extern float asinhf(float); +extern float atanhf(float); +extern float coshf(float); +extern float sinhf(float); +extern float tanhf(float); + +extern float expf(float); +extern float exp2f(float); +extern float expm1f(float); +extern float frexpf(float, int *); +extern int ilogbf(float); +extern float ldexpf(float, int); +extern float logf(float); +extern float log10f(float); +extern float log1pf(float); +extern float log2f(float); +extern float logbf(float); +extern float modff(float, float *); +extern float scalbnf(float, int); +extern float scalblnf(float, long int); + +extern float cbrtf(float); +extern float fabsf(float); +extern float hypotf(float, float); +extern float powf(float, float); +extern float sqrtf(float); + +extern float erff(float); +extern float erfcf(float); +extern float lgammaf(float); +extern float tgammaf(float); + +extern float ceilf(float); +extern float floorf(float); +extern float nearbyintf(float); +extern float rintf(float); +extern long int lrintf(float); +extern float roundf(float); +extern long int lroundf(float); +extern float truncf(float); + +extern float fmodf(float, float); +extern float remainderf(float, float); +extern float remquof(float, float, int *); + +extern float copysignf(float, float); +extern float nanf(const char *); +extern float nextafterf(float, float); +extern float nexttowardf(float, long double); + +extern float fdimf(float, float); +extern float fmaxf(float, float); +extern float fminf(float, float); + +extern float fmaf(float, float, float); + +extern long double acosl(long double); +extern long double asinl(long double); +extern long double atanl(long double); +extern long double atan2l(long double, long double); +extern long double cosl(long double); +extern long double sinl(long double); +extern long double tanl(long double); + +extern long double acoshl(long double); +extern long double asinhl(long double); +extern long double atanhl(long double); +extern long double coshl(long double); +extern long double sinhl(long double); +extern long double tanhl(long double); + +extern long double expl(long double); +extern long double exp2l(long double); +extern long double expm1l(long double); +extern long double frexpl(long double, int *); +extern int ilogbl(long double); +extern long double ldexpl(long double, int); +extern long double logl(long double); +extern long double log10l(long double); +extern long double log1pl(long double); +extern long double log2l(long double); +extern long double logbl(long double); +extern long double modfl(long double, long double *); +extern long double scalbnl(long double, int); +extern long double scalblnl(long double, long int); + +extern long double cbrtl(long double); +extern long double fabsl(long double); +extern long double hypotl(long double, long double); +extern long double powl(long double, long double); +extern long double sqrtl(long double); + +extern long double erfl(long double); +extern long double erfcl(long double); +extern long double lgammal(long double); +extern long double tgammal(long double); + +extern long double ceill(long double); +extern long double floorl(long double); +extern long double nearbyintl(long double); +extern long double rintl(long double); +extern long int lrintl(long double); +extern long double roundl(long double); +extern long int lroundl(long double); +extern long double truncl(long double); + +extern long double fmodl(long double, long double); +extern long double remainderl(long double, long double); +extern long double remquol(long double, long double, int *); + +extern long double copysignl(long double, long double); +extern long double nanl(const char *); +extern long double nextafterl(long double, long double); +extern long double nexttowardl(long double, long double); + +extern long double fdiml(long double, long double); +extern long double fmaxl(long double, long double); +extern long double fminl(long double, long double); + +extern long double fmal(long double, long double, long double); #if !defined(_STRICT_STDC) && !defined(_NO_LONGLONG) || defined(_STDC_C99) || \ defined(__C99FEATURES__) -extern long long int llrint __P((double)); -extern long long int llround __P((double)); +extern long long int llrint(double); +extern long long int llround(double); -extern long long int llrintf __P((float)); -extern long long int llroundf __P((float)); +extern long long int llrintf(float); +extern long long int llroundf(float); -extern long long int llrintl __P((long double)); -extern long long int llroundl __P((long double)); +extern long long int llrintl(long double); +extern long long int llroundl(long double); #endif #if !defined(__cplusplus) diff --git a/usr/src/head/iso/math_iso.h b/usr/src/head/iso/math_iso.h index 4ecb29fbf8..f0186f24ed 100644 --- a/usr/src/head/iso/math_iso.h +++ b/usr/src/head/iso/math_iso.h @@ -35,14 +35,6 @@ extern "C" { #endif -#ifndef __P -#ifdef __STDC__ -#define __P(p) p -#else -#define __P(p) () -#endif -#endif /* !defined(__P) */ - #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__) typedef union _h_val { unsigned long _i[sizeof (double) / sizeof (unsigned long)]; @@ -62,32 +54,32 @@ extern _h_val __huge_val; namespace std { #endif -extern double acos __P((double)); -extern double asin __P((double)); -extern double atan __P((double)); -extern double atan2 __P((double, double)); -extern double cos __P((double)); -extern double sin __P((double)); -extern double tan __P((double)); - -extern double cosh __P((double)); -extern double sinh __P((double)); -extern double tanh __P((double)); - -extern double exp __P((double)); -extern double frexp __P((double, int *)); -extern double ldexp __P((double, int)); -extern double log __P((double)); -extern double log10 __P((double)); -extern double modf __P((double, double *)); - -extern double pow __P((double, double)); -extern double sqrt __P((double)); - -extern double ceil __P((double)); -extern double fabs __P((double)); -extern double floor __P((double)); -extern double fmod __P((double, double)); +extern double acos(double); +extern double asin(double); +extern double atan(double); +extern double atan2(double, double); +extern double cos(double); +extern double sin(double); +extern double tan(double); + +extern double cosh(double); +extern double sinh(double); +extern double tanh(double); + +extern double exp(double); +extern double frexp(double, int *); +extern double ldexp(double, int); +extern double log(double); +extern double log10(double); +extern double modf(double, double *); + +extern double pow(double, double); +extern double sqrt(double); + +extern double ceil(double); +extern double fabs(double); +extern double floor(double); +extern double fmod(double, double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(acos, asin, atan, atan2) @@ -158,8 +150,10 @@ extern "C++" { #undef __X #undef __Y inline double abs(double __X) { return fabs(__X); } - inline double pow(double __X, int __Y) { return - pow(__X, (double) (__Y)); } + + inline double pow(double __X, int __Y) { + return (pow(__X, (double)(__Y))); + } inline float abs(float __X) { return __fabsf(__X); } inline float acos(float __X) { return __acosf(__X); } @@ -179,8 +173,11 @@ extern "C++" { inline float log10(float __X) { return __log10f(__X); } inline float modf(float __X, float *__Y) { return __modff(__X, __Y); } inline float pow(float __X, float __Y) { return __powf(__X, __Y); } - inline float pow(float __X, int __Y) { return - pow((double) (__X), (double) (__Y)); } + + inline float pow(float __X, int __Y) { + return (pow((double)(__X), (double)(__Y))); + } + inline float sin(float __X) { return __sinf(__X); } inline float sinh(float __X) { return __sinhf(__X); } inline float sqrt(float __X) { return __sqrtf(__X); } @@ -191,28 +188,45 @@ extern "C++" { inline long double acos(long double __X) { return __acosl(__X); } inline long double asin(long double __X) { return __asinl(__X); } inline long double atan(long double __X) { return __atanl(__X); } - inline long double atan2(long double __X, long double __Y) { return - __atan2l(__X, __Y); } + + inline long double atan2(long double __X, long double __Y) { + return (__atan2l(__X, __Y)); + } + inline long double ceil(long double __X) { return __ceill(__X); } inline long double cos(long double __X) { return __cosl(__X); } inline long double cosh(long double __X) { return __coshl(__X); } inline long double exp(long double __X) { return __expl(__X); } inline long double fabs(long double __X) { return __fabsl(__X); } inline long double floor(long double __X) { return __floorl(__X); } - inline long double fmod(long double __X, long double __Y) { return - __fmodl(__X, __Y); } - inline long double frexp(long double __X, int *__Y) { return - __frexpl(__X, __Y); } - inline long double ldexp(long double __X, int __Y) { return - __ldexpl(__X, __Y); } + + inline long double fmod(long double __X, long double __Y) { + return (__fmodl(__X, __Y)); + } + + inline long double frexp(long double __X, int *__Y) { + return (__frexpl(__X, __Y)); + } + + inline long double ldexp(long double __X, int __Y) { + return (__ldexpl(__X, __Y)); + } + inline long double log(long double __X) { return __logl(__X); } inline long double log10(long double __X) { return __log10l(__X); } - inline long double modf(long double __X, long double *__Y) { return - __modfl(__X, __Y); } - inline long double pow(long double __X, long double __Y) { return - __powl(__X, __Y); } - inline long double pow(long double __X, int __Y) { return - __powl(__X, (long double) (__Y)); } + + inline long double modf(long double __X, long double *__Y) { + return (__modfl(__X, __Y)); + } + + inline long double pow(long double __X, long double __Y) { + return (__powl(__X, __Y)); + } + + inline long double pow(long double __X, int __Y) { + return (__powl(__X, (long double) (__Y))); + } + inline long double sin(long double __X) { return __sinl(__X); } inline long double sinh(long double __X) { return __sinhl(__X); } inline long double sqrt(long double __X) { return __sqrtl(__X); } diff --git a/usr/src/head/math.h b/usr/src/head/math.h index b28f42a907..caa29df4d3 100644 --- a/usr/src/head/math.h +++ b/usr/src/head/math.h @@ -66,14 +66,6 @@ extern "C" { #define exception __math_exception #endif -#ifndef __P -#ifdef __STDC__ -#define __P(p) p -#else -#define __P(p) () -#endif -#endif /* !defined(__P) */ - #if defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) || \ !defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE) /* @@ -147,10 +139,10 @@ struct exception { * SVID & X/Open */ /* BEGIN adopted by C99 */ -extern double erf __P((double)); -extern double erfc __P((double)); -extern double hypot __P((double, double)); -extern double lgamma __P((double)); +extern double erf(double); +extern double erfc(double); +extern double hypot(double, double); +extern double lgamma(double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(erf, erfc, hypot) @@ -159,7 +151,7 @@ extern double lgamma __P((double)); #endif #if !defined(_STDC_C99) && _XOPEN_SOURCE - 0 < 600 && !defined(__C99FEATURES__) -extern int isnan __P((double)); +extern int isnan(double); #pragma does_not_read_global_data(isnan) #pragma does_not_write_global_data(isnan) @@ -168,14 +160,14 @@ extern int isnan __P((double)); /* END adopted by C99 */ #if defined(__EXTENSIONS__) || _XOPEN_SOURCE - 0 < 600 -extern double gamma __P((double)); /* deprecated; use lgamma */ +extern double gamma(double); /* deprecated; use lgamma */ #endif -extern double j0 __P((double)); -extern double j1 __P((double)); -extern double jn __P((int, double)); -extern double y0 __P((double)); -extern double y1 __P((double)); -extern double yn __P((int, double)); +extern double j0(double); +extern double j1(double); +extern double jn(int, double); +extern double y0(double); +extern double y1(double); +extern double yn(int, double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(j0, j1, jn, y0, y1, yn) @@ -188,7 +180,7 @@ extern double yn __P((int, double)); /* * SVID & XPG 4.2/5 */ -extern double scalb __P((double, double)); +extern double scalb(double, double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(scalb) @@ -197,21 +189,21 @@ extern double scalb __P((double, double)); #endif /* BEGIN adopted by C99 */ -extern double acosh __P((double)); -extern double asinh __P((double)); -extern double atanh __P((double)); -extern double cbrt __P((double)); -extern double logb __P((double)); -extern double nextafter __P((double, double)); -extern double remainder __P((double, double)); +extern double acosh(double); +extern double asinh(double); +extern double atanh(double); +extern double cbrt(double); +extern double logb(double); +extern double nextafter(double, double); +extern double remainder(double, double); /* * XPG 4.2/5 */ -extern double expm1 __P((double)); -extern int ilogb __P((double)); -extern double log1p __P((double)); -extern double rint __P((double)); +extern double expm1(double); +extern int ilogb(double); +extern double log1p(double); +extern double rint(double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(acosh, asinh, atanh, cbrt) @@ -231,12 +223,12 @@ extern double rint __P((double)); /* * SVID */ -extern int matherr __P((struct exception *)); +extern int matherr(struct exception *); /* * IEEE Test Vector */ -extern double significand __P((double)); +extern double significand(double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(significand) @@ -247,30 +239,30 @@ extern double significand __P((double)); extern int signgamf; /* deprecated; use signgam */ extern int signgaml; /* deprecated; use signgam */ -extern int isnanf __P((float)); -extern int isnanl __P((long double)); -extern float gammaf __P((float)); /* deprecated; use lgammaf */ -extern float gammaf_r __P((float, int *)); /* deprecated; use lgammaf_r */ -extern float j0f __P((float)); -extern float j1f __P((float)); -extern float jnf __P((int, float)); -extern float lgammaf_r __P((float, int *)); -extern float scalbf __P((float, float)); -extern float significandf __P((float)); -extern float y0f __P((float)); -extern float y1f __P((float)); -extern float ynf __P((int, float)); -extern long double gammal __P((long double)); /* deprecated; use lgammal */ -extern long double gammal_r __P((long double, int *)); /* deprecated */ -extern long double j0l __P((long double)); -extern long double j1l __P((long double)); -extern long double jnl __P((int, long double)); -extern long double lgammal_r __P((long double, int *)); -extern long double scalbl __P((long double, long double)); -extern long double significandl __P((long double)); -extern long double y0l __P((long double)); -extern long double y1l __P((long double)); -extern long double ynl __P((int, long double)); +extern int isnanf(float); +extern int isnanl(long double); +extern float gammaf(float); /* deprecated; use lgammaf */ +extern float gammaf_r(float, int *); /* deprecated; use lgammaf_r */ +extern float j0f(float); +extern float j1f(float); +extern float jnf(int, float); +extern float lgammaf_r(float, int *); +extern float scalbf(float, float); +extern float significandf(float); +extern float y0f(float); +extern float y1f(float); +extern float ynf(int, float); +extern long double gammal(long double); /* deprecated; use lgammal */ +extern long double gammal_r(long double, int *); /* deprecated */ +extern long double j0l(long double); +extern long double j1l(long double); +extern long double jnl(int, long double); +extern long double lgammal_r(long double, int *); +extern long double scalbl(long double, long double); +extern long double significandl(long double); +extern long double y0l(long double); +extern long double y1l(long double); +extern long double ynl(int, long double); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(isnanf, isnanl) @@ -293,9 +285,9 @@ extern long double ynl __P((int, long double)); /* * for sin+cos->sincos transformation */ -extern void sincos __P((double, double *, double *)); -extern void sincosf __P((float, float *, float *)); -extern void sincosl __P((long double, long double *, long double *)); +extern void sincos(double, double *, double *); +extern void sincosf(float, float *, float *); +extern void sincosl(long double, long double *, long double *); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(sincos, sincosf, sincosl) @@ -305,8 +297,8 @@ extern void sincosl __P((long double, long double *, long double *)); /* * Functions callable from C, intended to support IEEE arithmetic. */ -extern double copysign __P((double, double)); -extern double scalbn __P((double, int)); +extern double copysign(double, double); +extern double scalbn(double, int); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(copysign, scalbn) @@ -319,15 +311,15 @@ extern double scalbn __P((double, int)); * Reentrant version of gamma & lgamma; passes signgam back by reference * as the second argument; user must allocate space for signgam. */ -extern double gamma_r __P((double, int *)); /* deprecated; use lgamma_r */ -extern double lgamma_r __P((double, int *)); +extern double gamma_r(double, int *); /* deprecated; use lgamma_r */ +extern double lgamma_r(double, int *); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(gamma_r, lgamma_r) #endif /* BEGIN adopted by C99 */ -extern float modff __P((float, float *)); +extern float modff(float, float *); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(modff) diff --git a/usr/src/lib/libc/port/gen/posix_memalign.c b/usr/src/lib/libc/port/gen/posix_memalign.c index d05ac2d9ea..131e0d01b8 100644 --- a/usr/src/lib/libc/port/gen/posix_memalign.c +++ b/usr/src/lib/libc/port/gen/posix_memalign.c @@ -24,9 +24,10 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include "lint.h" + +#include <sys/sysmacros.h> + #include <stdlib.h> #include <errno.h> @@ -49,16 +50,19 @@ int posix_memalign(void **memptr, size_t alignment, size_t size) { void *ptr = NULL; - int error = 0; - - if (alignment == 0 || - (alignment & (sizeof (void *) - 1)) != 0 || - (alignment & (alignment - 1)) != 0) - error = EINVAL; - else if (size != 0 && - (ptr = memalign(alignment, size)) == NULL) - error = ENOMEM; - *memptr = ptr; - return (error); + if ((alignment == 0) || !ISP2(alignment) || + (alignment & (sizeof (void *) - 1)) != 0) { + return (EINVAL); + } else if (size == 0) { + *memptr = NULL; + return (0); + } else { + if ((ptr = memalign(alignment, size)) == NULL) { + return (ENOMEM); + } else { + *memptr = ptr; + return (0); + } + } } diff --git a/usr/src/pkg/manifests/system-test-libctest.mf b/usr/src/pkg/manifests/system-test-libctest.mf index f01471e5bf..e322646bcb 100644 --- a/usr/src/pkg/manifests/system-test-libctest.mf +++ b/usr/src/pkg/manifests/system-test-libctest.mf @@ -100,6 +100,8 @@ file path=opt/libc-tests/tests/newlocale_test.$(ARCH64) mode=0555 file path=opt/libc-tests/tests/nl_langinfo_test mode=0555 file path=opt/libc-tests/tests/nl_langinfo_test.$(ARCH) mode=0555 file path=opt/libc-tests/tests/nl_langinfo_test.$(ARCH64) mode=0555 +file path=opt/libc-tests/tests/posix_memalign.32 mode=0555 +file path=opt/libc-tests/tests/posix_memalign.64 mode=0555 file path=opt/libc-tests/tests/printf-6961.64 mode=0555 file path=opt/libc-tests/tests/printf-9511.32 mode=0555 file path=opt/libc-tests/tests/printf-9511.64 mode=0555 diff --git a/usr/src/test/libc-tests/runfiles/default.run b/usr/src/test/libc-tests/runfiles/default.run index 228c15122e..0e8a5d4163 100644 --- a/usr/src/test/libc-tests/runfiles/default.run +++ b/usr/src/test/libc-tests/runfiles/default.run @@ -83,6 +83,8 @@ timeout = 600 [/opt/libc-tests/tests/fnmatch.64] [/opt/libc-tests/tests/memset_s.32] [/opt/libc-tests/tests/memset_s.64] +[/opt/libc-tests/tests/posix_memalign.32] +[/opt/libc-tests/tests/posix_memalign.64] [/opt/libc-tests/tests/printf-6961.64] [/opt/libc-tests/tests/printf-9511.32] [/opt/libc-tests/tests/printf-9511.64] diff --git a/usr/src/test/libc-tests/tests/Makefile b/usr/src/test/libc-tests/tests/Makefile index aa2e874fa9..dcbdf6b61a 100644 --- a/usr/src/test/libc-tests/tests/Makefile +++ b/usr/src/test/libc-tests/tests/Makefile @@ -40,6 +40,7 @@ PROGS = \ env-7076 \ fnmatch \ memset_s \ + posix_memalign \ printf-9511 \ psignal-5097 \ quick_exit_order \ @@ -67,6 +68,8 @@ PROGS64 = \ aligned_alloc.32 := LDLIBS += -lproc aligned_alloc.64 := LDLIBS64 += -lproc +posix_memalign.32 := LDLIBS += -lproc +posix_memalign.64 := LDLIBS64 += -lproc memset_s.32 := CPPFLAGS += -D__STDC_WANT_LIB_EXT1__=1 memset_s.64 := CPPFLAGS += -D__STDC_WANT_LIB_EXT1__=1 diff --git a/usr/src/test/libc-tests/tests/posix_memalign.c b/usr/src/test/libc-tests/tests/posix_memalign.c new file mode 100644 index 0000000000..b35607c2bd --- /dev/null +++ b/usr/src/test/libc-tests/tests/posix_memalign.c @@ -0,0 +1,92 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright 2016 Joyent, Inc. + */ + +/* + * Basic tests for posix_memalign(3C). Note that we test ENOMEM failure by + * relying on the implementation of the current libc malloc. Specifically we go + * through and add a mapping so we can't expand the heap and then use it up. If + * the memory allocator is ever changed, this test will start failing, at which + * point, it may not be worth the cost of keeping it around. + */ + +#include <stdlib.h> +#include <errno.h> +#include <libproc.h> +#include <sys/sysmacros.h> +#include <sys/mman.h> +#include <sys/debug.h> + +int +main(void) +{ + pstatus_t status; + /* + * We use a non-NULL value, so we can verify that failure does not + * change the value of 'buf' + */ + void *sentinel = (void *)0xbad00000; + void *buf = sentinel; + int err = 0; + + /* + * Alignment must be sizeof (void *) (word) aligned. + */ + err = posix_memalign(&buf, sizeof (void *) - 1, 16); + VERIFY3S(err, ==, EINVAL); + VERIFY3P(buf, ==, sentinel); + + err = posix_memalign(&buf, sizeof (void *) + 1, 16); + VERIFY3S(err, ==, EINVAL); + VERIFY3P(buf, ==, sentinel); + + err = posix_memalign(&buf, 23, 16); + VERIFY3S(err, ==, EINVAL); + VERIFY3P(buf, ==, sentinel); + + err = posix_memalign(&buf, sizeof (void *), 16); + VERIFY3S(err, ==, 0); + VERIFY3B(IS_P2ALIGNED(buf, sizeof (void *)), ==, B_TRUE); + VERIFY3P(buf, !=, sentinel); + VERIFY3P(buf, !=, NULL); + free(buf); + buf = sentinel; + + /* + * Cause ENOMEM + */ + VERIFY0(proc_get_status(getpid(), &status)); + VERIFY3P(mmap((caddr_t)P2ROUNDUP(status.pr_brkbase + + status.pr_brksize, 0x1000), 0x1000, + PROT_READ, MAP_ANON | MAP_FIXED | MAP_PRIVATE, -1, 0), + !=, (void *)-1); + + for (;;) { + if (malloc(16) == NULL) + break; + } + + + for (;;) { + if (posix_memalign(&buf, sizeof (void *), 16) == ENOMEM) + break; + } + + buf = sentinel; + err = posix_memalign(&buf, sizeof (void *), 16); + VERIFY3S(err, ==, ENOMEM); + VERIFY3P(buf, ==, sentinel); + + return (0); +} |