diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-05-12 11:06:27 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-05-12 11:06:27 +0000 |
commit | 194d9eb318403b1618c3f77eba6de4e17b7c900d (patch) | |
tree | 2c7028f9a5a1f8c1c60e37a6556aa9d8e1556cf7 /winsup/cygwin/crt0.c | |
parent | 01859fc441c2f253f258bbe13de1e77ba2ffe8bd (diff) | |
download | cygnal-194d9eb318403b1618c3f77eba6de4e17b7c900d.tar.gz cygnal-194d9eb318403b1618c3f77eba6de4e17b7c900d.tar.bz2 cygnal-194d9eb318403b1618c3f77eba6de4e17b7c900d.zip |
* Makefile.in (CYGWIN_START): Define as crt0.o. Add to TARGET_LIBS.
* fhandler.h (fhandler_virtual::fstat): Remove useless declaration.
* fhandler_virtual.cc: Remove _COMPILING_NEWLIB define.
* ipc.cc (ftok): Use stat64.
* syscalls.cc (_fstat64): Remove alias.
(_fstat): Ditto.
(_stat): Ditto.
(_fstat64_r): New function.
(_fstat_r): Ditto.
(_stat64_r): Ditto.
(stat_r): Ditto.
* crt0.o: New file, moved from newlib.
* include/sys/param.h: Ditto.
* include/sys/utime.h: Ditto.
* include/sys/utmp.h: Ditto.
* include/sys/dirent.h: Ditto. Expose different struct dirent,
dependening of the environment.
Diffstat (limited to 'winsup/cygwin/crt0.c')
-rw-r--r-- | winsup/cygwin/crt0.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/winsup/cygwin/crt0.c b/winsup/cygwin/crt0.c new file mode 100644 index 000000000..2837a54d1 --- /dev/null +++ b/winsup/cygwin/crt0.c @@ -0,0 +1,56 @@ +/* crt0.c. + + Copyright 2001 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. */ + +#ifdef __PPC__ +/* For the PowerPC, we want to make this function have its structured + exception table exception function point to something we control. */ + +extern void __cygwin_exception_handler(); +extern void mainCRTStartup(void) __attribute__((__exception__(__cygwin_exception_handler))); +#endif + +/* 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 +mainCRTStartup () +{ +#ifdef __i386__ + 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); +} |