Jeff Johnston jjohnstn@redhat.com
Thu Jul 17 21:00:00 GMT 2008

Raphael Derosso Pereira wrote:
> Hash: SHA1
> I'm working with FreeRTOS and want to use _REENT, but I don't know how
> to setup this in a multithread environment. Is there any function that
> can be used to specify the current _REENT structure on context switch?
All that is needed is to set the global variable: _impure_ptr to a new 
reentrancy structure you have previously
initialized via the _REENT_INIT() macro.  See libc/reent/impure.c  You 
can do this manually in your
thread switching logic or you can do the following:

If you set the flag __DYNAMIC_REENT__ for your platform, newlib functions
requiring reentrancy will call __getreent() to get the reentrancy 
structure for the current thread automatically. 
You need to supply this function and how it is implemented is up to 
you.  One way would be using thread-specific storage if you support it.  
Another way would be to use a global hash table or array indexed by 
thread-id.  It's up to you.  You would register a new reentrancy 
structure on thread creation.  Typically you set
the __DYNAMIC_REENT__ flag in libc/include/sys/config.h.

If you don't use __DYNAMIC_REENT__, then you either have to set 
_impure_ptr manually or else you can use the reentrant versions of the 
newlib functions and call with the appropriate reentrancy structure as a 

-- Jeff J.
> - --
> Raphael Derosso Pereira
> Engenheiro de Computação
> icq: 4517421
> msn: rderossopereira@hotmail.com
> Skype: rderossopereira
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: http://getfiregpg.org
> iD8DBQFIf2EJYcVjciDA62QRAnQKAKDwulaD/g08Hc+HEvtPN/443kSQ6gCfUgYM
> hadVmX/my9M45A50/FMPUr8=
> =K8iu

More information about the Newlib mailing list