Make errno a thread-local variable.
errno is supposed to be thread local and we do that here in a rather
makeshift way by implementing a function that returns a pointer to
the __errno variable in the thread block.
If more serious TLS is required, perhaps it would be worthwhile
implementing it using the linker and the "__thread" storage attribute.
That's a bit overkill just for this. I'm also not liking what I saw
the compiler producing.
Change-Id: I03bc0bd6a89f6e3d6bae7653284ee01054614f9a
Reviewed-on: http://gerrit.rockbox.org/803
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested: Michael Sevakis <jethead71@rockbox.org>
diff --git a/firmware/libc/errno.c b/firmware/libc/errno.c
index 6e7bb62..2e3cd90 100644
--- a/firmware/libc/errno.c
+++ b/firmware/libc/errno.c
@@ -1 +1,5 @@
-int errno;
+#include "thread.h"
+int * __errno(void)
+{
+ return &thread_self_entry()->__errno;
+}