|
25 | 25 | #include <pico/mutex.h> |
26 | 26 | #include <sys/lock.h> |
27 | 27 |
|
28 | | -recursive_mutex_t __lock___sinit_recursive_mutex; |
29 | | -recursive_mutex_t __lock___sfp_recursive_mutex; |
30 | | -recursive_mutex_t __lock___atexit_recursive_mutex; |
31 | | -mutex_t __lock___at_quick_exit_mutex; |
32 | | -recursive_mutex_t __lock___malloc_recursive_mutex; |
33 | | -recursive_mutex_t __lock___env_recursive_mutex; |
34 | | -mutex_t __lock___tz_mutex; |
35 | | -mutex_t __lock___dd_hash_mutex; |
36 | | -mutex_t __lock___arc4random_mutex; |
37 | | - |
38 | | - |
39 | | -__attribute__((constructor)) void __init_all_newlib_mutexes() { |
40 | | - recursive_mutex_init(&__lock___sinit_recursive_mutex); |
41 | | - recursive_mutex_init(&__lock___sfp_recursive_mutex); |
42 | | - recursive_mutex_init(&__lock___atexit_recursive_mutex); |
43 | | - mutex_init(&__lock___at_quick_exit_mutex); |
44 | | - recursive_mutex_init(&__lock___malloc_recursive_mutex); |
45 | | - recursive_mutex_init(&__lock___env_recursive_mutex); |
46 | | - mutex_init(&__lock___tz_mutex); |
47 | | - mutex_init(&__lock___dd_hash_mutex); |
48 | | - mutex_init(&__lock___arc4random_mutex); |
49 | | -} |
| 28 | +// HACK ALERT |
| 29 | +// Pico-SDK defines mutex which can be at global scope, but when the auto_init_ |
| 30 | +// macros are used they are defined as static. Newlib needs global access to |
| 31 | +// these mutextes, so instead of hacking pico-sdk just make "static" a no-op. |
| 32 | + |
| 33 | +#define static |
| 34 | +auto_init_recursive_mutex(__lock___sinit_recursive_mutex); |
| 35 | +auto_init_recursive_mutex(__lock___sfp_recursive_mutex); |
| 36 | +auto_init_recursive_mutex(__lock___atexit_recursive_mutex); |
| 37 | +auto_init_mutex(__lock___at_quick_exit_mutex); |
| 38 | +auto_init_recursive_mutex(__lock___malloc_recursive_mutex); |
| 39 | +auto_init_recursive_mutex(__lock___env_recursive_mutex); |
| 40 | +auto_init_mutex(__lock___tz_mutex); |
| 41 | +auto_init_mutex(__lock___dd_hash_mutex); |
| 42 | +auto_init_mutex(__lock___arc4random_mutex); |
| 43 | +#undef static |
50 | 44 |
|
51 | 45 | void __retarget_lock_init(_LOCK_T *lock) { |
52 | 46 | mutex_init((mutex_t*) lock); |
|
0 commit comments