|
|
  |
Собрал свежий GCC, bu2.17 + arm-elf-gcc4.2.0-20061114 + newlib1.14.0 |
|
|
|
Dec 5 2006, 11:13
|

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

|
Парни! Я на XTML писать не умею Я жне вебдизайнер а еммбеддер. Не бейте пианиста, он играет как умеет. 1. Баг с прологом пофиксен ручками . ПОКА работает(уже два месяца активного использования), если ктото найдет что чтото вылезло в другом месте - буду дальше искать, если не нет запощу на багзиллу. Соответствующего патча вроде нет???? Такое ащущение что все на этот баг просто забили, поскольку он уж точно год висит и никого особот не напрягает. Возможно потому что очень просто написать обертку входа и выхода из обрпботчика на асме. 2. если проблемы со флешем то вот урлы: AVR 8.7мб http://www.klen.org/Projects/Embeded-gnu-t...nutils-libc.rarARM c библиотеками 36.4 мб http://www.klen.org/Projects/Embeded-gnu-t...ewlib1.14.0.rarARM для CrossWorks 9.1 мб http://www.klen.org/Projects/Embeded-gnu-t...-CrossWorks.rar
|
|
|
|
|
Dec 5 2006, 11:19
|

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

|
Цитата(COMA @ Dec 5 2006, 11:16)  Можешь показать конкретно где править? Хочу свой скрипт поправить  arm.c: ................ /* Generate the prologue instructions for entry into an ARM function. */ void arm_expand_prologue (void) { .................. /* If this is an interrupt service routine, and the link register is going to be pushed, and we are not creating a stack frame, (which would involve an extra push of IP and a pop in the epilogue) subtracting four from LR now will mean that the function return can be done with a single instruction. */ if ((func_type == ARM_FT_ISR || func_type == ARM_FT_FIQ) && (live_regs_mask & (1 << LR_REGNUM)) != 0 && ! frame_pointer_needed) { rtx lr = gen_rtx_REG (SImode, LR_REGNUM); //emit_set_insn (lr, plus_constant (lr, -4)); } .............................
|
|
|
|
|
Mar 30 2008, 21:21
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(klen @ Dec 5 2006, 14:13)  1. Баг с прологом пофиксен ручками . ПОКА работает(уже два месяца активного использования), если ктото найдет что чтото вылезло в другом месте - буду дальше искать, если не нет запощу на багзиллу. Соответствующего патча вроде нет???? Такое ащущение что все на этот баг просто забили, поскольку он уж точно год висит и никого особот не напрягает. Возможно потому что очень просто написать обертку входа и выхода из обрпботчика на асме. Чем закончилась эта эпопея (имею ввиду бугзилпу)? И как обычно проистекает процесс от "запощу на бугзиллу" до "появилось в официальных исходниках"? Цитата(klen @ Dec 5 2006, 14:30)  Ага, при включении -O1...-Os она как раз и отматывает регистр возврата на лишние 4 байта, в эпилоге это делается еще раз. В каком-то из обсуждений проскакивало, что этот баг проявляется только при генерации thumb-intrwork кода. Я получил его в полном объеме на сборке yagarto в ARM-коде без interwork при любой оптимизации, в том числе и при -o0. Сейчас буду выкачивать сборку имени klenа. klen, вы в каких режимах проверяли свою сборку на предмет этого бага? P.S. эту ветку тоже надо двигать в форум по GNU
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 31 2008, 05:01
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167

|
Цитата(Сергей Борщ @ Mar 31 2008, 04:21)  В каком-то из обсуждений проскакивало, что этот баг проявляется только при генерации thumb-intrwork кода. Я получил его в полном объеме на сборке yagarto в ARM-коде без interwork при любой оптимизации, в том числе и при -o0. Про то, что баг появляется только с флагом -mthumb-interwork писал я. У меня это явление наблюдалось стабильно только с этим флагом. Сейчас во всех проектах использую свою сборку arm-elf-gcc (без патча) и только код ARM (благо памяти хватает) - никаких проблем ни разу не наблюдал. Да и в сети находил упоминания, что баг появляется только с -mthumb-interwork. Но возможно это и не так. В багзилле я находил два сообщения на эту тему( 1, 2). И в том и в другом предлагают патчи (патча от klen там нет). Но результаты не ясны. Вроде бы пока баг живее всех живых. Интересно было бы узнать, помогло ли удаление вызова emit_set_insn() и не сказалось ли на чем-нибудь другом. Патчи в багзилле более навороченные, поэтому есть сомнения. В любом случае  to klen за попытку избавить нас от этого идиотского бага.
|
|
|
|
|
Sep 17 2009, 15:07
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Вливаюсь в ряды вставших на грабли с глюком в прологах/эпилогах обработчиков прерываний. Создал было свою тему, но потом обнаружил ещё две трёхлетней давности. Вот моя http://electronix.ru/forum/index.php?showtopic=67407Цитата(klen @ Dec 5 2006, 17:13)  1. Баг с прологом пофиксен ручками . ПОКА работает(уже два месяца активного использования), если ктото найдет что чтото вылезло в другом месте - буду дальше искать, если не нет запощу на багзиллу. Соответствующего патча вроде нет???? Такое ащущение что все на этот баг просто забили, поскольку он уж точно год висит и никого особот не напрягает. Возможно потому что очень просто написать обертку входа и выхода из обрпботчика на асме. Я бы не сказал, что этот баг не напрягает. Обёртку написать конечно просто - одна асм-команда пролог и две команды эпилог. Только нет гарантии правильной работы. Вот мой пример. Код void AdcIntr() __attribute__((naked)); ... void AdcIntr() // обработчик прерывания АЦП { // asm("LDR SP, =(NEW_FIQ_STACK+128)"); // временно из-за проблем со стеком FIQ asm("STMDB SP!,{R0-R7,LR}"); // пролог для FIQ ... // VICVectAddr = 0; // для FIQ не нужна asm( "LDMIA SP!,{R0-R7,LR} \n" // эпиолог для FIQ "SUBS PC,LR,#4 "); } Тестировал на разных уровнях оптимизации. На "none" вылетает в Data Abort. Залез а дизасм, читаю - оказывается атрибут "naked" выбрасывает не только сохранение/восстановление регистров, но и резервирование в стеке переменных, и даже (!) копирование SP в R11 в моём случае (видимо для работы со стековыми переменными). Interworking Arm/Thumb включён, но весь код написан на Arm. Проблеме уже 5 лет и никто не "чешется". CW продолжает использовать очередное гуано в своих студиях. Забыл указать, что оригинальный компилятор в CW 1.7. build 9 не менял на написанный klen-ом, пока не успел, пока камень в огород компилятора из комплекта CW. А как узнать версию конкретно cc1.exe не понял. Там ещё есть файл cc1plus.exe, тоже непонятно что это.
Сообщение отредактировал GetSmart - Sep 17 2009, 15:26
Эскизы прикрепленных изображений
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|