newlib/winsup/cygwin/crt0.c
Corinna Vinschen 9a7b0aad2a * crt0.cc: Remove PPC considerations.
(WinMainCRTStartup): Add symbol as alias to mainCRTStartup.
2005-09-29 14:28:22 +00:00

56 lines
1.2 KiB
C

/* crt0.c.
Copyright 2001, 2005 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.
*/
#ifdef __i386__
#define FPU_RESERVED 0xF0C0
#define FPU_DEFAULT 0x033f
/* For debugging on *#!$@ windbg. bp for breakpoint. */
int __cygwin_crt0_bp = 0;
#endif
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");
if (__cygwin_crt0_bp)
asm volatile ("int3");
{
volatile unsigned short cw;
/* Get Control Word */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
/* mask in */
cw &= FPU_RESERVED;
cw |= FPU_DEFAULT;
/* set cw */
__asm__ volatile ("fldcw %0" :: "m" (cw));
}
#endif
cygwin_crt0 (main);
}
void WinMainCRTStartup(void) __attribute__ ((alias("mainCRTStartup")));