News for hackers. Stuff that matters.
Re:Picolibc – Libc for Embedded Systems by _rtld_global_ro on Thursday October 03, 2019 @07:34PM (#21153374)
errno is thread-safe as it resides in TLS. Part of libc such as pthread is very hard, and so does the dynamic linker. The latter is supposed to handle TLS data as required by TLS/elf spec, which more or less requires a full thread/pthread implementation. As a result, it is rather difficult to break down libc, without writing the whole thing in the first place. golang might be an exception (no linkage against libc), but AFAIK it doesn't use TLS.

It's a pretty hard task to tackle libc (not just string functions, obviously), maybe for the same reason there're only a few libc implementations (support full dynamic linking).

Re:Picolibc – Libc for Embedded Systems by aidenn0 on Thursday October 03, 2019 @08:22PM (#21153703)
Neither pthreads nor a dynamic linker are required for libc. pthreads is part of the POSIX standard, not the C standard, and many libc implementations over the years have not supported dynamic linking.

To give you an idea, here's a chip used by at least one of the products developed by the author:

https://www.st.com/en/microcontrollers-microprocessors/stm32...

16KB of ram. You're not going to see any linking on this because you're probably running everything in a single address space anyways.

Re:Picolibc – Libc for Embedded Systems by weberc2 on Thursday October 03, 2019 @07:42PM (#21153432)
What is TLS?

> Part of libc such as pthread is very hard, and so does the dynamic linker.

What does this mean? I'm having trouble parsing this as English much less making sense of the argument :)

> It's a pretty hard task to tackle libc (not just string functions, obviously), maybe for the same reason there're only a few libc implementations (support full dynamic linking).

Why does libc ship with string functions in the first place? What is special about strings that they are included in libc while other data structures (to my knowledge) are not? Presumably you don't need strings to implement malloc or other parts of libc?

Re:Picolibc – Libc for Embedded Systems by AceJohnny2 on Thursday October 03, 2019 @08:16PM (#21153674)
> What is TLS?

Thread-Local Storage:

https://en.wikipedia.org/wiki/Thread-local_storage

Re:Picolibc – Libc for Embedded Systems by saagarjha on Thursday October 03, 2019 @07:53PM (#21153507)
Strings ship with libc because pretty much every language ships with string manipulation routines. You need them to basically do anything that isn’t pure computation.
Re:Picolibc – Libc for Embedded Systems by weberc2 on Friday October 04, 2019 @10:16AM (#21157929)
Granted, but pretty much every language also ships with routines for other data structures, and I would think that you need things like lists/slices more often than you need string routines.
Re:Picolibc – Libc for Embedded Systems by _kst_ on Thursday October 03, 2019 @10:04PM (#21154182)
libc includes string functions because C requires string manipulation functions. Other languages may or may not make use of C's string functions.
Re:Picolibc – Libc for Embedded Systems by saagarjha on Thursday October 03, 2019 @11:49PM (#21154622)
Yes, because they ship with their own string type.