#include <errno.h>
#include <reent.h>
#include <system_def.h>
+#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,
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)
return system_stub_ops.lseek(file,pos,dir);
}
+int _open(const char *path, int flags, ...);
int
_open (const char * path,
int flags,
return system_stub_ops.open(path,flags,0);
}
+int _close(int file);
int
_close (int file)
{
typedef int (local_call_t)(void);
+void _exit(int n);
void
_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;
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
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)
}
/* 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 */
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)
+{
+}