⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syscalls.c

📁 Newlib 嵌入式 C库 标准实现代码
💻 C
字号:
/* syscalls.c - non-trap system calls for D10V * * This file contains system calls that cannot be implemented with * a simple "trap 15" instruction.  The ones that can are in trap.S. */#include <_ansi.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#undef	errnovoid _exit (int n);	/* in trap.S */extern int _write (int fd, const void *ptr, size_t len);int errno;register char *stack_ptr asm ("sp");caddr_t_sbrk (int incr){  extern char end;		/* Defined by the linker */  static char *heap_end;  char *prev_heap_end;  char *sp = (char *)stack_ptr;  if (heap_end == 0)    {      heap_end = (char *)((((unsigned short) &end) + 7) & ~7);    }  prev_heap_end = heap_end;  if (heap_end + incr > sp)    {      _write (2, "Heap and stack collision\n", sizeof ("Heap and stack collision\n")-1);      abort ();    }  heap_end += incr;  if ((unsigned short)heap_end > 0xbfff      || (heap_end < prev_heap_end && incr > 0)      || (heap_end < (char *)((((unsigned short) &end) + 7) & ~7)))    {      _write (2, "Too much memory was allocated\n", sizeof ("Too much memory was allocated\n")-1);      abort ();    }  return (caddr_t) prev_heap_end;}int_fstat (int file,	struct stat *st){  st->st_mode = S_IFCHR;  return 0;}int_unlink (){  errno = ENOSYS;  return -1;}intisatty (int fd){  return 1;}void_raise (){}/* If this library is compiled with -mint32, provide conversion functions for   the system call traps.  */#if __INT__==32extern short _read16 (short fd, void *ptr, short len);int_read (int fd, void *ptr, size_t len){  return _read16 ((short)fd, ptr, (short)len);}extern short _write16 (short fd, const void *ptr, short len);int_write (int fd, const void *ptr, size_t len){  return _write16 ((short)fd, ptr, (short)len);}extern short _lseek16 (short fd, long offset, short whence);int_lseek (int fd, off_t offset, int whence){  return _lseek16 ((short)fd, offset, (short)whence);}extern short _close16 (short fd);int_close (int fd){  return _close16 ((short)fd);}extern short _open16 (const char *name, short flags, short mode);int_open (const char *name, int flags, mode_t mode){  return _open16 (name, (short)flags, (short)mode);}extern short _creat16 (const char *name, mode_t mode);int_creat (const char *name, mode_t mode){  return _creat16 (name, mode);}extern void _exit16 (short status);void_exit (int status){  _exit16 ((short)status);}extern short _stat16 (const char *name, struct stat *stat_pkt);int_stat (const char *name, struct stat *stat_pkt){  return _stat16 (name, stat_pkt);}extern short _chmod16 (const char *name, short mode);int_chmod (const char *name, mode_t mode){  return _chmod16 (name, (short)mode);}extern short _chown16 (const char *name, short uid, short gid);int_chown (const char *name, uid_t uid, gid_t gid){  return _chown16 (name, (short)uid, (short)gid);}extern short _fork16 (void);int_fork (void){  return _fork16 ();}extern short _wait16 (short *status);int_wait (int *status){  if (status)    {      short status16;      short ret = _wait16 (&status16);      if (ret >= 0)	*status = status16;      return ret;    }  else    return _wait16 ((short *)0);}extern short _execve16 (const char *filename, const char *argv [], const char *envp[]);int_execve (const char *filename, const char *argv [], const char *envp[]){  return _execve16 (filename, argv, envp);}extern short _execv16 (const char *filename, const char *argv []);int_execv (const char *filename, const char *argv []){  return _execv16 (filename, argv);}extern short _pipe16 (short fds[]);int_pipe (int fds[]){  short fds16[2];  short ret = _pipe16 (fds16);  if (ret >= 0)    {      fds[0] = fds16[0];      fds[1] = fds16[1];    }  return ret;}extern short _getpid16 (void);int_getpid (void){  return _getpid16 ();}extern short _kill16 (short pid, short sig);int_kill (int pid, int sig){  return _kill16 ((short)pid, (short)sig);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -