<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 13, 2018, 10:34 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">----- Am 13. Sep 2018 um 14:07 schrieb joel <a href="mailto:joel@rtems.org" target="_blank" rel="noreferrer">joel@rtems.org</a>:<br>
<br>
> On Thu, Sep 13, 2018, 3:28 AM Sebastian Huber <<br>
> <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank" rel="noreferrer">sebastian.huber@embedded-brains.de</a>> wrote:<br>
> <br>
>> Hello,<br>
>><br>
>> I test currently the tqm8xx BSP which worked fine until RTEMS 5. The<br>
>> problem is that this BSP uses strtoul() to get some system configuration<br>
>> parameters from the boot loader. The Newlib used by RTEMS 5 has now<br>
>> support for C locales in strtoul(). The C locale support needs an<br>
>> executing thread with a valid Newlib reentrancy structure. This is<br>
>> definitely not the case during bsp_start().<br>
>><br>
> <br>
> Why do we now longer have a global reentrancy structure to fall back on?<br>
<br>
I think having a global reentrancy as a fall back just for the lowest level system start without an idle thread is a bit of overkill.<br>
<br>
The heavy weight C local support which was recently introduced in Newlib is not really the right thing for the embedded systems I know. There were several complaints about this on the Newlib mailing list as well. The root cause for this is the C standard. So, basically the C standard strtoul() is unsuitable for embedded systems. The FreeBSD (sys/kern/strtoul.c) and Linux (lib/kstrtox.c) kernel have their own implementations.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">FWIW the FACE Technical Standard does not include wide characters in ANY profile as of Edition 3.0. None of the RTOS vendors knew of any avionics users. It wasn't viewed as a necessary feature. We could consider disabling it by default.</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> <br>
> If you disable newlib reentrancy via confdefs.h, what happens?<br>
<br>
This configuration option is not really great. It results in<br>
<br>
#if defined(RTEMS_NEWLIB)<br>
struct _reent *__getreent(void)<br>
{<br>
#ifdef CONFIGURE_DISABLE_NEWLIB_REENTRANCY<br>
return _GLOBAL_REENT;<br>
#else<br>
return _Thread_Get_executing()->libc_reent;<br>
#endif<br>
}<br>
#endif<br>
<br>
Since the configuration object is normally directly presented to the linker, we have a reference to _global_impure_ptr which is a heavy weight object. For low end targets, we need something better.<br>
</blockquote></div></div></div>