xref: /openbsd-src/lib/libm/arch/i387/DEFS.h (revision 2f2c00629eff6a304ebffb255fc56f4fa7a1833b)
1*2f2c0062Sguenther /*	$OpenBSD: DEFS.h,v 1.1 2016/09/12 19:47:02 guenther Exp $	*/
2*2f2c0062Sguenther 
3*2f2c0062Sguenther /*
4*2f2c0062Sguenther  * Written by Philip Guenther <guenther@openbsd.org>
5*2f2c0062Sguenther  */
6*2f2c0062Sguenther 
7*2f2c0062Sguenther #include <machine/asm.h>
8*2f2c0062Sguenther 
9*2f2c0062Sguenther /*
10*2f2c0062Sguenther  * We define a hidden alias with the prefix "_libm_" for each global symbol
11*2f2c0062Sguenther  * that may be used internally.  By referencing _libm_x instead of x, other
12*2f2c0062Sguenther  * parts of libm prevent overriding by the application and avoid unnecessary
13*2f2c0062Sguenther  * relocations.
14*2f2c0062Sguenther  */
15*2f2c0062Sguenther #define _HIDDEN(x)		_libm_##x
16*2f2c0062Sguenther #define _HIDDEN_ALIAS(x,y)			\
17*2f2c0062Sguenther 	STRONG_ALIAS(_HIDDEN(x),y);		\
18*2f2c0062Sguenther 	.hidden _HIDDEN(x)
19*2f2c0062Sguenther #define _HIDDEN_FALIAS(x,y)			\
20*2f2c0062Sguenther 	_HIDDEN_ALIAS(x,y);			\
21*2f2c0062Sguenther 	.type _HIDDEN(x),@function
22*2f2c0062Sguenther 
23*2f2c0062Sguenther /*
24*2f2c0062Sguenther  * For functions implemented in ASM that are used internally
25*2f2c0062Sguenther  *   END_STD(x)	Like DEF_STD() in C; for standard/reserved C names
26*2f2c0062Sguenther  *   END_NONSTD(x)	Like DEF_NONSTD() in C; for non-ISO C names
27*2f2c0062Sguenther  */
28*2f2c0062Sguenther #define	END_STD(x)	END(x); _HIDDEN_FALIAS(x,x); END(_HIDDEN(x))
29*2f2c0062Sguenther #define	END_NONSTD(x)	END_STD(x); .weak x
30