From 5e890ca17473a3cd74e7fce1408fff5be068517b Mon Sep 17 00:00:00 2001 From: Dave Murphy Date: Fri, 19 May 2006 00:38:41 +0000 Subject: [PATCH] extend stdio interface --- dkarm/patches/newlib-1.14.0.patch | 344 ++++++++++++++++++------------ 1 file changed, 210 insertions(+), 134 deletions(-) diff --git a/dkarm/patches/newlib-1.14.0.patch b/dkarm/patches/newlib-1.14.0.patch index 9760928..8d16dc2 100644 --- a/dkarm/patches/newlib-1.14.0.patch +++ b/dkarm/patches/newlib-1.14.0.patch @@ -1,6 +1,6 @@ -diff -Nbaur newlib-1.14.0/config.sub newlib-1.14.0-test/config.sub +diff -Nbaur newlib-1.14.0/config.sub newlib-1.14.0-arm/config.sub --- newlib-1.14.0/config.sub Mon Dec 12 11:24:58 2005 -+++ newlib-1.14.0-test/config.sub Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/config.sub Fri Apr 14 22:08:39 2006 @@ -228,6 +228,9 @@ basic_machine=m68k-atari os=-mint @@ -11,9 +11,9 @@ diff -Nbaur newlib-1.14.0/config.sub newlib-1.14.0-test/config.sub esac # Decode aliases for certain CPU-COMPANY combinations. -diff -Nbaur newlib-1.14.0/libgloss/configure newlib-1.14.0-test/libgloss/configure +diff -Nbaur newlib-1.14.0/libgloss/configure newlib-1.14.0-arm/libgloss/configure --- newlib-1.14.0/libgloss/configure Mon Dec 12 11:25:07 2005 -+++ newlib-1.14.0-test/libgloss/configure Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/configure Fri Apr 14 22:08:39 2006 @@ -711,9 +711,9 @@ @@ -26,9 +26,9 @@ diff -Nbaur newlib-1.14.0/libgloss/configure newlib-1.14.0-test/libgloss/configu fi case "${target}" in -diff -Nbaur newlib-1.14.0/libgloss/configure.in newlib-1.14.0-test/libgloss/configure.in +diff -Nbaur newlib-1.14.0/libgloss/configure.in newlib-1.14.0-arm/libgloss/configure.in --- newlib-1.14.0/libgloss/configure.in Mon Dec 12 11:25:07 2005 -+++ newlib-1.14.0-test/libgloss/configure.in Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/configure.in Fri Apr 14 22:08:39 2006 @@ -22,9 +22,9 @@ AC_CANONICAL_SYSTEM @@ -41,9 +41,9 @@ diff -Nbaur newlib-1.14.0/libgloss/configure.in newlib-1.14.0-test/libgloss/conf fi case "${target}" in -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/Makefile.in newlib-1.14.0-test/libgloss/libsysbase/Makefile.in +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/Makefile.in newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in --- newlib-1.14.0/libgloss/libsysbase/Makefile.in Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/Makefile.in Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in Fri Apr 14 22:08:39 2006 @@ -0,0 +1,145 @@ +# Copyright (c) 1998 Cygnus Support +# @@ -190,10 +190,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/Makefile.in newlib-1.14.0-test/lib + +config.status: configure + $(SHELL) config.status --recheck -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/_exit.c newlib-1.14.0-test/libgloss/libsysbase/_exit.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/_exit.c newlib-1.14.0-arm/libgloss/libsysbase/_exit.c --- newlib-1.14.0/libgloss/libsysbase/_exit.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/_exit.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,15 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/_exit.c Wed May 10 20:44:45 2006 +@@ -0,0 +1,14 @@ +/* Stub version of _exit. */ + +#include @@ -205,13 +205,12 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/_exit.c newlib-1.14.0-test/libglos +_DEFUN (_exit, (rc), + int rc) +{ -+ /* Default stub just causes a divide by 0 exception. */ -+ int x = rc / INT_MAX; -+ x = 4 / x; ++ ++ while(1); +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/abort.c newlib-1.14.0-test/libgloss/libsysbase/abort.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/abort.c newlib-1.14.0-arm/libgloss/libsysbase/abort.c --- newlib-1.14.0/libgloss/libsysbase/abort.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/abort.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/abort.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,8 @@ +#include +#include @@ -221,9 +220,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/abort.c newlib-1.14.0-test/libglos + exit (1); +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/acconfig.h newlib-1.14.0-test/libgloss/libsysbase/acconfig.h +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/acconfig.h newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h --- newlib-1.14.0/libgloss/libsysbase/acconfig.h Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/acconfig.h Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h Fri Apr 14 22:08:39 2006 @@ -0,0 +1,26 @@ +/* Name of package. */ +#undef PACKAGE @@ -251,10 +250,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/acconfig.h newlib-1.14.0-test/libg + +/* symbol prefix */ +#undef __SYMBOL_PREFIX -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/close.c newlib-1.14.0-test/libgloss/libsysbase/close.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/close.c newlib-1.14.0-arm/libgloss/libsysbase/close.c --- newlib-1.14.0/libgloss/libsysbase/close.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/close.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,36 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/close.c Wed May 10 20:19:42 2006 +@@ -0,0 +1,38 @@ +#include <_ansi.h> +#include <_syslist.h> +#include @@ -280,20 +279,22 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/close.c newlib-1.14.0-test/libglos + unsigned int fd = -1; + + if(fileDesc!=-1) { -+ dev = fileDesc; -+ if(fileDesc&0xf000) { -+ dev = _SHIFTR(fileDesc,12,4); -+ fd = fileDesc&0x0fff; -+ } -+ ++ ++ __handle *handle = fileDesc; ++ ++ dev = handle->device; ++ fd = handle->fileStruct; ++ + if(devoptab_list[dev]->close_r) + ret = devoptab_list[dev]->close_r(ptr,fd); ++ ++ free(fileDesc); + } + return ret; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/config.h.in newlib-1.14.0-test/libgloss/libsysbase/config.h.in +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/config.h.in newlib-1.14.0-arm/libgloss/libsysbase/config.h.in --- newlib-1.14.0/libgloss/libsysbase/config.h.in Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/config.h.in Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/config.h.in Fri Apr 14 22:08:39 2006 @@ -0,0 +1,22 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + @@ -317,9 +318,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/config.h.in newlib-1.14.0-test/lib + +/* symbol prefix */ +#undef __SYMBOL_PREFIX -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure newlib-1.14.0-test/libgloss/libsysbase/configure +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure newlib-1.14.0-arm/libgloss/libsysbase/configure --- newlib-1.14.0/libgloss/libsysbase/configure Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/configure Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/configure Fri Apr 14 22:08:39 2006 @@ -0,0 +1,1461 @@ +#! /bin/sh + @@ -1782,9 +1783,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure newlib-1.14.0-test/libgl + + + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure.in newlib-1.14.0-test/libgloss/libsysbase/configure.in +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure.in newlib-1.14.0-arm/libgloss/libsysbase/configure.in --- newlib-1.14.0/libgloss/libsysbase/configure.in Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/configure.in Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/configure.in Fri Apr 14 22:08:39 2006 @@ -0,0 +1,219 @@ +# Copyright (c) 1995, 1996 Cygnus Support +# @@ -2005,9 +2006,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure.in newlib-1.14.0-test/li +) + + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/environ.c newlib-1.14.0-test/libgloss/libsysbase/environ.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/environ.c newlib-1.14.0-arm/libgloss/libsysbase/environ.c --- newlib-1.14.0/libgloss/libsysbase/environ.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/environ.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/environ.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,6 @@ +/* + * Version of environ for no OS. @@ -2015,9 +2016,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/environ.c newlib-1.14.0-test/libgl + +char *__env[1] = { 0 }; +char **environ = __env; -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/execve.c newlib-1.14.0-test/libgloss/libsysbase/execve.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/execve.c newlib-1.14.0-arm/libgloss/libsysbase/execve.c --- newlib-1.14.0/libgloss/libsysbase/execve.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/execve.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/execve.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,21 @@ +/* + * Stub version of execve. @@ -2040,9 +2041,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/execve.c newlib-1.14.0-test/libglo +} + +stub_warning(_execve) -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fork.c newlib-1.14.0-test/libgloss/libsysbase/fork.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fork.c newlib-1.14.0-arm/libgloss/libsysbase/fork.c --- newlib-1.14.0/libgloss/libsysbase/fork.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/fork.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/fork.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,19 @@ +/* + * Stub version of fork. @@ -2063,10 +2064,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fork.c newlib-1.14.0-test/libgloss +} + +stub_warning(_fork) -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fstat.c newlib-1.14.0-test/libgloss/libsysbase/fstat.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fstat.c newlib-1.14.0-arm/libgloss/libsysbase/fstat.c --- newlib-1.14.0/libgloss/libsysbase/fstat.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/fstat.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,39 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/fstat.c Wed May 10 20:59:42 2006 +@@ -0,0 +1,42 @@ +#include <_ansi.h> +#include <_syslist.h> +#include @@ -2094,21 +2095,24 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fstat.c newlib-1.14.0-test/libglos + unsigned int dev = 0; + unsigned int fd = -1; + -+ if(fileDesc!=-1) { -+ dev = fileDesc; -+ if(fileDesc&0xf000) { -+ dev = _SHIFTR(fileDesc,12,4); -+ fd = fileDesc&0x0fff; -+ } ++ __handle * handle = NULL; + ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; ++ } + if(devoptab_list[dev]->stat_r) + ret = devoptab_list[dev]->stat_r(r,fd,st); + } + return ret; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/getpid.c newlib-1.14.0-test/libgloss/libsysbase/getpid.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/getpid.c newlib-1.14.0-arm/libgloss/libsysbase/getpid.c --- newlib-1.14.0/libgloss/libsysbase/getpid.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/getpid.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/getpid.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,20 @@ +#include <_ansi.h> +#include <_syslist.h> @@ -2130,9 +2134,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/getpid.c newlib-1.14.0-test/libglo + return -1; +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/gettod.c newlib-1.14.0-test/libgloss/libsysbase/gettod.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/gettod.c newlib-1.14.0-arm/libgloss/libsysbase/gettod.c --- newlib-1.14.0/libgloss/libsysbase/gettod.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/gettod.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/gettod.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,25 @@ +/* + * Stub version of gettimeofday. @@ -2159,16 +2163,16 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/gettod.c newlib-1.14.0-test/libglo +} + +stub_warning(_gettimeofday) -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-test/libgloss/libsysbase/iosupport.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c --- newlib-1.14.0/libgloss/libsysbase/iosupport.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/iosupport.c Fri Jan 20 16:00:50 2006 -@@ -0,0 +1,96 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c Thu May 11 18:52:08 2006 +@@ -0,0 +1,105 @@ +#include +#include +#include + +//--------------------------------------------------------------------------------- -+int stdnull_open(struct _reent *r,const char *path,int flags,int mode) { ++int stdnull_open(struct _reent *r, void *fileStruct, const char *path,int flags,int mode) { +//--------------------------------------------------------------------------------- + return -1; +} @@ -2191,13 +2195,21 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-test/lib + return -1; +} + ++static int defaultDevice = -1; + ++//--------------------------------------------------------------------------------- ++void setDefaultDevice( int device ) { ++//--------------------------------------------------------------------------------- + ++ if ( device >2 && device <= STD_MAX) ++ defaultDevice = device; ++} + +//--------------------------------------------------------------------------------- +const devoptab_t dotab_stdnull = { +//--------------------------------------------------------------------------------- + "stdnull", ++ 0, + stdnull_open, + stdnull_close, + stdnull_write, @@ -2215,13 +2227,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-test/lib + &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull +}; + -+ +//--------------------------------------------------------------------------------- +int FindDevice(char* name) { +//--------------------------------------------------------------------------------- -+ int i, namelen, dev = -1; -+ -+ i=0; ++ int i = 0, namelen, dev = -1; + + while(iname, device->name) || -+ strcmp(devoptab_list[devnum]->name, "stdnull") ) ++ if ( (strcmp(devoptab_list[devnum]->name, device->name) && ++ strlen(devoptab_list[devnum]->name) == strlen(device->name) ) || ++ strcmp(devoptab_list[devnum]->name, "stdnull") ++ ) + break; + } + @@ -2259,9 +2272,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-test/lib + } + return devnum; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/isatty.c newlib-1.14.0-test/libgloss/libsysbase/isatty.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/isatty.c newlib-1.14.0-arm/libgloss/libsysbase/isatty.c --- newlib-1.14.0/libgloss/libsysbase/isatty.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/isatty.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/isatty.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,10 @@ +#include <_ansi.h> +#include <_syslist.h> @@ -2273,9 +2286,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/isatty.c newlib-1.14.0-test/libglo +//--------------------------------------------------------------------------------- + return 0; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-test/libgloss/libsysbase/kill.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-arm/libgloss/libsysbase/kill.c --- newlib-1.14.0/libgloss/libsysbase/kill.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/kill.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/kill.c Fri Apr 14 22:10:52 2006 @@ -0,0 +1,24 @@ +/* + * Stub version of kill. @@ -2293,7 +2306,7 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-test/libgloss + int pid _AND + int sig) { +#else -+int _DEFUN(kill,(pid,sig), ++int _DEFUN(_kill,(pid,sig), + int pid _AND + int sig) { + struct _reent *ptr = _REENT; @@ -2301,9 +2314,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-test/libgloss + ptr->_errno = ENOSYS; + return -1; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/link.c newlib-1.14.0-test/libgloss/libsysbase/link.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/link.c newlib-1.14.0-arm/libgloss/libsysbase/link.c --- newlib-1.14.0/libgloss/libsysbase/link.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/link.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/link.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,20 @@ +#include <_ansi.h> +#include <_syslist.h> @@ -2325,10 +2338,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/link.c newlib-1.14.0-test/libgloss + return -1; +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-test/libgloss/libsysbase/lseek.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-arm/libgloss/libsysbase/lseek.c --- newlib-1.14.0/libgloss/libsysbase/lseek.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/lseek.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,29 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/lseek.c Wed May 10 21:04:08 2006 +@@ -0,0 +1,32 @@ + +#include <_ansi.h> +#include <_syslist.h> @@ -2337,8 +2350,8 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-test/libglos +#include + +//--------------------------------------------------------------------------------- -+int _DEFUN(_lseek,(file, pos, dir), -+ int file _AND ++int _DEFUN(_lseek,(fileDesc, pos, dir), ++ int fileDesc _AND + int pos _AND + int dir) { +//--------------------------------------------------------------------------------- @@ -2346,28 +2359,31 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-test/libglos + unsigned int dev = 0; + unsigned int fd = -1; + -+ if(file!=-1) { -+ dev = file; -+ if(file&0xf000) { -+ dev = _SHIFTR(file,12,4); -+ fd = file&0x0fff; -+ } ++ __handle * handle; ++ ++ if(fileDesc!=-1) { ++ ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; + + if(devoptab_list[dev]->seek_r) + ret = devoptab_list[dev]->seek_r(0,fd,pos,dir); ++ + } + return ret; ++ +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/malloc_vars.c newlib-1.14.0-test/libgloss/libsysbase/malloc_vars.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/malloc_vars.c newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c --- newlib-1.14.0/libgloss/libsysbase/malloc_vars.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/malloc_vars.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,2 @@ +char *fake_heap_end = (char*)0; +char *fake_heap_start = (char*)0; -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-test/libgloss/libsysbase/open.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-arm/libgloss/libsysbase/open.c --- newlib-1.14.0/libgloss/libsysbase/open.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/open.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,42 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/open.c Wed May 10 17:42:14 2006 +@@ -0,0 +1,56 @@ +#include <_ansi.h> +#include <_syslist.h> +#include @@ -2395,7 +2411,7 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-test/libgloss +//--------------------------------------------------------------------------------- + struct _reent *r = _REENT; +#endif -+ int handle; ++ __handle *handle; + int dev,fd; + + @@ -2404,16 +2420,30 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-test/libgloss + fd = -1; + handle = -1; + if(dev!=-1 && devoptab_list[dev]->open_r) { -+ fd = devoptab_list[dev]->open_r(r,file,flags,mode); -+ if(fd!=-1) handle = _SHIFTL(dev,12,4)|(fd&0x0fff); ++ ++ handle = (__handle *)malloc( sizeof(__handle) + devoptab_list[dev]->structSize ); ++ ++ if ( NULL != handle ) { ++ handle->device = dev; ++ handle->fileStruct = ((void *)handle) + sizeof(handle); ++ ++ fd = devoptab_list[dev]->open_r(r,file, handle->fileStruct, flags,mode); ++ ++ if ( fd == -1 ) { ++ free(handle); ++ handle = -1; ++ } ++ } else { ++ handle = -1; ++ } + } + + return handle; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-test/libgloss/libsysbase/read.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-arm/libgloss/libsysbase/read.c --- newlib-1.14.0/libgloss/libsysbase/read.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/read.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,40 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/read.c Wed May 10 20:52:51 2006 +@@ -0,0 +1,44 @@ +#include <_ansi.h> +#include <_syslist.h> +#include @@ -2423,16 +2453,16 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-test/libgloss + +#ifdef REENTRANT_SYSCALLS_PROVIDED +//--------------------------------------------------------------------------------- -+int _DEFUN(_read_r,(r, file, ptr, len), ++int _DEFUN(_read_r,(r, fileDesc, ptr, len), + struct _reent * r _AND -+ int file _AND ++ int fileDesc _AND + char *ptr _AND + int len) { +//--------------------------------------------------------------------------------- +#else +//--------------------------------------------------------------------------------- -+int _DEFUN(_read,(file, ptr, len), -+ int file _AND ++int _DEFUN(_read,(fileDesc, ptr, len), ++ int fileDesc _AND + char *ptr _AND + int len) { +//--------------------------------------------------------------------------------- @@ -2442,11 +2472,15 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-test/libgloss + unsigned int dev = 0; + unsigned int fd = -1; + -+ if(file!=-1) { -+ dev = file; -+ if(file&0xf000) { -+ dev = _SHIFTR(file,12,4); -+ fd = file&0x0fff; ++ __handle * handle = NULL; ++ ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; + } + if(devoptab_list[dev]->read_r) + ret = devoptab_list[dev]->read_r(r,fd,ptr,len); @@ -2454,9 +2488,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-test/libgloss + return ret; +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/sbrk.c newlib-1.14.0-test/libgloss/libsysbase/sbrk.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/sbrk.c newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c --- newlib-1.14.0/libgloss/libsysbase/sbrk.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/sbrk.c Sun Apr 9 12:31:50 2006 ++++ newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,61 @@ +#include <_ansi.h> +#include @@ -2519,9 +2553,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/sbrk.c newlib-1.14.0-test/libgloss + + return (caddr_t) prev_heap_start; +} -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/stat.c newlib-1.14.0-test/libgloss/libsysbase/stat.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/stat.c newlib-1.14.0-arm/libgloss/libsysbase/stat.c --- newlib-1.14.0/libgloss/libsysbase/stat.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/stat.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/stat.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,22 @@ +/* + * Stub version of stat. @@ -2545,9 +2579,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/stat.c newlib-1.14.0-test/libgloss +} + +stub_warning(_stat) -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/times.c newlib-1.14.0-test/libgloss/libsysbase/times.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/times.c newlib-1.14.0-arm/libgloss/libsysbase/times.c --- newlib-1.14.0/libgloss/libsysbase/times.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/times.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/times.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,13 @@ +#include <_ansi.h> +#include <_syslist.h> @@ -2562,9 +2596,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/times.c newlib-1.14.0-test/libglos + return -1; +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/unlink.c newlib-1.14.0-test/libgloss/libsysbase/unlink.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/unlink.c newlib-1.14.0-arm/libgloss/libsysbase/unlink.c --- newlib-1.14.0/libgloss/libsysbase/unlink.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/unlink.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/unlink.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,22 @@ +#include <_ansi.h> +#include <_syslist.h> @@ -2588,9 +2622,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/unlink.c newlib-1.14.0-test/libglo + return -1; +} + -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/wait.c newlib-1.14.0-test/libgloss/libsysbase/wait.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/wait.c newlib-1.14.0-arm/libgloss/libsysbase/wait.c --- newlib-1.14.0/libgloss/libsysbase/wait.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/wait.c Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/wait.c Fri Apr 14 22:08:39 2006 @@ -0,0 +1,19 @@ +/* + * Stub version of wait. @@ -2611,9 +2645,9 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/wait.c newlib-1.14.0-test/libgloss +} + +stub_warning(_wait) -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/warning.h newlib-1.14.0-test/libgloss/libsysbase/warning.h +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/warning.h newlib-1.14.0-arm/libgloss/libsysbase/warning.h --- newlib-1.14.0/libgloss/libsysbase/warning.h Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/warning.h Sat Dec 17 14:31:15 2005 ++++ newlib-1.14.0-arm/libgloss/libsysbase/warning.h Fri Apr 14 22:08:39 2006 @@ -0,0 +1,43 @@ +#ifndef __WARNING_H__ +#define __WARNING_H__ @@ -2658,10 +2692,10 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/warning.h newlib-1.14.0-test/libgl + "warning: " #name " is not implemented and will always fail") + +#endif /* __WARNING_H__ */ -diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-test/libgloss/libsysbase/write.c +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-arm/libgloss/libsysbase/write.c --- newlib-1.14.0/libgloss/libsysbase/write.c Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/libgloss/libsysbase/write.c Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,39 @@ ++++ newlib-1.14.0-arm/libgloss/libsysbase/write.c Wed May 10 22:09:00 2006 +@@ -0,0 +1,44 @@ +#include <_ansi.h> +#include <_syslist.h> +#include @@ -2671,16 +2705,16 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-test/libglos + +#ifdef REENTRANT_SYSCALLS_PROVIDED +//--------------------------------------------------------------------------------- -+int _DEFUN(_write_r,(r, file, ptr, len), ++int _DEFUN(_write_r,(r, fileDesc, ptr, len), + struct _reent * r _AND -+ int file _AND ++ int fileDesc _AND + char *ptr _AND + int len) { +//--------------------------------------------------------------------------------- +#else +//--------------------------------------------------------------------------------- -+int _DEFUN (_write, (file, ptr, len), -+ int file _AND ++int _DEFUN (_write, (fileDesc, ptr, len), ++ int fileDesc _AND + char *ptr _AND + int len) { +//--------------------------------------------------------------------------------- @@ -2690,20 +2724,25 @@ diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-test/libglos + unsigned int dev = 0; + unsigned int fd = -1; + -+ if(file!=-1) { -+ dev = file; -+ if(file&0xf000) { -+ dev = _SHIFTR(file,12,4); -+ fd = file&0x0fff; ++ __handle * handle = NULL; ++ ++ ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; + } + if(devoptab_list[dev]->write_r) + ret = devoptab_list[dev]->write_r(r,fd,ptr,len); + } + return ret; +} -diff -Nbaur newlib-1.14.0/newlib/libc/include/stdio.h newlib-1.14.0-test/newlib/libc/include/stdio.h +diff -Nbaur newlib-1.14.0/newlib/libc/include/stdio.h newlib-1.14.0-arm/newlib/libc/include/stdio.h --- newlib-1.14.0/newlib/libc/include/stdio.h Wed Oct 12 00:59:32 2005 -+++ newlib-1.14.0-test/newlib/libc/include/stdio.h Mon Apr 10 01:49:50 2006 ++++ newlib-1.14.0-arm/newlib/libc/include/stdio.h Fri Apr 14 22:08:39 2006 @@ -179,6 +179,7 @@ int _EXFUN(printf, (const char *, ...)); int _EXFUN(scanf, (const char *, ...)); @@ -2729,12 +2768,14 @@ diff -Nbaur newlib-1.14.0/newlib/libc/include/stdio.h newlib-1.14.0-test/newlib/ int _EXFUN(vscanf, (const char *, __VALIST)); int _EXFUN(vsiscanf, (const char *, const char *, __VALIST)); int _EXFUN(vsscanf, (const char *, const char *, __VALIST)); -diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-test/newlib/libc/include/sys/iosupport.h +diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h --- newlib-1.14.0/newlib/libc/include/sys/iosupport.h Thu Jan 1 00:00:00 1970 -+++ newlib-1.14.0-test/newlib/libc/include/sys/iosupport.h Sat Dec 17 14:31:15 2005 -@@ -0,0 +1,33 @@ ++++ newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h Thu May 11 21:55:34 2006 +@@ -0,0 +1,40 @@ ++//--------------------------------------------------------------------------------- +#ifndef __iosupp_h__ +#define __iosupp_h__ ++//--------------------------------------------------------------------------------- + +#include + @@ -2745,14 +2786,16 @@ diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-test + STD_MAX = 16 +}; + -+#define _SHIFTL(v, s, w) \ -+ ((unsigned int) (((unsigned int)(v) & ((0x01 << (w)) - 1)) << (s))) -+#define _SHIFTR(v, s, w) \ -+ ((unsigned int)(((unsigned int)(v) >> (s)) & ((0x01 << (w)) - 1))) ++ ++typedef struct { ++ int device; ++ void *fileStruct; ++} __handle; + +typedef struct { + const char *name; -+ int (*open_r)(struct _reent *r,const char *path,int flags,int mode); ++ int structSize; ++ int (*open_r)(struct _reent *r, void *fileStruct, const char *path,int flags,int mode); + int (*close_r)(struct _reent *r,int fd); + int (*write_r)(struct _reent *r,int fd,const char *ptr,int len); + int (*read_r)(struct _reent *r,int fd,char *ptr,int len); @@ -2764,5 +2807,38 @@ diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-test + +int AddDevice( const devoptab_t* device); +int FindDevice(char* name); ++void setDefaultDevice( int device ); + ++//--------------------------------------------------------------------------------- +#endif ++//--------------------------------------------------------------------------------- +diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/reent.h newlib-1.14.0-arm/newlib/libc/include/sys/reent.h +--- newlib-1.14.0/newlib/libc/include/sys/reent.h Tue Feb 8 01:33:16 2005 ++++ newlib-1.14.0-arm/newlib/libc/include/sys/reent.h Wed May 10 15:36:06 2006 +@@ -151,7 +151,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + +@@ -168,7 +168,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + +@@ -216,7 +216,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ +