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] Initialize _reent with memset, also in the _REENT_SMALL case


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

A while ago this patch was applied

http://www.sourceware.org/ml/newlib/2013/msg00304.html

to optimize _REENT_INIT_PTR() with a memset. However, the same change
was not done in the _REENT_SMALL case. This patch also removes
_ATEXIT_INIT_PTR() and _REENT_INIT_ATEXIT_PTR() since they're no longer
used.

newlib/ChangeLog
2013-06-23  Terraneo Federico  <fede.tft@hotmail.it>

	* libc/include/sys/reent.h (_ATEXIT_INIT_PTR): Remove.
	  (_REENT_INIT_ATEXIT_PTR): Remove.
          (_REENT_INIT_PTR): Reduce code size if _REENT_SMALL.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJRxtiRAAoJECkLFtN5Xr9fT38H/0NiVoBMs8kApvDQ1j+f6Rh8
gNGiVnS2T6nPZeX62FXhQwWNDxbFSlYEt3oIXlNVKkQ0XVBGs4ogyMTFjr5g3ak5
i/d01htlHrqI1zBHkg9s6XIB8v79fCWOq08WEVa6n6SrN1J38IxdnDiLUmS4aKKk
vvfcDIjGEhixy7J7j7I5xB9TV5WBHFIIxHuigk/xhfKzKokYhgV4ea7D6p1v+nsR
3PdK8+5fdNb+D0ubNplyT4MyuwZcc07jsvupcOZI0E8wl+Rnj0QI4cAODGKva7Tp
yeKjWRYH4repXrCQ7YO5n9SbCAxEk2vPYQWIcfOPLl5FXNouUfU7/fhZBXfgBrs=
=4TvM
-----END PGP SIGNATURE-----
diff -ruN a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
--- a/newlib/libc/include/sys/reent.h	2013-05-09 01:13:51.000000000 +0200
+++ b/newlib/libc/include/sys/reent.h	2013-06-23 11:46:50.967064276 +0200
@@ -86,11 +86,6 @@
         struct _on_exit_args * _on_exit_args_ptr;
 };
 # define _ATEXIT_INIT {_NULL, 0, {_NULL}, _NULL}
-# define _ATEXIT_INIT_PTR(var) \
-  (var)->_next = _NULL; \
-  (var)->_ind = 0; \
-  (var)->_fns[0] = _NULL; \
-  (var)->_on_exit_args_ptr = _NULL
 #else
 struct _atexit {
 	struct	_atexit *_next;			/* next in list */
@@ -100,22 +95,13 @@
         struct _on_exit_args _on_exit_args;
 };
 # define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
-# define _ATEXIT_INIT_PTR(var) \
-  (var)->_next = _NULL; \
-  (var)->_ind = 0; \
-  (var)->_fns[0] = _NULL; \
-  (var)->_on_exit_args._fntypes = 0; \
-  (var)->_on_exit_args._fnargs[0] = _NULL
 #endif
 
 #ifdef _REENT_GLOBAL_ATEXIT
 # define _REENT_INIT_ATEXIT
-# define _REENT_INIT_ATEXIT_PTR(var, var0)
 #else
 # define _REENT_INIT_ATEXIT \
   _NULL, _ATEXIT_INIT,
-# define _REENT_INIT_ATEXIT_PTR(var, var0) \
-  (var)->_atexit = _NULL; _ATEXIT_INIT_PTR(var0);
 #endif
 
 /*
@@ -458,31 +444,11 @@
   }
 
 #define _REENT_INIT_PTR(var) \
-  { (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
+  { memset((var), 0, sizeof(*(var))); \
+    (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
     (var)->_stdout = (__FILE *)&__sf_fake_stdout; \
     (var)->_stderr = (__FILE *)&__sf_fake_stderr; \
-    (var)->_errno = 0; \
-    (var)->_inc = 0; \
-    (var)->_emergency = _NULL; \
-    (var)->__sdidinit = 0; \
-    (var)->_current_category = 0; \
     (var)->_current_locale = "C"; \
-    (var)->_mp = _NULL; \
-    (var)->__cleanup = _NULL; \
-    (var)->_gamma_signgam = 0; \
-    (var)->_cvtlen = 0; \
-    (var)->_cvtbuf = _NULL; \
-    (var)->_r48 = _NULL; \
-    (var)->_localtime_buf = _NULL; \
-    (var)->_asctime_buf = _NULL; \
-    (var)->_sig_func = _NULL; \
-    _REENT_INIT_ATEXIT_PTR(var, &(var)->_atexit0) \
-    (var)->__sglue._next = _NULL; \
-    (var)->__sglue._niobs = 0; \
-    (var)->__sglue._iobs = _NULL; \
-    (var)->__sf = 0; \
-    (var)->_misc = _NULL; \
-    (var)->_signal_buf = _NULL; \
   }
 
 /* Only built the assert() calls if we are built with debugging.  */

Attachment: memset_reent_small.patch.sig
Description: Binary data


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