Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-05-12 15:06:27 +0400
committerCorinna Vinschen <corinna@vinschen.de>2003-05-12 15:06:27 +0400
commit194d9eb318403b1618c3f77eba6de4e17b7c900d (patch)
tree2c7028f9a5a1f8c1c60e37a6556aa9d8e1556cf7 /winsup/cygwin/crt0.c
parent01859fc441c2f253f258bbe13de1e77ba2ffe8bd (diff)
* 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.c56
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);
+}