这个堆栈检查PPC组件在做什么?

时间:2010-12-17 06:37:21

标签: assembly stack powerpc

我有以下自包含功能(即它分支到使用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

有人说过,我正在使用IBM的this文档作为我的PPC程序集参考。这被认为是权威来源还是其他我应该知道的?

1 个答案:

答案 0 :(得分:4)

我对PPC一点都不熟悉,但这是我的猜测:

对我来说看起来像alloca_probe()使用页面的步骤触及堆栈的代码,以便触发PAGE_GUARD异常。 (请原谅我的x86语言:))

它在大量堆栈分配后使用(也可以由alloca完成)。堆栈通常没有为分配的堆栈保留所有内存,最后一个实际加载的页面有一个特殊的标志PAGE_GUARD,它触发了操作系统捕获的硬件异常,因此它可以提交更多的页面堆栈。正常使用堆栈(使用push / pop)时,无法绕过此页面。但是,对于较大的alloc,在安全使用内存之前需要调用alloca_probe()

相关问题