From 66b394ab632bafa747ef7300f7042950d2d8de3e Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Mon, 15 Jun 2020 12:26:58 -0400 Subject: [PATCH] fix skia attribute overrides with gcc --- ...0.4103.97-skia-gcc-no_sanitize-fixes.patch | 48 +++++++++++++++++++ chromium.spec | 9 +++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 chromium-83.0.4103.97-skia-gcc-no_sanitize-fixes.patch diff --git a/chromium-83.0.4103.97-skia-gcc-no_sanitize-fixes.patch b/chromium-83.0.4103.97-skia-gcc-no_sanitize-fixes.patch new file mode 100644 index 00000000..e337151c --- /dev/null +++ b/chromium-83.0.4103.97-skia-gcc-no_sanitize-fixes.patch @@ -0,0 +1,48 @@ +diff -up chromium-83.0.4103.97/third_party/skia/include/private/SkFloatingPoint.h.gcc-float-divide-by-zero chromium-83.0.4103.97/third_party/skia/include/private/SkFloatingPoint.h +--- chromium-83.0.4103.97/third_party/skia/include/private/SkFloatingPoint.h.gcc-float-divide-by-zero 2020-06-15 11:09:01.218290365 -0400 ++++ chromium-83.0.4103.97/third_party/skia/include/private/SkFloatingPoint.h 2020-06-15 11:14:15.900470624 -0400 +@@ -159,7 +159,15 @@ static inline int64_t sk_float_saturate2 + // Cast double to float, ignoring any warning about too-large finite values being cast to float. + // Clang thinks this is undefined, but it's actually implementation defined to return either + // the largest float or infinity (one of the two bracketing representable floats). Good enough! ++#if defined(__GNUC__) && __GNUC__ >= 8 ++__attribute__((no_sanitize("float-cast-overflow"))) ++#else ++# if defined(__GNUC__) ++__attribute__((no_sanitize_undefined)) ++# else + [[clang::no_sanitize("float-cast-overflow")]] ++# endif ++#endif + static inline float sk_double_to_float(double x) { + return static_cast(x); + } +@@ -226,12 +234,28 @@ static inline float sk_float_rsqrt(float + // IEEE defines how float divide behaves for non-finite values and zero-denoms, but C does not + // so we have a helper that suppresses the possible undefined-behavior warnings. + ++#if defined(__GNUC__) && __GNUC__ >= 8 ++__attribute__((no_sanitize("float-divide-by-zero"))) ++#else ++# if defined(__GNUC__) ++__attribute__((no_sanitize_undefined)) ++# else + [[clang::no_sanitize("float-divide-by-zero")]] ++# endif ++#endif + static inline float sk_ieee_float_divide(float numer, float denom) { + return numer / denom; + } + ++#if defined(__GNUC__) && __GNUC__ >= 8 ++__attribute__((no_sanitize("float-divide-by-zero"))) ++#else ++# if defined(__GNUC__) ++__attribute__((no_sanitize_undefined)) ++# else + [[clang::no_sanitize("float-divide-by-zero")]] ++# endif ++#endif + static inline double sk_ieee_double_divide(double numer, double denom) { + return numer / denom; + } diff --git a/chromium.spec b/chromium.spec index 872ff49d..fd84a8f2 100644 --- a/chromium.spec +++ b/chromium.spec @@ -167,7 +167,7 @@ Name: chromium%{chromium_channel}%{nsuffix} Name: chromium%{chromium_channel} %endif Version: %{majorversion}.0.4103.97 -Release: 3%{?dist} +Release: 4%{?dist} %if %{?freeworld} %if %{?shared} # chromium-libs-media-freeworld @@ -267,6 +267,8 @@ Patch87: chromium-83-gcc-serviceworker.patch Patch88: chromium-83-gcc-ozone-wayland.patch # https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-83-gcc-compatibility.patch Patch90: chromium-83-gcc-compatibility.patch +# Fix skia's handling of no_sanitize attributes to work with gcc +Patch91: chromium-83.0.4103.97-skia-gcc-no_sanitize-fixes.patch # Use lstdc++ on EPEL7 only @@ -850,6 +852,7 @@ udev. %patch87 -p1 -b .gcc-serviceworker %patch88 -p1 -b .gcc-ozone-wayland %patch90 -p1 -b .gcc-compatibility +%patch91 -p1 -b .gcc-no_sanitize # Fedora branded user agent %if 0%{?fedora} @@ -1807,6 +1810,10 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %changelog +* Mon Jun 15 2020 Tom Callaway - 83.0.4103.97-4 +- use old cups handling on epel7 +- fix skia attribute overrides with gcc + * Wed Jun 10 2020 Tom Callaway - 83.0.4103.97-3 - fix issue on epel7 where linux/kcmp.h does not exist