From 6acee80eb2f67771a1765239c2c47df86b6eabdb Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 4 Oct 2014 12:03:37 +0000 Subject: [PATCH] [CRT] - Add __fastfail intrinsic implementation for GCC and MSVC <= 2010. Patch by Timo Kreuzer. CORE-8419 svn path=/trunk/; revision=64519 --- reactos/include/crt/mingw32/intrin_x86.h | 9 ++++++++- reactos/include/crt/msc/intrin.h | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/reactos/include/crt/mingw32/intrin_x86.h b/reactos/include/crt/mingw32/intrin_x86.h index 87e38414da2..cee204458d3 100644 --- a/reactos/include/crt/mingw32/intrin_x86.h +++ b/reactos/include/crt/mingw32/intrin_x86.h @@ -1504,6 +1504,7 @@ __INTRIN_INLINE void __int2c(void); __INTRIN_INLINE void _disable(void); __INTRIN_INLINE void _enable(void); __INTRIN_INLINE void __halt(void); +__declspec(noreturn) __INTRIN_INLINE void __fastfail(unsigned int Code); #ifdef __clang__ #define __debugbreak() __asm__("int $3") @@ -1532,7 +1533,13 @@ __INTRIN_INLINE void _enable(void) __INTRIN_INLINE void __halt(void) { - __asm__("hlt\n\t" : : : "memory"); + __asm__("hlt" : : : "memory"); +} + +__declspec(noreturn) +__INTRIN_INLINE void __fastfail(unsigned int Code) +{ + __asm__("int $0x29" : : "c"(Code) : "memory"); } /*** Protected memory management ***/ diff --git a/reactos/include/crt/msc/intrin.h b/reactos/include/crt/msc/intrin.h index f991c356df1..66f79fdbbba 100644 --- a/reactos/include/crt/msc/intrin.h +++ b/reactos/include/crt/msc/intrin.h @@ -587,6 +587,16 @@ void __ud2(void); #if (_MSC_VER >= 1700) __declspec(noreturn) void __fastfail(unsigned int Code); #pragma intrinsic(__fastfail) +#else +__declspec(noreturn) __forceinline +void __fastfail(unsigned int Code) +{ + __asm + { + mov ecx, Code + int 29h + } +} #endif #endif #if defined(_M_ARM)