D
D
Decker2017-01-24 23:40:22
Programming
Decker, 2017-01-24 23:40:22

GCC: (GNU) 4.9.x-google 20140827 (prerelease). Problem with 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 сторонняя, т.е. поставляется в виде бинарников, собрать ее из исходников возможности нет).

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question