C library re-entrancy under Zephyr
Rob Meades
Should I expect C library functions (e.g. strtok()) under Zephyr to be re-entrant or must I call the re-entrant versions (i.e. in this case strtok_r())?
I ask because I am building/running nRF52840 (cortex-m4) and strok() _appears_ to NOT be re-entrant: I'd like to understand if this is expected or if I've messed up a configuration somewhere. My prj.conf file is attached in case it is helpful in answering the question. Rob
|
|
Kumar Gala
Re-entrant support between newlib and zephyr is not currently supported.
toggle quoted messageShow quoted text
There’s an old PR on the subject https://github.com/zephyrproject-rtos/zephyr/pull/21518 - k
On Mar 11, 2021, at 11:51 AM, Rob Meades via lists.zephyrproject.org <Rob.Meades=u-blox.com@lists.zephyrproject.org> wrote:
|
|
Rob Meades
Thanks for the swift response. That's a shame. I will go look at the PR at your link as shifting to the re-entrant versions just for Zephyr is going to be painful.
toggle quoted messageShow quoted text
Rob
-----Original Message-----
From: users@lists.zephyrproject.org <users@lists.zephyrproject.org> On Behalf Of Kumar Gala Sent: 11 March 2021 17:54 To: Rob Meades <Rob.Meades@u-blox.com> Cc: users@lists.zephyrproject.org Subject: Re: [Zephyr-users] C library re-entrancy under Zephyr *** This is an EXTERNAL email. It was sent from outside of u-blox. *** Re-entrant support between newlib and zephyr is not currently supported. There’s an old PR on the subject https://github.com/zephyrproject-rtos/zephyr/pull/21518 - k On Mar 11, 2021, at 11:51 AM, Rob Meades via lists.zephyrproject.org <Rob.Meades=u-blox.com@lists.zephyrproject.org> wrote:
|
|
Kumar Gala
As with and open source project, patches/PRs are welcome to improve and support this :)
toggle quoted messageShow quoted text
- k
On Mar 11, 2021, at 12:04 PM, Rob Meades <Rob.Meades@u-blox.com> wrote:
|
|
Dave Nadler
Hi Rob - Went through this a few years
back with FreeRTOS.
The link below may be helpful. Hope that helps! Best Regards, Dave On 3/11/2021 1:04 PM, Rob Meades via
lists.zephyrproject.org wrote:
Thanks for the swift response. That's a shame. I will go look at the PR at your link as shifting to the re-entrant versions just for Zephyr is going to be painful. Rob -----Original Message----- From: users@... <users@...> On Behalf Of Kumar Gala Sent: 11 March 2021 17:54 To: Rob Meades <Rob.Meades@...> Cc: users@... Subject: Re: [Zephyr-users] C library re-entrancy under Zephyr *** This is an EXTERNAL email. It was sent from outside of u-blox. *** Re-entrant support between newlib and zephyr is not currently supported. There’s an old PR on the subject https://github.com/zephyrproject-rtos/zephyr/pull/21518 - kOn Mar 11, 2021, at 11:51 AM, Rob Meades via lists.zephyrproject.org <Rob.Meades=u-blox.com@...> wrote: Should I expect C library functions (e.g. strtok()) under Zephyr to be re-entrant or must I call the re-entrant versions (i.e. in this case strtok_r())? I ask because I am building/running nRF52840 (cortex-m4) and strok() _appears_ to NOT be re-entrant: I'd like to understand if this is expected or if I've messed up a configuration somewhere. My prj.conf file is attached in case it is helpful in answering the question. Rob <prj.conf>
-- Dave Nadler, USA East Coast voice (978) 263-0097, drn@..., Skype Dave.Nadler1
|
|
Rob Meades
Just to be clear on this, is it true that re-entrancy is not supported by Zephyr for any of the newlib stdio.h or stdlib.h functions, so not just the likes of strok() but also snprintf() and, more fundamentally, malloc()/free()?
If this is the case, are there any other C libraries (so not newlib) for which Zephyr does support re-entrancy and which fulfil the same functions?
Rob
From: Dave Nadler <drn@...>
Sent: 11 March 2021 19:23 To: Rob Meades <Rob.Meades@...>; Kumar Gala <kumar.gala@...> Cc: users@... Subject: Re: [Zephyr-users] C library re-entrancy under Zephyr
*** This is an EXTERNAL email. It was sent from outside of u-blox. *** Hi Rob - Went through this a few years back with FreeRTOS.
On 3/11/2021 1:04 PM, Rob Meades via lists.zephyrproject.org wrote: Thanks for the swift response. That's a shame.I will go look at the PR at your link as shifting to the re-entrant versions just for Zephyr is going to be painful.Rob-----Original Message-----From: users@... <users@...> On Behalf Of Kumar GalaSent: 11 March 2021 17:54To: Rob Meades <Rob.Meades@...>Cc: users@...Subject: Re: [Zephyr-users] C library re-entrancy under Zephyr*** This is an EXTERNAL email. It was sent from outside of u-blox. ***Re-entrant support between newlib and zephyr is not currently supported.There’s an old PR on the subjecthttps://github.com/zephyrproject-rtos/zephyr/pull/21518- kOn Mar 11, 2021, at 11:51 AM, Rob Meades via lists.zephyrproject.org <Rob.Meades=u-blox.com@...> wrote:Should I expect C library functions (e.g. strtok()) under Zephyr to be re-entrant or must I call the re-entrant versions (i.e. in this case strtok_r())?I ask because I am building/running nRF52840 (cortex-m4) and strok() _appears_ to NOT be re-entrant: I'd like to understand if this is expected or if I've messed up a configuration somewhere. My prj.conf file is attached in case it is helpful in answering the question.Rob<prj.conf>
-- Dave Nadler, USA East Coast voice (978) 263-0097, drn@..., Skype Dave.Nadler1
|
|
Rob Meades
Answering my own question for the benefit of anyone listening who didn’t already know: the answer is that the built-in minimal C library offers some functions re-entrantly and, if you chose to use newlib, memory allocation through malloc() etc. is re-entrant, it’s the other functions (stdio etc.) in the integration with newlib which are not reentrant.
Rob
From: Rob Meades
Sent: 11 March 2021 20:13 To: Kumar Gala <kumar.gala@...> Cc: users@... Subject: RE: [Zephyr-users] C library re-entrancy under Zephyr
Just to be clear on this, is it true that re-entrancy is not supported by Zephyr for any of the newlib stdio.h or stdlib.h functions, so not just the likes of strok() but also snprintf() and, more fundamentally, malloc()/free()?
If this is the case, are there any other C libraries (so not newlib) for which Zephyr does support re-entrancy and which fulfil the same functions?
Rob From: Dave Nadler <drn@...>
*** This is an EXTERNAL email. It was sent from outside of u-blox. *** Hi Rob - Went through this a few years back with FreeRTOS.
On 3/11/2021 1:04 PM, Rob Meades via lists.zephyrproject.org wrote: Thanks for the swift response. That's a shame.I will go look at the PR at your link as shifting to the re-entrant versions just for Zephyr is going to be painful.Rob-----Original Message-----From: users@... <users@...> On Behalf Of Kumar GalaSent: 11 March 2021 17:54To: Rob Meades <Rob.Meades@...>Cc: users@...Subject: Re: [Zephyr-users] C library re-entrancy under Zephyr*** This is an EXTERNAL email. It was sent from outside of u-blox. ***Re-entrant support between newlib and zephyr is not currently supported.There’s an old PR on the subjecthttps://github.com/zephyrproject-rtos/zephyr/pull/21518- kOn Mar 11, 2021, at 11:51 AM, Rob Meades via lists.zephyrproject.org <Rob.Meades=u-blox.com@...> wrote:Should I expect C library functions (e.g. strtok()) under Zephyr to be re-entrant or must I call the re-entrant versions (i.e. in this case strtok_r())?I ask because I am building/running nRF52840 (cortex-m4) and strok() _appears_ to NOT be re-entrant: I'd like to understand if this is expected or if I've messed up a configuration somewhere. My prj.conf file is attached in case it is helpful in answering the question.Rob<prj.conf>
-- Dave Nadler, USA East Coast voice (978) 263-0097, drn@..., Skype Dave.Nadler1
|
|