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