我正在编写一个汇编程序来处理 EABI 嵌入式 PowerPC 应用程序中的 0x500 外部/递减器异常。
在从 0x500 向量点调用的汇编程序例程中,我想在分支到“C”中的处理函数之前使用一些内存来上下文保存寄存器。
因为 i) 异常模型保证前面的指令将在异常处理程序运行时完成并且 ii) 调用约定似乎在进入新函数时首先更新堆栈指针 (r1),然后再使用释放的新堆栈空间通过移动它(并将堆栈指针移回函数末尾的最后一个位置)
在我看来,我可以安全地使用 r1 在异常处理例程中的正常堆栈上为自己留出更多空间,前提是我显然遵守调用约定并将堆栈放回我找到它的方式并确保 SRR0 和 SRR1 是未修改。
我不会允许在处理过程中使用堆栈的异常嵌套(尽管实际上使用这种方法我不确定是否会出现问题)。
您认为这是一种明智的方法,还是应该使用单独的堆栈进行异常处理?- 我认为这可能会带来它自己的问题。