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

|
Цитата(aesok @ Oct 24 2006, 11:40)  Интересно. Действительно, не для средних умов. Достаточно ли патча patch-dwarf для того,чтобы накатить его на gcc-4.1.1 и скомпилить с поддержкой dwarf-2 ? А то теперь не получается никак скомпилировать.
|
|
|
|
|
Oct 24 2006, 09:44
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(impatt @ Oct 24 2006, 13:40)  Интересно. Действительно, не для средних умов. Достаточно ли патча patch-dwarf для того,чтобы накатить его на gcc-4.1.1 и скомпилить с поддержкой dwarf-2 ? А то теперь не получается никак скомпилировать. Какие ошибки? Как минимум ставте патчи patch-newdevices и patch-dwarf. Анатолий.
|
|
|
|
|
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.* что-то поменяли капитально ? Впрочем, я уже понял, что эти проблемы ничто, по сравнению с мировой революцией
|
|
|
|
|
Oct 25 2006, 10:27
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(impatt @ Oct 25 2006, 10:53)  Правда, всё таки, avr-gcc-4.1.1, поддержкой dwarf-2, вкупе с "avr-objdump -S -h" генерит по прежнему не очень хорошие листинги по сравнению с avr-gcc-3.3.1. С-шный текст куда-то теряется (не везде), и видны здоровые массивы ассемблера. Мож, есть другие причины, например, в gcc-4.* что-то поменяли капитально ? Пожалуйста задавайте вопросы по человечески, как инженер!!! Что значит "не очень хорошие листинги", что значит "текст куда-то теряется (не везде)", ГДЕ?????? Не генерируеться отладочная информация для вашего кода или для библиотечных функций? Большая часть avr-libc написана на ассемблере. Вы используете avr-libc которая скомпилирована с помощю GCC 3.1, тоесть без отладочно й информации в dwarf-2 формате. Когда вы компилируете свой код, вы указали компилятору что вам нужна отладочная информация в dwarf-2 формате? Анатолий.
|
|
|
|
|
Oct 26 2006, 05:21
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(aesok @ Oct 25 2006, 13:27)  Пожалуйста задавайте вопросы по человечески, как инженер!!! Я стараюсь  найти компромисс между большим объёмом подробностей, которые будут затмевать весь смысл поста, и его краткостью-и-привлекательностью. Разумеется, мне не всегда просто догадаться, что может потребоваться знать человеку, который возмётся разобраться с вопросом, а ещё иногда просто что-то о своей проблеме знаю и теряю из вида то, что все остальные не знают. Цитата(aesok @ Oct 25 2006, 13:27)  Что значит "не очень хорошие листинги", что значит "текст куда-то теряется (не везде)", ГДЕ??????
Не генерируеться отладочная информация для вашего кода или для библиотечных функций? Большая часть avr-libc написана на ассемблере. Вы используете avr-libc которая скомпилирована с помощю GCC 3.1, тоесть без отладочно й информации в dwarf-2 формате. Когда вы компилируете свой код, вы указали компилятору что вам нужна отладочная информация в dwarf-2 формате? Ну, вот теперь примерно ясно, что было понято из сказаного мной, и сейчас уточняю: Как и писал в самом начале топика, и уточняю сейчас, компилятор версии 4.1.1, в отличии от версии 3.3.1, генерит такие объектники, что после обработки objdump получается, что местами вместо строк С, перемежённых сгенерированными компилятором ассемблерными строками, получаются массивы ассемблера, а соответствющий код С сбивается в кучи в других местах. Всё это относится к коду на С, который я пишу сам. Компилятор вызывается строками типа такой: $(CC) $(CFLAGS) -c -o tables.o $(SRCDIR)/dataconvert/tables.c CC == avr-gcc (разумеется) Пример на компиляторе 3.3.1, (CFLAGS такая: -mmcu=atmega128 -Os -g3 -DCALIBR_ENABLE_REAL_COEF_STORE -DCALIBTABLE_EEPROM -DAVRPART -DADCPART=ADS1243 -DPCBVER=0311 -I . -I /usr/local/avr/include -Wall) Код 00003082 <pushToDebugBuffer>:
uint8_t pushToDebugBuffer(uint8_t symbol){ 3082: cf 93 push r28 3084: c8 2f mov r28, r24 DEBUG_TX_INT_LOCK(); 3086: 56 98 cbi 0x0a, 6; 10 while(debugPushCursor == debugPopCursor){ 3088: 20 91 00 03 lds r18, 0x0300 308c: 30 91 01 03 lds r19, 0x0301 3090: 80 91 fe 02 lds r24, 0x02FE 3094: 90 91 ff 02 lds r25, 0x02FF 3098: 28 17 cp r18, r24 309a: 39 07 cpc r19, r25 309c: 71 f4 brne .+28 ; 0x30ba DEBUG_TX_INT_UNLOCK(); 309e: 56 9a sbi 0x0a, 6; 10 SLEEP(); 30a0: 88 95 sleep DEBUG_TX_INT_LOCK(); 30a2: 56 98 cbi 0x0a, 6; 10 30a4: 20 91 00 03 lds r18, 0x0300 30a8: 30 91 01 03 lds r19, 0x0301 30ac: 80 91 fe 02 lds r24, 0x02FE 30b0: 90 91 ff 02 lds r25, 0x02FF 30b4: 28 17 cp r18, r24 30b6: 39 07 cpc r19, r25 30b8: 91 f3 breq .-28 ; 0x309e } *debugPushCursor = symbol; 30ba: e0 91 00 03 lds r30, 0x0300 30be: f0 91 01 03 lds r31, 0x0301 30c2: c0 83 st Z, r28 debugPushCursor = nextAddress(debugPushCursor); 30c4: 80 91 00 03 lds r24, 0x0300 30c8: 90 91 01 03 lds r25, 0x0301 30cc: 0e 94 9f 18 call 0x313e 30d0: 90 93 01 03 sts 0x0301, r25 30d4: 80 93 00 03 sts 0x0300, r24 DEBUG_TX_INT_UNLOCK(); 30d8: 56 9a sbi 0x0a, 6; 10 if(!globIntFlags.isDebugPortBusy) popFromDebugBuffer(); //если передача когда-то закончилась, то возобновляем её 30da: 80 91 aa 01 lds r24, 0x01AA 30de: 88 1f adc r24, r24 30e0: 88 27 eor r24, r24 30e2: 88 1f adc r24, r24 30e4: 99 27 eor r25, r25 30e6: 89 2b or r24, r25 30e8: 11 f4 brne .+4 ; 0x30ee 30ea: 0e 94 7b 18 call 0x30f6 return symbol; 30ee: 8c 2f mov r24, r28 30f0: 99 27 eor r25, r25 } 30f2: cf 91 pop r28 30f4: 08 95 ret Пример на версии 4.1.1, та-же самая строка вызова компилятора, добавлено -gdwarf-2 (CFLAGS такая: -gdwarf-2 -mmcu=atmega128 -Os -g3 -DCALIBR_ENABLE_REAL_COEF_STORE -DCALIBTABLE_EEPROM -DAVRPART -DADCPART=ADS1243 -DPCBVER=0311 -I . -I /usr/local/avr/include -Wall) Код 000030cc <pushToDebugBuffer>: 30cc: 1f 93 push r17 30ce: 18 2f mov r17, r24 30d0: 02 c0 rjmp .+4 ; 0x30d6 <pushToDebugBuffer+0xa> 30d2: 56 9a sbi 0x0a, 6; 10 30d4: 88 95 sleep 30d6: 56 98 cbi 0x0a, 6; 10 30d8: 20 91 00 03 lds r18, 0x0300 30dc: 30 91 01 03 lds r19, 0x0301 30e0: 80 91 fe 02 lds r24, 0x02FE 30e4: 90 91 ff 02 lds r25, 0x02FF 30e8: 28 17 cp r18, r24 30ea: 39 07 cpc r19, r25 30ec: 91 f3 breq .-28 ; 0x30d2 <pushToDebugBuffer+0x6> 30ee: e0 91 00 03 lds r30, 0x0300 30f2: f0 91 01 03 lds r31, 0x0301 30f6: 10 83 st Z, r17 30f8: 80 91 00 03 lds r24, 0x0300 30fc: 90 91 01 03 lds r25, 0x0301 3100: 01 96 adiw r24, 0x01 ; 1 3102: 22 e0 ldi r18, 0x02 ; 2 3104: 8e 3f cpi r24, 0xFE ; 254 3106: 92 07 cpc r25, r18 3108: 11 f4 brne .+4 ; 0x310e <pushToDebugBuffer+0x42> 310a: 8e e7 ldi r24, 0x7E ; 126 310c: 92 e0 ldi r25, 0x02 ; 2 310e: 90 93 01 03 sts 0x0301, r25 3112: 80 93 00 03 sts 0x0300, r24 3116: 56 9a sbi 0x0a, 6; 10 3118: 80 91 aa 01 lds r24, 0x01AA 311c: 87 fd sbrc r24, 7 311e: 02 c0 rjmp .+4 ; 0x3124 <pushToDebugBuffer+0x58> 3120: 0e 94 3d 18 call 0x307a ; 0x307a <popFromDebugBuffer> 3124: 81 2f mov r24, r17 3126: 99 27 eor r25, r25 3128: 1f 91 pop r17 312a: 08 95 ret С-шный код в этом случае потерялся вовсе, но так не всегда: иногда он, как и было сказано ранее, сиротливо лежит в уголке листинга так-же, как он есть в исходном файле.
|
|
|
|
|
Oct 27 2006, 04:39
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(aesok @ Oct 26 2006, 17:32)  Проверте версию "avr-objdump", возможно вы пытаетесь посмотреть отладочную версию в формате dwarf-2, а используемая версия avr-objdump про него не знает. Что показывает "avr-objdump --version"? Точно 2.17? Tокда попробуйте еще раз сконфигурировать/создать binutils с поддежкой dwarf-2. Проверил, сконфигурил, собрал, установил и снова проверил - всё по старому. Может, сперва удалить надо всё, что ручками накомпилено было ? Правда, в случае с gcc и binutils я не знаю, как сделать, ибо make uninstall не работает. А как, кстати, деинсталлировать gcc и binutils ? И ещё: у вас нет таких проблем ? Листинги чётко получаются ?
|
|
|
|
|
Oct 27 2006, 05:22
|

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

|
Цитата(impatt @ Oct 27 2006, 08:39)  И ещё: у вас нет таких проблем ? Листинги чётко получаются ? Странненько. Вообще проблем нет. Давайте так, напишите полностю: 1. опции конфигурации binutils 2. опции конфигурации gcc после этого Вы собрали все 3. опции компиляции 4. опции линкера 5. опции avr-objdump Дальше будем думать У меня к примеру так собирается прошивка Цитата avr-gcc -c -mmcu=atmega48 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99 -Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o ---------------- связывание обьектных файлов: image.elf avr-gcc -mmcu=atmega48 main.o --output image.elf -Wl,-Map=image.map,--cref -lm -lc ---------------- генерация FLASH образа: image.hex avr-objcopy -O ihex -R .eeprom image.elf image.hex ---------------- генерация EEPROM образа: image.eep avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex image.elf image.eep ---------------- генерация расширенного листинга: image.lss avr-objdump -h -S image.elf > image.lss ---------------- генерация таблицы символов: image.sym avr-nm -n image.elf > image.sym
|
|
|
|
|
Oct 27 2006, 05:57
|
Частый гость
 
Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088

|
Цитата(klen @ Oct 27 2006, 08:22)  Странненько. Вообще проблем нет. Это хорошо. Во первых, тем, что у кого-то всё таки оно работает, а во вторых тем, что есть шанс, что заработает и у меня  Цитата(klen @ Oct 27 2006, 08:22)  1. опции конфигурации binutils 2. опции конфигурации gcc после этого Вы собрали все 3. опции компиляции 4. опции линкера 5. опции avr-objdump Дальше будем думать На момент начала экспериментов у меня в недрах компа валялась (и валяется по сию пору по причине того, что не могу заняться вплотную удалением) версия avr-gcc-4.0.2, которой особо не пользовался, и avr-binutils-2.15 (тоже по причине трудностей с удалением). Может ли наличие этих вещей мешать ? Ну, теперь об опциях и способах конфигурирования и компиляции. Сперва я собирал binutils-2.17 и gcc-4.1.1 без dwarf-2 (мне, по идее, не очень пока важно, какая там тема с отладочной информацией, пока что stabs, что dwarf-2 - всё едино). Затем увидел проблемы с листингом и начал спрашивать тут. После этого я пытался скомпилировать gcc с поддержкой dwarf-2, для чего накатил два патча (см. выше по теме). Которые накатились. Собрал снова gcc-4.1.1 и потом, уже сегодня, binutils-2.17. Допускаю, что такой "порядок" сборки мог вызвать некие аномалии в сборке и конфигурировании обоих продуктов. Как уже сказал, удалить то, что уже собрано я не знаю как. Компиляцию и конфигурирование проводил в отдельных от исходников папках (вроде, так написано в доке на gcc было пару лет назад, больше не проверял, продолжаю действовать согласно этим сведениям). Теперь про опции: 1. binutils-2.17 1.1. конфигурирование: ../binutils-2.17/configure -v --target=avr --with-gnu-ld --with-gnu-as --quiet --enable-install-libbfd --with-dwarf2 1.2. компилирование: make -j2 1.3. установка: make install 2. gcc 2.1. конфигугрирование: ../gcc-4.1.1/configure -v --target=avr --quiet --enable-languages=c --disable-libssp --with-dwarf2 2.2. компилирование: make -j2 2.3. установка: make install Компилирование моих объектников, как и было сказано выше в этой ветке, делается так: avr-gcc -gdwarf-2 -mmcu=atmega128 -Os -g3 -I . -I /usr/local/avr/include -Wall -o file.o file.c Линкер (пишу, как вызывается линкер самим gcc, ничего не меняя): /usr/local/lib/gcc/avr/4.1.1/../../../../avr/bin/ld -m avr5 -Tdata 0x800100 -o bootstrap.elf /usr/local/lib/gcc/avr/4.1.1/../../../../avr/lib/crtm128.o -L/usr/local/lib/gcc/avr/4.1.1/avr5 -L/usr/local/lib/gcc/avr/4.1.1/../../../../avr/lib/avr5 main.o spi.o in2out.o ads1243.o error.o tables.o modbus.o interrupt.o ifADC.o misc.o memory.o uart.o -lm -lgcc -lc -lgcc Objdump: avr-objdump -h -S ./bootstrap.elf >./bootstrap.lst Цитата(klen @ Oct 27 2006, 08:22)  У меня к примеру так собирается прошивка Для меня сложны некоторые вещи (передача незнакомых мне параметров ассемблеру и прочее), потому мне несколько затруднительно оценить всю мощь Ваших конструкций  Если Вас не затруднит, гляньте в мои изыскания, может, я там просто где-то недоглядел ? Спасибо
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|