This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On 02/02/18 11:23, Corinna Vinschen wrote:
On Feb 2 07:04, Sebastian Huber wrote:On 01/02/18 20:42, Orlando Arias wrote:On 02/01/2018 07:57 AM, Corinna Vinschen wrote:On Jan 31 17:50, Jaap de Wolff wrote:I am working with embedded systems with have very limited ram resources. As known current version of the newlib-nano build uses 364 bytes of ram for __global_localeThis build option should be available via a configure option, ideally. Also, the change itself basically changes __global_locale to read only, so I wonder if the name of the option shouldn't reflect that, kind of like ./configure --enable-readonly-locale or ./configure --enable-const-localeI realize that MB_CAPABLE must be off for this modification, but are there other implications?I don't think so, but a potential patch submission should make sure that under normal circumstances no write access occurs with this option.Greetings, For a while I have been contemplating making a patch set that provides an option to utilize only the C locale, removing all locale stuff from newlib at build time. Moving the __global_locale to ROM may be a good temporary solution, however, it will not work well for resource limited devices. For example, the MSP430F2013 provides only 2 kB of ROM and the MSP430F2003 has only 1 kB. This is about 1/6 and 1/3 of the total program capacity of the device, respectively ( further exacerbating the problem is that these particular devices only provide 128 B of RAM). Unfortunately, I do not have much time to actually work on this proposal, but I am willing to give it a shot if I can find some documentation on how current locale stuff is implemented in newlib (other than ``the code is the documentation''). Any pointers on this would be greatly appreciated.A long term solution (I am not sure if it is feasible in Newlib) would be to use C11 thread-local storage instead of the custom thread-local storage via the struct _reent. With C11 thread-local storage the linker would do all the dirty work.This wouldn't work with Cygwin which has its own thread-local implementation. I'm also not quite sure how this helps here.
I would replace
struct _reent
{
int _errno; /* local copy of errno */
/* FILE is a big struct and may change over time. To try to achieve
binary
compatibility with future versions, put stdin,stdout,stderr here. These are pointers into member __sf defined below. */ __FILE *_stdin, *_stdout, *_stderr; [...] with something like this: thread_local int _errno; thread_local __FILE *_stdin; thread_local __FILE *_stdout; thread_local __FILE *_stderr; So, if you only use errno, then you don't get the rest of struct _reent. -- Sebastian Huber, embedded brains GmbH Address : Dornierstr. 4, D-82178 Puchheim, Germany Phone : +49 89 189 47 41-16 Fax : +49 89 189 47 41-09 E-Mail : sebastian.huber@embedded-brains.de PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |