реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> avr-gcc, версия 4.1.1 вместо 3.3.1, Что-то изменилось в компиляторе, перестал нормально работать objdump,
impatt
сообщение Oct 23 2006, 04:49
Сообщение #1


Частый гость
**

Группа: 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
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Oct 23 2006, 08:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Оптимизация в компиляторе поменялась, наверное?
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 23 2006, 08:33
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Andy Great @ Oct 23 2006, 12:22) *
Оптимизация в компиляторе поменялась, наверное?

Поставте в опциях компиляции -O0 и сравните. Проверьте наличие ключа компиляции -dwarf-2, имено по ней в обектник складывается отладочная информация. Хотя у меня с -Os все выводит нормально, пользуюсь gсс4.2.0+bu2.17
Go to the top of the page
 
+Quote Post
impatt
сообщение Oct 23 2006, 08:40
Сообщение #4


Частый гость
**

Группа: 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
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Oct 23 2006, 08:42
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



У, уже 4.2.0 есть... С 4.1.0 на 4.1.1 есть смысл переходить? Или сразу на 4.2.0? Я про GnuARM.
Go to the top of the page
 
+Quote Post
impatt
сообщение Oct 23 2006, 08:46
Сообщение #6


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(Andy Great @ Oct 23 2006, 11:42) *
У, уже 4.2.0 есть... С 4.1.0 на 4.1.1 есть смысл переходить? Или сразу на 4.2.0? Я про GnuARM.


Погляди в changelog, чего там изменили. И будет более-менее ясно...
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Oct 23 2006, 09:06
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



На сайте ГЦЦ почитать - так ровным счетом ничего. Вопрос я задал тем, кто реально пользуется, ченжлоги я читаю, но там не про все пишут (если кратко). Например, известный уже прикол с обработчиком прерывания пофиксили?
Go to the top of the page
 
+Quote Post
aesok
сообщение Oct 23 2006, 09:16
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 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

Анатолий.
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 23 2006, 09:28
Сообщение #9


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



>> -gdwarf-2 стандартными binutils не поддерживается....
это чтото новенькое для меня. что за "стандартные bu"???, может компилятор был собран без --with-dwarf2. Eсли есть желание возьмите скачайте мою сборку, все кто пользуется довольны. Позавчера собрал bu2.17gcc4.2.0avrlibc1.4.4, щас тестирую, пока все что шется - работает правильно, скоро выложу.

>>Например, известный уже прикол с обработчиком прерывания пофиксили?
Если реч идет о неправильной генерацией пролога IRQ/FIQ для ARM в случае включенного оптимизатора, то я поправил этот глюк
http://electronix.ru/forum/index.php?showt...21799&st=15 вроде новых пока не вылезло, тоже все работает , тестирую на lpc2103. Тоже собираюсь выложить но когда убедюсь что все ок. Токо кто скачивает так ине удосуживается сообщить о результатах sad.gif несознательные .... зла не хватает.

Переходить на ноые версии ? это Вам решать, считаю что нада "трогать". Я перманентно делаю сборки
со shapshot'ов в среднем 1 штука в 2 дня (точнее ночи blink.gif ) под ARM/AVR. Развлекалово у меня такое... ночное...
Убедительная просьба по всем глюкам или сюда почаще писать или мне klen_s@mail.ru
Лучше сюда, здесь обсудить можно будет. Таким образом Вы примете участие в развитии gcc - надеюсь, не только для меня, любимого компиллера всех времен и братских народов.
Go to the top of the page
 
+Quote Post
impatt
сообщение Oct 23 2006, 09:59
Сообщение #10


Частый гость
**

Группа: 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 и редкостречающихся инструкций по сборке) - не знаю. Наверное, есть тайное сообщество посвящённых wink.gif, которые знают все опции и рассказывают о них только когда спросят smile.gif

Цитата(klen @ Oct 23 2006, 12:28) *
>> -gdwarf-2 стандартными binutils не поддерживается....
это чтото новенькое для меня. что за "стандартные bu"???, может компилятор был собран без --with-dwarf2. Eсли есть желание возьмите скачайте мою сборку, все кто пользуется довольны.


Ну, я прошу прощения. Стандартные - это не то слово. Скажем так, я имел в виду тот случай, когда используются опции configure, взятые из configure --help
Скачивать не стану, но за предложение - спасибо. Сам пособираю, так интеерснее smile.gif
Компилятор собран без -dwarf-2, ессно (так что если он не конфигурируется сам по умолчанию, то удивляться отсусствию поддержки dwarf2 не следует smile.gif

Сообщение отредактировал impatt - Oct 23 2006, 10:02
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 23 2006, 10:05
Сообщение #11


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата
..... и откуда выковыривать все волшебные опции (кроме как из configure --help и редкостречающихся инструкций по сборке) - не знаю. Наверное, есть тайное сообщество посвящённых wink.gif, которые знают все опции и рассказывают о них только когда спросят smile.gif

о-о-о--о.... .. это супертайное и сверхсекретное общество .. и как оно живет никто не видит.. потому что GCC можно собрать тоько ночьюю !!! при свете костра и бубна. днем члены общества косят под обычных программистов. Чтоб вступить в общество нада долго-долго-долго компилировать gcc ночью - потом открывается пятый глаз который будет видеть все опции командной строки при первом взгляде.

Без шуток. собрать под линухом просто, собрать под CygWin сложнее(временами шаманство). собрать под MinGW - перманентное шаманство с бубном, четками и жеским рукопрекладством к скриптам и макефайлам. Пример - сегодня ноччу спытался собрать свежий снимок 4.2.0 c поможу 4.1.1 для самой MinGW , вобщем все зациклилось на сборке стадии "сам себя", после 6 пересборки я понял что чтото пошло не так плюнул и лег спать. Вот так.
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Oct 23 2006, 10:33
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата
Переходить на ноые версии ? это Вам решать,

Заметил, что речь идет про AVR - лучше поздно, чем никогда. Я больше интересуюсь GCC ARM, но пока на уровне попробовать. Соответственно, интенсивное тестирование не могу провести, потому и спрашиваю у тех, кто использует. Вопрос по переходу в том плане, что хочется иметь стабильно работающий компилер, чтоб когда придет время, поставить его и не иметь геморроя со вспоминанием его закидонов.
Go to the top of the page
 
+Quote Post
impatt
сообщение Oct 24 2006, 02:24
Сообщение #13


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(klen @ Oct 23 2006, 13:05) *
о-о-о--о.... .. это супертайное и сверхсекретное общество
собрать под линухом просто,

Да, под линуксом несложно. Но всё же: откуда взять хотя бы полный перечень возможных опций configure ? Если будет перечень, то можно погуглить и узнать о них. Уверен, там найдётся что-то полезное, что мне (и не только мне) нужно.
Go to the top of the page
 
+Quote Post
impatt
сообщение Oct 24 2006, 02:44
Сообщение #14


Частый гость
**

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Цитата(aesok @ Oct 23 2006, 12:16) *
Да и GCC, и binutils надо сказать про поддержку dwarf2. Вот параметры для binutils.
configure -v --target=avr --prefix=..... --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2


binutils с указанными параментрами собрался. gcc - нет. Ошибка получилась. Пытался запускать configure со следующими параметрами (невольно приближаясь к работающиму configure --target=avr):
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 --enable-languages=c
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 --without-libssp
../gcc-4.1.1/configure -v --target=avr --quiet --enable-install-libbfd --with-dwarf2
../gcc-4.1.1/configure -v --target=avr --quiet --with-dwarf2
Цитирую последние строки компиляции:
******
/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 -O2 -O2 -g -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -DDF=SF -Dinhibit_libc -mcall-prologues -g -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I. -I. -I../../gcc-4.1.1/gcc -I../../gcc-4.1.1/gcc/. -I../../gcc-4.1.1/gcc/../include -I../../gcc-4.1.1/gcc/../libcpp/include -DL_fixunsdfdi -c ../../gcc-4.1.1/gcc/libgcc2.c -o libgcc/./_fixunsdfdi.o
../../gcc-4.1.1/gcc/libgcc2.c: In function '__fixunssfsi':
../../gcc-4.1.1/gcc/libgcc2.c:1499: internal compiler error: in compute_frame_pointer_to_cfa_displacement, at dwarf2out.c:10446
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make[3]: *** [libgcc/./_fixunssfsi.o] Ошибка 1
make[3]: *** Ожидание завершения заданий...
make[3]: Leaving directory `/usr/src/gcc-obj/gcc'
make[2]: *** [stmp-multilib] Ошибка 2
make[2]: Leaving directory `/usr/src/gcc-obj/gcc'
make[1]: *** [all-gcc] Ошибка 2
make[1]: Leaving directory `/usr/src/gcc-obj'
make: *** [all] Ошибка 2
******

Есть способы лечить ? Я так понимаю, что проблема именно с dwarf-2 ?
Go to the top of the page
 
+Quote Post
aesok
сообщение Oct 24 2006, 08:40
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(impatt @ Oct 24 2006, 06:44) *
Цитата(aesok @ Oct 23 2006, 12:16) *


Да и GCC, и binutils надо сказать про поддержку dwarf2. Вот параметры для binutils.
configure -v --target=avr --prefix=..... --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2


binutils с указанными параментрами собрался. gcc - нет. Ошибка получилась. Пытался запускать configure со следующими параметрами (невольно приближаясь к работающиму configure --target=avr):
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 --enable-languages=c
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2
../gcc-4.1.1/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 --without-libssp
../gcc-4.1.1/configure -v --target=avr --quiet --enable-install-libbfd --with-dwarf2
../gcc-4.1.1/configure -v --target=avr --quiet --with-dwarf2



Есть способы лечить ? Я так понимаю, что проблема именно с dwarf-2 ?



Вот суперсекретное место в инете где, те кто собирает по ночам GCC для AVR прячут патчи.

TOP SECRET: ON

Патчи для binutils:
http://www.freebsd.org/cgi/cvsweb.cgi/port...binutils/files/

Патчи для GCC 4.1:
http://www.freebsd.org/cgi/cvsweb.cgi/port.../avr-gcc/files/

TOP SECRET: OFF

Анатолий.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 03:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016