Author: arty Date: Sun Nov 4 14:57:37 2007 New Revision: 30105
URL: http://svn.reactos.org/svn/reactos?rev=30105&view=rev Log: Do this properly now that I understand exception chaining a bit better. The exception chain on x86 is at fs:0. We use r13 to simulate the same, so we chain exceptions at 0(13)
Modified: trunk/reactos/lib/pseh/powerpc/framebased.S
Modified: trunk/reactos/lib/pseh/powerpc/framebased.S URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/pseh/powerpc/framebased... ============================================================================== --- trunk/reactos/lib/pseh/powerpc/framebased.S (original) +++ trunk/reactos/lib/pseh/powerpc/framebased.S Sun Nov 4 14:57:37 2007 @@ -20,41 +20,28 @@
.text
-__readfsdword: - add 7,13,3 - lwz 3,0(7) - blr - -__writefsdword: - add 7,13,3 - stw 3,0(7) - blr - .globl _SEHCleanHandlerEnvironment _SEHCleanHandlerEnvironment: blr
.globl _SEHCurrentRegistration _SEHCurrentRegistration: - xor 3,0,0 - bl __readfsdword + lwz 3,0(13) blr
+ // R3: Frame to store in .globl _SEHRegisterFrame _SEHRegisterFrame: - xor 3,0,0 - bl __readfsdword # Get [fs:0] - lwz 4,0(1) # Get next stack frame into r4 - stw 3,0(1) # put [fs:0] into old stack pos - xor 3,0,0 - bl __writefsdword # put old stack frame into [fs:0] completing - blr # the chain and return + lwz 4,0(13) + stw 3,0(13) + stw 4,0(3) + blr
.globl _SEHUnregisterFrame _SEHUnregisterFrame: - xor 3,0,0 - bl __readfsdword # Get old next frame ptr - stw 3,0(1) # Reset old stack frame + lwz 3,0(13) + lwz 3,0(3) + stw 3,0(13) blr
.globl _SEHGlobalUnwind