問題タブ [sparc]
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.
compiler-construction - スタックポインタを保存すると、出力がリダイレクトされるときにセグメンテーション違反が発生します
私はSparcコンパイラを書いています。私のテストケースの1つは正常に実行されますが、出力がファイルにリダイレクトされるとクラッシュします。
GDBを使用して、これがセグメンテーション違反の原因となる行であることがわかりました。
スタックスペースが不足していますか?どうしたんだ?出力をリダイレクトしたときにのみ発生するのはなぜですか?
window - SPARC window_overflow
この図のような 8 つのウィンドウがあるとします: http://www.sics.se/~psm/sparcwin.gif
WIM は w7 を指しており、ウィンドウ w0 にいます。
このウィンドウで、1 つのパラメーターを受け取る関数を呼び出すとします。そのため、パラメーター値を %o1 に設定しました (関数が %i0 で受信できるようにするため)。
では、呼び出しを行うと、関数は「保存」を行います。そのウィンドウ ビットの WIM は 1 であるため、window_overflow がトリガーされます。これについて私が理解したのは、ハンドラーがウィンドウ w7 (%sp) のスタック、レジスター %i1,..,%i7,%l0,..,%l7 に保存して、「戻るときに」 window_underflow でそのウィンドウを回復します。
私の質問は...ウィンドウが保存されると、w7の元の%i0、...、%i7が失われたため、w0のプログラムが呼び出した関数のパラメーターです(%o0を設定したためです。 . 呼び出す前に w0 に保存してから、「保存」フォールトを作成します)。ですから、この「システム」は意味をなさないので、何かが欠けていると思います。
別の同様の質問。w0 の私のプログラムが関数を呼び出さずに %o0,%o1,.. を「ローカル」変数として使用すると仮定すると、w7 の %i0,%i1,.. を強制終了したことさえ知らずに同じ問題が発生します。
回答: 無効なウィンドウが既にスタックに保存されていることがわかりました。そのため、「保存」が完了すると、window_overflow ハンドラーは w6 をスタックに保存します (そして WIM を w6 に設定します)。これは明らかに私の質問のすべてを説明しています。このトラップのハンドラーの例を見て、V8 では常に WIM をチェックせずに CWP をデクリメントすることを思い出せずに、自分自身を混乱させたと思います。
gcc - solaris gcc lib の質問
solaris 2.10でgccをコンパイルしました。私の質問: lib/...so と lib/sparcv9/...so ファイルの違いは何ですか?
c++ - Solaris SPARCプラットフォーム用のプロファイラー(C ++アプリケーション用)
c++アプリケーションで使用するためのSolaris10SPARCアーキテクチャ用のプロファイラはありますか?重要な場合:c++ソースのコンパイルにgccを使用しています。
ffmpeg - Solaris 10 sparc で ffmpeg をコンパイルできない
Solaris 10 sparc 用に ffmpeg 0.6.1 をコンパイルした人はいますか? 次のエラーが表示されます。
c - SPARC アセンブリの質問
ローカル レジスタ %l0 - %l7 を異なる値に設定する以外に何もしない、非常に単純なインライン アセンブリ ルーチンを C プログラムに記述したいと考えています。次の簡単なアプローチを試しました。
残念ながら、アセンブラは次のように伝えます。各命令のオペランドが不正です。どなたか、即値を SPARC アセンブラに適切に渡す方法を教えていただけないでしょうか?
本当にありがとう!
編集:クリスに感謝します。あなたが提案した変更を行いましたが、Sparc コンパイラはまだ不正なオペランドについて何かを伝えています...
c - プロセッサ レジスタ - アプリケーション変数の関連付け
私は非常に単純な問題を抱えています。%o1 と呼ばれる単一のレジスタを直接操作する (SPARC 用の) アセンブラ コードを書きたいと思います。私がしたいのは、このレジスタをゼロで初期化し、いくつかの即値でインクリメントすることだけです。問題は、C アプリケーションから %o1 に結果を出力するにはどうすればよいかということです。私が持っているスケルトンは次のようになります。
問題は、%o1 の値 (計算の最後には 6 になるはずです) を変数 a に割り当てて、コンソールに出力できるようにする方法です。
c - アセンブラで配列を指定する
アセンブリ ファイルで 512 x 32 ビット配列を指定したいのですが、これは次のようになります。
function_01 でやろうとしているのは、配列の 4 番目の要素にアクセスすることです。ただし、上記のアセンブリを SPARC アーキテクチャ用にコンパイルしようとすると、次のエラーが発生します。
このエラーから何をすべきかわかりません。配列が大きすぎるということですか、それともコードに何か問題がありましたか?
gdb - SPARCおよびHP-UXのリーフ機能
HP-UXで逆アセンブルされたPhrackの記事を読んでいたところです。HP-UXとSPARCで可能な2つのクラスの関数があることを読みました。リーフおよび非リーフ関数。以下は私がここから取った分解のセクションです。
通常、関数が呼び出されると、関数の実行が終了すると、プログラムが制御をどこに戻すかをプログラムが認識できるように、リターンアドレスがスタックにプッシュされます。これらの葉の機能の場合、それはどのように機能しますか?
私はHP-UX/SPARCマシンにアクセスできないので、これを自分で試す方法はありません(同じ理由で、この場合のアセンブリもよくわかりません)。
この場合、制御が呼び出し先関数にどのように戻るかを誰かが説明できますか?