Перечисления вызывают двоичные изменения с оптимизацией в Gcc 4.2.4.

Я использую GCC версии 4.2.4. Описанная ниже проблема не может быть воспроизведена на Gcc 4.6.x, и это единственные две версии, которые я тестировал.

У меня есть заголовочный файл, который определяет перечисления,
Заголовок: abc.h

enum test
{
VALUE_1 = 1,
VALUE_2 = 2,

VALUE_MAX = 0xFFFF,
};

Этот заголовок включен в несколько исходных файлов, и каждый исходный файл создает объект (.o) во время компиляции. И есть несколько исходных файлов, которые не ссылаются ни на одно из перечислений в abc.h.

Проблема, которую я вижу, заключается в том, что если я добавлю новую константу (VALUE_3) в abc.h, то двоичная сумма md5 объектов, которые не используют никаких перечислений, также получит изменения. Это происходит только тогда, когда я применяю оптимизации, а не иначе при компиляции.

Я подозреваю, что это как-то связано с флагами -ftree-vrp и -ftree-dominator-opts, которые включаются при оптимизации. использование этих флагов с параметром -fno по-прежнему вызывает изменение некоторых объектов, но не позволяет другим измениться (что приводит к изменениям с этими флагами).

Другое интересное замечание состоит в том, что сумма md5 оказывается одинаковой для четного или нечетного числа перечислений.

Может кто-нибудь, пожалуйста, помогите мне понять, что происходит в бэк-энде и есть ли способ избежать двоичного изменения, чтобы поддерживать md5sum, когда нет фактического изменения кода для этого конкретного объекта.

Заранее спасибо.

Отредактировано:

Для одного объекта следующим является diff. Для других объектов также есть несколько других изменений (в инструкциях mov и т. Д.). Как видите, только регистры операндов в некоторых инструкциях меняются местами. Я хочу понять причину и как избежать этого с оптимизацией.

# diff test.o.1 test.o.2
1548,1549c1548,1549
<     cmpl    %eax, %ecx
<     jg      .L442
---
>     cmpl    %ecx, %eax
>     jl      .L442

0

Решение

есть ли способ избежать бинарного изменения

Чтобы проверить подозрение Джонатона Рейнхарта «это может быть связано с предсказанием ветвления«, вы можете попробовать вариант -fno-guess-branch-probability,

1

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

Других решений пока нет …

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