56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			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")));
 | |
| 
 |