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

📄 syscalls.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
字号:
/* * syscall.c * Definition of jsyscall interface for Kaffe on DROPS. *  * Copyright (c) 2004, 2005 *	TU Dresden, Operating System Group.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. * * written by Alexander Boettcher <ab764283@os.inf.tu-dresden.de> */#include "config.h"#include "debug.h"#include "config-std.h"#include "config-mem.h"#include "config-net.h"#include "config-io.h"#include "config-signal.h"#include "jthread.h"#include "jsyscall.h"static int drops_open(const char *path,                      int f, int m,                      int *outfd) {  *outfd = open(path, f, m);  if (*outfd == -1)     return errno;  return 0;}static int drops_read(int fd, void* buffer,                      size_t len, ssize_t *out) {  int nReturn = 0;  *out = read(fd, buffer, len);  if (*out == -1)    nReturn = errno;  return nReturn;}static int drops_write(int fd, const void* buffer,                       size_t len, ssize_t *out) {  int nReturn = 0;  if (fd==1 || fd==2)  { //STDOUT, STDERR    nReturn = write(fd,buffer,len);    if (nReturn == -1)      nReturn = errno;    else    {      nReturn = 0;      *out    = len;    }  }  else    printf("unknown fd=%d len=%d\n",fd,len);  return nReturn;}static int drops_lseek(int fd, off_t o, int type,                       off_t *out) {  int nReturn = 0;  *out = lseek(fd, o, type);  if (*out == -1)    nReturn = errno;   return nReturn;}static int drops_close(int fd) {  int nReturn = 0;  if (close(fd) < 0)    nReturn = errno;  return nReturn;}static int drops_fstat(int fd, struct stat *st) {  int nReturn = 0;  if (fstat(fd, st) == -1)    nReturn = errno;    return nReturn;}static int drops_stat(const char *p, struct stat *st){  int nReturn = 0;  if (stat(p, st) == -1)    nReturn = errno;   return nReturn;}static int drops_ftruncate(int fd UNUSED,                           off_t new_size UNUSED) { unimp("ftruncate() not implemented"); return -1;}static int drops_fsync(int a UNUSED) { unimp("fsync() not implemented"); return -1;}static int drops_mkdir(const char *p UNUSED,                       int m UNUSED) { unimp("mkdir() not implemented"); return -1;}static int drops_rmdir(const char *p UNUSED) { unimp("rmdir() not implemented"); return -1;}static int drops_rename(const char *p UNUSED,                        const char *q UNUSED) { unimp("rename() not implemented"); return -1;}static int drops_remove(const char *p UNUSED) { unimp("remove() not implemented"); return -1;}static int drops_socket(int fd, int type,                        int proto, int *outfd) {  int r = socket(fd, type, proto);  if (r < 0)    r = errno;  else {    *outfd = r;    r = 0;  }  return (r);}static int drops_connect(int fd, struct sockaddr* serv_addr,                         socklen_t addrlen, int timeout UNUSED) {  int nReturn = connect(fd, serv_addr, (socklen_t)addrlen);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_bind(int fd, struct sockaddr* addr,                      socklen_t addrlen) {  int nReturn = bind(fd, addr, (socklen_t)addrlen);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_listen(int fd, int backlog) {  int nReturn = listen(fd, backlog);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_accept(int socketfd, struct sockaddr* addr,                        socklen_t *addrlen, int timeout UNUSED, int* outfd) {  int nReturn = accept(socketfd, addr, addrlen);  if (nReturn < 0)    nReturn = errno;  else {    *outfd  = nReturn;    nReturn = 0;  }  return nReturn;}static int drops_sockread(int socketfd, void* buf, size_t len,                          int timeout UNUSED, ssize_t *out) {  int nReturn = recv(socketfd, buf, len, 0);   if (nReturn < 0)    nReturn = errno;  else {    *out = nReturn;    nReturn = 0;  }  return nReturn;}static int drops_recvfrom(int a UNUSED, void* b UNUSED,                          size_t c UNUSED, int d UNUSED,                          struct sockaddr* e UNUSED,                          socklen_t* f UNUSED, int timeout UNUSED,                          ssize_t *out UNUSED) {  unimp("recvfrom() not implemented");  return -1;}static int drops_sockwrite(int socketfd, const void* msg,                           size_t len, ssize_t *out) {   int nReturn = send(socketfd, msg, len, 0);  if (nReturn < 0)    nReturn = errno;  else {    *out = nReturn;    nReturn = 0;  }  return nReturn;}static int drops_sendto(int a UNUSED,                                     const void* b UNUSED,                                     size_t c UNUSED,                                     int d UNUSED,                                     const struct sockaddr* e UNUSED,                                     int f UNUSED, ssize_t *out UNUSED) {  unimp("sendto() not implemented");  return -1;}static int drops_setsockopt(int fd, int level,                            int optname,                            const void* optval,                            int optlen) {  int nReturn = setsockopt(fd, level, optname, optval, (socklen_t)optlen);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_getsockopt(int a UNUSED,                                         int b UNUSED,                                         int c UNUSED,                                         void* d UNUSED,                                         socklen_t* e UNUSED) {  unimp("getsockopt() not implemented");  return -1;}static int drops_getsockname(int socketfd, struct sockaddr* name,                             socklen_t * namelen) {  int nReturn = getsockname(socketfd, name , namelen);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_getpeername(int a UNUSED, struct sockaddr* b UNUSED,                             socklen_t* c UNUSED) {  printf("getpeername todo\n");  return 0;}static int drops_sockclose(int fd) {  int nReturn = close(fd);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_sockshutdown(int fd){  int nReturn = shutdown(fd, 2);  if (nReturn < 0)    nReturn = errno;  return nReturn;}static int drops_gethostbyname(const char *name UNUSED,                               struct hostent ** out2 UNUSED){  unimp("gethostbyname not implemented");  return HOST_NOT_FOUND;}static int drops_gethostbyaddr(const char *name UNUSED, size_t len UNUSED,                               int type UNUSED, struct hostent**out UNUSED) {  unimp("gethostbyaddr not implemented");  return HOST_NOT_FOUND;}static int drops_select(int a, fd_set* readfds, fd_set* writefds,                        fd_set* exceptfds, struct timeval* timeout, int* out) {  int nReturn = 0;  *out = select(a, readfds, writefds, exceptfds, timeout);  if (*out < 0)    nReturn = errno;  return nReturn; }static int drops_forkexec(char *argv[] UNUSED, char *env[] UNUSED,                          int fd[4] UNUSED, int *outpid UNUSED,                          const char * a UNUSED) {  unimp("forkexec() not implemented");  return -1;}static int drops_waitpid(int a UNUSED, int* b UNUSED,                         int c UNUSED, int* out UNUSED) {  unimp("waitpid() not implemented");  return -1;}static int drops_kill(int a UNUSED, int b UNUSED) {  unimp("kill() not implemented");  return -1;}static int drops_mmap(void **memory UNUSED, size_t *size UNUSED,                      int mode UNUSED, int fd UNUSED,                      off_t *offset UNUSED) {  unimp("mmap() not implemented");  return -1;}static int drops_munmap(void *memory UNUSED,                        size_t size UNUSED) {  unimp("munmap() not implemented");  return -1;}static int drops_msync(void *memory UNUSED,                       size_t length UNUSED) {  unimp("msync() not implemented");  return -1;}static int drops_pipecreate(int * a UNUSED, int *b UNUSED) {  unimp("pipecreate() not implemented");  return -1;}static int drops_piperead(int a UNUSED, void * b UNUSED,                          size_t c UNUSED, int timeout UNUSED,                          ssize_t *d UNUSED) {  unimp("piperead() not implemented");  return -1;}static int drops_pipewrite(int a UNUSED, const void* b UNUSED,                           size_t c UNUSED, int timeout UNUSED,                           ssize_t * d UNUSED) {  unimp("pipewrite() not implemented");  return -1;}SystemCallInterface Kaffe_SystemCallInterface = {	drops_open,	drops_read,	drops_write, 	drops_lseek,	drops_close,	drops_fstat,	drops_stat,	drops_ftruncate,        drops_fsync,	drops_mkdir,	drops_rmdir,	drops_rename,	drops_remove,	drops_socket,	drops_connect,	drops_bind,	drops_listen,	drops_accept, 	drops_sockread,		drops_recvfrom,	drops_sockwrite, 	drops_sendto,		drops_setsockopt,	drops_getsockopt,	drops_getsockname, 	drops_getpeername,	drops_sockclose,	drops_sockshutdown,	drops_gethostbyname,	drops_gethostbyaddr,	drops_select,		drops_forkexec,	drops_waitpid,	drops_kill,	drops_mmap,        drops_munmap,        drops_msync,        drops_pipecreate,        drops_piperead,        drops_pipewrite};

⌨️ 快捷键说明

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