Raisonance の Ride7/Codesourcery (別名 Sourcery CodeBench Lite) を、ベアメタル HMI プラットフォームを開発する STM32F4 ボードと共に使用しています。
このシステムでは 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++ 例外を利用するには、コードで何かを行う必要がありますか? それともツールチェーンのバグである可能性がありますか? 前者の場合、詳しく教えてください。