2

私は次の自己完結型関数を持っています (つまり、 using に分岐していbl CheckStackFuncます) が、その目的がわかりません。PowerPC アセンブリに詳しい人が手を貸してくれませんか?

_CheckStackFunc:
    neg     %r11, %r12
    addi    %r0, %r11, 0xFFF
    srawi.  %r0, %r0, 0xC
    blelr
    mr      %r11, %sp
    mtctr   %r0
loc_10176B0C:                           
    lwzu    %r0, -0x1000(%r11)
    bdnz    loc_10176B0C
    blr

そうは言っても、私はPPC アセンブリーのリファレンスとして IBM のこのドキュメントを使用しています。これは決定的なソースと見なされますか、それとも他に知っておくべきことがありますか?

4

1 に答える 1

4

私は PPC についてまったく詳しくありませんが、私の推測では次のようになります。

私にはそう見えalloca_probe()ます。例外をトリガーするために、ページのステップでスタックに触れるコード。PAGE_GUARD(私のx86言語を許してください:))

これは、大きなスタック割り当ての後に使用されます (これは によっても実行できますalloca)。スタックには、通常、スタックに割り当てられたすべてのメモリが予約されているわけではありません。最後に実際にロードされたページには、PAGE_GUARDOS によってキャッチされるハードウェア例外をトリガーする特別なフラグがあり、より多くのページをスタックにコミットできます。スタックが通常 (プッシュ/ポップ付き) に使用される場合、このページはバイパスできません。ただし、大きな割り当ての場合は、alloca_probe()メモリを安全に使用する前に を呼び出す必要があります。

于 2010-12-17T06:52:39.400 に答える