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