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