Как произвести детерминированный двоичный вывод с g ++?

Я работаю в строго регламентированной среде, в которой мы должны иметь возможность производить идентичные двоичные входные данные и предоставлять один и тот же исходный код каждый раз, когда создаются продукты. В настоящее время мы используем древнюю версию g ++, которая была исправлена, чтобы не записывать что-либо вроде даты / времени в результирующие двоичные файлы, которые будут меняться от сборки к сборке, но я бы хотел обновить до g ++ 4.7.2. Кто-нибудь знает о патче или есть предложения о том, что мне нужно искать, чтобы взять два одинаковых фрагмента исходного кода и произвести идентичные двоичные выходные данные?

11

Решение

Мы также зависим от бит-идентичных пересборок и используем gcc-4.7.x.

Помимо настройки PWD=/proc/self/cwd и используя -frandom-seed=<input-file-name>Есть несколько патчей, которые можно найти в svn://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7 ветка.

6

Другие решения

Debian Воспроизводимый строительный проект попытки стандартизировать пакеты Debian побайтово, и недавно получил Грант Linux Foundation.

Хотя это может включать в себя нечто большее, чем компиляция, вы должны взглянуть на это.

Это также указало мне на Эта статья, который добавляет следующие пункты к тому, что сказал @Employed:

  • поместите источник в фиксированную папку (например, /tmp/build) иметь дело с __FILE__
  • за __DATE__, __TIME__, __TIMESTAMP__:
    • libfaketime: https://github.com/wolfcw/libfaketime
    • переопределить эти макросы с -D
    • -Wdate-time или же -Werror=date-time: предупредить или потерпеть неудачу, если либо __TIME__, __DATE__ или же __TIMESTAMP__ это используется. Ядро Linux 4.4 использует его по умолчанию.
  • использовать D флаг с arили используйте https://github.com/nh2/ar-timestamp-wiper/tree/master стереть марки
  • -fno-guess-branch-probability: старые версии руководства говорят, что это источник недетерминизма, но уже нет. Не уверен, что это покрыто -frandom-seed или нет.

Buildroot имеет BR2_REPRODUCIBLE вариант, который может дать некоторые идеи на уровне пакета, но это далеко не завершено на данный момент.

Связанные темы:

8

Использование ‘ДАТАмакрос делает сборку недетерминированной

0
По вопросам рекламы [email protected]