From 0e90ca425c9fe49eeadcd1417bc3d0ea3c52419b Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 4 Feb 2017 23:50:32 +0000 Subject: [PATCH] [BOOTLIB][CRT] - Fix GCC build svn path=/trunk/; revision=73688 --- reactos/boot/environ/lib/arch/i386/transfer.s | 22 +++++++++---------- reactos/sdk/include/crt/mingw32/intrin_x86.h | 5 +++++ reactos/sdk/include/crt/msc/intrin.h | 13 +++++++++++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/reactos/boot/environ/lib/arch/i386/transfer.s b/reactos/boot/environ/lib/arch/i386/transfer.s index e3547bde888..0672b31bf13 100644 --- a/reactos/boot/environ/lib/arch/i386/transfer.s +++ b/reactos/boot/environ/lib/arch/i386/transfer.s @@ -11,10 +11,10 @@ #include #include -EXTERN _GdtRegister:DWORD -EXTERN _IdtRegister:DWORD -EXTERN _BootAppGdtRegister:DWORD -EXTERN _BootAppIdtRegister:DWORD +EXTERN _GdtRegister:FWORD +EXTERN _IdtRegister:FWORD +EXTERN _BootAppGdtRegister:FWORD +EXTERN _BootAppIdtRegister:FWORD EXTERN _BootApp32Stack:DWORD EXTERN _BootApp32EntryRoutine:DWORD EXTERN _BootApp32Parameters:DWORD @@ -39,10 +39,10 @@ _Archx86TransferTo32BitApplicationAsm: mov ebx, esp /* Save current GDT/IDT, then load new one */ - sgdt fword ptr _GdtRegister - sidt fword ptr _IdtRegister - lgdt fword ptr _BootAppGdtRegister - lidt fword ptr _BootAppIdtRegister + sgdt _GdtRegister + sidt _IdtRegister + lgdt _BootAppGdtRegister + lidt _BootAppIdtRegister /* Load the new stack */ xor ebp, ebp @@ -62,8 +62,8 @@ _Archx86TransferTo32BitApplicationAsm: mov esp, ebx /* Restore old GDT/IDT */ - lgdt fword ptr _GdtRegister - lidt fword ptr _IdtRegister + lgdt _GdtRegister + lidt _IdtRegister /* Retore old segments */ pop ds @@ -76,6 +76,6 @@ _Archx86TransferTo32BitApplicationAsm: pop ebp /* All done */ - retn + ret END diff --git a/reactos/sdk/include/crt/mingw32/intrin_x86.h b/reactos/sdk/include/crt/mingw32/intrin_x86.h index 00d06aa3135..bb0f9a2af1f 100644 --- a/reactos/sdk/include/crt/mingw32/intrin_x86.h +++ b/reactos/sdk/include/crt/mingw32/intrin_x86.h @@ -1815,6 +1815,11 @@ __INTRIN_INLINE void __sidt(void *Destination) __asm__ __volatile__("sidt %0" : : "m"(*(short*)Destination) : "memory"); } +__INTRIN_INLINE void _sgdt(void *Destination) +{ + __asm__ __volatile__("sgdt %0" : : "m"(*(short*)Destination) : "memory"); +} + /*** Misc operations ***/ __INTRIN_INLINE void _mm_pause(void) diff --git a/reactos/sdk/include/crt/msc/intrin.h b/reactos/sdk/include/crt/msc/intrin.h index 9a0eb93643f..510150bc1ed 100644 --- a/reactos/sdk/include/crt/msc/intrin.h +++ b/reactos/sdk/include/crt/msc/intrin.h @@ -342,6 +342,19 @@ void __forceinline __invlpg_fixed(void * Address) #pragma intrinsic(__wbinvd) #pragma intrinsic(__lidt) #pragma intrinsic(__sidt) +#if (_MSC_VER >= 1800) +#pragma intrinsic(_sgdt) +#else +__forceinline +void _sgdt(void *Destination) +{ + __asm + { + mov eax, Destination + sgdt [eax] + } +} +#endif #pragma intrinsic(_mm_pause) #endif #if defined(_M_ARM)