Bug 1411401 Apply a local MinGW patch to work around a bug with GCC's stdcall/aggregate ABI draft
authorTom Ritter <tom@mozilla.com>
Wed, 25 Oct 2017 15:04:35 -0500 (2017-10-25)
changeset 793756 7fbad245197b156ab63724b4040d7135ecf4f8e6
parent 793741 99f80b646538faba2718b090597d0294b9f89547
push id109486
push userbmo:tom@mozilla.com
push dateThu, 10 May 2018 17:16:09 +0000 (2018-05-10)
bugs1411401, 64384, 201412, 118470
milestone60.0
Bug 1411401 Apply a local MinGW patch to work around a bug with GCC's stdcall/aggregate ABI Background https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64384 https://sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/?style=threaded&viewmonth=201412&viewday=23 https://source.winehq.org/git/wine.git/commitdiff/b42a15513eaa973b40ab967014b311af64acbb98 https://www.winehq.org/pipermail/wine-devel/2017-July/118470.html MozReview-Commit-ID: A8chwvCN6WD
build/unix/build-gcc/GetSize.patch
taskcluster/scripts/misc/build-gcc-mingw32.sh
new file mode 100644
--- /dev/null
+++ b/build/unix/build-gcc/GetSize.patch
@@ -0,0 +1,168 @@
+diff --git a/mingw-w64-headers/include/d2d1.h b/mingw-w64-headers/include/d2d1.h
+old mode 100644
+new mode 100755
+index bc457850..46be7cad
+--- a/mingw-w64-headers/include/d2d1.h
++++ b/mingw-w64-headers/include/d2d1.h
+@@ -664,9 +664,30 @@ DEFINE_GUID(IID_ID2D1Bitmap, 0xa2296057,0xea42,0x4099,0x98,0x3b,0x53,0x9f,0xb6,0
+ #ifndef D2D_USE_C_DEFINITIONS
+ 
+ interface ID2D1Bitmap : public ID2D1Image {
+-    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
+-    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(void) const PURE;
+-    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(void) const PURE;
++    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
++        D2D1_SIZE_F *__ret) = 0;
++    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
++        )
++    {
++        D2D1_SIZE_F __ret;
++        return *GetSize(&__ret);
++    }
++    virtual D2D1_SIZE_U* STDMETHODCALLTYPE GetPixelSize(
++        D2D1_SIZE_U *__ret) = 0;
++    D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
++        )
++    {
++        D2D1_SIZE_U __ret;
++        return *GetPixelSize(&__ret);
++    }
++    virtual D2D1_PIXEL_FORMAT* STDMETHODCALLTYPE GetPixelFormat(
++        D2D1_PIXEL_FORMAT *__ret) = 0;
++    D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
++        )
++    {
++        D2D1_PIXEL_FORMAT __ret;
++        return *GetPixelFormat(&__ret);
++    }
+     STDMETHOD_(void, GetDpi)(FLOAT *dpiX, FLOAT *dpiY) const PURE;
+     STDMETHOD(CopyFromBitmap)(const D2D1_POINT_2U *destPoint, ID2D1Bitmap *bitmap, const D2D1_RECT_U *srcRect) PURE;
+     STDMETHOD(CopyFromRenderTarget)(const D2D1_POINT_2U *destPoint, ID2D1RenderTarget *renderTarget, const D2D1_RECT_U *srcRect) PURE;
+@@ -809,11 +830,40 @@ interface ID2D1RenderTarget : public ID2D1Resource {
+     STDMETHOD_(void, Clear)(const D2D1_COLOR_F *clearColor = NULL) PURE;
+     STDMETHOD_(void, BeginDraw)(void) PURE;
+     STDMETHOD(EndDraw)(D2D1_TAG *tag1 = NULL, D2D1_TAG *tag2 = NULL) PURE;
+-    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(void) const PURE;
++    
++
++    virtual D2D1_PIXEL_FORMAT* STDMETHODCALLTYPE GetPixelFormat(
++        D2D1_PIXEL_FORMAT *__ret) = 0;
++    D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
++        )
++    {
++        D2D1_PIXEL_FORMAT __ret;
++        return *GetPixelFormat(&__ret);
++    }
++    
++
+     STDMETHOD_(void, SetDpi)(FLOAT dpiX, FLOAT dpiY) PURE;
+     STDMETHOD_(void, GetDpi)(FLOAT *dpiX, FLOAT *dpiY) const PURE;
+-    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
+-    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(void) const PURE;
++    
++    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
++        D2D1_SIZE_F *__ret) = 0;
++    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
++        )
++    {
++        D2D1_SIZE_F __ret;
++        return *GetSize(&__ret);
++    }
++
++    virtual D2D1_SIZE_U* STDMETHODCALLTYPE GetPixelSize(
++        D2D1_SIZE_U *__ret) = 0;
++    D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
++        )
++    {
++        D2D1_SIZE_U __ret;
++        return *GetPixelSize(&__ret);
++    }
++
++
+     STDMETHOD_(UINT32, GetMaximumBitmapSize)(void) const PURE;
+     STDMETHOD_(BOOL, IsSupported)(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) const PURE;
+ 
+@@ -1962,7 +2012,14 @@ DEFINE_GUID(IID_ID2D1Layer, 0x2cd9069b,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0x
+ #ifndef D2D_USE_C_DEFINITIONS
+ 
+ interface ID2D1Layer : public ID2D1Resource {
+-    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
++    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
++        D2D1_SIZE_F *__ret) = 0;
++    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
++        )
++    {
++        D2D1_SIZE_F __ret;
++        return *GetSize(&__ret);
++    }
+ };
+ 
+ #else
+@@ -1992,8 +2049,22 @@ DEFINE_GUID(IID_ID2D1LinearGradientBrush, 0x2cd906ab,0x12e2,0x11dc,0x9f,0xed,0x0
+ interface ID2D1LinearGradientBrush : public ID2D1Brush {
+     STDMETHOD_(void, SetStartPoint)(D2D1_POINT_2F startPoint) PURE;
+     STDMETHOD_(void, SetEndPoint)(D2D1_POINT_2F endPoint) PURE;
+-    STDMETHOD_(D2D1_POINT_2F, GetStartPoint)(void) const PURE;
+-    STDMETHOD_(D2D1_POINT_2F, GetEndPoint)(void) const PURE;
++    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetStartPoint(
++        D2D1_POINT_2F *__ret) = 0;
++    D2D1_POINT_2F STDMETHODCALLTYPE GetStartPoint(
++        )
++    {
++        D2D1_POINT_2F __ret;
++        return *GetStartPoint(&__ret);
++    }
++    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetEndPoint(
++        D2D1_POINT_2F *__ret) = 0;
++    D2D1_POINT_2F STDMETHODCALLTYPE GetEndPoint(
++        )
++    {
++        D2D1_POINT_2F __ret;
++        return *GetEndPoint(&__ret);
++    }
+     STDMETHOD_(void, GetGradientStopCollection)(ID2D1GradientStopCollection **gradientStopCollection) const PURE;
+ };
+ 
+@@ -2116,8 +2187,24 @@ interface ID2D1RadialGradientBrush : public ID2D1Brush {
+     STDMETHOD_(void, SetGradientOriginOffset)(D2D1_POINT_2F gradientOriginOffset) PURE;
+     STDMETHOD_(void, SetRadiusX)(FLOAT radiusX) PURE;
+     STDMETHOD_(void, SetRadiusY)(FLOAT radiusY) PURE;
+-    STDMETHOD_(D2D1_POINT_2F, GetCenter)(void) const PURE;
+-    STDMETHOD_(D2D1_POINT_2F, GetGradientOriginOffset)(void) const PURE;
++    
++    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetCenter(
++        D2D1_POINT_2F *__ret) = 0;
++    D2D1_POINT_2F STDMETHODCALLTYPE GetCenter(
++        )
++    {
++        D2D1_POINT_2F __ret;
++        return *GetCenter(&__ret);
++    }
++    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetGradientOriginOffset(
++        D2D1_POINT_2F *__ret) = 0;
++    D2D1_POINT_2F STDMETHODCALLTYPE GetGradientOriginOffset(
++        )
++    {
++        D2D1_POINT_2F __ret;
++        return *GetGradientOriginOffset(&__ret);
++    }
++    
+     STDMETHOD_(FLOAT, GetRadiusX)(void) const PURE;
+     STDMETHOD_(FLOAT, GetRadiusY)(void) const PURE;
+     STDMETHOD_(void, GetGradientStopCollection)(ID2D1GradientStopCollection **gradientStopCollection) const PURE;
+@@ -2251,7 +2338,14 @@ DEFINE_GUID(IID_ID2D1SolidColorBrush, 0x2cd906a9,0x12e2,0x11dc,0x9f,0xed,0x00,0x
+ 
+ interface ID2D1SolidColorBrush : public ID2D1Brush {
+     STDMETHOD_(void, SetColor)(const D2D1_COLOR_F *color) PURE;
+-    STDMETHOD_(D2D1_COLOR_F, GetColor)(void) const PURE;
++    virtual D2D1_COLOR_F* STDMETHODCALLTYPE GetColor(
++        D2D1_COLOR_F *__ret) = 0;
++    D2D1_COLOR_F STDMETHODCALLTYPE GetColor(
++        )
++    {
++        D2D1_COLOR_F __ret;
++        return *GetColor(&__ret);
++    }
+ 
+     void SetColor(const D2D1_COLOR_F &color) {
+         SetColor(&color);
--- a/taskcluster/scripts/misc/build-gcc-mingw32.sh
+++ b/taskcluster/scripts/misc/build-gcc-mingw32.sh
@@ -37,16 +37,19 @@ cat > $root_dir/checksums <<EOF
 369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88  binutils-2.27.tar.bz2
 850bf21eafdfe5cd5f6827148184c08c4a0852a37ccf36ce69855334d2c914d4  gcc-6.4.0.tar.xz
 752079520b4690531171d0f4532e40f08600215feefede70b24fabdc6f1ab160  gmp-5.1.3.tar.bz2
 8ceebbf4d9a81afa2b4449113cee4b7cb14a687d7a549a963deb5e2a41458b6b  isl-0.15.tar.bz2
 ae79f8d41d8a86456b68607e9ca398d00f8b7342d1d83bcf4428178ac45380c7  mpc-0.8.2.tar.gz
 ca498c1c7a74dd37a576f353312d1e68d490978de4395fa28f1cbd46a364e658  mpfr-3.1.5.tar.bz2
 EOF
 
+
+
 prepare
 prepare_mingw
+apply_patch mingw-w64 $data_dir/GetSize.patch
 build_binutils
 build_gcc_and_mingw
 
 # Put a tarball in the artifacts dir
 mkdir -p $UPLOAD_DIR
 cp $root_dir/mingw32.tar.* $UPLOAD_DIR