Миграция из Винарма в Ягарто - PullRequest
3 голосов
/ 26 мая 2009

Этот вопрос должен касаться стольких людей ...

Я занят переводом моего проекта ARM C из Winarm GCC 4.1.2 в Yagarto GCC 4.3.3.

Я не ожидал каких-либо различий, и оба с удовольствием компилировали мой проект, используя один и тот же make-файл и .ld файлы.

Однако, пока работает версия Winarm, версия Yagarto не работает. Процессор Atmel AT91SAM7S.

Любые идеи о том, где искать, будут приветствоваться. Я думаю, что мое предположение о том, что make-файл является make-файлом, неверно или что файл .ld для Winarm не применим к Yagarto.

Поскольку они оба являются инструментальными цепочками GCC и предположительно используют один и тот же компоновщик, они обязательно должны быть совместимы.

ТИА

Окончание.

Ответы [ 4 ]

3 голосов
/ 06 июня 2009

Это также может быть тонким отличием в поведении компилятора: генерация кода меняется с выпуска gcc на выпуск gcc, и если ваш код содержит фрагменты, зависящие от реализации по своей семантике, он вполне может укусить вас таким образом. Например, структуры памяти данных могут измениться, а код, на который случайно полагался этот код, сломается.

Видел это много раз.

Попробуйте сделать это с различными вариантами оптимизации в компиляции и посмотрите, имеет ли это значение.

3 голосов
/ 28 мая 2009

Я согласен с тем, что gcc и другие двоичные файлы (ld) должны быть одинаковыми или достаточно близкими, чтобы вы не замечали различий. но стартовый код, будь то ваш или их, и библиотека C могут иметь большое значение. Достаточно сделать разницу между успехом и неудачей при попытке использовать один и тот же исходный код и скрипт компоновщика. Теперь, если это ваш код на 100%, без библиотек или любых других файлов, используемых WinARM или Yagarto, тогда это не имеет особого смысла. От 3.x.x до 4.x.x да, мне пришлось заново крутить скрипты компоновщика, но с 4.1.x до 4.3.x я не помню, чтобы там возникали проблемы.

2 голосов
/ 28 мая 2009

На вашем месте я бы проверил флаги компиляции / компоновщика - особенно значения по умолчанию. Очень часто для разных наборов инструментов используются разные ABI по умолчанию или соглашения FP. Возможно, он даже компилируется с использованием расширения набора команд, которое не поддерживается вашим процессором.

2 голосов
/ 27 мая 2009

WinARM и YAGARTO основаны на gcc и должны одинаково обрабатывать файлы ld. Также оба используют утилиту gnu make - файлы make будут обрабатываться одинаково. Вы можете сравнить две цепочки инструментов здесь и здесь .

Если вы запускаете свой проект с OCD, то есть разница между реализацией отладчика OpenOCD. Также команды, отправляемые отладчику для его настройки, могут отличаться.

Если вы создаете шестнадцатеричный файл, это может отличаться, поскольку две цепочки инструментов не используют одну и ту же версию библиотеки newlib.

Чтобы быть в безопасности, убедитесь, что в обоих случаях правильные binutils находятся в начале пути.

...