_REENT_CHECK_VERIFY calls __assert_func even if NDEBUG is defined

R. Diez rdiezmail-newlib@yahoo.de
Wed Apr 29 13:05:02 GMT 2020


> If you're tight on RAM, you might look at the newlib fork, picolibc,
> which uses native TLS support for reentrant data values like
> _rand_next. With that approach, your thread-local storage contains only
> values used by your application and malloc need never be called. In this
> case, the per-thread data would be only eight bytes.

I do have one microcontroller with 8 KiB SRAM. For all others I do not want to bother.

I am interested in your "only eight bytes" claim. Say I use picolibc, and then my firmware wants to use rand(), which needs many more bytes for the 
state of the pseudo-random number generator.

The firmware is bare metal (no operating system). I guess there will not be a native TLS support then.

How does rand() get the memory it needs? Do I need to preallocate it statically? Or have a separate memory pool for the TLS? Do I need to implement 
TLS myself? Can you do that with some sort of easy-to-code stack?

Regards,
   rdiez


More information about the Newlib mailing list