This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/3] SPU stdio: FILE related stuffs


Hello Kazunori,

I was not happy with the part of this patch that touched stdio.h and reent.h as I don't want machine-specific changes in these files. I have come up with an alternate patch for those sections I wasn't happy with.

Please try it out. Just back out your changes to libc/include/stdio.h and libc/include/sys/reent.h, then apply my patch to verify it all works for you. The rest of your patch is spu-specific and once the additional code is verified, I'll check it all in.

-- Jeff J.

Kazunori Asayama wrote:
Attached is a patch to implement SPU specific FILE structure and FILE
related functions.

2007-01-30  Joel Schopp <jschopp@austin.ibm.com>
            Kazunori Asayama <asayama@sm.sony.co.jp>

	* configure.host: Enable SPU specific stdio directory.
	* libc/include/stdio.h: Disable some stdio macros defined as
	functions on SPU.
	* libc/include/sys/reent.h: Define Cell SPU specific FILE
	structure.
	* libc/machine/spu/Makefile.am: Add objects.
	* libc/machine/spu/Makefile.in: Regenerated.
	* libc/machine/spu/c99ppe.h: Add macros and function
	declarations to initialize SPU specific stdio stuffs.
	* libc/machine/spu/stdio.c: Add functions to manage Cell SPU
	specific FILE structures.
	* libc/machine/spu/perror.c: Add initialization routine of
	stdio stuffs.
	* libc/machine/spu/printf.c: Ditto.
	* libc/machine/spu/putchar.c: Ditto.
	* libc/machine/spu/puts.c: Ditto.
	* libc/machine/spu/vprintf.c: Ditto.
	* libc/machine/spu/clearerr.c: New file. Add a stdio function
	implementation.
	* libc/machine/spu/feof.c: Ditto.
	* libc/machine/spu/ferror.c: Ditto.
	* libc/machine/spu/fileno.c: Ditto.
	* libc/machine/spu/fopen.c: Ditto.
	* libc/machine/spu/fclose.c: Ditto.
	* libc/machine/spu/freopen.c: Ditto.
	* libc/machine/spu/fflush.c: Ditto.
	* libc/machine/spu/fseek.c: Ditto.
	* libc/machine/spu/ftell.c: Ditto.
	* libc/machine/spu/rewind.c: Ditto.
	* libc/machine/spu/fgetpos.c: Ditto.
	* libc/machine/spu/fsetpos.c: Ditto.
	* libc/machine/spu/fread.c: Ditto.
	* libc/machine/spu/fwrite.c: Ditto.
	* libc/machine/spu/getc.c: Ditto.
	* libc/machine/spu/getchar.c: Ditto.
	* libc/machine/spu/gets.c: Ditto.
	* libc/machine/spu/fgetc.c: Ditto.
	* libc/machine/spu/fgets.c: Ditto.
	* libc/machine/spu/ungetc.c: Ditto.
	* libc/machine/spu/putc.c: Ditto.
	* libc/machine/spu/fputc.c: Ditto.
	* libc/machine/spu/fputs.c: Ditto.
	* libc/machine/spu/vfprintf.c: Ditto.
	* libc/machine/spu/vfscanf.c: Ditto.
	* libc/machine/spu/fprintf.c: Ditto.
	* libc/machine/spu/fscanf.c: Ditto.
	* libc/machine/spu/scanf.c: Ditto.
	* libc/machine/spu/vscanf.c: Ditto.
	* libc/machine/spu/setbuf.c: Ditto.
	* libc/machine/spu/setvbuf.c: Ditto.
	* libc/machine/spu/tmpfile.c: Ditto.

Index: libc/include/stdio.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/stdio.h,v
retrieving revision 1.38
diff -u -p -r1.38 stdio.h
--- libc/include/stdio.h	26 Sep 2006 21:22:19 -0000	1.38
+++ libc/include/stdio.h	31 Jan 2007 21:50:51 -0000
@@ -395,6 +395,7 @@ FILE	*_EXFUN(funopen,(const _PTR _cookie
 #define	fwopen(cookie, fn) funopen(cookie, (int (*)())0, fn, (fpos_t (*)())0, (int (*)())0)
 #endif
 
+#ifndef __CUSTOM_FILE_IO__
 /*
  * The __sfoo macros are here so that we can 
  * define function versions in the C library.
@@ -472,9 +473,6 @@ static __inline int __sputc_r(struct _re
 #endif /* lint */
 #endif /* __CYGWIN__ */
 
-#define	getchar()	getc(stdin)
-#define	putchar(x)	putc(x, stdout)
-
 #ifndef __STRICT_ANSI__
 /* fast always-buffered version, true iff error */
 #define	fast_putc(x,p) (--(p)->_w < 0 ? \
@@ -486,6 +484,11 @@ static __inline int __sputc_r(struct _re
 #endif
 #endif
 
+#endif /* !__CUSTOM_FILE_IO__ */
+
+#define	getchar()	getc(stdin)
+#define	putchar(x)	putc(x, stdout)
+
 _END_STD_C
 
 #endif /* _STDIO_H_ */
Index: libc/include/sys/config.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/config.h,v
retrieving revision 1.45
diff -u -p -r1.45 config.h
--- libc/include/sys/config.h	29 Aug 2006 21:00:59 -0000	1.45
+++ libc/include/sys/config.h	31 Jan 2007 21:50:51 -0000
@@ -132,6 +132,7 @@
 
 #ifdef __SPU__
 #define MALLOC_ALIGNMENT 16
+#define __CUSTOM_FILE_IO__
 #endif
 
 /* This block should be kept in sync with GCC's limits.h.  The point
Index: libc/include/sys/reent.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/reent.h,v
retrieving revision 1.36
diff -u -p -r1.36 reent.h
--- libc/include/sys/reent.h	26 Sep 2006 21:22:19 -0000	1.36
+++ libc/include/sys/reent.h	31 Jan 2007 21:50:51 -0000
@@ -212,6 +212,12 @@ struct __sFILE {
 #endif
 };
 
+#ifdef __CUSTOM_FILE_IO___
+
+/* Get custom _FILE definition.  */
+#include <sys/custom_file.h>
+
+#else /* !__CUSTOM_FILE_IO__ */
 #ifdef __LARGE64_FILES
 struct __sFILE64 {
   unsigned char *_p;	/* current position in (some) buffer */
@@ -260,6 +266,7 @@ typedef struct __sFILE64 __FILE;
 #else
 typedef struct __sFILE   __FILE;
 #endif /* __LARGE64_FILES */
+#endif /* !__CUSTOM_FILE_IO__ */
 
 struct _glue 
 {
@@ -459,6 +466,10 @@ extern const struct __sFILE_fake __sf_fa
 #define __reent_assert(x) ((void)0)
 #endif
 
+#ifdef __CUSTOM_FILE_IO__
+#error Custom FILE I/O and _REENT_SMALL not currently supported.
+#endif
+
 /* Generic _REENT check macro.  */
 #define _REENT_CHECK(var, what, type, size, init) do { \
   struct _reent *_r = (var); \
Index: libc/include/sys/custom_file.h
===================================================================
RCS file: libc/include/sys/custom_file.h
diff -N libc/include/sys/custom_file.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libc/include/sys/custom_file.h	31 Jan 2007 21:50:51 -0000
@@ -0,0 +1,2 @@
+#error System-specific custom_file.h is missing.
+
Index: libc/machine/spu/sys/custom_file.h
===================================================================
RCS file: libc/machine/spu/sys/custom_file.h
diff -N libc/machine/spu/sys/custom_file.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libc/machine/spu/sys/custom_file.h	31 Jan 2007 21:50:51 -0000
@@ -0,0 +1,13 @@
+#ifndef __CUSTOM_FILE_H__
+#define __CUSTOM_FILE_H__ 1
+
+/*
+ * Cell SPE support
+ */
+struct __sFILE_spu {
+  int _fp; /* pseudo FILE pointer on PPE */
+};
+typedef struct __sFILE_spu __FILE;
+
+#endif /* __CUSTOM_FILE_H__ */
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]