Hi All,

We are migrating a product from RTEMS4.10 to RTEMS5, and I have come up with a problem that we have not experienced previously.

We have some code that works before RTEMS mulit-tasking has been started.

This code uses some string functions which are causing the system to crash (bus error out), and I have worked it out to a call to:

_REENT

One example function is:

snprintf

using the newlib 3.0.0 the first few lines of the function are:

int
snprintf (char *__restrict str,
       size_t size,
       const char *__restrict fmt, ...)
{
  int ret;
  va_list ap;
  FILE f;
  struct _reent *ptr = _REENT;

The _REENT macro ends up calling:

cpukit/include/rtems/confdefs.h:2273 __getreent

which ends up returning the thread executing structure:

 return _Thread_Get_executing()->libc_reent;

Since this is before multi-tasking, _Thread_Get_executing() returns NULL, and this is not valid memory.

So, if I want to support this, do I need to configure:

#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY

If I do this will it effect things later?

Or should this be fixed to check whether multi-tasking is running before checking the currently running thread, we do this in some of our other code?

regards,

Ian Caddy

Goanna Technologies Pty Ltd

_______________________________________________
users mailing list
users@rtems.org
http://lists.rtems.org/mailman/listinfo/users

Reply via email to