Перейти к содержанию
    

Собрал свежий GCC

Собрал новые сборки GCC для ARM, кому интересно качайте пробуйте, сообщайте о глюках.

Не тестилась по самые помидоры.

http://www.klen.org/Projects/Embeded-gnu-t...last_build.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А оно пофиксено на тему прологов-эпилогов в irq-функциях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

klen , ты пишешь что поправил ошибку генерации пролога.

Ты правил руками? или накладывал какой то патч?

 

Дело в том, что я использую скрипт Gentoo Crossdev для генерации GCC для ARM.

Возникли сомнения - исправляет ли он (скрипт) эту ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ни фига там неичего не написано :( Имхо, все эти макромедии автору лучше убрать - на сайт никак не попадешь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Парни! Я на XTML писать не умею :ohmy:

Я жне вебдизайнер а еммбеддер. Не бейте пианиста, он играет как умеет.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можешь показать конкретно где править?

Хочу свой скрипт поправить :)

 

 

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));

}

.............................

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если я правильно понял

 

комменитируем строчку

emit_set_insn (lr, plus_constant (lr, -4));

?

Ага, при включении -O1...-Os она как раз и отматывает регистр возврата на лишние 4 байта, в эпилоге это делается еще раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Баг с прологом пофиксен ручками . ПОКА работает(уже два месяца активного использования), если ктото найдет что чтото вылезло в другом месте - буду дальше искать, если не нет запощу на багзиллу. Соответствующего патча вроде нет???? Такое ащущение что все на этот баг просто забили, поскольку он уж точно год висит и никого особот не напрягает. Возможно потому что очень просто написать обертку входа и выхода из обрпботчика на асме.
Чем закончилась эта эпопея (имею ввиду бугзилпу)? И как обычно проистекает процесс от "запощу на бугзиллу" до "появилось в официальных исходниках"?
Ага, при включении -O1...-Os она как раз и отматывает регистр возврата на лишние 4 байта, в эпилоге это делается еще раз.
В каком-то из обсуждений проскакивало, что этот баг проявляется только при генерации thumb-intrwork кода. Я получил его в полном объеме на сборке yagarto в ARM-коде без interwork при любой оптимизации, в том числе и при -o0. Сейчас буду выкачивать сборку имени klenа. klen, вы в каких режимах проверяли свою сборку на предмет этого бага?

 

P.S. эту ветку тоже надо двигать в форум по GNU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В каком-то из обсуждений проскакивало, что этот баг проявляется только при генерации thumb-intrwork кода. Я получил его в полном объеме на сборке yagarto в ARM-коде без interwork при любой оптимизации, в том числе и при -o0.

Про то, что баг появляется только с флагом -mthumb-interwork писал я. У меня это явление наблюдалось стабильно только с этим флагом. Сейчас во всех проектах использую свою сборку arm-elf-gcc (без патча) и только код ARM (благо памяти хватает) - никаких проблем ни разу не наблюдал. Да и в сети находил упоминания, что баг появляется только с -mthumb-interwork. Но возможно это и не так.

 

В багзилле я находил два сообщения на эту тему(1, 2). И в том и в другом предлагают патчи (патча от klen там нет). Но результаты не ясны. Вроде бы пока баг живее всех живых.

 

Интересно было бы узнать, помогло ли удаление вызова emit_set_insn() и не сказалось ли на чем-нибудь другом. Патчи в багзилле более навороченные, поэтому есть сомнения. В любом случае :a14: to klen за попытку избавить нас от этого идиотского бага.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в крайних версиях врое этот гимор убрали, во всяком случе работает вообще мого по другому, переписано заново наверно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вливаюсь в ряды вставших на грабли с глюком в прологах/эпилогах обработчиков прерываний. Создал было свою тему, но потом обнаружил ещё две трёхлетней давности. Вот моя

http://electronix.ru/forum/index.php?showtopic=67407

 

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, тоже непонятно что это.

post-16753-1253199772_thumb.jpg

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это совсем старая тема, klen регулярно выпускает свежие сборки в другой: свежак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...