問題タブ [arc-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
668 参照

c - シグナル ハンドラー コンテキストから ARC プラットフォームのトレースを取得する

SIGSEGVプログラムが終了する前に、バック トレースをキャッチしてログに出力したいと考えています。これは、後でクラッシュを分析するためです。複数のプラットフォームで動作するソフトウェアに取り組んでいます。backtrace()x86 プラットフォームでは、glibc関数を使用してこれを簡単に実行できます。ただし、MIPS および ARC プラットフォームでは同じことができません。ここで説明されているように、MIPS アーキテクチャのバック トレースを出力できます。

ARCプラットフォームでも同様のことをしたいと思っています。同様の詳細をどこで取得できるかについて、誰かがいくつかのデータポイントを提供できれば、非常に役立ちます.

編集:

いくつかの調査の結果、関数呼び出し用の ARC プラットフォームでは、スタックが一度に割り当てられるのではなく、部分的に割り当てられることがわかりました。(間違っていたら訂正してください。私はオブジェクト ダンプを調べて、これを理解しました。) したがって、この場合、MIPS とは対照的に、バイナリ コードの解析を行うのは難しいと思います。

別の方法として、インライン アセンブリを Cで記述し、スタック ポインター、フレーム ポインター、分岐リンク レジスタの内容 (点滅) を取得してから、スタックとフレーム サイズを使用してスタックをアンワインドし、各フレームで点滅の値を出力する方法があります。しかし、私はフレームサイズを見つけることができません。

FP、SP、BLINK を取得するサンプル コードを次に示します。

はい、これは良いコーディングではありません! 私は多くの仮定を立てました。しかし、私にとっては、私のボードで動作している限り問題ありません。:)

どんな助けでも大歓迎です。ARC gcc に関する別のリファレンスを次に示します。