Задать вопрос
@Decker

GCC: (GNU) 4.9.x-google 20140827 (prerelease). Проблема с alignment (address sanitize)?

Доброго времени суток всем. Поясните пожалуйста следующую вещь про выравнивание и другие особенности в различных версиях GCC 4.7, 4.8, 4.9.x с различными clang. Опишу проблему упрощенно, есть проект, скажем это Unix-based ОС собранная из исходников с помощью GCC: (GNU) 4.9.x-google 20140827 (prerelease) clang version 3.6. Т.е. все бинарники ОС собраны с помощью одной и той же указанной версии компилятора. ОС использует "сторонние бинарники", например, отдельную библиотеку обработки видео и т.п. Для простоты примера будем полагать что это libvideo.so , которые есть разных версий. Так вот, заметил следующую особенность, не все версии libvideo.so собранные разными компиляторами для этой ОС корректно работают.

Например:

1. libvideo.so - (GNU) 4.6.x-google 20120106 (prerelease) - работает.
2. libvideo.so - GCC: (GNU) 4.7 - работает.
3. libvideo.so - GCC: (GNU) 4.8 - работает.
4. libvideo.so - GCC: (GNU) 4.9.x-google 20140827 (prerelease) clang version 3.6 - не работает. Crash'ится в libc.

При этом естественно подразумевается, что разрядность, платформа для которой собраны libvideo.so совпадают. В последнем случае вроде бы библиотека собрана тем же компилятором что и ОС, но как раз она и не работает, крашась где-то в недрах libc.so. Читал что начиная с определенной версии GCC (или clang) есть поддержка некого "aligment support", которое может быть причиной. Кто-нибудь может объяснить чуть более подробно, что кардинально изменилось с alignment в версии GCC 4.9.x и почему бинарники собранные различными версиями GCC могут оказаться "несовместимыми"? Опытным путем было установлено, что все версии libvideo.so собранные GCC до 4.8 гарантированно работают. А вот после - зависит от версии компилятора и каких-то других пока непонятных мне факторов.

Что такого кардинального поменялось в GCC после 4.8, что может приводить к такому поведению? (да, библиотека libvideo.so сторонняя, т.е. поставляется в виде бинарников, собрать ее из исходников возможности нет).
  • Вопрос задан
  • 622 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы