#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright 2011 Nexenta Systems, Inc.	All rights reserved.
#
# Copyright 2006 Sun Microsystems, Inc.	 All rights reserved.
# Use is subject to license terms.
#
# Interface definition for libm.so.2
#
# For information regarding the establishment of versioned definitions see:
#	The Linker and Libraries Manual (version 2.5 or greater)
# This is part of the Developers Guide in the Answerbook.  Specifically refer
# to Chapter 2 under section "Defining Additional Symbols" through section
# "Reducing Symbol Scope", and Chapter 5 "Versioning".
#
# For specific rules for the modification (evolution) of these version
# definitions see:
#	psarc_1995_14: Integration of Scoped Libraries
#		(/shared/sac/PSARC/1995/014)
#	Policy for Shared Library Version Names and Interface Definitions
#		(/shared/ON/general_docs/scoping-rules.ps)

#
# MAPFILE HEADER START
#
# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE.
# Object versioning must comply with the rules detailed in
#
#	usr/src/lib/README.mapfiles
#
# You should not be making modifications here until you've read the most current
# copy of that file. If you need help, contact a gatekeeper for guidance.
#
# MAPFILE HEADER END
#

$mapfile_version 2

$if _ELF32
$add lf64
$endif
$if _sparc && _ELF32
$add sparc32
$endif
$if _sparc && _ELF64
$add sparcv9
$endif
$if _x86 && _ELF32
$add i386
$endif
$if _x86 && _ELF64
$add amd64
$endif

SYMBOL_VERSION SUNW_1.3 {
    global:
	__isnanf;	#LSARC/2003/658
	__isnanl;	#LSARC/2003/658
	_isnan		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_isnand		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_isnanf		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_logb		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_modf		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_modff		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_nextafter	{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	_scalb		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	isnand		{ FLAGS = NODYNSORT; };	#LSARC/2003/658
	isnanf;	#LSARC/2003/658
	isnanl;	#LSARC/2003/658
} SUNW_1.2;

SYMBOL_VERSION SUNW_1.2 {
    global:
	__acoshf;
	__acoshl;
	__asinhf;
	__asinhl;
	__atanhf;
	__atanhl;
	__cabs;
	__cabsf;
	__cabsl;
	__cacos;
	__cacosf;
	__cacosh;
	__cacoshf;
	__cacoshl;
	__cacosl;
	__carg;
	__cargf;
	__cargl;
	__casin;
	__casinf;
	__casinh;
	__casinhf;
	__casinhl;
	__casinl;
	__catan;
	__catanf;
	__catanh;
	__catanhf;
	__catanhl;
	__catanl;
	__cbrtf;
	__cbrtl;
	__ccos;
	__ccosf;
	__ccosh;
	__ccoshf;
	__ccoshl;
	__ccosl;
	__cexp;
	__cexpf;
	__cexpl;
	__cimag;
	__cimagf;
	__cimagl;
	__clog;
	__clogf;
	__clogl;
	__conj;
	__conjf;
	__conjl;
	__copysignf;
	__copysignl;
	__cpow;
	__cpowf;
	__cpowl;
	__cproj;
	__cprojf;
	__cprojl;
	__creal;
	__crealf;
	__creall;
	__csin;
	__csinf;
	__csinh;
	__csinhf;
	__csinhl;
	__csinl;
	__csqrt;
	__csqrtf;
	__csqrtl;
	__ctan;
	__ctanf;
	__ctanh;
	__ctanhf;
	__ctanhl;
	__ctanl;
	__erfcf;
	__erfcl;
	__erff;
	__erfl;
	__exp2;
	__exp2f;
	__exp2l;
	__expm1f;
	__expm1l;
	__fdim;
	__fdimf;
	__fdiml;
	__feclearexcept;
	__fegetenv;
	__fegetexceptflag;
$if _x86
	__fegetprec;	#LSARC/1996/175
$endif
	__fegetround;
	__feholdexcept;
	__fenv_dfl_env	{
			  ASSERT = {
				  TYPE = OBJECT;
				  SIZE = addrsize[25];
				};
			};	#LSARC/1996/175
	__feraiseexcept;
	__fesetenv;
	__fesetexceptflag;
$if _x86
	__fesetprec;	#LSARC/1996/175
$endif
	__fesetround;
	__fetestexcept;
	__feupdateenv;
	__fex_get_handling;	#LSARC/1996/175
	__fex_get_log;	#LSARC/1996/175
	__fex_get_log_depth;	#LSARC/1996/175
	__fex_getexcepthandler;	#LSARC/1996/175
	__fex_log_entry;	#LSARC/1996/175
	__fex_merge_flags;	#LSARC/1996/175
	__fex_set_handling;	#LSARC/1996/175
	__fex_set_log;	#LSARC/1996/175
	__fex_set_log_depth;	#LSARC/1996/175
	__fex_setexcepthandler;	#LSARC/1996/175
	__fma;
	__fmaf;
	__fmal;
	__fmax;
	__fmaxf;
	__fmaxl;
	__fmin;
	__fminf;
	__fminl;
	__frexp;
	__gammaf;	#LSARC/2003/279
	__gammaf_r;	#LSARC/2003/279
	__gammal;	#LSARC/2003/279
	__gammal_r;	#LSARC/2003/279
	__hypotf;
	__hypotl;
	__ilogbf;
	__ilogbl;
	__j0f;	#LSARC/2003/279
	__j0l;	#LSARC/2003/279
	__j1f;	#LSARC/2003/279
	__j1l;	#LSARC/2003/279
	__jnf;	#LSARC/2003/279
	__jnl;	#LSARC/2003/279
	__ldexp;
	__lgammaf;
	__lgammaf_r;	#LSARC/2003/279
	__lgammal;
	__lgammal_r;	#LSARC/2003/279
$if amd64 || sparcv9
	__llrint	{ FLAGS = NODYNSORT; };
	__llrintf	{ FLAGS = NODYNSORT; };
	__llrintl	{ FLAGS = NODYNSORT; };
	__llround	{ FLAGS = NODYNSORT; };
	__llroundf	{ FLAGS = NODYNSORT; };
	__llroundl	{ FLAGS = NODYNSORT; };
$else
	__llrint;
	__llrintf;
	__llrintl;
	__llround;
	__llroundf;
	__llroundl;
$endif
	__log1pf;
	__log1pl;
	__log2;
	__log2f;
	__log2l;
	__logbf;
	__logbl;
$if amd64 || sparcv9
	__lrint		{ FLAGS = NODYNSORT; };
	__lrintf	{ FLAGS = NODYNSORT; };
	__lrintl	{ FLAGS = NODYNSORT; };
	__lround	{ FLAGS = NODYNSORT; };
	__lroundf	{ FLAGS = NODYNSORT; };
	__lroundl	{ FLAGS = NODYNSORT; };
$else
	__lrint;
	__lrintf;
	__lrintl;
	__lround;
	__lroundf;
	__lroundl;
$endif
	__modf;
	__nan;
	__nanf;
	__nanl;
	__nearbyint;
	__nearbyintf;
	__nearbyintl;
	__nextafterf;
	__nextafterl;
	__nexttoward;
	__nexttowardf;
	__nexttowardl;
	__remainderf;
	__remainderl;
	__remquo;
	__remquof;
	__remquol;
	__rintf;
	__rintl;
	__round;
	__roundf;
	__roundl;
	__scalbf;	#LSARC/2003/279
	__scalbl;	#LSARC/2003/279
	__scalbln;
	__scalblnf;
	__scalblnl;
	__scalbnf;
	__scalbnl;
	__signgamf	{ ASSERT = { BINDING = WEAK; ALIAS = signgamf; }; };	#LSARC/2003/279
	__signgaml	{ ASSERT = { BINDING = WEAK; ALIAS = signgaml; }; };	#LSARC/2003/279
	__significandf;	#LSARC/2003/279
	__significandl;	#LSARC/2003/279
	__sincos;	#LSARC/2003/279
	__sincosf;	#LSARC/2003/279
	__sincosl;	#LSARC/2003/279
	__tgamma;
	__tgammaf;
	__tgammal;
	__trunc;
	__truncf;
	__truncl;
	__xpg6		{
			  FLAGS = NODIRECT;
			  ASSERT = {
				  TYPE = OBJECT;
				  SIZE = 4;
				};
			};	#private contract with libc group
	__y0f;	#LSARC/2003/279
	__y0l;	#LSARC/2003/279
	__y1f;	#LSARC/2003/279
	__y1l;	#LSARC/2003/279
	__ynf;	#LSARC/2003/279
	__ynl;	#LSARC/2003/279
	acosf;
	acoshf;
	acoshl;
	acosl;
	asinf;
	asinhf;
	asinhl;
	asinl;
	atan2f;
	atan2l;
	atanf;
	atanhf;
	atanhl;
	atanl;
	cabs;
	cabsf;
	cabsl;
	cacos;
	cacosf;
	cacosh;
	cacoshf;
	cacoshl;
	cacosl;
	carg;
	cargf;
	cargl;
	casin;
	casinf;
	casinh;
	casinhf;
	casinhl;
	casinl;
	catan;
	catanf;
	catanh;
	catanhf;
	catanhl;
	catanl;
	cbrtf;
	cbrtl;
	ccos;
	ccosf;
	ccosh;
	ccoshf;
	ccoshl;
	ccosl;
	ceilf;
	ceill;
	cexp;
	cexpf;
	cexpl;
	cimag;
	cimagf;
	cimagl;
	clog;
	clogf;
	clogl;
	conj;
	conjf;
	conjl;
	copysignf;
	copysignl;
	cosf;
	coshf;
	coshl;
	cosl;
	cpow;
	cpowf;
	cpowl;
	cproj;
	cprojf;
	cprojl;
	creal;
	crealf;
	creall;
	csin;
	csinf;
	csinh;
	csinhf;
	csinhl;
	csinl;
	csqrt;
	csqrtf;
	csqrtl;
	ctan;
	ctanf;
	ctanh;
	ctanhf;
	ctanhl;
	ctanl;
	erfcf;
	erfcl;
	erff;
	erfl;
	exp2;
	exp2f;
	exp2l;
	expf;
	expl;
	expm1f;
	expm1l;
	fabsf;
	fabsl;
	fdim;
	fdimf;
	fdiml;
	feclearexcept;
	fegetenv;
	fegetexceptflag;
$if _x86
	fegetprec;	#LSARC/1996/175
$endif
	fegetround;
	feholdexcept;
	feraiseexcept;
	fesetenv;
	fesetexceptflag;
$if _x86
	fesetprec;	#LSARC/1996/175
$endif
	fesetround;
	fetestexcept;
	feupdateenv;
	fex_get_handling;	#LSARC/1996/175
	fex_get_log;	#LSARC/1996/175
	fex_get_log_depth;	#LSARC/1996/175
	fex_getexcepthandler;	#LSARC/1996/175
	fex_log_entry;	#LSARC/1996/175
	fex_merge_flags;	#LSARC/1996/175
	fex_set_handling;	#LSARC/1996/175
	fex_set_log;	#LSARC/1996/175
	fex_set_log_depth;	#LSARC/1996/175
	fex_setexcepthandler;	#LSARC/1996/175
	floorf;
	floorl;
	fma;
	fmaf;
	fmal;
	fmax;
	fmaxf;
	fmaxl;
	fmin;
	fminf;
	fminl;
	fmodf;
	fmodl;
	frexp;
	frexpf;
	frexpl;
	gammaf;	#LSARC/2003/279
	gammaf_r;	#LSARC/2003/279
	gammal;	#LSARC/2003/279
	gammal_r;	#LSARC/2003/279
	hypotf;
	hypotl;
	ilogbf;
	ilogbl;
	j0f;	#LSARC/2003/279
	j0l;	#LSARC/2003/279
	j1f;	#LSARC/2003/279
	j1l;	#LSARC/2003/279
	jnf;	#LSARC/2003/279
	jnl;	#LSARC/2003/279
	ldexp;
	ldexpf;
	ldexpl;
	lgammaf;
	lgammaf_r;	#LSARC/2003/279
	lgammal;
	lgammal_r;	#LSARC/2003/279
$if amd64 || sparcv9
	llrint		{ FLAGS = NODYNSORT; };
	llrintf		{ FLAGS = NODYNSORT; };
	llrintl		{ FLAGS = NODYNSORT; };
	llround		{ FLAGS = NODYNSORT; };
	llroundf	{ FLAGS = NODYNSORT; };
	llroundl	{ FLAGS = NODYNSORT; };
$else
	llrint;
	llrintf;
	llrintl;
	llround;
	llroundf;
	llroundl;
$endif
	log10f;
	log10l;
	log1pf;
	log1pl;
	log2;
	log2f;
	log2l;
	logbf;
	logbl;
	logf;
	logl;
	lrint;
	lrintf;
	lrintl;
	lround;
	lroundf;
	lroundl;
	modf;
	modff;
	modfl;
	nan;
	nanf;
	nanl;
	nearbyint;
	nearbyintf;
	nearbyintl;
	nextafterf;
	nextafterl;
	nexttoward;
	nexttowardf;
	nexttowardl;
	powf;
	powl;
	remainderf;
	remainderl;
	remquo;
	remquof;
	remquol;
	rintf;
	rintl;
	round;
	roundf;
	roundl;
	scalbf;	#LSARC/2003/279
	scalbl;	#LSARC/2003/279
	scalbln;
	scalblnf;
	scalblnl;
	scalbnf;
	scalbnl;
	signgamf	{ ASSERT = { TYPE = OBJECT; SIZE = 4; }; };	#LSARC/2003/279
	signgaml	{ ASSERT = { TYPE = OBJECT; SIZE = 4; }; };	#LSARC/2003/279
	significandf;	#LSARC/2003/279
	significandl;	#LSARC/2003/279
	sincos;	#LSARC/2003/279
	sincosf;	#LSARC/2003/279
	sincosl;	#LSARC/2003/279
	sinf;
	sinhf;
	sinhl;
	sinl;
	sqrtf;
	sqrtl;
	tanf;
	tanhf;
	tanhl;
	tanl;
	tgamma;
	tgammaf;
	tgammal;
	trunc;
	truncf;
	truncl;
	y0f;	#LSARC/2003/279
	y0l;	#LSARC/2003/279
	y1f;	#LSARC/2003/279
	y1l;	#LSARC/2003/279
	ynf;	#LSARC/2003/279
	ynl;	#LSARC/2003/279
} SUNW_1.1.1;

SYMBOL_VERSION SUNW_1.1.1 {
    global:
	__acosf;
	__acosl;
	__asinf;
	__asinl;
	__atan2f;
	__atan2l;
	__atanf;
	__atanl;
	__ceilf;
	__ceill;
	__cosf;
	__coshf;
	__coshl;
	__cosl;
	__expf;
	__expl;
	__fabsf;
	__fabsl;
	__floorf;
	__floorl;
	__fmodf;
	__fmodl;
	__frexpf;
	__frexpl;
	__ldexpf;
	__ldexpl;
	__log10f;
	__log10l;
	__logf;
	__logl;
	__modff;
	__modfl;
	__powf;
	__powl;
	__sinf;
	__sinhf;
	__sinhl;
	__sinl;
	__sqrtf;
	__sqrtl;
	__tanf;
	__tanhf;
	__tanhl;
	__tanl;
} SUNW_1.1;

SYMBOL_VERSION SUNW_1.1 {
    global:
	__acos;
	__acosh;
	__asin;
	__asinh;
	__atan;
	__atan2;
	__atanh;
	__cbrt;
	__ceil;
	__copysign;
	__cos;
	__cosh;
	__erf;
	__erfc;
	__exp;
	__expm1;
	__fabs;
	__floor;
	__fmod;
	__gamma;
	__gamma_r;
	__hypot;
	__ilogb;
	__isnan;
	__j0;
	__j1;
	__jn;
	__lgamma;
	__lgamma_r;
	__log;
	__log10;
	__log1p;
	__logb;
	__nextafter;
	__pow;
	__remainder;
	__rint;
	__scalb;
	__scalbn;
	__signgam	{ ASSERT = { BINDING = WEAK; ALIAS = signgam; }; };
	__significand;
	__sin;
	__sinh;
	__sqrt;
	__tan;
	__tanh;
	__y0;
	__y1;
	__yn;
	acos;
	acosh;
	asin;
	asinh;
	atan;
	atan2;
	atanh;
	cbrt;
	ceil;
	copysign;
	cos;
	cosh;
	erf;
	erfc;
	exp;
	expm1;
	fabs;
	floor;
	fmod;
	gamma;
	gamma_r;
	hypot;
	ilogb;
	isnan;
	j0;
	j1;
	jn;
	lgamma;
	lgamma_r;
	log;
	log10;
	log1p;
	logb;
	matherr		{ FLAGS = NODIRECT; };
	nextafter;
	pow;
	remainder;
	rint;
	scalb;
	scalbn;
	signgam		{ ASSERT = { TYPE = OBJECT; SIZE = 4; }; };
	significand;
	sin;
	sinh;
	sqrt;
	tan;
	tanh;
	y0;
	y1;
	yn;
};

$if amd64 || sparcv9
SYMBOL_VERSION SUNWprivate_1.2 {
$else
SYMBOL_VERSION SUNWprivate_1.3 {
$endif
	global:
		# -lmtsk
		__libm_mt_fex_sync	{
					  ASSERT = {
						  TYPE = OBJECT;
						  SIZE = addrsize;
						};
					};
		__mt_fex_sync		{
					  ASSERT = {
						  TYPE = OBJECT;
						  SIZE = addrsize
						};
					};
$if amd64 || sparcv9
} SUNWprivate_1.1;
$else
} SUNWprivate_1.2;

SYMBOL_VERSION SUNWprivate_1.2 {
	global:
		__libm_errno;	# SC3.0.1 -lmopt
} SUNWprivate_1.1;
$endif

SYMBOL_VERSION SUNWprivate_1.1 {
	global:
		_lib_version	{
				  ASSERT = {
					  TYPE = OBJECT;
					  SIZE = 4
					};
				};
		__libm__rem_pio2;
		__libm__rem_pio2m;
	# anything else is local
	local:
		# For symbols with multiple names, move the less preferred
		# names out of .SUNW_dynsymsort
		feclearexcept96	  { FLAGS = NODYNSORT };
		feraiseexcept96	  { FLAGS = NODYNSORT };
		fetestexcept96	  { FLAGS = NODYNSORT };
		fegetexceptflag96 { FLAGS = NODYNSORT };
		fesetexceptflag96 { FLAGS = NODYNSORT };
		feupdateenv96	  { FLAGS = NODYNSORT };
		fegetenv96	  { FLAGS = NODYNSORT };
		fesetenv96	  { FLAGS = NODYNSORT };
		fegetround96	  { FLAGS = NODYNSORT };
		*;	# symbols not mentioned in this file are scoped out
};
