1*2fd737d3SMatthias Ringwald /**
2*2fd737d3SMatthias Ringwald *****************************************************************************
3*2fd737d3SMatthias Ringwald **
4*2fd737d3SMatthias Ringwald ** File : syscalls.c
5*2fd737d3SMatthias Ringwald **
6*2fd737d3SMatthias Ringwald ** Author : Auto-generated by System workbench for STM32
7*2fd737d3SMatthias Ringwald **
8*2fd737d3SMatthias Ringwald ** Abstract : System Workbench Minimal System calls file
9*2fd737d3SMatthias Ringwald **
10*2fd737d3SMatthias Ringwald ** For more information about which c-functions
11*2fd737d3SMatthias Ringwald ** need which of these lowlevel functions
12*2fd737d3SMatthias Ringwald ** please consult the Newlib libc-manual
13*2fd737d3SMatthias Ringwald **
14*2fd737d3SMatthias Ringwald ** Target : STMicroelectronics STM32
15*2fd737d3SMatthias Ringwald **
16*2fd737d3SMatthias Ringwald ** Distribution: The file is distributed ?as is,? without any warranty
17*2fd737d3SMatthias Ringwald ** of any kind.
18*2fd737d3SMatthias Ringwald **
19*2fd737d3SMatthias Ringwald *****************************************************************************
20*2fd737d3SMatthias Ringwald ** @attention
21*2fd737d3SMatthias Ringwald **
22*2fd737d3SMatthias Ringwald ** <h2><center>© COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
23*2fd737d3SMatthias Ringwald **
24*2fd737d3SMatthias Ringwald ** Redistribution and use in source and binary forms, with or without modification,
25*2fd737d3SMatthias Ringwald ** are permitted provided that the following conditions are met:
26*2fd737d3SMatthias Ringwald ** 1. Redistributions of source code must retain the above copyright notice,
27*2fd737d3SMatthias Ringwald ** this list of conditions and the following disclaimer.
28*2fd737d3SMatthias Ringwald ** 2. Redistributions in binary form must reproduce the above copyright notice,
29*2fd737d3SMatthias Ringwald ** this list of conditions and the following disclaimer in the documentation
30*2fd737d3SMatthias Ringwald ** and/or other materials provided with the distribution.
31*2fd737d3SMatthias Ringwald ** 3. Neither the name of STMicroelectronics nor the names of its contributors
32*2fd737d3SMatthias Ringwald ** may be used to endorse or promote products derived from this software
33*2fd737d3SMatthias Ringwald ** without specific prior written permission.
34*2fd737d3SMatthias Ringwald **
35*2fd737d3SMatthias Ringwald ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
36*2fd737d3SMatthias Ringwald ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37*2fd737d3SMatthias Ringwald ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38*2fd737d3SMatthias Ringwald ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
39*2fd737d3SMatthias Ringwald ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
40*2fd737d3SMatthias Ringwald ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
41*2fd737d3SMatthias Ringwald ** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
42*2fd737d3SMatthias Ringwald ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
43*2fd737d3SMatthias Ringwald ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
44*2fd737d3SMatthias Ringwald ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45*2fd737d3SMatthias Ringwald **
46*2fd737d3SMatthias Ringwald *****************************************************************************
47*2fd737d3SMatthias Ringwald */
48*2fd737d3SMatthias Ringwald
49*2fd737d3SMatthias Ringwald /* Includes */
50*2fd737d3SMatthias Ringwald #include <sys/stat.h>
51*2fd737d3SMatthias Ringwald #include <stdlib.h>
52*2fd737d3SMatthias Ringwald #include <errno.h>
53*2fd737d3SMatthias Ringwald #include <stdio.h>
54*2fd737d3SMatthias Ringwald #include <signal.h>
55*2fd737d3SMatthias Ringwald #include <time.h>
56*2fd737d3SMatthias Ringwald #include <sys/time.h>
57*2fd737d3SMatthias Ringwald #include <sys/times.h>
58*2fd737d3SMatthias Ringwald
59*2fd737d3SMatthias Ringwald
60*2fd737d3SMatthias Ringwald /* Variables */
61*2fd737d3SMatthias Ringwald //#undef errno
62*2fd737d3SMatthias Ringwald extern int errno;
63*2fd737d3SMatthias Ringwald extern int __io_putchar(int ch) __attribute__((weak));
64*2fd737d3SMatthias Ringwald extern int __io_getchar(void) __attribute__((weak));
65*2fd737d3SMatthias Ringwald
66*2fd737d3SMatthias Ringwald register char * stack_ptr asm("sp");
67*2fd737d3SMatthias Ringwald
68*2fd737d3SMatthias Ringwald char *__env[1] = { 0 };
69*2fd737d3SMatthias Ringwald char **environ = __env;
70*2fd737d3SMatthias Ringwald
71*2fd737d3SMatthias Ringwald
72*2fd737d3SMatthias Ringwald /* Functions */
initialise_monitor_handles()73*2fd737d3SMatthias Ringwald void initialise_monitor_handles()
74*2fd737d3SMatthias Ringwald {
75*2fd737d3SMatthias Ringwald }
76*2fd737d3SMatthias Ringwald
_getpid(void)77*2fd737d3SMatthias Ringwald int _getpid(void)
78*2fd737d3SMatthias Ringwald {
79*2fd737d3SMatthias Ringwald return 1;
80*2fd737d3SMatthias Ringwald }
81*2fd737d3SMatthias Ringwald
_kill(int pid,int sig)82*2fd737d3SMatthias Ringwald int _kill(int pid, int sig)
83*2fd737d3SMatthias Ringwald {
84*2fd737d3SMatthias Ringwald errno = EINVAL;
85*2fd737d3SMatthias Ringwald return -1;
86*2fd737d3SMatthias Ringwald }
87*2fd737d3SMatthias Ringwald
_exit(int status)88*2fd737d3SMatthias Ringwald void _exit (int status)
89*2fd737d3SMatthias Ringwald {
90*2fd737d3SMatthias Ringwald _kill(status, -1);
91*2fd737d3SMatthias Ringwald while (1) {} /* Make sure we hang here */
92*2fd737d3SMatthias Ringwald }
93*2fd737d3SMatthias Ringwald
_read(int file,char * ptr,int len)94*2fd737d3SMatthias Ringwald __attribute__((weak)) int _read(int file, char *ptr, int len)
95*2fd737d3SMatthias Ringwald {
96*2fd737d3SMatthias Ringwald int DataIdx;
97*2fd737d3SMatthias Ringwald
98*2fd737d3SMatthias Ringwald for (DataIdx = 0; DataIdx < len; DataIdx++)
99*2fd737d3SMatthias Ringwald {
100*2fd737d3SMatthias Ringwald *ptr++ = __io_getchar();
101*2fd737d3SMatthias Ringwald }
102*2fd737d3SMatthias Ringwald
103*2fd737d3SMatthias Ringwald return len;
104*2fd737d3SMatthias Ringwald }
105*2fd737d3SMatthias Ringwald
_write(int file,char * ptr,int len)106*2fd737d3SMatthias Ringwald __attribute__((weak)) int _write(int file, char *ptr, int len)
107*2fd737d3SMatthias Ringwald {
108*2fd737d3SMatthias Ringwald int DataIdx;
109*2fd737d3SMatthias Ringwald
110*2fd737d3SMatthias Ringwald for (DataIdx = 0; DataIdx < len; DataIdx++)
111*2fd737d3SMatthias Ringwald {
112*2fd737d3SMatthias Ringwald __io_putchar(*ptr++);
113*2fd737d3SMatthias Ringwald }
114*2fd737d3SMatthias Ringwald return len;
115*2fd737d3SMatthias Ringwald }
116*2fd737d3SMatthias Ringwald
_sbrk(int incr)117*2fd737d3SMatthias Ringwald caddr_t _sbrk(int incr)
118*2fd737d3SMatthias Ringwald {
119*2fd737d3SMatthias Ringwald extern char end asm("end");
120*2fd737d3SMatthias Ringwald static char *heap_end;
121*2fd737d3SMatthias Ringwald char *prev_heap_end;
122*2fd737d3SMatthias Ringwald
123*2fd737d3SMatthias Ringwald if (heap_end == 0)
124*2fd737d3SMatthias Ringwald heap_end = &end;
125*2fd737d3SMatthias Ringwald
126*2fd737d3SMatthias Ringwald prev_heap_end = heap_end;
127*2fd737d3SMatthias Ringwald if (heap_end + incr > stack_ptr)
128*2fd737d3SMatthias Ringwald {
129*2fd737d3SMatthias Ringwald // write(1, "Heap and stack collision\n", 25);
130*2fd737d3SMatthias Ringwald // abort();
131*2fd737d3SMatthias Ringwald errno = ENOMEM;
132*2fd737d3SMatthias Ringwald return (caddr_t) -1;
133*2fd737d3SMatthias Ringwald }
134*2fd737d3SMatthias Ringwald
135*2fd737d3SMatthias Ringwald heap_end += incr;
136*2fd737d3SMatthias Ringwald
137*2fd737d3SMatthias Ringwald return (caddr_t) prev_heap_end;
138*2fd737d3SMatthias Ringwald }
139*2fd737d3SMatthias Ringwald
_close(int file)140*2fd737d3SMatthias Ringwald int _close(int file)
141*2fd737d3SMatthias Ringwald {
142*2fd737d3SMatthias Ringwald return -1;
143*2fd737d3SMatthias Ringwald }
144*2fd737d3SMatthias Ringwald
145*2fd737d3SMatthias Ringwald
_fstat(int file,struct stat * st)146*2fd737d3SMatthias Ringwald int _fstat(int file, struct stat *st)
147*2fd737d3SMatthias Ringwald {
148*2fd737d3SMatthias Ringwald st->st_mode = S_IFCHR;
149*2fd737d3SMatthias Ringwald return 0;
150*2fd737d3SMatthias Ringwald }
151*2fd737d3SMatthias Ringwald
_isatty(int file)152*2fd737d3SMatthias Ringwald int _isatty(int file)
153*2fd737d3SMatthias Ringwald {
154*2fd737d3SMatthias Ringwald return 1;
155*2fd737d3SMatthias Ringwald }
156*2fd737d3SMatthias Ringwald
_lseek(int file,int ptr,int dir)157*2fd737d3SMatthias Ringwald int _lseek(int file, int ptr, int dir)
158*2fd737d3SMatthias Ringwald {
159*2fd737d3SMatthias Ringwald return 0;
160*2fd737d3SMatthias Ringwald }
161*2fd737d3SMatthias Ringwald
_open(char * path,int flags,...)162*2fd737d3SMatthias Ringwald int _open(char *path, int flags, ...)
163*2fd737d3SMatthias Ringwald {
164*2fd737d3SMatthias Ringwald /* Pretend like we always fail */
165*2fd737d3SMatthias Ringwald return -1;
166*2fd737d3SMatthias Ringwald }
167*2fd737d3SMatthias Ringwald
_wait(int * status)168*2fd737d3SMatthias Ringwald int _wait(int *status)
169*2fd737d3SMatthias Ringwald {
170*2fd737d3SMatthias Ringwald errno = ECHILD;
171*2fd737d3SMatthias Ringwald return -1;
172*2fd737d3SMatthias Ringwald }
173*2fd737d3SMatthias Ringwald
_unlink(char * name)174*2fd737d3SMatthias Ringwald int _unlink(char *name)
175*2fd737d3SMatthias Ringwald {
176*2fd737d3SMatthias Ringwald errno = ENOENT;
177*2fd737d3SMatthias Ringwald return -1;
178*2fd737d3SMatthias Ringwald }
179*2fd737d3SMatthias Ringwald
_times(struct tms * buf)180*2fd737d3SMatthias Ringwald int _times(struct tms *buf)
181*2fd737d3SMatthias Ringwald {
182*2fd737d3SMatthias Ringwald return -1;
183*2fd737d3SMatthias Ringwald }
184*2fd737d3SMatthias Ringwald
_stat(char * file,struct stat * st)185*2fd737d3SMatthias Ringwald int _stat(char *file, struct stat *st)
186*2fd737d3SMatthias Ringwald {
187*2fd737d3SMatthias Ringwald st->st_mode = S_IFCHR;
188*2fd737d3SMatthias Ringwald return 0;
189*2fd737d3SMatthias Ringwald }
190*2fd737d3SMatthias Ringwald
_link(char * old,char * new)191*2fd737d3SMatthias Ringwald int _link(char *old, char *new)
192*2fd737d3SMatthias Ringwald {
193*2fd737d3SMatthias Ringwald errno = EMLINK;
194*2fd737d3SMatthias Ringwald return -1;
195*2fd737d3SMatthias Ringwald }
196*2fd737d3SMatthias Ringwald
_fork(void)197*2fd737d3SMatthias Ringwald int _fork(void)
198*2fd737d3SMatthias Ringwald {
199*2fd737d3SMatthias Ringwald errno = EAGAIN;
200*2fd737d3SMatthias Ringwald return -1;
201*2fd737d3SMatthias Ringwald }
202*2fd737d3SMatthias Ringwald
_execve(char * name,char ** argv,char ** env)203*2fd737d3SMatthias Ringwald int _execve(char *name, char **argv, char **env)
204*2fd737d3SMatthias Ringwald {
205*2fd737d3SMatthias Ringwald errno = ENOMEM;
206*2fd737d3SMatthias Ringwald return -1;
207*2fd737d3SMatthias Ringwald }
208