* arm/syscalls.c (gettimeofday): Change to POSIX signature
        where second argument is passed as void *.
        * bfin/syscalls.c (gettimeofday): Ditto.
        * cris/gensyscalls (gettimeofday): Ditto.
        * cris/linunistd.h (gettimeofday): Ditto.
        * crx/time.c (gettimeofday): Ditto.
        * frv/sim-time.c (gettimeofday): Ditto.
        * i386/cygmon-salib.c (gettimeofday): Ditto.
        * libnosys/gettod.c (gettimeofday): Ditto.
        * m68k/io-gettimeofday.c (gettimeofday): Ditto.
        * sparc/cygmon-salib.c (gettimeofday): Ditto.
        * spu/gettimeofday.c (gettimeofday): Ditto.
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Standard x86 syscalls for user programs running under Cygmon
 | |
|  *
 | |
|  * Copyright (c) 1998, 2000 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);
 | |
| #if 0
 | |
| _syscall3(int,read,int,i,char *,c,int,len);
 | |
| #else
 | |
| int
 | |
| read (int des, char *dest, int len)
 | |
| {
 | |
|   return -1;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| _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, void *,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, ...)
 | |
| {
 | |
| #if 0
 | |
|   return __open (filename, mode, 0644); 
 | |
| #else
 | |
|   return -1;
 | |
| #endif
 | |
| }
 | |
| 
 | |
| /* Ultra-super cheezy. */
 | |
| int
 | |
| isatty (int i)
 | |
| {
 | |
|   return i<3;
 | |
| }
 | |
| 
 | |
| int unlink (const char *p)
 | |
| {
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| 
 | |
| 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);
 | |
| }
 | |
| 
 | |
| #if ! defined(COFF) && ! defined(AOUT)
 | |
| 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);
 | |
|     }
 | |
| }
 |