Commit ac5de26
Build pthreadpool with hidden visibility on Apple (#14951)
### Summary
We are seeing pthreadpool-related crashes on Mac when running with
pybindings. This appears to be due to XNNPACK using the Google fork of
pthreadpool and extension/threadpool using the pthreadpool in
libtorch_cpu. See #14321 for
more details.
Beyond the obvious one definition rule issues, the specific failure
happens because the pthreadpool functions in the copy of pthreadpool
built with ET are marked as weak on Apple platforms. The functions are
not marked as weak in source code or in the build, and the behavior
appears to be specific to Apple's toolchain.
Weak symbols are compiled as indirect calls and can be overridden at
runtime by strong symbols in another dylib. For reasons that I don't
fully understand, the pthreadpool symbols in libtorch_cpu are strong.
Also, the calls in XNNPACK prefer the symbols from the local pthreadpool
This PR works around the issue by building pthreadpool with
-fvisibility=hidden, which causes the symbols to not be exposed in the
final dylib, and thus not end up in the symbol table as an indirect
symbol. Instead, the call to pthreadpool_create in extension_threadpool
is compiled as a direct call to the pthreadpool_create in the
pthreadpool built by executorch.
This isn't a proper fix for the issue, as there are still two
pthreadpool implementations in the process whenever we link
libtorch_cpu. However, it does appear to mitigate the symptoms and thus
prevent crashes. Long-term, we'll need to find a proper solution, such
as namespacing the pthreadpool fork.
### Test plan
In addition to validating this change on CI (including trunk CI), I
manually verified the fix by testing the repro in
#14321 before and after the
change. I verified that ASan does not trip upon resetting the
threadpool. I also verified with `nm` and `otool` that
`pthreadpool_create` does not show up in the indirect symbol table, and
thus cannot (to my knowledge) be overridden at runtime by the
implementation in libtorch_cpu.
Co-authored-by: Gregory Comer <[email protected]>1 parent a4615b7 commit ac5de26
2 files changed
+14
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
266 | 266 | | |
267 | 267 | | |
268 | 268 | | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
269 | 281 | | |
270 | 282 | | |
271 | 283 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
48 | 50 | | |
49 | 51 | | |
50 | 52 | | |
| |||
0 commit comments