From f95a4a932476be2ba99e2fd081e8d2bc6ea12813 Mon Sep 17 00:00:00 2001
From: PikalaxALT <pikalaxalt@gmail.com>
Date: Fri, 15 Dec 2017 09:38:53 -0500
Subject: Import newlib and create makefile

---
 newlib/libc/reent/reent.tex | 98 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)
 create mode 100644 newlib/libc/reent/reent.tex

(limited to 'newlib/libc/reent/reent.tex')

diff --git a/newlib/libc/reent/reent.tex b/newlib/libc/reent/reent.tex
new file mode 100644
index 0000000..8ef35f8
--- /dev/null
+++ b/newlib/libc/reent/reent.tex
@@ -0,0 +1,98 @@
+@node Reentrancy
+@chapter Reentrancy
+
+@cindex reentrancy
+Reentrancy is a characteristic of library functions which allows multiple
+processes to use the same address space with assurance that the values stored
+in those spaces will remain constant between calls. Cygnus's implementation
+of the library functions ensures that 
+whenever possible, these library functions are reentrant.  However,
+there are some functions that can not be trivially made reentrant.
+Hooks have been provided to allow you to use these functions in a fully
+reentrant fashion.
+
+@findex _reent
+@findex reent.h
+@cindex reentrancy structure
+These hooks use the structure @code{_reent} defined in @file{reent.h}.
+A variable defined as @samp{struct _reent} is called a @dfn{reentrancy
+structure}.  All functions which must manipulate global information are
+available in two versions.  The first version has the usual name, and
+uses a single global instance of the reentrancy structure.  The second
+has a different name, normally formed by prepending @samp{_} and
+appending @samp{_r}, and takes a pointer to the particular reentrancy
+structure to use.
+
+For example, the function @code{fopen} takes two arguments, @var{file}
+and @var{mode}, and uses the global reentrancy structure.  The function
+@code{_fopen_r} takes the arguments, @var{struct_reent}, which is a
+pointer to an instance of the reentrancy structure, @var{file}
+and @var{mode}.	
+
+@cindex global reentrancy structure
+@findex _impure_ptr
+Each function which uses the global reentrancy structure uses the global
+variable @code{_impure_ptr}, which points to a reentrancy structure.
+
+This means that you have two ways to achieve reentrancy.  Both require
+that each thread of execution control initialize a unique global
+variable of type @samp{struct _reent}:
+
+@enumerate
+@item
+@cindex extra argument, reentrant fns
+Use the reentrant versions of the library functions, after initializing
+a global reentrancy structure for each process.  Use the pointer to this
+structure as the extra argument for all library functions.
+
+@item
+Ensure that each thread of execution control has a pointer to its own
+unique reentrancy structure in the global variable @code{_impure_ptr},
+and call the standard library subroutines.
+@end enumerate
+
+@cindex list of reentrant functions
+@cindex reentrant function list
+The following functions are provided in both reentrant
+and non-reentrant versions.
+
+@example
+@exdent @emph{Equivalent for errno variable:}
+_errno_r
+
+@exdent @emph{Locale functions:}
+_localeconv_r  _setlocale_r
+
+@exdent @emph{Equivalents for stdio variables:}
+_stdin_r        _stdout_r       _stderr_r
+
+@page  
+@exdent @emph{Stdio functions:}
+_fdopen_r       _mkstemp_r       _remove_r
+_fopen_r        _mktemp_r        _rename_r
+_getchar_r      _perror_r        _tempnam_r
+_gets_r         _putchar_r       _tmpnam_r 
+_iprintf_r 	_puts_r		 _tmpfile_r
+
+@exdent @emph{Signal functions:}
+_raise_r        _signal_r
+
+@exdent @emph{Stdlib functions:}
+@c FIXME! dtoa undoc; should _dtoa_r be mentioned?
+_dtoa_r         _realloc_r      _strtoul_r
+_free_r         _srand_r        _system_r
+_malloc_r       _strtod_r
+_rand_r         _strtol_r
+
+@exdent @emph{String functions:}
+_strtok_r
+
+@exdent @emph{System functions:}
+_close_r        _lseek_r        _stat_r
+_fork_r         _open_r         _unlink_r
+_fstat_r        _read_r         _wait_r
+_link_r         _sbrk_r         _write_r
+
+@exdent @emph{Time function:}
+_asctime_r
+@end example
-- 
cgit v1.2.3

