00001 /* ---------------------------------------------------------------------------- 00002 * SAM Software Package License 00003 * ---------------------------------------------------------------------------- 00004 * Copyright (c) 2011, Atmel Corporation 00005 * 00006 * All rights reserved. 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions are met: 00010 * 00011 * - Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the disclaimer below. 00013 * 00014 * Atmel's name may not be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR 00018 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00019 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00020 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, 00021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00022 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00023 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00024 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00025 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00026 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 * ---------------------------------------------------------------------------- 00028 */ 00029 00030 /** 00031 * \file syscalls.c 00032 * 00033 * Implementation of newlib syscall. 00034 * 00035 */ 00036 00037 /*---------------------------------------------------------------------------- 00038 * Headers 00039 *----------------------------------------------------------------------------*/ 00040 00041 00042 #include "board.h" 00043 00044 #include <stdio.h> 00045 #include <stdarg.h> 00046 #include <errno.h> 00047 #include <sys/types.h> 00048 #include <sys/stat.h> 00049 00050 /*---------------------------------------------------------------------------- 00051 * Exported variables 00052 *----------------------------------------------------------------------------*/ 00053 00054 #undef errno 00055 extern int errno; 00056 extern int _sheap; 00057 00058 /*---------------------------------------------------------------------------- 00059 * Exported functions 00060 *----------------------------------------------------------------------------*/ 00061 extern void _exit( int status ); 00062 extern void _kill( int pid, int sig ); 00063 extern int _getpid ( void ); 00064 00065 extern caddr_t _sbrk ( int incr ) 00066 { 00067 static unsigned char *heap = NULL; 00068 unsigned char *prev_sheap; 00069 00070 if ( heap == NULL ) { 00071 heap = (unsigned char *)&_sheap; 00072 } 00073 prev_sheap = heap; 00074 00075 heap += incr; 00076 00077 return (caddr_t) prev_sheap; 00078 } 00079 00080 extern int link( char *old, char *new ) 00081 { 00082 return -1; 00083 } 00084 00085 extern int _close( int file ) 00086 { 00087 return -1; 00088 } 00089 00090 extern int _fstat( int file, struct stat *st ) 00091 { 00092 st->st_mode = S_IFCHR; 00093 00094 return 0; 00095 } 00096 00097 extern int _isatty( int file ) 00098 { 00099 return 1; 00100 } 00101 00102 extern int _lseek( int file, int ptr, int dir ) 00103 { 00104 return 0; 00105 } 00106 00107 extern int _read(int file, char *ptr, int len) 00108 { 00109 return 0; 00110 } 00111 00112 extern int _write( int file, char *ptr, int len ) 00113 { 00114 int iIndex; 00115 00116 // for (; *ptr != 0; ptr++ ) 00117 for ( iIndex=0; iIndex < len; iIndex++, ptr++ ) { 00118 DBG_PutChar( *ptr ); 00119 } 00120 00121 return iIndex; 00122 } 00123 00124 extern void _exit( int status ) 00125 { 00126 printf( "Exiting with status %d.\n", status ); 00127 for (;;); 00128 } 00129 00130 extern void _kill( int pid, int sig ) 00131 { 00132 return; 00133 } 00134 00135 extern int _getpid ( void ) 00136 { 00137 return -1; 00138 }