X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/831ccb1f14f7472962fc2d185f32e18105209bd7..243fec4450d3a3246f3f0d92751a95daef7c1503:/embedded/arch/arm/generic/libs/misc/system_stub.c?ds=sidebyside diff --git a/embedded/arch/arm/generic/libs/misc/system_stub.c b/embedded/arch/arm/generic/libs/misc/system_stub.c index 24fa2f9..81faf43 100644 --- a/embedded/arch/arm/generic/libs/misc/system_stub.c +++ b/embedded/arch/arm/generic/libs/misc/system_stub.c @@ -12,12 +12,14 @@ #include #include #include +#include "system_stub.h" /* Register name faking - works in collusion with the linker. */ register char * stack_ptr asm ("sp"); system_stub_ops_t system_stub_ops; +int _read(int file, char *ptr, int len); int _read (int file, char * ptr, @@ -28,9 +30,10 @@ _read (int file, return system_stub_ops.read(file,ptr,len); } +int _write(int file, const char *ptr, int len); int _write (int file, - char * ptr, + const char * ptr, int len) { if(!system_stub_ops.write) @@ -49,6 +52,7 @@ _lseek (int file, return system_stub_ops.lseek(file,pos,dir); } +int _open(const char *path, int flags, ...); int _open (const char * path, int flags, @@ -59,6 +63,7 @@ _open (const char * path, return system_stub_ops.open(path,flags,0); } +int _close(int file); int _close (int file) { @@ -69,6 +74,7 @@ _close (int file) typedef int (local_call_t)(void); +void _exit(int n); void _exit (int n) { @@ -76,21 +82,31 @@ _exit (int n) while(1); } +void abort(void); +void abort(void) +{ + ((local_call_t*)0)(); + while(1); +} + +int _kill(int n, int m); int _kill (int n, int m) { return -1; } +int _getpid(void); int -_getpid (int n) +_getpid (void) { return 1; } -caddr_t -_sbrk (int incr) +void *_sbrk(ptrdiff_t incr); +void * +_sbrk (ptrdiff_t incr) { extern char end asm ("end"); /* Defined by the linker. */ static char *heap_end; @@ -100,9 +116,9 @@ _sbrk (int incr) if (heap_end == NULL) heap_end = & end; - + prev_heap_end = heap_end; - + if (heap_end + incr > stack_ptr) { /* Some of the libstdc++-v3 tests rely upon detecting @@ -111,50 +127,58 @@ _sbrk (int incr) extern void abort (void); _write (1, "_sbrk: Heap and stack collision\n", 32); - + abort (); #else errno = ENOMEM; return (caddr_t) -1; #endif } - + heap_end += incr; - return (caddr_t) prev_heap_end; + return /*(caddr_t)*/ prev_heap_end; } +int _fstat(int file, struct stat *st); int _fstat (int file, struct stat * st) { return -1; } +int _stat (const char *fname, struct stat *st); int _stat (const char *fname, struct stat *st) { return -1; } +int _link(const char *path1, const char *path2); int -_link (void) +_link (const char *path1, + const char *path2) { return -1; } +int _unlink(const char *path); int -_unlink (void) +_unlink (const char *path) { return -1; } +void _raise(void); void _raise (void) { return; } +int _gettimeofday(struct timeval *tp, struct timezone *tzp); int -_gettimeofday (struct timeval * tp, struct timezone * tzp) +_gettimeofday (struct timeval *tp, + struct timezone *tzp) { if(tp) @@ -173,11 +197,12 @@ _gettimeofday (struct timeval * tp, struct timezone * tzp) } /* Return a clock that ticks at 100Hz. */ +clock_t _times(struct tms *tp); clock_t _times (struct tms * tp) { clock_t timeval = 0; - + if (tp) { tp->tms_utime = timeval; /* user time */ @@ -185,25 +210,139 @@ _times (struct tms * tp) tp->tms_cutime = 0; /* user time, children */ tp->tms_cstime = 0; /* system time, children */ } - + return timeval; }; +int isatty(int fd); int isatty (int fd) { return 1; } +int _system(const char *s); int _system (const char *s) { return -1; } +int _rename(const char *oldpath, const char *newpath); int _rename (const char * oldpath, const char * newpath) { return -1; } + +/* extern (.*) ([^ ]*) _PARAMS \(\(struct _reent \*(,*)(.*)\)\); */ +/* \1 \2 (struct _reent *\3\4) { return \2(\4);} */ + +struct _reent; + +int _close_r(struct _reent *reent, int file) +{ return _close(file);} +/* + int _fcntl_r(struct _reent *, int, int, int) + { return _fcntl( int, int, int);} +*/ +int _fstat_r(struct _reent *reent, int file, struct stat *st); +int _fstat_r(struct _reent *reent, int file, struct stat *st) +{ return _fstat(file, st);} + +int _getpid_r(struct _reent *reent); +int _getpid_r(struct _reent *reent) +{ return _getpid();} + +int _kill_r(struct _reent *reent, int n, int m); +int _kill_r(struct _reent *reent, int n, int m) +{ return _kill(n, m);} + +int _link_r(struct _reent *reent, const char *path1, const char *path2); +int _link_r(struct _reent *reent, const char *path1, const char *path2) +{ return _link(path1, path2);} + +_off_t _lseek_r(struct _reent *reent, int file, _off_t pos, int dir); +_off_t _lseek_r(struct _reent *reent, int file, _off_t pos, int dir) +{ return _lseek(file, pos, dir);} + +int _open_r(struct _reent *reent, const char *path, int flags, int opts); +int _open_r(struct _reent *reent, const char *path, int flags, int opts) +{ return _open(path, flags, opts);} + +_ssize_t _read_r(struct _reent *reent, int file, void *ptr, size_t len); +_ssize_t _read_r(struct _reent *reent, int file, void *ptr, size_t len) +{ return _read(file, ptr, len);} + +void *_sbrk_r(struct _reent *reent, ptrdiff_t incr); +void *_sbrk_r(struct _reent *reent, ptrdiff_t incr) +{ return _sbrk(incr);} + +int _stat_r(struct _reent *reent, const char *path, struct stat *st); +int _stat_r(struct _reent *reent, const char *path, struct stat *st) +{ return _stat(path, st);} + +int _unlink_r(struct _reent *reent, const char *path); +int _unlink_r(struct _reent *reent, const char *path) +{ return _unlink(path);} + +_ssize_t _write_r(struct _reent *reent, int file, const void *ptr, size_t len); +_ssize_t _write_r(struct _reent *reent, int file, const void *ptr, size_t len) +{ return _write(file, ptr, len);} + +/* FIXME: TDK added dummy functions. Need to implement. */ +int _isatty(int fd); +int _isatty(int fd) +{ + return -1; +} + +int _swistat(int fd, struct stat *st); +int _swistat(int fd, struct stat *st) +{ + return -1; +} + +/* Return a clock that ticks at 100Hz. */ +clock_t _clock(void); +clock_t _clock(void) +{ + clock_t timeval=0; + return timeval; +} + +int _swiclose(int fh); +int _swiclose(int fh) +{ + return -1; +} + +int _swiopen(const char *path, int flags); +int _swiopen(const char *path, int flags) +{ + return -1; +} + +int _swiwrite(int fh, char *ptr, int len); +int _swiwrite(int fh, char *ptr, int len) +{ + return -1; +} + +int _swilseek(int fd, int ptr, int dir); +int _swilseek(int fd, int ptr, int dir) +{ + return -1; +} + +int _swiread(int fh, char *ptr, int len); +int _swiread(int fh, char *ptr, int len) +{ + return -1; +} + +void initialise_monitor_handles(void); +void initialise_monitor_handles(void) +{ +}