summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/head/fenv.h54
-rw-r--r--usr/src/head/floatingpoint.h95
-rw-r--r--usr/src/head/iso/math_c99.h401
-rw-r--r--usr/src/head/iso/math_iso.h118
-rw-r--r--usr/src/head/math.h124
-rw-r--r--usr/src/lib/libc/port/gen/posix_memalign.c30
-rw-r--r--usr/src/pkg/manifests/system-test-libctest.mf2
-rw-r--r--usr/src/test/libc-tests/runfiles/default.run2
-rw-r--r--usr/src/test/libc-tests/tests/Makefile3
-rw-r--r--usr/src/test/libc-tests/tests/posix_memalign.c92
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);
+}