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]

[PATCH] supplying _foo_r functions when -DREENTRANT_SYSCALLS_PROVIDED


Jeff -

Here's a patch per your comments, except I didn't document the
__DYNAMIC_REENT__ as I don't understand its usage.

If this is close enough, please modify it as you see fit.

Thanks ...

newlib ChangeLog:

2008-03-27 Patrick Mansfield <patmans@us.ibm.com>

	* libc/include/reent.h: Define _func_r functions in this file to
	  func if REENTRANT_SYSCALLS_PROVIDED and MISSING_SYSCALL_NAMES are
	  defined.

Index: quilt/newlib/libc/include/reent.h
===================================================================
--- quilt.orig/newlib/libc/include/reent.h
+++ quilt/newlib/libc/include/reent.h
@@ -10,7 +10,7 @@
    be declared here.  It documents them all in one place.  All library access
    to the system is via some form of these functions.
 
-   There are three ways a target may provide the needed syscalls.
+   The target may provide the needed syscalls by any of the following:
 
    1) Define the reentrant versions of the syscalls directly.
       (eg: _open_r, _close_r, etc.).  Please keep the namespace clean.
@@ -29,6 +29,13 @@
       When you do this, add -DMISSING_SYSCALL_NAMES to newlib_cflags in
       configure.host.
 
+   4) Define or otherwise provide the regular versions of the syscalls,
+      and do not supply functional interfaces for any of the reentrant
+      calls. With this method, the reentrant versions are defined to
+      directly call the system call.
+      Add -DREENTRANT_SYSCALLS_PROVIDED and -DMISSING_SYSCALL_NAMES to
+      newlib_cflags in configure.host.
+
    Stubs of the reentrant versions of the syscalls exist in the libc/reent
    source directory and are used if REENTRANT_SYSCALLS_PROVIDED isn't defined.
    They use the native system calls: _open, _close, etc. if they're available
@@ -59,6 +66,41 @@ struct tms;
 struct timeval;
 struct timezone;
 
+#ifdef _REENT_ONLY
+#ifndef REENTRANT_SYSCALLS_PROVIDED
+#define REENTRANT_SYSCALLS_PROVIDED
+#endif
+#endif
+
+#if defined(REENTRANT_SYSCALLS_PROVIDED) && defined(MISSING_SYSCALL_NAMES)
+
+#define _close_r(__reent, __fd)                   close(__fd)
+#define _execve_r(__reent, __f, __arg, __env)     execve(__f, __arg, __env)
+#define _fcntl_r(__reent, __fd, __cmd, __arg)     fcntl(__fd, __cmd, __arg)
+#define _fork_r(__reent)                          fork()
+#define _fstat_r(__reent, __fdes, __stat)         fstat(__fdes, __stat)
+#define _getpid_r(__reent)                        getpid()
+#define _isatty_r(__reent, __desc)                isatty(__desc)
+#define _kill_r(__reent, __pid, __signal)         kill(__pid, __signal)
+#define _link_r(__reent, __oldpath, __newpath)    link(__oldpath, __newpath)
+#define _lseek_r(__reent, __fdes, __off, __w)     lseek(__fdes, __off, __w)
+#define _open_r(__reent, __path, __flag, __m)     open(__path, __flag, __m)
+#define _read_r(__reent, __fd, __buff, __cnt)     read(__fd, __buff, __cnt)
+#define _sbrk_r(__reent, __incr)                  sbrk(__incr)
+#define _stat_r(__reent, __path, __buff)          stat(__path, __buff)
+#define _times_r(__reent, __time)                 times(__time)
+#define _unlink_r(__reent, __path)                unlink(__path)
+#define _wait_r(__reent, __status)                wait(__status)
+#define _write_r(__reent, __fd, __buff, __cnt)    write(__fd, __buff, __cnt)
+#define _gettimeofday_r(__reent, __tp, __tzp)     gettimeofday(__tp, __tzp)
+
+#ifdef __LARGE64_FILES
+#define _lseek64_r(__reent, __fd, __off, __w)     lseek64(__fd, __off, __w)
+#define _fstat64_r(__reent, __fd, __buff)         fstat64(__fd, __buff)
+#define _open64_r(__reent, __path, __flag, __m)   open64(__path, __flag, __m)
+#endif
+
+#else
 /* Reentrant versions of system calls.  */
 
 extern int _close_r _PARAMS ((struct _reent *, int));
@@ -96,6 +138,8 @@ extern int _fstat64_r _PARAMS ((struct _
 extern int _open64_r _PARAMS ((struct _reent *, const char *, int, int));
 #endif
 
+#endif
+
 #ifdef __cplusplus
 }
 #endif


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