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