Blob Blame History Raw
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 "";