問題タブ [powerpc]

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 投票する
3 に答える
4140 参照

silverlight - PowerPC Mac のムーンライト

バージョン 1.0 以降、Silverlight は PowerPC Mac のサポートを停止しました。Moonlight 2.0 は PowerPC Mac で動作しますか?

私たちは、次世代の製品を作成することを検討しており、Silverlight を検討しています。しかし、既存の顧客基盤のために、現時点で PowerPC Mac ユーザーを切り離す余裕はなく、並行開発は避けたいと考えています。

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

linux - Open Firmware Device Trees の概要/リファレンス マニュアル

組み込み PowerPC ボード用のドライバーをセットアップしようとしていますが、現在これを行う正しい方法は、OpenFirmware Device Tree データ構造 (.dts ファイルからコンパイルされた .dtb ファイル) を使用することです。ツリーの作成は非常に簡単ですが、デバイス ドライバーにそのノードとその中のデータを見つけるにはどうすればよいでしょうか? 私はこれに関する適切な参考文献を見つけることができず、「Linux Device Drivers」のような本は x86 の領域に深く入り込みすぎており、主に Power Architecture ベースのマシンに関連するデバイス ツリー (Linux カーネルの arch powerpc用語)。

0 投票する
2 に答える
1136 参照

caching - PowerPC 750 のデータ キャッシュをフラッシュしようとしています

ライト バック モードを使用する場合、PowerPC750 のデータ キャッシュをオフにする前にフラッシュするルーチンを作成しています。

フラッシュ ルーチンを含むキャッシュのプログラミングに関するIBM アプリケーション ノートを見つけましたが、サンプル コードに混乱しています。例の間違いかもしれませんが、確認してみようと思いました。リスト 2 には、「次のブロックに移動する」という命令を含む 2 つのループがあります。次のブロックへの移動は、現在のアドレスに 0x10 を追加することによって実現されます。キャッシュ ラインは 32 バイト幅だと思うので、これは 0x20 (32) の追加であると予想していました。誰かが私の考えを肯定または否定できますか?!

0 投票する
17 に答える
13652 参照

c - CでNULLポインターを逆参照しても、プログラムがクラッシュしないようにするにはどうすればよいですか?

コードのクラッシュを分析するには、実際のCの第一人者の助けが必要です。クラッシュを修正するためではありません。簡単に修正できますが、完全に不可能に思えるので、修正する前に、このクラッシュがどのように発生する可能性があるかを理解したいと思います。

このクラッシュはお客様のマシンでのみ発生し、このユーザーのデータベースのコピーを取得できないため、ローカルで再現することはできません(したがって、デバッガーを使用してコードをステップ実行することはできません)。私の会社では、コードの数行を変更してこの顧客のカスタムビルドを作成することもできません(したがって、printf行を追加してコードを再度実行させることはできません)。もちろん、顧客はデバッグシンボル。言い換えれば、私のデバグ能力は非常に限られています。それでも、クラッシュを突き止めて、デバッグ情報を取得することができました。しかし、その情報を見てからコードを見ると、プログラムフローが問題の行に到達する方法を理解できません。その行に到達するずっと前に、コードがクラッシュしているはずです。私はここで完全に迷子になっています。

関連するコードから始めましょう。それは非常に小さなコードです:

もう終わりです。strlcpyでクラッシュします。実行時にstrlcpyが実際にどのように呼び出されるかさえわかります。strlcpyは、実際には次のパラメーターで呼び出されます。

これを知っていると、strlcpyがクラッシュする理由はかなり明白です。NULLポインタから1文字を読み取ろうとしますが、もちろんクラッシュします。また、最後のパラメーターの値は1であるため、元の長さは0である必要があります。私のコードには明らかにバグがあり、名前データがNULLであるかどうかをチェックできません。私はこれを修正できます、問題ありません。

私の質問は
、そもそもこのコードがどのようにしてstrlcpyに到達できるのかということです。
このコードがifステートメントでクラッシュしないのはなぜですか?

私は自分のマシンでローカルにそれを試しました:

このコードにifステートメントが渡されることはありません。ifステートメントでクラッシュしますが、これは間違いなく予想されます。

それで、name-> dataが本当にNULLの場合、最初のコードがクラッシュせずにそのifステートメントを渡すことができる理由を誰かが考えることができますか?これは私には全く不思議です。決定論的ではないようです。

重要な追加情報:
2つのコメントの間のコードは本当に完全であり、何も残されていません。さらに、アプリケーションはシングルスレッドであるため、バックグラウンドでメモリを予期せず変更する可能性のあるスレッドは他にありません。これが発生するプラットフォームは、PPC CPU(G4、何らかの役割を果たす可能性がある場合)です。そして、誰かが「種類」について疑問に思う場合、これは「情報」に「種類」という名前の「ユニオン」が含まれ、名前が再び構造体であるためです(種類はユニオンであり、可能なすべてのユニオン値は異なるタイプの構造体です)。しかし、これはすべてここでは実際には重要ではありません。

ここでのアイデアに感謝します。単なる理論ではなく、この理論がお客様に本当に当てはまることを確認できる方法があれば、さらに感謝しています。

解決

私はすでに正しい答えを受け入れましたが、誰かがGoogleでこの質問を見つけた場合に備えて、実際に起こったことは次のとおりです。

ポインタは、すでに解放されているメモリを指しています。メモリを解放しても、すべてがゼロになったり、プロセスがメモリを一度にシステムに戻したりすることはありません。そのため、メモリが誤って解放されたとしても、正しい値が含まれていました。「 ifcheck 」を実行した時点では、問題のポインタはNULLではありません。

そのチェックの後、mallocを呼び出して新しいメモリを割り当てます。ここでmallocが正確に何をするかはわかりませんが、mallocまたはfreeを呼び出すたびに、プロセスの仮想アドレス空間のすべての動的メモリに広範囲にわたる結果が生じる可能性があります。malloc呼び出しの後、ポインターは実際にはNULLです。どういうわけか、malloc(またはmallocが使用するシステムコール)は、ポインタ自体が配置されている(ポインタが指すデータではなく、ポインタ自体がダイナミックメモリにある)すでに解放されているメモリをゼロにします。そのメモリをゼロにすると、ポインタの値は0x0になります。これは、私のシステムではNULLに等しく、strlcpyが呼び出されると、もちろんクラッシュします。

したがって、この奇妙な動作を引き起こす本当のバグは、私のコードのまったく別の場所にありました。決して忘れないでください:解放されたメモリはその値を保持しますが、それはどのくらいの間あなたのコントロールを超えています。アプリにすでに解放されたメモリにアクセスするというメモリのバグがあるかどうかを確認するには、解放される前に解放されたメモリが常にゼロになっていることを確認してください。OS Xでは、実行時に環境変数を設定することでこれを行うことができます(何も再コンパイルする必要はありません)。もちろん、これはプログラムをかなり遅くしますが、あなたはそれらのバグをずっと早く捕まえるでしょう。

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

cross-compiling - PPC 405 ターゲット用の Eclipse での Windows でのクロスコンパイル

PPC 405 アーキテクチャのマシンにデプロイされるコードをビルド、開発、およびクロスコンパイルするために、MinGW または Cygwin で Eclipse をセットアップする方法を知っている人はいますか? コンパイラに適切なフラグを設定するのと同じくらい簡単ですか、それとももっと複雑なものがありますか? PPC プロセッサで Linux を実行する組み込みシステム用に Windows で開発しています。正しい方向への助けや指針を心から感謝します。

0 投票する
9 に答える
4101 参照

assembly - 最も簡単な命令セットを持つ 32 ビット/64 ビット CPU アーキテクチャは?

32 ビットの PowerPC アセンブリ コードを扱うのは非常に快適ですが、x86 コードを理解しようとすると完全に途方に暮れます。ARM、MIPS、Sparc などの他の一般的なアーキテクチャには、x86 命令セットよりも簡単なものはありますか?

0 投票する
3 に答える
1984 参照

assembly - PowerPC で外部例外を処理する際の r1 スタック ポインターの使用

EABI 組み込み PowerPC アプリケーションで 0x500 外部/デクリメンタ例外を処理するアセンブラ ルーチンを作成しています。

0x500 ベクトル ポイントから呼び出されたアセンブラー ルーチンで、'C' のハンドラー関数に分岐する前に、コンテキスト保存レジスターにメモリを使用したいと考えています。

i) 例外モデルは、例外ハンドラが実行されるまでに前の命令が終了することを保証し、かつ ii) 呼び出し規約は、解放された新しいスタック領域を使用する前に、新しい関数に入ると最初にスタック ポインタ (r1) を更新するように見えるためです。それを移動することによって(そしてスタックポインタを関数の最後にあった場所に戻します)

r1 を安全に使用して、例外処理ルーチンの通常のスタックに余裕を持たせることができるように思えます。ただし、明らかに呼び出し規約を順守し、スタックを見つけた方法に戻し、SRR0 と SRR1 が確実に使用されていることを確認する必要があります。無修正。

処理でスタックを使用する例外を入れ子にすることは許可しません (ただし、実際にこの方法を使用しても問題があるかどうかはわかりません)。

これは賢明なアプローチだと思いますか、それとも例外処理に別のスタックを使用する必要がありますか? - これは、それ自体の問題をもたらす可能性があると考えています。

0 投票する
3 に答える
1346 参照

assembly - MTMSREE PowerPC opとは何ですか?

MSVCでコンパイルされた(Xenon)PowerPC実行可能ファイルのコアダンプを見ています。私がデバッグしている関数には、MSVC逆アセンブラが呼び出すopがありますmtmsree r13mtmsreePPCのIBMドキュメントには含まれていません。この操作は何をしますか?

それはすぐ後に続き、mfmsr明らかに何かをマシン状態レジスタに移動していますが、その接尾辞が何を意味するのかわかりませんee。これは、PPCドキュメントが別の何かを呼び出すopのある種のかわいいMicrosoftニックネームである必要があります。

0 投票する
2 に答える
2720 参照

boost - VxWorks 6.4 用の Boost 1.40 のクロスコンパイル

Boost (特に boost::thread と boost::asio) を使用するプロジェクトを VxWorks に移行しようとしています。

vxworks gnu コンパイラを使用してコンパイルするためのブーストが得られません。これを可能にすることを目的としたブースト トラックのパッチを見たので、これは問題にはならないと考えました。また、vxworks コンパイラは gnu ツール チェーンの一部であるため、次の指示に従うことができるはずです。クロス コンパイルのブースト ドキュメント。

私は ppc vxworks 用の Windows を構築しています。

ブースト ドキュメントで指定されているように user-config.jam ファイルを変更し、bjam に target-os=linux オプションを使用しましたが、bjam はコンパイルする前にハングしているように見えます。(-n オプションを使用して呼び出すことにより) bjam によって発行されたコマンドを詳しく調べると、boost::thread の win32 ファイルを使用してコンパイルしようとしていることがわかります。vxworks は pthread を使用するため、これは正しくありません。

私の bjam コマンド: .\bjam --with-thread toolset=gcc-ppc target-os=linuxgcc-ppc は、g++ppc vxworks クロス コンパイラを指すように user-config で設定されます。

私は何を間違っていますか?私は文書を文字どおりにフォローしたと信じています。