Go to file
Mike Klein f800c1d71b refine __chkstk_darwin() workaround
Apple's Clang has a bug rooted in these three conflicting constraints:

   A) before we save a large amount of state to the stack, call
      __chkstk_darwin() to um, do something to make that safe.  It's
      some sort of debug feature that involves marking various pages
      as writable and unwritable to catch stack overflows.

   B) before calling any function that doesn't use AVX, which includes
      __chkstk_darwin(), call vzeroupper as a performance enhancement

   C) we must save a large amount of state to the stack before it's
      sound to call vzeroupper, so it can be restored after the
      function call.  Otherwise the upper 128 bits of all ymm registers
      will be lost, zeroed.

There's no way to order A,B, and C to make them all happy.

Saving registers before zeroing them (C) is a correctness issue, so it's
got to take precedence.  Zeroing the upper bits of ymm registers before
calling into code that's not ymm-aware (B) is a performance issue only,
and not actually even needed for __chkstk_darwin().  The whole
__chkstk_darwin() thing (A) is nice a safety feature we'll have to live
without.

The best fix would be to make it so that Clang doesn't issue vzeroupper
before __chkstk_darwin(), but we can't do that here.  The next best
thing, since mucking with correctness isn't really viable, is to turn of
the stack checking.

Until now we've been using -O1 to reduce the stack usage down low enough
that the stack check calls are not generated.  Maybe there's a known
safe single page, and the call's only needed when going above that?

Anyway, let's try focusing our workaround on -fstack-check itself.

Bug: skia:9709
Change-Id: Ie236101d2d464526b33e327db1f94574a7a86948
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/294326
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2020-06-04 18:27:16 +00:00
animations first cut at a checkbox 2009-10-21 19:41:10 +00:00
bench Revert "Allow printf-style formatting to be used in SK_ABORT." 2020-06-01 19:32:08 +00:00
bin roll GN 2020-04-01 17:02:23 +00:00
build/fuchsia Remove FIDL C bindings usages 2020-05-26 16:40:29 +00:00
build_overrides Use Dawn's BUILD.gn instead of defining another one for Skia. 2020-04-13 23:26:31 +00:00
client_utils/android Remove SkBitmapRegionDecoder and SkBRDAllocator 2020-06-01 20:56:29 +00:00
dm Update DDL test harness to better match OOP-R 2020-05-29 15:58:05 +00:00
docker Support specifying hash and patch_ref in skia-release & skia-wasm-release Dockerfiles 2020-05-06 20:39:04 +00:00
docs/examples Remove SkSurface::MakeFromBackendTextureAsRenderTarget from public API 2020-05-29 15:09:52 +00:00
example Revert "Revert "switch to new filltype for SkPath"" 2019-11-26 17:43:14 +00:00
experimental Upgrade to emscripten 1.39.16 2020-05-21 18:31:21 +00:00
fuzz Revert "Revert "move onto new factories for SkMatrix"" 2020-05-21 16:58:39 +00:00
gm Update GrFragmentProcessor::SwizzleOutput to use a child FP. 2020-06-04 17:31:46 +00:00
gn Update GrFragmentProcessor::SwizzleOutput to use a child FP. 2020-06-04 17:31:46 +00:00
include Move addToAtlas to GrAtlasManager 2020-06-04 16:16:13 +00:00
infra Update Go Deps 2020-06-03 05:38:53 +00:00
modules Regularize SkFontMgr for CoreText build. 2020-06-04 16:45:09 +00:00
platform_tools Remove SkAtlasTextTarget 2020-06-04 03:52:35 +00:00
resources Runtime effect implementation of color cube filter 2020-05-28 15:45:48 +00:00
samplecode Regularize SkFontMgr for CoreText build. 2020-06-04 16:45:09 +00:00
site Fix markdown typo in the style guide 2020-05-29 16:24:57 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src remove templates from SkSwizzler_opts 2020-06-04 17:43:06 +00:00
tests Dawn: skip PromiseImageShutdownTest and TextureIdleProcTest. 2020-06-04 16:16:12 +00:00
third_party Hide ICU C++ API from Skia users. 2020-05-29 21:43:19 +00:00
tools Reland "Request specific ANGLE context versions." 2020-06-04 12:49:20 +00:00
.clang-format Disable BinPackParameters in .clang-format 2020-03-27 14:32:40 +00:00
.clang-tidy add google-build-namespaces to clang-tidy checks 2018-12-12 16:33:59 +00:00
.gitignore clean up some .gitignores 2019-05-15 19:55:45 +00:00
.gn Basic standalone GN configs. 2016-07-21 12:25:45 -07:00
AUTHORS Fixing a bug in SkOpEdgeBuilder::walk that causes pathOps to fail when cubic segment is reducable 2020-04-21 16:56:54 +00:00
BUILD.gn refine __chkstk_darwin() workaround 2020-06-04 18:27:16 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll SwiftShader from 3ad285a60d82 to 0711869b5f20 (1 revision) 2020-06-04 05:19:19 +00:00
go.mod Update Go Deps 2020-06-04 05:34:59 +00:00
go.sum Update Go Deps 2020-06-04 05:34:59 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
OWNERS add OWNERS file 2017-12-01 19:50:19 +00:00
PRESUBMIT.py PRESUBMIT: Don't check formatting of deleted files 2020-04-08 10:36:09 +00:00
public.bzl Remove SkAtlasTextTarget 2020-06-04 03:52:35 +00:00
README Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt [canvaskit] Make SkCanvas.drawColor/clear take SkColor4f 2020-06-03 16:03:38 +00:00
whitespace.txt Whitespace change to re-trigger Mac/iOS tests 2020-02-23 20:55:01 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.