----- Am 13. Sep 2018 um 14:07 schrieb joel j...@rtems.org: > On Thu, Sep 13, 2018, 3:28 AM Sebastian Huber < > sebastian.hu...@embedded-brains.de> wrote: > >> Hello, >> >> I test currently the tqm8xx BSP which worked fine until RTEMS 5. The >> problem is that this BSP uses strtoul() to get some system configuration >> parameters from the boot loader. The Newlib used by RTEMS 5 has now >> support for C locales in strtoul(). The C locale support needs an >> executing thread with a valid Newlib reentrancy structure. This is >> definitely not the case during bsp_start(). >> > > Why do we now longer have a global reentrancy structure to fall back on?
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. 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. > > If you disable newlib reentrancy via confdefs.h, what happens? This configuration option is not really great. It results in #if defined(RTEMS_NEWLIB) struct _reent *__getreent(void) { #ifdef CONFIGURE_DISABLE_NEWLIB_REENTRANCY return _GLOBAL_REENT; #else return _Thread_Get_executing()->libc_reent; #endif } #endif 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. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel