<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style></head>
<body>
<body><p dir="ltr">OK.. We can talk code specifics tomorrow in person. </p><p dir="ltr">Is gxx_wrappers.c still needed?</p><div class="quote">On Feb 24, 2014 9:56 AM, Sebastian Huber <sebastian.huber@embedded-brains.de> wrote:<br type="attribution"></div></body>
<font size="2"><div class="PlainText">On 2014-02-24 09:09, Joel Sherrill wrote:<br>
>  > > 2. Use alternatives to task variables for all RTEMS support components, e.g.<br>
>  > > the file system environment.  Here we can use __getreent() for example with<br>
>  > ><br>
>  > > struct S {<br>
>  > >   struct _reent reent;<br>
>  > >   rtems_user_env_t env;<br>
>  > > }<br>
><br>
> I am missing some detail here. Can you provide details?<br>
><br>
<br>
Each thread can have its own file system environment.  So we need some sort of <br>
thread-local storage.  Since applications using a file system will very likely <br>
also enable the Newlib re-entrancy we can re-use the __getreent() function for <br>
the file system environment.  In newlib_create_hook() we create a structure<br>
<br>
struct S {<br>
   struct _reent reent;<br>
   rtems_user_env_t *env;<br>
}<br>
<br>
and assign it to thread->libc_reent;<br>
<br>
The file system can then use<br>
<br>
(struct S *) __getreent()<br>
<br>
to get its file system environment.<br>
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : +49 89 189 47 41-16<br>
Fax     : +49 89 189 47 41-09<br>
E-Mail  : sebastian.huber@embedded-brains.de<br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
</div></font>
</body>
</html>