|
avr-gcc, версия 4.1.1 вместо 3.3.1, Что-то изменилось в компиляторе, перестал нормально работать objdump, |
|
|
|
Oct 23 2006, 04:49
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Решил обновить компилятор (версия 3.3.1, как мне кажется, в одном месте начала глючить, решил, что новый, вероятно, поведёт себя более правильно). Собирал из исходников, работаю в Linux. Компилятор версии 4.1.1 рожает код (не проверял ещё, насколько он лучше и всё такое), но objdump версий 2.15 и 2.17 перестал везде правильно диззассемблировать рождённые объектники (может, дизассемблирование не совсем правильный термин): если компилятор версии 3.1.1 практически на каждую строку С-шного текста позволял objdump-у выводить ассемблерный эксивалент строки, то новый позволяет местами: где-то всё по-старому, а где-то идёт массив ассемблерного кода, а С-шные строки сбиваются в кучу или вообще куда-то исчезают. Кто-нибудь знает ,что происходит и как лечить ? Примеры ниже. Заранее благодарю за советы.
**************************************** К примеру, такая С-функция: void putFString(uint8_t *stringPtr){ uint8_t temp; while ((temp = pgm_read_byte_near(stringPtr)) != 0){ stringPtr++; pushToDebugBuffer(temp); }; return; } компилируется и команда 'avr-objdump -h -S ./uart.o' выводит следующее: 0000022c <putFString>: 22c: cf 93 push r28 22e: df 93 push r29 230: ec 01 movw r28, r24 232: 03 c0 rjmp .+6 ; 0x23a <putFString+0xe> 234: 21 96 adiw r28, 0x01 ; 1 236: 0e 94 00 00 call 0 ; 0x0 <nextAddress> 23a: fe 01 movw r30, r28 23c: 84 91 lpm r24, Z 23e: 88 23 and r24, r24 240: c9 f7 brne .-14 ; 0x234 <putFString+0x8> 242: df 91 pop r29 244: cf 91 pop r28 246: 08 95 ret
В то время, как компилятор версии 3.3.1 компилировал в объектники и 'avr-objdump -h -S ./uart.o' выводил листинг так:
00000000 <putFString>:
uint8_t f_hexPrefix[] PROGMEM ="0x"; uint8_t f_CR[] PROGMEM ="\n";
void putFString(uint8_t *stringPtr){ 0: cf 93 push r28 2: df 93 push r29 4: ec 01 movw r28, r24 uint8_t temp; while ((temp = pgm_read_byte_near(stringPtr)) != 0){ 6: fc 01 movw r30, r24 8: 84 91 lpm r24, Z a: 88 23 and r24, r24 c: 39 f0 breq .+14 ; 0x1c <putFString+0x1c> stringPtr++; e: 21 96 adiw r28, 0x01 ; 1 pushToDebugBuffer(temp); 10: 0e 94 00 00 call 0 ; 0x0 <putFString> 14: fe 01 movw r30, r28 16: 84 91 lpm r24, Z 18: 88 23 and r24, r24 1a: c9 f7 brne .-14 ; 0xe <putFString+0xe> }; return; } 1c: df 91 pop r29 1e: cf 91 pop r28 20: 08 95 ret
|
|
|
|
|
 |
Ответов
|
Oct 23 2006, 08:40
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(klen @ Oct 23 2006, 11:33)  Цитата(Andy Great @ Oct 23 2006, 12:22)  Оптимизация в компиляторе поменялась, наверное?
Поставте в опциях компиляции -O0 и сравните. Проверьте наличие ключа компиляции -dwarf-2, имено по ней в обектник складывается отладочная информация. Хотя у меня с -Os все выводит нормально, пользуюсь gсс4.2.0+bu2.17 Проверил -O0. Та-же фигня. -gdwarf-2 стандартными binutils не поддерживается, надо либо в параметрах configure при сборке им сказать, либо специальный патч накатить... Как вы делали ? Впрочем, те binutils, что под avr-gcc-3.3.1 работают, тоже стандартные, без лишних патчей, поддержки dwarf-2 и так далее - нормально. Видимо, дело в компиляторе ?
Сообщение отредактировал impatt - Oct 23 2006, 08:46
|
|
|
|
|
Oct 23 2006, 09:16
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(impatt @ Oct 23 2006, 12:40)  -gdwarf-2 стандартными binutils не поддерживается, надо либо в параметрах configure при сборке им сказать, либо специальный патч накатить... Как вы делали ? Да и GCC, и binutils надо сказать про поддержку dwarf2. Вот параметры для binutils. configure -v --target=avr --prefix=..... --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 Анатолий.
|
|
|
|
|
Oct 23 2006, 09:59
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(aesok @ Oct 23 2006, 12:16)  Цитата(impatt @ Oct 23 2006, 12:40) 
-gdwarf-2 стандартными binutils не поддерживается, надо либо в параметрах configure при сборке им сказать, либо специальный патч накатить... Как вы делали ?
Да и GCC, и binutils надо сказать про поддержку dwarf2. Вот параметры для binutils. configure -v --target=avr --prefix=..... --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 Счас попробую и запишу на будущее. Вообще-то, подобные пересборки для меня редки и откуда выковыривать все волшебные опции (кроме как из configure --help и редкостречающихся инструкций по сборке) - не знаю. Наверное, есть тайное сообщество посвящённых  , которые знают все опции и рассказывают о них только когда спросят  Цитата(klen @ Oct 23 2006, 12:28)  >> -gdwarf-2 стандартными binutils не поддерживается.... это чтото новенькое для меня. что за "стандартные bu"???, может компилятор был собран без --with-dwarf2. Eсли есть желание возьмите скачайте мою сборку, все кто пользуется довольны. Ну, я прошу прощения. Стандартные - это не то слово. Скажем так, я имел в виду тот случай, когда используются опции configure, взятые из configure --help Скачивать не стану, но за предложение - спасибо. Сам пособираю, так интеерснее  Компилятор собран без -dwarf-2, ессно (так что если он не конфигурируется сам по умолчанию, то удивляться отсусствию поддержки dwarf2 не следует
Сообщение отредактировал impatt - Oct 23 2006, 10:02
|
|
|
|
|
Oct 24 2006, 02:24
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(klen @ Oct 23 2006, 13:05)  о-о-о--о.... .. это супертайное и сверхсекретное общество собрать под линухом просто, Да, под линуксом несложно. Но всё же: откуда взять хотя бы полный перечень возможных опций configure ? Если будет перечень, то можно погуглить и узнать о них. Уверен, там найдётся что-то полезное, что мне (и не только мне) нужно.
|
|
|
|
|
Oct 24 2006, 10:22
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(andrew_b @ Oct 24 2006, 12:38)  Цитата(impatt @ Oct 24 2006, 06:24)  Но всё же:откуда взять хотя бы полный перечень возможных опций configure ? У каждой программы есть свои специфические опции. Узнать их можно, посмотрев внутрь файла configure.ac (или configure.in). Это сценарий autoconf, которыйи генерирует configure. В общем, пытайте Гугл на тему GNU Autotools. Ну, что-ж, уже хорошо  А то просто непонятно, где что есть. Спасибо  Цитата(aesok @ Oct 24 2006, 12:44)  Какие ошибки? Как минимум ставте патчи patch-newdevices и patch-dwarf. Поставил оба. Ошибка такая: Код checking for avr-gcc... /usr/src/gcc-obj/./gcc/xgcc -B/usr/src/gcc-obj/./gcc/ -B/usr/local/avr/bin/ -B/usr/local/avr/lib/ -isystem /usr/local/avr/include -isystem /usr/local/avr/sys-include -mmcu=avr3 checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. make[1]: *** [configure-target-libssp] Ошибка 1 Меня не оставляет ощущение, что я не полностью предоставляю информацию об обшибках компиляции. Но каждый раз прикреплять логи конфига, всего-всего как-то избуточно, а как отобрать нужное - только догадываюсь. Так что если что - поправляйте.
|
|
|
|
|
Oct 24 2006, 10:33
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(impatt @ Oct 24 2006, 14:22)  Ошибка такая: Код checking for avr-gcc... /usr/src/gcc-obj/./gcc/xgcc -B/usr/src/gcc-obj/./gcc/ -B/usr/local/avr/bin/ -B/usr/local/avr/lib/ -isystem /usr/local/avr/include -isystem /usr/local/avr/sys-include -mmcu=avr3 checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. make[1]: *** [configure-target-libssp] Ошибка 1 Меня не оставляет ощущение, что я не полностью предоставляю информацию об обшибках компиляции. Но каждый раз прикреплять логи конфига, всего-всего как-то избуточно, а как отобрать нужное - только догадываюсь. Так что если что - поправляйте. Отлично!!! Так все и дожно быть!!! Добавте "--disable-libssp" при конфигурации GCC. Анатолий.
Сообщение отредактировал aesok - Oct 24 2006, 10:39
|
|
|
|
|
Oct 25 2006, 02:01
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(aesok @ Oct 24 2006, 13:33)  Отлично!!! Так все и дожно быть!!! Добавте "--disable-libssp" при конфигурации GCC. Собственно, так и делал: Код ../gcc-4.1.1/configure -v --target=avr --quiet --enable-languages=c --without-libssp Ошибка та самая, про которую писал в прошлом посте. Кстати, мож, пропатчил просто плохо ? Я сперва накатил (кажется  патч patch-dwarf, затем patch-newdevices, причём ввиду того, что опыта с командой patch немного, то просто поместил оба патча в корень исходников gcc и находясь там-же, сделал patch -p1 <./patch*. Команда patch не захотела найти файлы, подлежащие правке, но написала, мол, файл такой-то предписано патчить, но найти его не могу. Ну, набирал имена вручную и всё такое. Может, следует делать иначе ?
|
|
|
|
|
Oct 25 2006, 06:20
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(impatt @ Oct 25 2006, 06:01)  Цитата(aesok @ Oct 24 2006, 13:33)  Отлично!!! Так все и дожно быть!!! Добавте "--disable-libssp" при конфигурации GCC.
Собственно, так и делал: Код ../gcc-4.1.1/configure -v --target=avr --quiet --enable-languages=c --without-libssp Ошибка та самая, про которую писал в прошлом посте. "--disable-XXX" и "--without-XXX" не взаимозаменяемы. Нужно всетаки "--disable-libssp". Цитата(impatt @ Oct 25 2006, 06:01)  Кстати, мож, пропатчил просто плохо ? Я сперва накатил (кажется  патч patch-dwarf, затем patch-newdevices, причём ввиду того, что опыта с командой patch немного, то просто поместил оба патча в корень исходников gcc и находясь там-же, сделал patch -p1 <./patch*. Команда patch не захотела найти файлы, подлежащие правке, но написала, мол, файл такой-то предписано патчить, но найти его не могу. Ну, набирал имена вручную и всё такое. Может, следует делать иначе ? Нет эта ошибка никак не связана с этими патчами. Это ошибка при компиляции Stack Smash Protection библиотеки (Защита от разрушения стека). На AVR вещь совершенно бесполезная. Вот маленькая статья, правда на английском, в ней основное что нужно знать про diff и patch: http://www.network-theory.co.uk/articles/patchintro.htmlАнатолий.
Сообщение отредактировал aesok - Oct 25 2006, 06:30
|
|
|
|
|
Oct 25 2006, 06:53
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(aesok @ Oct 25 2006, 09:20)  "--disable-XXX" и "--without-XXX" не взаимозаменяемы. Нужно всетаки "--disable-libssp". Да, это верно. Попутал. Цитата(aesok @ Oct 25 2006, 09:20)  Нет эта ошибка никак не связана с этими патчами. Это ошибка при компиляции Stack Smash Protection библиотеки (Защита от разрушения стека). На AVR вещь совершенно бесполезная. Вот маленькая статья, правда на английском, в ней основное что нужно знать про diff и patch: http://www.network-theory.co.uk/articles/patchintro.htmlСпасибо. Статейку гляну. В общем, собралось и работает. Спасибо за помощь  Правда, всё таки, avr-gcc-4.1.1, поддержкой dwarf-2, вкупе с "avr-objdump -S -h" генерит по прежнему не очень хорошие листинги по сравнению с avr-gcc-3.3.1. С-шный текст куда-то теряется (не везде), и видны здоровые массивы ассемблера. Мож, есть другие причины, например, в gcc-4.* что-то поменяли капитально ? Впрочем, я уже понял, что эти проблемы ничто, по сравнению с мировой революцией
|
|
|
|
Сообщений в этой теме
impatt avr-gcc, версия 4.1.1 вместо 3.3.1 Oct 23 2006, 04:49             aesok Цитата(impatt @ Oct 25 2006, 10:53) Правд... Oct 25 2006, 10:27              impatt Цитата(aesok @ Oct 25 2006, 13:27) Пожалу... Oct 26 2006, 05:21               aesok Проверте версию "avr-objdump", возможно... Oct 26 2006, 14:32                impatt Цитата(aesok @ Oct 26 2006, 17:32) Провер... Oct 27 2006, 04:39                 klen Цитата(impatt @ Oct 27 2006, 08:39) И ещё... Oct 27 2006, 05:22                  impatt Цитата(klen @ Oct 27 2006, 08:22) Странне... Oct 27 2006, 05:57                   aesok Пока короткий ответ.
Увидел я про что вы говорит... Oct 27 2006, 06:42                    impatt Цитата(aesok @ Oct 27 2006, 09:42) Увидел... Oct 27 2006, 06:58    impatt Цитата(aesok @ Oct 23 2006, 12:16) Да и G... Oct 24 2006, 02:44     aesok Цитата(impatt @ Oct 24 2006, 06:44) Цитат... Oct 24 2006, 08:40      impatt Цитата(aesok @ Oct 24 2006, 11:40) Патчи ... Oct 24 2006, 09:40       aesok Цитата(impatt @ Oct 24 2006, 13:40) Интер... Oct 24 2006, 09:44   klen >> -gdwarf-2 стандартными binutils не поддер... Oct 23 2006, 09:28 Andy Great У, уже 4.2.0 есть... С 4.1.0 на 4.1.1 есть смысл п... Oct 23 2006, 08:42 impatt Цитата(Andy Great @ Oct 23 2006, 11:42) У... Oct 23 2006, 08:46 Andy Great На сайте ГЦЦ почитать - так ровным счетом ничего. ... Oct 23 2006, 09:06 Andy Great ЦитатаПереходить на ноые версии ? это Вам решать,
... Oct 23 2006, 10:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|