Re: _REENT_CHECK_VERIFY calls __assert_func even if NDEBUG is defined

"R. Diez via Newlib" <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hallo again:

After some further research and testing, I wanted to share a couple of hints that may help other people too:

Point 1) Configuring with --disable-newlib-reent-small (which is actually the default) gets rid of the surprising malloc() on first touch from rand(), and probably many other places.

Note that sizeof( struct _reent  ) increases from 240 bytes to 1064 bytes (tested with Newlib version 3.3.0).

I think Newlib should document that option --enable-newlib-reent-small is risky. Unless you are really tight on RAM, I strongly advise against this unsafe optimisation.


Point 2) The documentation on this section is misleading:

  https://sourceware.org/newlib/libc.html#Reentrancy

That section states:

-----------8<-----------8<-----------8<-----------8<-----------
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 ‘struct _reent’:

Use the reentrant versions of the library functions, after initializing a global reentrancy structure for 1.  each process. Use the pointer to this structure as the extra argument for all library functions.
-----------8<-----------8<-----------8<-----------8<-----------

This section gives you the impression that you are free to choose. But if you have multithreading, you really need to implement _impure_ptr, mention in option (2). For example, the rand() function needs such a global state (that was my impression by looking at the convoluted macros).

Newlib does have a rand_r() counterpart, but it is not really equivalent (it is a much weaker pseudo-random generator), and Posix has declared it obsolete. So there is no real xxx_r() equivalent for rand() in Newlib (that I could see).

All the best,
  rdiez
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.