GCC arm-none-eabi (Codesourcery) и исключения C++
Я использую Ride7/Codesourcery от Raisonance (также называемый Sourcery CodeBench Lite) с платой STM32F4, которая разрабатывает платформу HMI для "голого металла".
Я буду использовать исключения C++ в этой системе, но любое исключение, которое я выбрасываю, заканчивается ошибкой "Завершить рекурсивно", записанной в stderr.
Код для воспроизведения проблемы: (main.cpp)
int main(void)
{
try {
throw 1;
}
catch (...) {
printf("caught");
}
}
Я уже испробовал Raisonance и другие источники для разрешения и не получил никакой действенной помощи.
Потенциальная проблема / решение 1:
Я спрашивал на других форумах, и они упоминают, что мне нужно вызывать статические конструкции в моем файле сборки запуска, чтобы инициализировать таблицы раскрутки (по крайней мере, это то, о чем я думаю, что они говорят), но я понятия не имею, как это сделать.
Потенциальная проблема / решение 2
Я также обнаружил ошибку в binutils/gas, которая может быть источником моих проблем здесь ( http://sourceware.org/bugzilla/show_bug.cgi?id=13449). Я пытался создать свою собственную версию набора инструментов с помощью этого патча, но он превращается в собственный проект, но пока не увенчался успехом.
Вопрос
Нужно ли что-то делать в коде, чтобы использовать исключения C++, или это скорее всего ошибка в наборе инструментов? Если первое, пожалуйста, уточните.
1 ответ
После некоторого убеждения, которое не должно было быть необходимым, Raisonance наконец-то получил модификацию скрипта компоновщика по умолчанию, которая устранила проблему. Возможно, для меня не законно публиковать весь скрипт компоновщика, но вот знание, которое нужно знать
Добавьте это в раздел.text
*(.eh_frame)
Добавьте эти разделы (назовите YourMemory в соответствии с блоками памяти, которые вы установили в своем скрипте компоновщика. Мой был Flash)
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} >YourMemory
.ARM :
{
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >YourMemory
Убедитесь, что эта строка находится в разделе bss
*(.bss*)
Во время этого квеста я наткнулся на следующие полезные ресурсы