Получение LLVM / Clang для выравнивания 16 бит - PullRequest
20 голосов
/ 21 июня 2011

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

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

Ответы [ 4 ]

8 голосов
/ 10 июля 2011

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

2 голосов
/ 22 июня 2011

Я бы посоветовал взглянуть на #pragma pack (см. http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx и http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html).. Он относительно прост в использовании и должен работать с любым компилятором, который поставляется Apple.

0 голосов
/ 14 июля 2011

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

0 голосов
/ 08 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...