2402409_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2402409_ja-JP

2402409_ja-JP

GHSコンパイラを使用してS32K3上でDumpCallStackの正しいフレームポインタ(FP)を取得するにはどうすればよいですか?

こんにちは、皆さん

私はGreen Hills Software(GHS)コンパイラを使ってS32K3 MCUを開発しており、DumpCallStack関数を実装しています。

フレームポインタ(FP)を取得するために、以下のインラインアセンブリを使用しています。

__asm volatile ("mov %0, r7" : "=r" (locals.fp));
しかし、locals.fp の値は 0x02B1 であり、これは有効なフレームポインタではないようです。この設定はアラインされておらず、有効なスタック位置を指ささないため、コールスタックを正しくアンワイルできません。

私の質問は以下のとおりです。

S32K3(Arm Cortex-M7)のGHSコンパイラを使う場合、現在のフレームポインタを取得する正しい方法は何でしょうか?
GHSコンパイラは常にR7をフレームポインタとして使うのでしょうか?それとも最適化レベルに応じてフレームポインタを省略したり、別のレジスタを使うことは可能でしょうか?
スタックアンワインドのためにフレームポインタを保持するために、有効にしなければならないコンパイラオプションはありますか?
インラインアセンブリを使用する代わりに、フレームポインタを取得するための推奨されるGHS固有のAPIまたは組み込み関数はありますか?
S32K3上でGHSコンパイラを使用してスタックアンワインディングまたはDumpCallStack関数を実装した経験のある方がいらっしゃいましたら、ご指導やサンプルコードをいただけると幸いです。

ご回答をお待ちしています。

Re: How to obtain the correct Frame Pointer (FP) for DumpCallStack on S32K3 using the GHS compiler?

こんにちは、

R7が常にフレームポインタとして使用されるとは限りません。GHSのバージョン、最適化レベル、コンパイラオプションによっては、コンパイラが異なるレジスタを使用したり、フレームポインタを完全に省略してR7を汎用レジスタとして使用したりする場合があります。値0x02B1は、R7がビルド内でフレームポインタとして機能していない可能性を示唆しています。

生成されたアセンブリを確認し、GHSがフレームレコードを全く作成していないかどうかを確認してください。フレームポインタが有効になっている場合、フレームポインタを保存/復元する一貫した関数プロローグが表示されるはずです。そうでない場合、R7/R11に基づくスタックアンワインドは信頼できません。

これは主にコンパイラ固有の質問なので、Green Hills Softwareのサポートに連絡することもおすすめします。彼らは以下の点でアドバイスを提供できます:

  • GHSがターゲット/構成のフレームポインタとしてR7、R11、または他のレジスタを使用するかどうか。
  • どのコンパイラオプションがフレームポインタを保持しますか?
  • 現在のフレームポインタを取得するための推奨される組み込み関数またはAPIがあるかどうか。
  • GHSを用いたコールスタックアンワインド実装の推奨方法。

彼らはあなたのコンパイラのバージョンや設定に特化したガイダンスを提供するのに最適です。

BR、ペトル

Re: How to obtain the correct Frame Pointer (FP) for DumpCallStack on S32K3 using the GHS compiler?もちろん
タグ(1)
評価なし
バージョン履歴
最終更新日:
木曜日
更新者: