Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Собрал свежий GCC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
klen
Собрал новые сборки GCC для ARM, кому интересно качайте пробуйте, сообщайте о глюках.
Не тестилась по самые помидоры.
http://www.klen.org/Projects/Embeded-gnu-t...last_build.html
SpiritDance
А оно пофиксено на тему прологов-эпилогов в irq-функциях?
COMA
Ну вы даете!

по ссылке все написанно sad.gif
COMA
klen , ты пишешь что поправил ошибку генерации пролога.
Ты правил руками? или накладывал какой то патч?

Дело в том, что я использую скрипт Gentoo Crossdev для генерации GCC для ARM.
Возникли сомнения - исправляет ли он (скрипт) эту ошибку.
goodwin
Ни фига там неичего не написано sad.gif Имхо, все эти макромедии автору лучше убрать - на сайт никак не попадешь...
klen
Парни! Я на XTML писать не умею ohmy.gif
Я жне вебдизайнер а еммбеддер. Не бейте пианиста, он играет как умеет.

1. Баг с прологом пофиксен ручками . ПОКА работает(уже два месяца активного использования), если ктото найдет что чтото вылезло в другом месте - буду дальше искать, если не нет запощу на багзиллу. Соответствующего патча вроде нет???? Такое ащущение что все на этот баг просто забили, поскольку он уж точно год висит и никого особот не напрягает. Возможно потому что очень просто написать обертку входа и выхода из обрпботчика на асме.
2. если проблемы со флешем то вот урлы:
AVR 8.7мб
http://www.klen.org/Projects/Embeded-gnu-t...nutils-libc.rar

ARM c библиотеками 36.4 мб
http://www.klen.org/Projects/Embeded-gnu-t...ewlib1.14.0.rar

ARM для CrossWorks 9.1 мб
http://www.klen.org/Projects/Embeded-gnu-t...-CrossWorks.rar
COMA
Можешь показать конкретно где править?
Хочу свой скрипт поправить smile.gif
klen
Цитата(COMA @ Dec 5 2006, 11:16) *
Можешь показать конкретно где править?
Хочу свой скрипт поправить smile.gif



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));
}
.............................
COMA
если я правильно понял

комменитируем строчку
emit_set_insn (lr, plus_constant (lr, -4));
?
klen
Цитата(COMA @ Dec 5 2006, 11:22) *
если я правильно понял

комменитируем строчку
emit_set_insn (lr, plus_constant (lr, -4));
?

Ага, при включении -O1...-Os она как раз и отматывает регистр возврата на лишние 4 байта, в эпилоге это делается еще раз.
Сергей Борщ
Цитата(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
axle
Цитата(Сергей Борщ @ 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() и не сказалось ли на чем-нибудь другом. Патчи в багзилле более навороченные, поэтому есть сомнения. В любом случае a14.gif to klen за попытку избавить нас от этого идиотского бага.
klen
в крайних версиях врое этот гимор убрали, во всяком случе работает вообще мого по другому, переписано заново наверно
GetSmart
Вливаюсь в ряды вставших на грабли с глюком в прологах/эпилогах обработчиков прерываний. Создал было свою тему, но потом обнаружил ещё две трёхлетней давности. Вот моя
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, тоже непонятно что это.
AHTOXA
Это совсем старая тема, klen регулярно выпускает свежие сборки в другой: свежак.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.