source: trunk/libs/newlib/src/newlib/libc/sys/sh/syscalls.c @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 3.1 KB
Line 
1#include <_ansi.h>
2#include <sys/types.h>
3#include <sys/stat.h>
4#include <sys/time.h>
5#include "sys/syscall.h"
6int errno;
7
8/* This is used by _sbrk.  */
9register char *stack_ptr asm ("r15");
10
11int
12_read (int file,
13       char *ptr,
14       int len)
15{
16  return __trap34 (SYS_read, file, ptr, len);
17}
18
19int
20_lseek (int file,
21        int ptr,
22        int dir)
23{
24  return __trap34 (SYS_lseek, file, ptr, dir);
25}
26
27int
28_write ( int file,
29         char *ptr,
30         int len)
31{
32  return __trap34 (SYS_write, file, ptr, len);
33}
34
35int
36_close (int file)
37{
38  return __trap34 (SYS_close, file, 0, 0);
39}
40
41int
42_link (char *old, char *new)
43{
44  return -1;
45}
46
47caddr_t
48_sbrk (int incr)
49{
50  extern char end;              /* Defined by the linker */
51  static char *heap_end;
52  char *prev_heap_end;
53
54  if (heap_end == 0)
55    {
56      heap_end = &end;
57    }
58  prev_heap_end = heap_end;
59  if (heap_end + incr > stack_ptr)
60    {
61      _write (1, "Heap and stack collision\n", 25);
62      abort ();
63    }
64  heap_end += incr;
65  return (caddr_t) prev_heap_end;
66}
67
68int
69_fstat (int file,
70        struct stat *st)
71{
72  st->st_mode = S_IFCHR;
73  return 0;
74}
75
76int
77_open (const char *path,
78        int flags)
79{
80  return __trap34 (SYS_open, path, flags, 0);
81}
82
83int
84_creat (const char *path,
85        int mode)
86{
87  return __trap34 (SYS_creat, path, mode, 0);
88}
89
90int
91_unlink ()
92{
93  return -1;
94}
95
96isatty (fd)
97     int fd;
98{
99  return 1;
100}
101
102_isatty (fd)
103     int fd;
104{
105  return 1;
106}
107
108
109_exit (n)
110{
111  return __trap34 (SYS_exit, n, 0, 0);
112}
113
114_kill (n, m)
115{
116  return __trap34 (SYS_exit, 0xdead, 0, 0);
117}
118
119_getpid (n)
120{
121  return 1;
122}
123
124_raise ()
125{
126}
127
128int
129_stat (const char *path, struct stat *st)
130
131{
132  return __trap34 (SYS_stat, path, st, 0);
133}
134
135int
136_chmod (const char *path, short mode)
137{
138  return __trap34 (SYS_chmod, path, mode);
139}
140
141int
142_chown (const char *path, short owner, short group)
143{
144  return __trap34 (SYS_chown, path, owner, group);
145}
146
147int
148_utime (path, times)
149     const char *path;
150     char *times;
151{
152  return __trap34 (SYS_utime, path, times);
153}
154
155int
156_fork ()
157{
158  return __trap34 (SYS_fork);
159}
160
161int
162_wait (statusp)
163     int *statusp;
164{
165  return __trap34 (SYS_wait);
166}
167
168int
169_execve (const char *path, char *const argv[], char *const envp[])
170{
171  return __trap34 (SYS_execve, path, argv, envp);
172}
173
174int
175_execv (const char *path, char *const argv[])
176{
177  return __trap34 (SYS_execv, path, argv);
178}
179
180int
181_pipe (int *fd)
182{
183  return __trap34 (SYS_pipe, fd);
184}
185
186/* This is only provided because _gettimeofday_r and _times_r are
187   defined in the same module, so we avoid a link error.  */
188clock_t
189_times (struct tms *tp)
190{
191  return -1;
192}
193
194int
195_gettimeofday (struct timeval *tv, void *tz)
196{
197  tv->tv_usec = 0;
198  tv->tv_sec = __trap34 (SYS_time);
199  return 0;
200}
201
202static inline int
203__setup_argv_for_main (int argc)
204{
205  char **argv;
206  int i = argc;
207
208  argv = __builtin_alloca ((1 + argc) * sizeof (*argv));
209
210  argv[i] = NULL;
211  while (i--) {
212    argv[i] = __builtin_alloca (1 + __trap34 (SYS_argnlen, i));
213    __trap34 (SYS_argn, i, argv[i]);
214  }
215
216  return main (argc, argv);
217}
218
219int
220__setup_argv_and_call_main ()
221{
222  int argc = __trap34 (SYS_argc);
223
224  if (argc <= 0)
225    return main (argc, NULL);
226  else
227    return __setup_argv_for_main (argc);
228}
Note: See TracBrowser for help on using the repository browser.