59df8f5e9d6c96f80778d68218fd23026a53450c
[akaros.git] / user / parlib / src / sparc / newlib_backend.c
1 /* See COPYRIGHT for copyright information. */
2 /* Andrew Waterman <waterman@eecs.bekeley.edu> */
3
4 #include <arch/frontend.h>
5 #include <parlib.h>
6 #include <sys/stat.h>
7 #include <sys/unistd.h>
8 #include <sys/times.h>
9 #include <sys/time.h>
10 #include <debug.h>
11 #include <hart.h>
12
13 char *__env[1] = { 0 };
14 char **environ = __env;
15
16 #define IS_CONSOLE(fd) ((uint32_t)(fd) < 3)
17
18 /* Return the vcoreid, which is set in entry.S right before calling libmain.
19  * This should only be used in libmain() and main(), before any code that might
20  * use a register.  It just returns eax. */
21 uint32_t newcore(void)
22 {
23         return hart_self();
24 }
25
26
27 int
28 getpid(void)
29 {
30         static int pid = 0;
31         if(pid == 0)
32                 return pid = sys_getpid();
33
34         return pid;
35 }
36
37 void
38 _exit(int code)
39 {
40         sys_proc_destroy(getpid());
41         while(1);
42 }
43
44 int
45 isatty(int fd)
46 {
47         return IS_CONSOLE(fd);
48 }
49
50 int
51 fork(void)
52 {
53         return -1;
54 }
55
56 int
57 execve(const char* name, char* const argv[], char* const env[])
58 {
59         return -1;
60 }
61
62 int
63 kill(int pid, int sig)
64 {
65         return -1;
66 }
67
68 int
69 wait(int* status)
70 {
71         return -1;
72 }
73
74 int
75 link(const char *old, const char *new)
76 {
77         return -1;
78 }
79
80 int
81 unlink(const char* old)
82 {
83         return syscall(SYS_frontend,RAMP_SYSCALL_unlink,(int)old,0,0,0);
84 }
85
86 int
87 fstat(int fd, struct stat* st)
88 {
89         return syscall(SYS_frontend,RAMP_SYSCALL_fstat,fd,(int)st,0,0);
90 }
91
92 int
93 stat(const char* name, struct stat* st)
94 {
95         return syscall(SYS_frontend,RAMP_SYSCALL_stat,(int)name,(int)st,0,0);
96 }
97
98 off_t
99 lseek(int fd, off_t ptr, int dir)
100 {
101         return syscall(SYS_frontend,RAMP_SYSCALL_lseek,fd,ptr,dir,0);
102 }
103
104 ssize_t
105 write(int fd, const void* ptr, size_t len)
106 {
107         return syscall(SYS_frontend,RAMP_SYSCALL_write,fd,(int)ptr,len,0);
108 }
109
110 ssize_t
111 read(int fd, void* ptr, size_t len)
112 {
113         return syscall(SYS_frontend,RAMP_SYSCALL_read,fd,(int)ptr,len,0);
114 }
115
116 int
117 open(char* name, int flags, int mode)
118 {
119         return syscall(SYS_frontend,RAMP_SYSCALL_open,(int)name,flags,mode,0);
120 }
121
122 int
123 close(int fd)
124 {
125         if(IS_CONSOLE(fd))
126                 return 0;
127         return syscall(SYS_frontend,RAMP_SYSCALL_close,fd,0,0,0);
128 }
129
130 clock_t
131 times(struct tms* buf)
132 {
133         return -1;
134 }
135
136 int
137 gettimeofday(struct timeval* tp, void* tzp)
138 {
139         return syscall(SYS_frontend,RAMP_SYSCALL_gettimeofday,(int)tp,(int)tzp,0,0);
140 }
141