xref: /btstack/port/stm32-l451-miromico-sx1280/Src/syscalls.c (revision 2fd737d36a1de5d778cacc671d4b4d8c4f3fed82)
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>&copy; 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