Подтвердить что ты не робот

Получение LLVM/Clang для выравнивания по 16 бит

Я работаю над старым проектом, у которого есть большое количество файлов, относящихся к дням до OS X. Его данные были выровнены по 16 бит в течение > 15 лет. Я хотел бы перейти к полной компиляции LLVM, но я не могу заставить работать 2 байта. Существуют ли какие-либо параметры уровня компилятора для этого? (ранее использующий -malign-mac68k)

Мне известен вариант #pragma pack (2). Однако для этого потребуется изменить более 1000 исходных файлов. Это худший вариант, но это похоже на хак. Кроме того, если это возможно, то, конечно, есть опция по умолчанию для установки выравнивания?

4b9b3361

Ответ 1

Согласно источникам clang, он поддерживает правила выравнивания mac68k. Кажется, что сейчас вы можете включить его только с помощью "#pragma options align = mac68k". Если вы в порядке с небольшим взломом clang, тогда вы также можете реализовать параметр cmdline и отправить патч для clang.

Ответ 3

Я использую последний gcc/gortran для osx, составленный ребятами в ibm, если вы читаете руководство gcc, существует как минимум 8 различных оптимизаций выравнивания, чтобы рассматривать не только объемный malign

Ответ 4

Поскольку заголовки системного уровня предполагают выравнивание по умолчанию (в большинстве случаев у них нет директив для переопределения выравнивания), изменение выравнивания для всех нарушит вызовы ОС. Таким образом, вы не хотите этого делать.

Просто напишите script, чтобы применить ваш #pragma pack(2) к исходным файлам, о которых идет речь, избегая #include s. Это относительно легко и маловероятно, чтобы вызвать неприятные побочные эффекты.