mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-10-17 02:45:05 +00:00
Fix for warnings due to wrapping issue on macOS
This commit is contained in:
parent
bc7530f589
commit
a03daa4675
@ -2,20 +2,15 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Linked in with -Wl,--wrap=pthread_attr_setstack (see Tactility/CMakeLists.txt).
|
* FreeRTOS's POSIX port hands every task a stack carved from its own heap (pvPortMalloc) via this call.
|
||||||
|
* pthread_attr_setstack requires page alignment that pvPortMalloc doesn't guarantee.
|
||||||
|
* When it succeeds anyway, the task's real pthread stack ends up living inside that small FreeRTOS heap region,
|
||||||
|
* where a thread doing heavier stack work (e.g. Mesa GL shader compilation) can silently corrupt adjacent heap_4 objects.
|
||||||
|
* No-op'ing the call instead leaves every task's pthread_attr_t at its pthread_attr_init() default,
|
||||||
|
* so pthread_create() gives it a real, properly sized stack.
|
||||||
*
|
*
|
||||||
* FreeRTOS's POSIX port (Libraries/FreeRTOS-Kernel/portable/ThirdParty/GCC/Posix/port.c)
|
* Linked via -Wl,--wrap=pthread_attr_setstack (Tactility/CMakeLists.txt) on non-Apple platforms;
|
||||||
* hands every task a stack carved out of its own heap (pvPortMalloc) via this call.
|
* reused as a dyld interpose target below on Apple platforms, whose linker lacks --wrap.
|
||||||
* pthread_attr_setstack requires page alignment, which pvPortMalloc doesn't guarantee;
|
|
||||||
* when it happens to succeed anyway (allocator alignment can vary run to run), the
|
|
||||||
* task's real pthread stack ends up living inside that small FreeRTOS heap region -
|
|
||||||
* fine for typical embedded task code, but a desktop GL driver doing on-the-fly shader
|
|
||||||
* compilation on that thread (e.g. Mesa on first frame present) can overflow it and
|
|
||||||
* silently corrupt adjacent heap_4 objects.
|
|
||||||
*
|
|
||||||
* Wrapping the call out entirely (rather than patching the vendored port.c) leaves every
|
|
||||||
* task's pthread_attr_t at its pthread_attr_init() default, so pthread_create() always
|
|
||||||
* gives it a real, properly allocated default-size stack instead.
|
|
||||||
*/
|
*/
|
||||||
int __wrap_pthread_attr_setstack(pthread_attr_t* attr, void* stackaddr, size_t stacksize) {
|
int __wrap_pthread_attr_setstack(pthread_attr_t* attr, void* stackaddr, size_t stacksize) {
|
||||||
(void)attr;
|
(void)attr;
|
||||||
@ -23,3 +18,10 @@ int __wrap_pthread_attr_setstack(pthread_attr_t* attr, void* stackaddr, size_t s
|
|||||||
(void)stacksize;
|
(void)stacksize;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#include <mach-o/dyld-interposing.h>
|
||||||
|
|
||||||
|
DYLD_INTERPOSE(__wrap_pthread_attr_setstack, pthread_attr_setstack)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user