diff --git a/.mingw-w64-tools.metadata b/.mingw-w64-tools.metadata
index 41deaa38540f1de64939b97f30c75b141c66ee5b..2817a961338d59d41b0ffd9b8106d9d35523389b 100644
--- a/.mingw-w64-tools.metadata
+++ b/.mingw-w64-tools.metadata
@@ -1 +1 @@
-3f66bce069ee8bed7439a1a13da7cb91a5e67ea6170f21317ac7f5794625ee10  SOURCES/mingw-w64-v11.0.1.tar.bz2
+cc41898aac4b6e8dd5cffd7331b9d9515b912df4420a3a612b5ea2955bbeed2f  SOURCES/mingw-w64-v12.0.0.tar.bz2
diff --git a/SOURCES/mingw-w64-tools-riscv64-on-s390x-ppc66le.patch b/SOURCES/mingw-w64-tools-riscv64-on-s390x-ppc66le.patch
deleted file mode 100644
index a761cee5c874b00db932055421eafcee063fe7aa..0000000000000000000000000000000000000000
--- a/SOURCES/mingw-w64-tools-riscv64-on-s390x-ppc66le.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/include/basetsd.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/basetsd.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/include/basetsd.h	2023-08-17 12:36:09.565149909 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/basetsd.h	2023-08-17 12:36:09.572149926 +0200
-@@ -36,7 +36,7 @@ extern "C" {
-  * 64-bit.
-  */
- 
--#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(__s390x__)) && !defined(_WIN64)
-+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(__s390x__) || (defined(__riscv) && (__riscv_xlen == 64))) && !defined(_WIN64)
- #define _WIN64
- #endif
- 
-@@ -327,6 +327,8 @@ typedef ULONG_PTR KAFFINITY, *PKAFFINITY
- # undef  WORDS_BIGENDIAN
- #elif defined(__s390__)
- # define WORDS_BIGENDIAN
-+#elif defined(__riscv) && (__riscv_xlen == 64)
-+# undef  WORDS_BIGENDIAN
- #elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)
- # error Unknown CPU architecture!
- #endif
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/include/winnt.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/winnt.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/include/winnt.h	2023-08-17 12:36:09.567149914 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/winnt.h	2023-08-17 12:36:09.574149930 +0200
-@@ -1809,6 +1809,36 @@ typedef struct _CONTEXT
- 
- #endif  /* __PPC64__ */
- 
-+#if (defined(__riscv) && (__riscv_xlen == 64))
-+
-+/*
-+ * FIXME:
-+ *
-+ * There is no official CONTEXT structure defined for the riscv64
-+ * architecture, so I just made one up, too.
-+ *
-+ * This structure is completely dummy, made just to build widl.
-+ *
-+ */
-+
-+#define CONTEXT_RISCV64           0x10000000
-+
-+#define CONTEXT_CONTROL         (CONTEXT_RISCV64 | 0x00000001)
-+#define CONTEXT_FLOATING_POINT  (CONTEXT_RISCV64 | 0x00000002)
-+#define CONTEXT_INTEGER         (CONTEXT_RISCV64 | 0x00000004)
-+
-+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-+
-+#define EXCEPTION_READ_FAULT    0
-+#define EXCEPTION_WRITE_FAULT   1
-+#define EXCEPTION_EXECUTE_FAULT 8
-+
-+typedef struct _CONTEXT
-+{
-+} CONTEXT, *PCONTEXT;
-+
-+#endif  /* __riscv64 */
-+
- #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
- #error You need to define a CONTEXT for your CPU
- #endif
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/tools.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/tools.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/tools.h	2023-08-17 12:36:09.568149916 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/tools.h	2023-08-17 12:36:09.574149930 +0200
-@@ -88,7 +88,7 @@
- 
- struct target
- {
--    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64, CPU_S390X, CPU_PPC64 } cpu;
-+    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64, CPU_S390X, CPU_PPC64, CPU_RISCV64 } cpu;
- 
-     enum
-     {
-@@ -453,6 +453,8 @@ static inline struct target get_default_
-     target.cpu = CPU_S390X;
- #elif defined(__PPC64__)
-     target.cpu = CPU_PPC64;
-+#elif (defined(__riscv) && (__riscv_xlen == 64))
-+    target.cpu = CPU_RISCV64;
- #else
- #error Unsupported CPU
- #endif
-@@ -489,6 +491,7 @@ static inline unsigned int get_target_pt
-         [CPU_ARM64]     = 8,
-         [CPU_S390X]     = 8,
-         [CPU_PPC64]     = 8,
-+        [CPU_RISCV64]   = 8,
-     };
-     return sizes[target.cpu];
- }
-@@ -533,7 +536,8 @@ static inline int get_cpu_from_name( con
-         { "arm64",     CPU_ARM64 },
-         { "arm",       CPU_ARM },
-         { "s390x",     CPU_S390X },
--        { "ppc64",     CPU_PPC64 }
-+        { "ppc64",     CPU_PPC64 },
-+        { "riscv64",   CPU_RISCV64 }
-     };
-     unsigned int i;
- 
-@@ -582,6 +586,7 @@ static inline const char *get_arch_dir(
-         [CPU_ARM64]  = "aarch64",
-         [CPU_S390X]  = "s390x",
-         [CPU_PPC64]  = "ppc64",
-+        [CPU_RISCV64]= "riscv64"
-     };
- 
-     if (!cpu_names[target.cpu]) return "";
diff --git a/SOURCES/mingw-w64-tools-s390x-ppc66le.patch b/SOURCES/mingw-w64-tools-s390x-ppc66le.patch
deleted file mode 100644
index 91910db172405ec0fae61ad4954950c9bbc8ee43..0000000000000000000000000000000000000000
--- a/SOURCES/mingw-w64-tools-s390x-ppc66le.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/include/basetsd.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/basetsd.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/include/basetsd.h	2023-04-29 11:15:30.000000000 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/basetsd.h	2023-08-17 12:36:09.203149051 +0200
-@@ -36,7 +36,7 @@ extern "C" {
-  * 64-bit.
-  */
- 
--#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64)
-+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(__s390x__)) && !defined(_WIN64)
- #define _WIN64
- #endif
- 
-@@ -325,6 +325,8 @@ typedef ULONG_PTR KAFFINITY, *PKAFFINITY
- # define WORDS_BIGENDIAN
- #elif defined(__MIPSEL__)
- # undef  WORDS_BIGENDIAN
-+#elif defined(__s390__)
-+# define WORDS_BIGENDIAN
- #elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)
- # error Unknown CPU architecture!
- #endif
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/include/winnt.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/winnt.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/include/winnt.h	2023-04-29 11:15:30.000000000 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/include/winnt.h	2023-08-17 12:36:09.204149054 +0200
-@@ -1749,6 +1749,66 @@ typedef struct _KNONVOLATILE_CONTEXT_POI
- 
- #endif /* __aarch64__ */
- 
-+#ifdef __s390x__
-+
-+/*
-+ * FIXME:
-+ *
-+ * There is no official CONTEXT structure defined for the S/390
-+ * architecture, so I just made one up.
-+ *
-+ * This structure is completely dummy, made just to build widl.
-+ *
-+ */
-+
-+#define CONTEXT_S390X            0x10000000
-+
-+#define CONTEXT_CONTROL         (CONTEXT_S390X | 0x00000001)
-+#define CONTEXT_FLOATING_POINT  (CONTEXT_S390X | 0x00000002)
-+#define CONTEXT_INTEGER         (CONTEXT_S390X | 0x00000004)
-+
-+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-+
-+#define EXCEPTION_READ_FAULT    0
-+#define EXCEPTION_WRITE_FAULT   1
-+#define EXCEPTION_EXECUTE_FAULT 8
-+
-+typedef struct _CONTEXT
-+{
-+} CONTEXT, *PCONTEXT;
-+
-+#endif  /* __s390x__ */
-+
-+#ifdef __PPC64__
-+
-+/*
-+ * FIXME:
-+ *
-+ * There is no official CONTEXT structure defined for the PPC64
-+ * architecture, so I just made one up.
-+ *
-+ * This structure is completely dummy, made just to build widl.
-+ *
-+ */
-+
-+#define CONTEXT_PPC64            0x10000000
-+
-+#define CONTEXT_CONTROL         (CONTEXT_PPC64 | 0x00000001)
-+#define CONTEXT_FLOATING_POINT  (CONTEXT_PPC64 | 0x00000002)
-+#define CONTEXT_INTEGER         (CONTEXT_PPC64 | 0x00000004)
-+
-+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
-+
-+#define EXCEPTION_READ_FAULT    0
-+#define EXCEPTION_WRITE_FAULT   1
-+#define EXCEPTION_EXECUTE_FAULT 8
-+
-+typedef struct _CONTEXT
-+{
-+} CONTEXT, *PCONTEXT;
-+
-+#endif  /* __PPC64__ */
-+
- #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
- #error You need to define a CONTEXT for your CPU
- #endif
-diff -rupN --no-dereference mingw-w64-v11.0.1/mingw-w64-tools/widl/tools.h mingw-w64-v11.0.1-new/mingw-w64-tools/widl/tools.h
---- mingw-w64-v11.0.1/mingw-w64-tools/widl/tools.h	2023-04-29 11:15:30.000000000 +0200
-+++ mingw-w64-v11.0.1-new/mingw-w64-tools/widl/tools.h	2023-08-17 12:36:09.204149054 +0200
-@@ -88,7 +88,7 @@
- 
- struct target
- {
--    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64 } cpu;
-+    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64, CPU_S390X, CPU_PPC64 } cpu;
- 
-     enum
-     {
-@@ -449,6 +449,10 @@ static inline struct target get_default_
-     target.cpu = CPU_ARM;
- #elif defined(__aarch64__)
-     target.cpu = CPU_ARM64;
-+#elif defined(__s390x__)
-+    target.cpu = CPU_S390X;
-+#elif defined(__PPC64__)
-+    target.cpu = CPU_PPC64;
- #else
- #error Unsupported CPU
- #endif
-@@ -483,6 +487,8 @@ static inline unsigned int get_target_pt
-         [CPU_x86_64]    = 8,
-         [CPU_ARM]       = 4,
-         [CPU_ARM64]     = 8,
-+        [CPU_S390X]     = 8,
-+        [CPU_PPC64]     = 8,
-     };
-     return sizes[target.cpu];
- }
-@@ -526,6 +532,8 @@ static inline int get_cpu_from_name( con
-         { "aarch64",   CPU_ARM64 },
-         { "arm64",     CPU_ARM64 },
-         { "arm",       CPU_ARM },
-+        { "s390x",     CPU_S390X },
-+        { "ppc64",     CPU_PPC64 }
-     };
-     unsigned int i;
- 
-@@ -571,7 +579,9 @@ static inline const char *get_arch_dir(
-         [CPU_i386]   = "i386",
-         [CPU_x86_64] = "x86_64",
-         [CPU_ARM]    = "arm",
--        [CPU_ARM64]  = "aarch64"
-+        [CPU_ARM64]  = "aarch64",
-+        [CPU_S390X]  = "s390x",
-+        [CPU_PPC64]  = "ppc64",
-     };
- 
-     if (!cpu_names[target.cpu]) return "";
diff --git a/SOURCES/widl-cpu.patch b/SOURCES/widl-cpu.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3e6faad2e12b8e572df7ff10e650b0aaa616a0ee
--- /dev/null
+++ b/SOURCES/widl-cpu.patch
@@ -0,0 +1,21 @@
+diff -rupN --no-dereference mingw-w64-v12.0.0/mingw-w64-tools/widl/tools.h mingw-w64-v12.0.0-new/mingw-w64-tools/widl/tools.h
+--- mingw-w64-v12.0.0/mingw-w64-tools/widl/tools.h	2024-05-22 09:07:14.000000000 +0200
++++ mingw-w64-v12.0.0-new/mingw-w64-tools/widl/tools.h	2024-07-16 14:12:13.330779850 +0200
+@@ -90,7 +90,7 @@ extern char **environ;
+ 
+ struct target
+ {
+-    enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64, CPU_ARM64EC } cpu;
++  enum { CPU_i386, CPU_x86_64, CPU_ARM, CPU_ARM64, CPU_ARM64EC, CPU_UNSPECIFIED } cpu;
+ 
+     enum
+     {
+@@ -448,7 +448,7 @@ static inline struct target get_default_
+ #elif defined(__aarch64__)
+     target.cpu = CPU_ARM64;
+ #else
+-#error Unsupported CPU
++    target.cpu = CPU_UNSPECIFIED;
+ #endif
+ 
+ #ifdef __APPLE__
diff --git a/SOURCES/widl-missing-cpu-info.patch b/SOURCES/widl-missing-cpu-info.patch
new file mode 100644
index 0000000000000000000000000000000000000000..959af5576c8ceb46f59e856a9277a8bbfa5f9e7a
--- /dev/null
+++ b/SOURCES/widl-missing-cpu-info.patch
@@ -0,0 +1,12 @@
+diff -rupN --no-dereference mingw-w64-v12.0.0/mingw-w64-tools/widl/include/basetsd.h mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/basetsd.h
+--- mingw-w64-v12.0.0/mingw-w64-tools/widl/include/basetsd.h	2024-05-22 09:07:14.000000000 +0200
++++ mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/basetsd.h	2024-07-16 14:12:12.551825573 +0200
+@@ -36,7 +36,7 @@ extern "C" {
+  * 64-bit.
+  */
+ 
+-#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__)) && !defined(_WIN64)
++#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(__sparc64__) || defined(__ia64__) || defined(__s390x__)) && !defined(_WIN64)
+ #define _WIN64
+ #endif
+ 
diff --git a/SOURCES/widl-no-context.patch b/SOURCES/widl-no-context.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0c3fa4bf9f8e81595133b53d1dbe671b81683caa
--- /dev/null
+++ b/SOURCES/widl-no-context.patch
@@ -0,0 +1,536 @@
+diff -rupN --no-dereference mingw-w64-v12.0.0/mingw-w64-tools/widl/include/winbase.h mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/winbase.h
+--- mingw-w64-v12.0.0/mingw-w64-tools/widl/include/winbase.h	2024-05-22 09:07:14.000000000 +0200
++++ mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/winbase.h	2024-07-16 14:12:12.934803070 +0200
+@@ -163,13 +163,6 @@ typedef struct _DEBUG_EVENT {
+     } u;
+ } DEBUG_EVENT, *LPDEBUG_EVENT;
+ 
+-typedef PCONTEXT LPCONTEXT;
+-typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;
+-typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
+-
+-typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);
+-typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
+-
+ #define OFS_MAXPATHNAME 128
+ typedef struct _OFSTRUCT
+ {
+@@ -1813,7 +1806,6 @@ WINADVAPI  BOOL        WINAPI AddAuditAc
+ WINADVAPI  BOOL        WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
+ WINADVAPI  BOOL        WINAPI AddMandatoryAce(PACL,DWORD,DWORD,DWORD,PSID);
+ WINBASEAPI VOID        WINAPI AddRefActCtx(HANDLE);
+-WINBASEAPI PVOID       WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+ WINADVAPI  BOOL        WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);
+ WINADVAPI  BOOL        WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);
+ WINADVAPI  BOOL        WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);
+@@ -1873,7 +1865,6 @@ WINBASEAPI BOOL        WINAPI CommConfig
+ WINBASEAPI BOOL        WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);
+ WINBASEAPI BOOL        WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);
+ WINBASEAPI HANDLE      WINAPI ConvertToGlobalHandle(HANDLE hSrc);
+-WINBASEAPI BOOL        WINAPI CopyContext(CONTEXT*, DWORD, CONTEXT*);
+ WINBASEAPI BOOL        WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
+ WINBASEAPI BOOL        WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
+ #define                       CopyFile WINELIB_NAME_AW(CopyFile)
+@@ -2355,7 +2346,6 @@ WINBASEAPI UINT        WINAPI GetTempFil
+ WINBASEAPI DWORD       WINAPI GetTempPathA(DWORD,LPSTR);
+ WINBASEAPI DWORD       WINAPI GetTempPathW(DWORD,LPWSTR);
+ #define                       GetTempPath WINELIB_NAME_AW(GetTempPath)
+-WINBASEAPI BOOL        WINAPI GetThreadContext(HANDLE,CONTEXT *);
+ WINBASEAPI DWORD       WINAPI GetThreadErrorMode(void);
+ WINBASEAPI DWORD       WINAPI GetThreadId(HANDLE);
+ WINBASEAPI BOOL        WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL);
+@@ -2392,7 +2382,6 @@ WINBASEAPI UINT        WINAPI GetWindows
+ WINBASEAPI UINT        WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
+ #define                       GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
+ WINBASEAPI UINT        WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);
+-WINBASEAPI BOOL        WINAPI GetXStateFeaturesMask(CONTEXT*,DWORD64*);
+ WINBASEAPI ATOM        WINAPI GlobalAddAtomA(LPCSTR);
+ WINBASEAPI ATOM        WINAPI GlobalAddAtomW(LPCWSTR);
+ #define                       GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)
+@@ -2435,8 +2424,6 @@ WINBASEAPI BOOL        WINAPI HeapWalk(H
+ WINBASEAPI BOOL        WINAPI InitAtomTable(DWORD);
+ WINADVAPI  BOOL        WINAPI InitializeAcl(PACL,DWORD,DWORD);
+ WINBASEAPI VOID        WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);
+-WINBASEAPI BOOL        WINAPI InitializeContext(void *,DWORD,CONTEXT **,DWORD *);
+-WINBASEAPI BOOL        WINAPI InitializeContext2(void *,DWORD,CONTEXT **,DWORD *,ULONG64);
+ WINBASEAPI void        WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
+ WINBASEAPI BOOL        WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD);
+ WINBASEAPI BOOL        WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD);
+@@ -2496,7 +2483,6 @@ WINBASEAPI HLOCAL      WINAPI LocalReAll
+ WINBASEAPI SIZE_T      WINAPI LocalShrink(HGLOBAL,UINT);
+ WINBASEAPI SIZE_T      WINAPI LocalSize(HLOCAL);
+ WINBASEAPI BOOL        WINAPI LocalUnlock(HLOCAL);
+-WINBASEAPI void *      WINAPI LocateXStateFeature(CONTEXT *,DWORD,DWORD *);
+ WINBASEAPI LPVOID      WINAPI LockResource(HGLOBAL);
+ #define                       LockSegment(handle) GlobalFix((HANDLE)(handle))
+ WINADVAPI  BOOL        WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
+@@ -2741,7 +2727,6 @@ WINBASEAPI BOOL        WINAPI SetSystemT
+ WINBASEAPI DWORD       WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID);
+ WINBASEAPI DWORD       WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);
+ WINBASEAPI DWORD_PTR   WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR);
+-WINBASEAPI BOOL        WINAPI SetThreadContext(HANDLE,const CONTEXT *);
+ WINBASEAPI BOOL        WINAPI SetThreadErrorMode(DWORD,LPDWORD);
+ WINBASEAPI DWORD       WINAPI SetThreadExecutionState(EXECUTION_STATE);
+ WINBASEAPI DWORD       WINAPI SetThreadIdealProcessor(HANDLE,DWORD);
+@@ -2750,7 +2735,6 @@ WINBASEAPI BOOL        WINAPI SetThreadP
+ WINADVAPI  BOOL        WINAPI SetThreadToken(PHANDLE,HANDLE);
+ WINBASEAPI HANDLE      WINAPI SetTimerQueueTimer(HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,BOOL);
+ WINADVAPI  BOOL        WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD);
+-WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);
+ WINBASEAPI BOOL        WINAPI SetVolumeLabelA(LPCSTR,LPCSTR);
+ WINBASEAPI BOOL        WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR);
+ #define                       SetVolumeLabel WINELIB_NAME_AW(SetVolumeLabel)
+@@ -2760,7 +2744,6 @@ WINBASEAPI BOOL        WINAPI SetVolumeM
+ WINBASEAPI BOOL        WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL);
+ WINBASEAPI BOOL        WINAPI SetWaitableTimerEx(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,REASON_CONTEXT*,ULONG);
+ WINBASEAPI BOOL        WINAPI SetUmsThreadInformation(PUMS_CONTEXT,UMS_THREAD_INFO_CLASS,void *,ULONG);
+-WINBASEAPI BOOL        WINAPI SetXStateFeaturesMask(CONTEXT*, DWORD64);
+ WINBASEAPI BOOL        WINAPI SetupComm(HANDLE,DWORD,DWORD);
+ WINBASEAPI DWORD       WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
+ WINBASEAPI DWORD       WINAPI SizeofResource(HMODULE,HRSRC);
+@@ -2784,7 +2767,6 @@ WINBASEAPI BOOL        WINAPI TransmitCo
+ WINBASEAPI BOOLEAN     WINAPI TryAcquireSRWLockExclusive(PSRWLOCK);
+ WINBASEAPI BOOLEAN     WINAPI TryAcquireSRWLockShared(PSRWLOCK);
+ WINBASEAPI BOOL        WINAPI TryEnterCriticalSection(CRITICAL_SECTION *lpCrit);
+-WINBASEAPI LONG        WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS);
+ WINBASEAPI BOOL        WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+ WINBASEAPI BOOL        WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED);
+ #define                       UnlockResource(handle) ((handle), 0)
+diff -rupN --no-dereference mingw-w64-v12.0.0/mingw-w64-tools/widl/include/winnt.h mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/winnt.h
+--- mingw-w64-v12.0.0/mingw-w64-tools/widl/include/winnt.h	2024-05-22 09:07:14.000000000 +0200
++++ mingw-w64-v12.0.0-new/mingw-w64-tools/widl/include/winnt.h	2024-07-16 14:12:12.935803011 +0200
+@@ -1185,25 +1185,6 @@ typedef struct _I386_CONTEXT
+ #define CONTEXT_I386_FULL (CONTEXT_I386_CONTROL | CONTEXT_I386_INTEGER | CONTEXT_I386_SEGMENTS)
+ #define CONTEXT_I386_ALL (CONTEXT_I386_FULL | CONTEXT_I386_FLOATING_POINT | CONTEXT_I386_DEBUG_REGISTERS | CONTEXT_I386_EXTENDED_REGISTERS)
+ 
+-#ifdef __i386__
+-
+-#define CONTEXT_CONTROL CONTEXT_I386_CONTROL
+-#define CONTEXT_INTEGER CONTEXT_I386_INTEGER
+-#define CONTEXT_SEGMENTS CONTEXT_I386_SEGMENTS
+-#define CONTEXT_FLOATING_POINT CONTEXT_I386_FLOATING_POINT
+-#define CONTEXT_DEBUG_REGISTERS CONTEXT_I386_DEBUG_REGISTERS
+-#define CONTEXT_EXTENDED_REGISTERS CONTEXT_I386_EXTENDED_REGISTERS
+-#define CONTEXT_XSTATE CONTEXT_I386_XSTATE
+-#define CONTEXT_FULL CONTEXT_I386_FULL
+-#define CONTEXT_ALL CONTEXT_I386_ALL
+-#define SIZE_OF_80387_REGISTERS I386_SIZE_OF_80387_REGISTERS
+-#define MAXIMUM_SUPPORTED_EXTENSION I386_MAXIMUM_SUPPORTED_EXTENSION
+-
+-typedef I386_FLOATING_SAVE_AREA FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+-typedef I386_CONTEXT CONTEXT, *PCONTEXT;
+-
+-#endif  /* __i386__ */
+-
+ typedef struct _LDT_ENTRY {
+     WORD	LimitLow;
+     WORD	BaseLow;
+@@ -1374,74 +1355,6 @@ typedef struct DECLSPEC_ALIGN(16) _AMD64
+     DWORD64 LastExceptionFromRip; /* 4c8 */
+ } AMD64_CONTEXT;
+ 
+-#ifdef __x86_64__
+-
+-#define CONTEXT_CONTROL CONTEXT_AMD64_CONTROL
+-#define CONTEXT_INTEGER CONTEXT_AMD64_INTEGER
+-#define CONTEXT_SEGMENTS CONTEXT_AMD64_SEGMENTS
+-#define CONTEXT_FLOATING_POINT CONTEXT_AMD64_FLOATING_POINT
+-#define CONTEXT_DEBUG_REGISTERS CONTEXT_AMD64_DEBUG_REGISTERS
+-#define CONTEXT_XSTATE CONTEXT_AMD64_XSTATE
+-#define CONTEXT_FULL CONTEXT_AMD64_FULL
+-#define CONTEXT_ALL CONTEXT_AMD64_ALL
+-
+-typedef AMD64_CONTEXT CONTEXT, *PCONTEXT;
+-typedef IMAGE_AMD64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+-typedef SCOPE_TABLE_AMD64 SCOPE_TABLE, *PSCOPE_TABLE;
+-
+-typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+-{
+-    union
+-    {
+-        PM128A FloatingContext[16];
+-        struct
+-        {
+-            PM128A Xmm0;
+-            PM128A Xmm1;
+-            PM128A Xmm2;
+-            PM128A Xmm3;
+-            PM128A Xmm4;
+-            PM128A Xmm5;
+-            PM128A Xmm6;
+-            PM128A Xmm7;
+-            PM128A Xmm8;
+-            PM128A Xmm9;
+-            PM128A Xmm10;
+-            PM128A Xmm11;
+-            PM128A Xmm12;
+-            PM128A Xmm13;
+-            PM128A Xmm14;
+-            PM128A Xmm15;
+-        } DUMMYSTRUCTNAME;
+-    } DUMMYUNIONNAME;
+-
+-    union
+-    {
+-        PULONG64 IntegerContext[16];
+-        struct
+-        {
+-            PULONG64 Rax;
+-            PULONG64 Rcx;
+-            PULONG64 Rdx;
+-            PULONG64 Rbx;
+-            PULONG64 Rsp;
+-            PULONG64 Rbp;
+-            PULONG64 Rsi;
+-            PULONG64 Rdi;
+-            PULONG64 R8;
+-            PULONG64 R9;
+-            PULONG64 R10;
+-            PULONG64 R11;
+-            PULONG64 R12;
+-            PULONG64 R13;
+-            PULONG64 R14;
+-            PULONG64 R15;
+-        } DUMMYSTRUCTNAME;
+-    } DUMMYUNIONNAME2;
+-} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+-
+-#endif /* __x86_64__ */
+-
+ #define XSTATE_LEGACY_FLOATING_POINT 0
+ #define XSTATE_LEGACY_SSE            1
+ #define XSTATE_GSSE                  2
+@@ -1628,43 +1541,6 @@ typedef struct _ARM_CONTEXT
+     ULONG Padding2[2];              /* 198 */
+ } ARM_CONTEXT;
+ 
+-#ifdef __arm__
+-
+-#define CONTEXT_CONTROL CONTEXT_ARM_CONTROL
+-#define CONTEXT_INTEGER CONTEXT_ARM_INTEGER
+-#define CONTEXT_FLOATING_POINT CONTEXT_ARM_FLOATING_POINT
+-#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM_DEBUG_REGISTERS
+-#define CONTEXT_FULL CONTEXT_ARM_FULL
+-#define CONTEXT_ALL CONTEXT_ARM_ALL
+-
+-typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+-typedef SCOPE_TABLE_ARM SCOPE_TABLE, *PSCOPE_TABLE;
+-typedef ARM_NEON128 NEON128, *PNEON128;
+-typedef ARM_CONTEXT CONTEXT, *PCONTEXT;
+-
+-typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+-{
+-    PDWORD     R4;
+-    PDWORD     R5;
+-    PDWORD     R6;
+-    PDWORD     R7;
+-    PDWORD     R8;
+-    PDWORD     R9;
+-    PDWORD     R10;
+-    PDWORD     R11;
+-    PDWORD     Lr;
+-    PULONGLONG D8;
+-    PULONGLONG D9;
+-    PULONGLONG D10;
+-    PULONGLONG D11;
+-    PULONGLONG D12;
+-    PULONGLONG D13;
+-    PULONGLONG D14;
+-    PULONGLONG D15;
+-} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+-
+-#endif /* __arm__ */
+-
+ #define CONTEXT_ARM64           0x400000
+ #define CONTEXT_ARM64_CONTROL         (CONTEXT_ARM64 | 0x00000001)
+ #define CONTEXT_ARM64_INTEGER         (CONTEXT_ARM64 | 0x00000002)
+@@ -1944,30 +1820,6 @@ typedef struct DECLSPEC_ALIGN(16) _ARM64
+     } DUMMYUNIONNAME;
+ } ARM64EC_NT_CONTEXT, *PARM64EC_NT_CONTEXT;
+ 
+-#ifdef __aarch64__
+-
+-#define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
+-#define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
+-#define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
+-#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
+-#define CONTEXT_FULL CONTEXT_ARM64_FULL
+-#define CONTEXT_ALL CONTEXT_ARM64_ALL
+-#define CONTEXT_RET_TO_GUEST CONTEXT_ARM64_RET_TO_GUEST
+-
+-typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+-typedef SCOPE_TABLE_ARM64 SCOPE_TABLE, *PSCOPE_TABLE;
+-typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+-typedef ARM64_NT_NEON128 NEON128, *PNEON128;
+-typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
+-
+-#define _DISPATCHER_CONTEXT_ARM64 _DISPATCHER_CONTEXT
+-
+-#endif /* __aarch64__ */
+-
+-#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
+-#error You need to define a CONTEXT for your CPU
+-#endif
+-
+ #define WOW64_CONTEXT_i386 0x00010000
+ #define WOW64_CONTEXT_i486 0x00010000
+ #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
+@@ -1999,130 +1851,6 @@ typedef ARM64_NT_CONTEXT CONTEXT, *PCONT
+ struct _EXCEPTION_POINTERS;
+ struct _EXCEPTION_RECORD;
+ 
+-typedef EXCEPTION_DISPOSITION WINAPI EXCEPTION_ROUTINE(struct _EXCEPTION_RECORD*,PVOID,CONTEXT*,PVOID);
+-typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
+-
+-typedef struct _DISPATCHER_CONTEXT_ARM64
+-{
+-    ULONG_PTR                     ControlPc;
+-    ULONG_PTR                     ImageBase;
+-    PARM64_RUNTIME_FUNCTION       FunctionEntry;
+-    ULONG_PTR                     EstablisherFrame;
+-    ULONG_PTR                     TargetPc;
+-    PARM64_NT_CONTEXT             ContextRecord;
+-    PEXCEPTION_ROUTINE            LanguageHandler;
+-    PVOID                         HandlerData;
+-    struct _UNWIND_HISTORY_TABLE *HistoryTable;
+-    DWORD                         ScopeIndex;
+-    BOOLEAN                       ControlPcIsUnwound;
+-    PBYTE                         NonVolatileRegisters;
+-} DISPATCHER_CONTEXT_ARM64, *PDISPATCHER_CONTEXT_ARM64;
+-
+-#define NONVOL_INT_NUMREG_ARM64 11
+-#define NONVOL_FP_NUMREG_ARM64  8
+-
+-#define NONVOL_INT_SIZE_ARM64 (NONVOL_INT_NUMREG_ARM64 * sizeof(DWORD64))
+-#define NONVOL_FP_SIZE_ARM64  (NONVOL_FP_NUMREG_ARM64 * sizeof(double))
+-
+-typedef union _DISPATCHER_CONTEXT_NONVOLREG_ARM64
+-{
+-    BYTE  Buffer[NONVOL_INT_SIZE_ARM64 + NONVOL_FP_SIZE_ARM64];
+-    struct
+-    {
+-        DWORD64 GpNvRegs[NONVOL_INT_NUMREG_ARM64];
+-        double  FpNvRegs[NONVOL_FP_NUMREG_ARM64];
+-    } DUMMYSTRUCTNAME;
+-} DISPATCHER_CONTEXT_NONVOLREG_ARM64;
+-
+-#ifdef __x86_64__
+-
+-typedef struct _DISPATCHER_CONTEXT
+-{
+-    ULONG64                       ControlPc;
+-    ULONG64                       ImageBase;
+-    PRUNTIME_FUNCTION             FunctionEntry;
+-    ULONG64                       EstablisherFrame;
+-    ULONG64                       TargetIp;
+-    PCONTEXT                      ContextRecord;
+-    PEXCEPTION_ROUTINE            LanguageHandler;
+-    PVOID                         HandlerData;
+-    struct _UNWIND_HISTORY_TABLE *HistoryTable;
+-    DWORD                         ScopeIndex;
+-    DWORD                         Fill0;
+-} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
+-
+-#ifdef __arm64ec__
+-
+-typedef struct _DISPATCHER_CONTEXT_ARM64EC
+-{
+-    ULONG64                       ControlPc;
+-    ULONG64                       ImageBase;
+-    PRUNTIME_FUNCTION             FunctionEntry;
+-    ULONG64                       EstablisherFrame;
+-    union
+-    {
+-        ULONG64                   TargetIp;
+-        ULONG64                   TargetPc;
+-    } DUMMYUNIONNAME;
+-    PCONTEXT                      ContextRecord;
+-    PEXCEPTION_ROUTINE            LanguageHandler;
+-    PVOID                         HandlerData;
+-    struct _UNWIND_HISTORY_TABLE *HistoryTable;
+-    DWORD                         ScopeIndex;
+-    BOOLEAN                       ControlPcIsUnwound;
+-    PBYTE                         NonVolatileRegisters;
+-} DISPATCHER_CONTEXT_ARM64EC, *PDISPATCHER_CONTEXT_ARM64EC;
+-
+-#endif
+-
+-typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,PVOID);
+-typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,PVOID);
+-
+-#define UNW_FLAG_NHANDLER  0
+-#define UNW_FLAG_EHANDLER  1
+-#define UNW_FLAG_UHANDLER  2
+-#define UNW_FLAG_CHAININFO 4
+-
+-#elif defined(__arm__)
+-
+-typedef struct _DISPATCHER_CONTEXT
+-{
+-    DWORD                         ControlPc;
+-    DWORD                         ImageBase;
+-    PRUNTIME_FUNCTION             FunctionEntry;
+-    DWORD                         EstablisherFrame;
+-    DWORD                         TargetPc;
+-    PCONTEXT                      ContextRecord;
+-    PEXCEPTION_ROUTINE            LanguageHandler;
+-    PVOID                         HandlerData;
+-    struct _UNWIND_HISTORY_TABLE *HistoryTable;
+-    DWORD                         ScopeIndex;
+-    BOOLEAN                       ControlPcIsUnwound;
+-    PBYTE                         NonVolatileRegisters;
+-    DWORD                         Reserved;
+-} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
+-
+-typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD);
+-typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD);
+-
+-#define UNW_FLAG_NHANDLER  0
+-#define UNW_FLAG_EHANDLER  1
+-#define UNW_FLAG_UHANDLER  2
+-
+-#elif defined(__aarch64__)
+-
+-#undef _DISPATCHER_CONTEXT_ARM64
+-typedef DISPATCHER_CONTEXT_ARM64 DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
+-
+-typedef LONG (CALLBACK *PEXCEPTION_FILTER)(struct _EXCEPTION_POINTERS*,DWORD64);
+-typedef void (CALLBACK *PTERMINATION_HANDLER)(BOOLEAN,DWORD64);
+-
+-#define UNW_FLAG_NHANDLER  0
+-#define UNW_FLAG_EHANDLER  1
+-#define UNW_FLAG_UHANDLER  2
+-
+-#endif /* __aarch64__ */
+-
+ /*
+  * Product types
+  */
+@@ -2371,127 +2099,6 @@ typedef struct _EXCEPTION_RECORD64
+     DWORD64  ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+ } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
+ 
+-/*
+- * The exception pointers structure passed to exception filters
+- * in except() and the UnhandledExceptionFilter().
+- */
+-
+-typedef struct _EXCEPTION_POINTERS
+-{
+-  PEXCEPTION_RECORD  ExceptionRecord;
+-  PCONTEXT           ContextRecord;
+-} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+-
+-
+-/*
+- * The exception frame, used for registering exception handlers
+- * Win32 cares only about this, but compilers generally emit
+- * larger exception frames for their own use.
+- */
+-
+-struct _EXCEPTION_REGISTRATION_RECORD;
+-
+-typedef DWORD (CDECL *PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct _EXCEPTION_REGISTRATION_RECORD*,
+-                                          PCONTEXT,struct _EXCEPTION_REGISTRATION_RECORD **);
+-
+-typedef struct _EXCEPTION_REGISTRATION_RECORD
+-{
+-  struct _EXCEPTION_REGISTRATION_RECORD *Prev;
+-  PEXCEPTION_HANDLER       Handler;
+-} EXCEPTION_REGISTRATION_RECORD;
+-
+-/*
+- * function pointer to an exception filter
+- */
+-
+-typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo);
+-
+-typedef struct _NT_TIB
+-{
+-	struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+-	PVOID StackBase;
+-	PVOID StackLimit;
+-	PVOID SubSystemTib;
+-	union {
+-          PVOID FiberData;
+-          DWORD Version;
+-	} DUMMYUNIONNAME;
+-	PVOID ArbitraryUserPointer;
+-	struct _NT_TIB *Self;
+-} NT_TIB, *PNT_TIB;
+-
+-struct _TEB;
+-
+-#ifdef WINE_UNIX_LIB
+-# ifdef __GNUC__
+-NTSYSAPI struct _TEB * WINAPI NtCurrentTeb(void) __attribute__((pure));
+-# else
+-NTSYSAPI struct _TEB * WINAPI NtCurrentTeb(void);
+-# endif
+-#elif defined(__i386__) && defined(__GNUC__)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    struct _TEB *teb;
+-    __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
+-    return teb;
+-}
+-#elif defined(__i386__) && defined(_MSC_VER)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-  struct _TEB *teb;
+-  __asm mov eax, fs:[0x18];
+-  __asm mov teb, eax;
+-  return teb;
+-}
+-#elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(__GNUC__)
+-register struct _TEB *__wine_current_teb __asm__("x18");
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    return __wine_current_teb;
+-}
+-#elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(_MSC_VER)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    return (struct _TEB *)__getReg(18);
+-}
+-#elif defined(__x86_64__) && defined(__GNUC__)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    struct _TEB *teb;
+-    __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
+-    return teb;
+-}
+-#elif defined(__x86_64__) && defined(_MSC_VER)
+-unsigned __int64 __readgsqword(unsigned long);
+-#pragma intrinsic(__readgsqword)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
+-}
+-#elif defined(__arm__) && defined(__GNUC__)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    struct _TEB *teb;
+-    __asm__("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb));
+-    return teb;
+-}
+-#elif defined(__arm__) && defined(_MSC_VER)
+-#pragma intrinsic(_MoveFromCoprocessor)
+-static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+-{
+-    return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(15, 0, 13, 0, 2);
+-}
+-#elif !defined(RC_INVOKED)
+-# error You must define NtCurrentTeb() for your architecture
+-#endif
+-
+-#ifdef NONAMELESSUNION
+-#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->u.FiberData)
+-#else
+-#define GetCurrentFiber()  (((NT_TIB *)NtCurrentTeb())->FiberData)
+-#endif
+-#define GetFiberData()     (*(void **)GetCurrentFiber())
+-
+ #define TLS_MINIMUM_AVAILABLE 64
+ 
+ #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE    (16 * 1024)
diff --git a/SPECS/mingw-w64-tools.spec b/SPECS/mingw-w64-tools.spec
index 44df7789a2dbd7001ae9983460be068947cd3159..74ec507f8699d590d0d9e15673241c0a51bf524d 100644
--- a/SPECS/mingw-w64-tools.spec
+++ b/SPECS/mingw-w64-tools.spec
@@ -4,13 +4,16 @@
 #%%global branch trunk
 
 Name:           mingw-w64-tools
-Version:        11.0.1
-Release:        6%{?dist}
+Version:        12.0.0
+Release:        2%{?dist}
 Summary:        Supplementary tools which are part of the mingw-w64 toolchain
-# Fix build on s390x and ppc64le
-Patch0:         mingw-w64-tools-s390x-ppc66le.patch
-# Fix build on riscv64, this patch can only be applied after mingw-w64-tools-s390x-ppc66le.patch
-Patch1:         mingw-w64-tools-riscv64-on-s390x-ppc66le.patch
+# From Debian: Add missing CPU information (ia64, s390, s390x)
+Patch0:         widl-missing-cpu-info.patch
+# From Debian: Drop unused platform-specific context definitions
+Patch1:         widl-no-context.patch
+# From Debian: Don't error out on non-Windows CPUs
+Patch2:         widl-cpu.patch
+
 
 # http://sourceforge.net/mailarchive/forum.php?thread_name=5157C0FC.1010309%40users.sourceforge.net&forum_name=mingw-w64-public
 # The tools gendef and genidl are GPLv3+, widl is LGPLv2+
@@ -108,6 +111,10 @@ popd
 
 
 %changelog
+* Tue Jan 14 2025 Miroslav Rezanina <mrezanin@redhat.com> - 12.0.0-2
+- Synchronize with Fedora Rawhide
+  Resolves: RHEL-73824
+
 * Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 11.0.1-6
 - Bump release for October 2024 mass rebuild:
   Resolves: RHEL-64018