This is required as long as we don't have a GCC 6.x cross compiler on Linux. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* crt0.c
 | 
						|
 | 
						|
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>
 | 
						|
 | 
						|
extern int main (int argc, char **argv);
 | 
						|
 | 
						|
void cygwin_crt0 (int (*main) (int, char **));
 | 
						|
 | 
						|
void
 | 
						|
mainCRTStartup ()
 | 
						|
{
 | 
						|
#ifdef __i386__
 | 
						|
#if __GNUC_PREREQ(6,0)
 | 
						|
#pragma GCC diagnostic ignored "-Wframe-address"
 | 
						|
#endif
 | 
						|
  (void)__builtin_return_address(1);
 | 
						|
#if __GNUC_PREREQ(6,0)
 | 
						|
#pragma GCC diagnostic pop
 | 
						|
#endif
 | 
						|
  asm volatile ("andl $-16,%%esp" ::: "%esp");
 | 
						|
#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")));
 |