fix windows errors uncovered by the inline patch

By always instantiating extern inlines, the patch has discovered
2 assembly errors, which were fixed in the original mingw64 in 2009.

This fixes those errors.

Additionally it changes __CRT_INLINE in win32/include/_mingw.h
from `extern __inline__` to `static __inline__`.

__CRT_INLINE is used exclusively in header files and as such
it should not create externally visible instantiations like a `extern
inline` would (as per the C standard).
This commit is contained in:
Petr Skocik 2019-06-12 15:34:47 +02:00
parent 587e1f5598
commit 47722a8c2e
2 changed files with 3 additions and 3 deletions

View File

@ -51,7 +51,7 @@
#define __GNUC_VA_LIST #define __GNUC_VA_LIST
#define _CRTIMP extern #define _CRTIMP extern
#define __CRT_INLINE extern __inline__ #define __CRT_INLINE static __inline__
#define _CRT_ALIGN(x) __attribute__((aligned(x))) #define _CRT_ALIGN(x) __attribute__((aligned(x)))
#define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) #define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))

View File

@ -1474,7 +1474,7 @@ typedef DWORD LCID;
#if(defined(_X86_) && !defined(__x86_64)) #if(defined(_X86_) && !defined(__x86_64))
__CRT_INLINE VOID MemoryBarrier(VOID) { __CRT_INLINE VOID MemoryBarrier(VOID) {
LONG Barrier; LONG Barrier;
__asm__ __volatile__("xchgl %eax,%0 " __asm__ __volatile__("xchgl %%eax,%0 "
:"=r" (Barrier)); :"=r" (Barrier));
} }
#define YieldProcessor() __asm__ __volatile__("rep nop "); #define YieldProcessor() __asm__ __volatile__("rep nop ");
@ -1486,7 +1486,7 @@ typedef DWORD LCID;
#define PF_NON_TEMPORAL_LEVEL_ALL #define PF_NON_TEMPORAL_LEVEL_ALL
__CRT_INLINE VOID DbgRaiseAssertionFailure(void) { __CRT_INLINE VOID DbgRaiseAssertionFailure(void) {
__asm__ __volatile__("int 0x2c "); __asm__ __volatile__("int $0x2c ");
} }
PVOID GetCurrentFiber(void); PVOID GetCurrentFiber(void);
__CRT_INLINE PVOID GetCurrentFiber(void) __CRT_INLINE PVOID GetCurrentFiber(void)