1 /**
2 * \file
3 *
4 * \brief Syscalls for SAM0 (GCC).
5 *
6 * Copyright (C) 2012-2016 Atmel Corporation. All rights reserved.
7 *
8 * \asf_license_start
9 *
10 * \page License
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions are met:
14 *
15 * 1. Redistributions of source code must retain the above copyright notice,
16 * this list of conditions and the following disclaimer.
17 *
18 * 2. Redistributions in binary form must reproduce the above copyright notice,
19 * this list of conditions and the following disclaimer in the documentation
20 * and/or other materials provided with the distribution.
21 *
22 * 3. The name of Atmel may not be used to endorse or promote products derived
23 * from this software without specific prior written permission.
24 *
25 * 4. This software may only be redistributed and used in connection with an
26 * Atmel microcontroller product.
27 *
28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 * POSSIBILITY OF SUCH DAMAGE.
39 *
40 * \asf_license_stop
41 *
42 */
43 /*
44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
45 */
46
47 #include <stdio.h>
48 #include <stdarg.h>
49 #include <sys/types.h>
50 #include <sys/stat.h>
51
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55
56 #undef errno
57 extern int errno;
58 extern int _end;
59
60 extern caddr_t _sbrk(int incr);
61 extern int link(char *old, char *new);
62 extern int _close(int file);
63 extern int _fstat(int file, struct stat *st);
64 extern int _isatty(int file);
65 extern int _lseek(int file, int ptr, int dir);
66 extern void _exit(int status);
67 extern void _kill(int pid, int sig);
68 extern int _getpid(void);
69
_sbrk(int incr)70 extern caddr_t _sbrk(int incr)
71 {
72 static unsigned char *heap = NULL;
73 unsigned char *prev_heap;
74
75 if (heap == NULL) {
76 heap = (unsigned char *)&_end;
77 }
78 prev_heap = heap;
79
80 heap += incr;
81
82 return (caddr_t) prev_heap;
83 }
84
link(char * old,char * new)85 extern int link(char *old, char *new)
86 {
87 return -1;
88 }
89
_close(int file)90 extern int _close(int file)
91 {
92 return -1;
93 }
94
_fstat(int file,struct stat * st)95 extern int _fstat(int file, struct stat *st)
96 {
97 st->st_mode = S_IFCHR;
98
99 return 0;
100 }
101
_isatty(int file)102 extern int _isatty(int file)
103 {
104 return 1;
105 }
106
_lseek(int file,int ptr,int dir)107 extern int _lseek(int file, int ptr, int dir)
108 {
109 return 0;
110 }
111
_exit(int status)112 extern void _exit(int status)
113 {
114 asm("BKPT #0");
115 for (;;);
116 }
117
_kill(int pid,int sig)118 extern void _kill(int pid, int sig)
119 {
120 return;
121 }
122
_getpid(void)123 extern int _getpid(void)
124 {
125 return -1;
126 }
127
128 #ifdef __cplusplus
129 }
130 #endif
131