pico-sdk icon indicating copy to clipboard operation
pico-sdk copied to clipboard

Support thread local storage - Partially Fixes #291

Open alastairpatrick opened this issue 3 years ago • 2 comments

This patch adds a pico_tls module, which adds support for GCC's __thread, C11's _Thread_local, and C++'s thread_local storage class specifiers. For example:

__thread int foo;

Different implementations of pico_tls may be selected by means of the pico_set_tls_implementation cmake macro, similar to some other SDK modules. For example, a different implementation could be selected if using an RTOS.

In this implementation, a thread corresponds to a core. No TLS storage is allocated for exceptions handlers. So there are two threads total.

Issue #291 has two parts: making C++ thread_local work and making C++ exceptions work. This patch adds support for thread_local but not C++ exceptions.

Tested by building SDK and running modified kitchen_sink in debug and release, stepping through tls_init and __wrap___emutls_get_address in GDB.

alastairpatrick avatar Sep 10 '22 22:09 alastairpatrick

Nice; just glanced at this so far.

A couple o-things

  • We should probably not make core_thread the default (as it pulls in new extra code), by which i actually mean we should make it the default, but not unilaterally add pico_tls as a dependency. (i.e. add that if you want TLS)
  • Can you add our copyright (congratulations on perhaps being the first that i recall to add new code!) ... you can include your name as well if you want.

kilograham avatar Sep 11 '22 00:09 kilograham

Copyright comments added to tls.c and tls.S but not CMakeLists.txt, which I think is consistent with other sources. I removed pico_tls from pico_runtime's dependencies, which I think is what you want.

alastairpatrick avatar Sep 11 '22 15:09 alastairpatrick

moving to 1.7.0 so we can fix this on clang too

kilograham avatar Jul 19 '24 18:07 kilograham