Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

PSoC® Creator™ 3.1 GCC リンク タイム オプティマイゼーション (LTO) 機能における既知の問題 - KBA97708 - Community Translated (JA)

PSoC® Creator™ 3.1 GCC リンク タイム オプティマイゼーション (LTO) 機能における既知の問題 - KBA97708 - Community Translated (JA)

SivaK_96
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by  Motoo Tanaka        Version: *A

Translation - English: Known Issues with GCC Link Time Optimization (LTO) Feature in PSoC ® Creator™ 3.1 - KBA97708

質問:

PSoC Creator プロジェクトで GCC LTO が機能しないのはなぜですか?

回答:

PSoC Creator (ヴァージョン 3.0およびそれ以降) に含まれている GCC は下記の説明のように GCC LTO 機能に関する問題の影響を受けやすいことが知られています。

デザインが GCC LTO を使用しているのかを確認する方法は?

  • PSoC Creator 3.1 で GCC ツールチェーンを使用していて、Build Settings ダイアログで下記の設定を行っている場合、問題が発生する可能性があります:

    Compiler > Optimization Link Time Optimization が “True”に設定されている 

    Linker > OptimizationOptimization Level が “None”以外に設定されている。

    注意:これらの設定は問題の発生を回避するために、PSoC Creator 3.2 からは削除されています。

  • どのヴァージョンであっても PSoC Creator を GCC ツールチェーンで使用していて、Build Settings ダイアログの Compiler または Linker > Command Line > Custom Flags でコマンド引数 -flto を手動で入力することにより、LTO を有効にしている場合、問題が発生する可能性があります。

問題 1 - GCC リンカエラー :  Referenced Symbol Defined in Discarded Section

デザインで GCC LTO が有効に設定されていると、リンカ(Linker)がデザインに誤った最適化を行う可能性があります。この場合下記のようなリンカエラーが発生します:

`_sbrk' referenced in section `.text._sbrk_r' of <path>/arm-none-eabi/lib/armv6-m\libg_s.a(lib_a-sbrkr.o): defined in discarded section `.text' of .\CortexM0\ARM_GCC_484\Release\Cm0Start.o (symbol from plugin)

注意:例え現状でデザインが問題なくコンパイルされていても、一見無関係な変更を行うことで問題が発生してしまう場合があります。

合わせて https://answers.launchpad.net/gcc-arm-embedded/+question/261316 もご参照ください。

問題 2 - PSoC 4/ PSoC 5LP 初期化時のハードフォールト

PSoC 4 または PSOC 5LP ファミリのデバイスを使用したデザインで GCC LTO を有効にしていると、CPU が初期化時にハードフォールトを発生する可能性があります。

これはクロスモジュール インラインと cy_boot コンポーネント 4.20 またはそれ以前のヴァージョンの ISR のリマッピングの衝突が原因です。

この問題を解決するには PSoC Creator 3.2 では cy_boot コンポーネントをヴァージョン 5.0 にアップデートしてください。

PSoC Creator 3.1 またはそれ以前のヴァージョンでこの問題を解決するのには、Generated_Source/<PSOC4 / PSoC5>/cy_boot/Cm0Start.c ファイルの LTO を無効にしてください。Workspace Explorer でこのファイルを右クリックして、Compiler の Link Time Optimization 設定を無効にしてください;“デザインが GCC LTO を使用しているのかを確認する方法は?”参照。

0 件の賞賛
155 件の閲覧回数
寄稿者