From f739268bbbcfa55bb3bb194d9e50b2d530f001db Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Thu, 3 Jun 2004 22:19:10 +0000 Subject: [PATCH] Fixes for Borland C++ compilation, and one variable is now qualified "volatile" to disable dangerous optimizations svn path=/trunk/; revision=9603 --- reactos/include/pseh/framebased.h | 2 +- reactos/lib/pseh/framebased.c | 4 ++++ reactos/lib/pseh/i386/framebased.asm | 5 +++-- reactos/lib/pseh/i386/setjmp.asm | 2 ++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/reactos/include/pseh/framebased.h b/reactos/include/pseh/framebased.h index 3e7c79ec291..c24d7c319a7 100644 --- a/reactos/include/pseh/framebased.h +++ b/reactos/include/pseh/framebased.h @@ -99,7 +99,7 @@ static __declspec(noreturn) void __stdcall _SEHCompilerSpecificHandler }; \ \ _SEHFrame_t _SEHFrame; \ - _SEHPortableFrame_t * _SEHPortableFrame; \ + volatile _SEHPortableFrame_t * _SEHPortableFrame; \ \ _SEHFrame.SEH_Header.SPF_Handlers = &_SEHHandlers; \ \ diff --git a/reactos/lib/pseh/framebased.c b/reactos/lib/pseh/framebased.c index 006a7f3fd9c..6393bba5f28 100644 --- a/reactos/lib/pseh/framebased.c +++ b/reactos/lib/pseh/framebased.c @@ -33,6 +33,10 @@ extern void __cdecl _SEHRegisterFrame(_SEHRegistration_t *); extern void __cdecl _SEHUnregisterFrame(const _SEHRegistration_t *); extern void __cdecl _SEHUnwind(_SEHPortableFrame_t *); +/* Borland C++ uses a different decoration (i.e. none) for stdcall functions */ +extern void __stdcall RtlUnwind(void *, void *, void *, void *); +void const * _SEHRtlUnwind = RtlUnwind; + __declspec(noreturn) void __cdecl _SEHCallHandler(_SEHPortableFrame_t * frame) { frame->SPF_Handling = 1; diff --git a/reactos/lib/pseh/i386/framebased.asm b/reactos/lib/pseh/i386/framebased.asm index 109b0b580cc..d4d56b20fa9 100644 --- a/reactos/lib/pseh/i386/framebased.asm +++ b/reactos/lib/pseh/i386/framebased.asm @@ -44,7 +44,7 @@ __SEHUnregisterFrame: global __SEHUnwind __SEHUnwind: - extern _RtlUnwind@16 + extern __SEHRtlUnwind mov ecx, [esp+4] @@ -53,11 +53,12 @@ __SEHUnwind: push edi push ebx + xor eax, eax push eax push eax push eax push ecx - call _RtlUnwind@16 + call [__SEHRtlUnwind] pop ebx pop edi diff --git a/reactos/lib/pseh/i386/setjmp.asm b/reactos/lib/pseh/i386/setjmp.asm index 43431bac412..3e95355ab54 100644 --- a/reactos/lib/pseh/i386/setjmp.asm +++ b/reactos/lib/pseh/i386/setjmp.asm @@ -21,6 +21,8 @@ cpu 486 segment .text use32 +; Note: the undecorated names are for Borland C++ (and possibly other compilers +; using the OMF format) global SEHSetJmp global __SEHSetJmp SEHSetJmp: