В чем причина EXC_BAD_INSTRUCTION при pthread exit/join в Mac OS 10.12?

Наша программа (модуль C++ для node.js под электроном) иногда падает с Illegal instruction 4 (stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)) в Mac OS 10.12.

Эта ошибка не возникает каждый раз, но когда происходит, трассировка стека либо

frame #0: 0x00007fffaf4e5b7e libsystem_platform.dylib`_os_unfair_lock_corruption_abort + 23
frame #1: 0x00007fffaf4e53ee libsystem_platform.dylib`_os_unfair_lock_lock_slow + 158
frame #2: 0x00007fffaf4f000d libsystem_pthread.dylib`_pthread_terminate + 285
frame #3: 0x00007fffaf4ee17f libsystem_pthread.dylib`_pthread_exit + 318
frame #4: 0x00007fffaf4ec946 libsystem_pthread.dylib`_pthread_body + 191
frame #5: 0x00007fffaf4ec887 libsystem_pthread.dylib`_pthread_start + 286
frame #6: 0x00007fffaf4ec08d libsystem_pthread.dylib`thread_start + 13

или как

thread #1, name = 'CrBrowserMain', queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
frame #0: 0x00007fffaf4e5b7e libsystem_platform.dylib`_os_unfair_lock_corruption_abort + 23
frame #1: 0x00007fffaf4e53ee libsystem_platform.dylib`_os_unfair_lock_lock_slow + 158
frame #2: 0x00007fffaf4ee5f7 libsystem_pthread.dylib`pthread_join + 187
frame #3: 0x0000000111098955 module.node`MyThread::join(this=0x0000000106a56038, timeoutMs=4294967295) at MyThread.cpp:101
... // private code

Вот беда:

disassemble --pc
libsystem_platform.dylib`_os_unfair_lock_corruption_abort:
->  0x7fffaf4e5b7e <+23>: ud2    
libsystem_platform.dylib`_os_unfair_lock_unowned_abort:
0x7fffaf4e5b80 <+0>:  mov    eax, edi
0x7fffaf4e5b82 <+2>:  lea    rcx, [rip + 0x2082]       ; "BUG IN CLIENT OF LIBPLATFORM: Unlock of an os_unfair_lock not owned by current thread"
0x7fffaf4e5b89 <+9>:  mov    qword ptr [rip + 0x8d6e730], rcx ; gCRAnnotations + 8

Я уже пытался скомпилировать с clang с вариантами -mmacosx-version-min=10.10 и с -fsanitize=address, Дезинфицирующее средство не показывает никаких нарушений доступа к памяти перед SIGILL и macosx-version-min не помогает

Все предупреждения компилятора с -Wall -Wno-long-long -pedantic были пересмотрены, ничего даже слегка опасного.

Clang версия:

$ clang -v
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Я застрял. Как я не могу найти причину этого SIGILL?

0 ответов

Другие вопросы по тегам