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:
Diffstat (limited to 'libgloss/i386/cygmon-salib.c')
-rw-r--r--libgloss/i386/cygmon-salib.c165
1 files changed, 165 insertions, 0 deletions
diff --git a/libgloss/i386/cygmon-salib.c b/libgloss/i386/cygmon-salib.c
new file mode 100644
index 000000000..e0d5e72f7
--- /dev/null
+++ b/libgloss/i386/cygmon-salib.c
@@ -0,0 +1,165 @@
+/*
+ * Standard x86 syscalls for user programs running under Cygmon
+ *
+ * Copyright (c) 1998 Cygnus Support
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include "cygmon-syscall.h"
+#include <sys/time.h>
+
+extern int errno;
+
+_syscall3(int,write,int,i,char *,c,int,len);
+
+_syscall3(int,read,int,i,char *,c,int,len);
+
+_syscall2(int,kill,int,pid,int,signal);
+
+_syscall2(void,__install_signal_handler,int,arg,void *,handler);
+_syscall1(char **,__get_program_arguments,int *,argc);
+
+_syscall1(void,__sys_exit,int,exitcode);
+_syscall1(void,putTtyChar,int,character);
+_syscall1(time_t,time,time_t *,ptr);
+_syscall2(int, gettimeofday, struct timeval *,time, struct timezone *,z);
+_syscall3(int, __open, const char *, filename, int, mode, int, filemode);
+_syscall4(void, profil, unsigned short *, buff, unsigned int, bufsiz,
+ unsigned int, offset, unsigned int, scale);
+_syscall1(int, close, int, fd);
+
+/* Bleah. */
+int
+open (const char *filename, int mode, ...)
+{
+ return __open (filename, mode, 0644);
+}
+
+/* Ultra-super cheezy. */
+int
+isatty (int i)
+{
+ return i<3;
+}
+
+char *
+sbrk (int amt)
+{
+ extern char _end;
+ static char *ptr = 0;
+ char *res;
+ if (ptr == 0)
+ ptr = &_end;
+ if (amt == 0)
+ return (char *)ptr;
+
+ if (((long)ptr) % 8)
+ ptr = ptr + (8 - (((long)(ptr)) % 8));
+ res = ptr;
+ ptr += amt;
+ return (char *)res;
+}
+
+void
+_exit(int i)
+{
+ while(1) {
+ __sys_exit (i);
+ asm(" int $3");
+ }
+}
+
+int
+fstat(int des, struct stat *buf)
+{
+ return -1;
+}
+
+int
+lseek(int des,unsigned long offset, int whence)
+{
+ return -1;
+}
+
+int
+getpid ()
+{
+ return -1;
+}
+
+/* Simple replacement for the clock() syscall. */
+clock_t
+clock ()
+{
+ struct timeval t;
+
+ gettimeofday (&t, 0);
+ return t.tv_sec * 1000 + (t.tv_usec / 1000);
+}
+
+#ifndef COFF
+typedef void (*ctp)();
+void
+__do_global_ctors ()
+{
+ extern int __CTOR_LIST__;
+ int *c = &__CTOR_LIST__;
+ c++;
+ while (*c)
+ {
+ ctp d = (ctp)*c;
+ (d)();
+ c++;
+ }
+}
+
+void
+__do_global_dtors ()
+{
+ extern int __DTOR_LIST__;
+ int *c = &__DTOR_LIST__;
+ int *cp = c;
+ c++;
+ while (*c)
+ {
+ c++;
+ }
+ c--;
+ while (c > cp)
+ {
+ ctp d = (ctp)*c;
+ (*d)();
+ c--;
+ }
+}
+#endif
+
+void
+profil_write (int type, char *buffer, int len)
+{
+ static int des = -1;
+
+ if (des < 0)
+ {
+ des = open ("gmon.out", O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ }
+ if (len == 0)
+ {
+ close (des);
+ }
+ else
+ {
+ write (des, buffer, len);
+ }
+}