newlib/winsup/cygwin/crt0.c
Dave Korn 0f81b5d4bc winsup/cygwin/ChangeLog:
* Makefile.in (DLL_OFILES): Add new fenv.o module.
	(fenv_CFLAGS): New flags definition for fenv.o compile.
	* autoload.cc (std_dll_init): Use fenv.h functions instead of direct
	manipulation of x87 FPU registers.
	* crt0.c (mainCRTStartup): Likewise.
	* cygwin.din (feclearexcept, fegetexceptflag, feraiseexcept,
	fesetexceptflag, fetestexcept, fegetround, fesetround, fegetenv,
	feholdexcept, fesetenv, feupdateenv, fegetprec, fesetprec,
	feenableexcept, fedisableexcept, fegetexcept, _feinitialise,
	_fe_dfl_env, _fe_nomask_env): Export new functions and data items.
	* fenv.cc: New file.
	* posix.sgml: Update status of newly-implemented APIs.
	* include/fenv.h: Likewise related header.
	* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
2010-09-11 06:53:28 +00:00

43 lines
1.1 KiB
C

/* crt0.c
Copyright 2001, 2005, 2010 Red Hat, Inc.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
/* In the following ifdef'd i386 code, the FPU precision is set to 80 bits
and all FPU exceptions are masked. The former is needed to make long
doubles work correctly. The latter causes the FPU to generate NaNs and
Infinities instead of signals for certain operations. */
#include "winlean.h"
#include <sys/cygwin.h>
#include "fenv.h"
extern int main (int argc, char **argv);
void cygwin_crt0 (int (*main) (int, char **));
void
mainCRTStartup ()
{
#ifdef __i386__
(void)__builtin_return_address(1);
asm volatile ("andl $-16,%%esp" ::: "%esp");
_feinitialise ();
#endif
cygwin_crt0 (main);
/* These are never actually called. They are just here to force the inclusion
of things like -lbinmode. */
cygwin_premain0 (0, NULL, NULL);
cygwin_premain1 (0, NULL, NULL);
cygwin_premain2 (0, NULL, NULL);
cygwin_premain3 (0, NULL, NULL);
}
void WinMainCRTStartup(void) __attribute__ ((alias("mainCRTStartup")));