ASAN с gcc-5.2 не перехватывает исключения

Я использовал ASAN с gcc-4.8.2 в течение последних 2 лет без каких-либо проблем. Мы перешли на gcc-5.2, чтобы использовать новые функции, такие как LSAN. После сборки приложения с помощью gcc-5.2 оно больше не может перехватывать __cxa_throw, приводящее к сбою, обнаружило это после запуска ASAN с многословностью =1

==11314==AddressSanitizer: failed to intercept '__isoc99_printf'
==11314==AddressSanitizer: failed to intercept '__isoc99_sprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_snprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_fprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_vprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_vsprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_vsnprintf'
==11314==AddressSanitizer: failed to intercept '__isoc99_vfprintf'
==11314==AddressSanitizer: failed to intercept 'backtrace'
==11314==AddressSanitizer: failed to intercept '__cxa_throw'
==11314==AddressSanitizer: libc interceptors initialized
|| `[0x10007fff8000, 0x7fffffffffff]` || HighMem    ||
|| `[0x02008fff7000, 0x10007fff7fff]` || HighShadow ||
|| `[0x00008fff7000, 0x02008fff6fff]` || ShadowGap  ||
|| `[0x00007fff8000, 0x00008fff6fff]` || LowShadow  ||
|| `[0x000000000000, 0x00007fff7fff]` || LowMem     ||
MemToShadow(shadow): 0x00008fff7000 0x000091ff6dff 0x004091ff6e00 0x02008fff6fff
redzone=16
max_redzone=2048
quarantine_size=256M
malloc_context_size=30
SHADOW_SCALE: 3
SHADOW_GRANULARITY: 8
SHADOW_OFFSET: 7fff8000
==11314==Installed the sigaction for signal 11
==11314==T0: stack [0x7ffd377ce000,0x7ffd37fce000) size 0x800000; local=0x7ffd37fcb63c
==11314==AddressSanitizer Init done

И да, мы статически связываем libstdC++, но это не было проблемой в gcc-4.8.2, где ASAN был способен правильно перехватывать все.

1 ответ

Это хорошо известное ложное предупреждение от libasan (см., Например, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58680), и, к сожалению, оно не будет исправлено в ближайшее время, если оно вообще будет. Но почему вы запускаете Асан с повышенной детализацией? Обычные пользователи не должны интересоваться подробной информацией в конце концов.

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