WebKit Bugzilla
Attachment 369974 Details for
Bug 197920
: [CMake] Add support for building with CFI
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
cfi.diff (text/plain), 4.74 KB, created by
Christopher Reid
on 2019-05-15 11:36:54 PDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Christopher Reid
Created:
2019-05-15 11:36:54 PDT
Size:
4.74 KB
patch
obsolete
>diff --git a/ChangeLog b/ChangeLog >index 890b2d8f94b..c776e57767a 100644 >--- a/ChangeLog >+++ b/ChangeLog >@@ -1,3 +1,23 @@ >+2019-05-15 Christopher Reid <chris.reid@sony.com> >+ >+ [CMake] Add support for building with CFI >+ https://bugs.webkit.org/show_bug.cgi?id=197920 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Support cfi and cfi-debug modes for ENABLE_SANITIZERS cmake variable. >+ cfi-debug is using cfi recovery flags to not trap on errors and continue exectution. >+ >+ JSC with CFI enabled and JIT disabled is mostly mostly passing the same amount of jsc >+ tests as without CFI and LTO. The cfi *-cast checks are currently disabled >+ per Yusuke's suggestion in https://bugs.webkit.org/show_bug.cgi?id=196472. >+ >+ Also moved the lpthreads link flag to only be used with gcc as it was causing >+ build errors on PlayStation. >+ >+ * Source/cmake/OptionsGTK.cmake: >+ * Source/cmake/WebKitCompilerFlags.cmake: >+ > 2019-05-07 Keith Rollin <krollin@apple.com> > > Add option to build-webkit to control whether or not XCBuild is used >diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake >index d290beffdd9..9b5c6358316 100644 >--- a/Source/cmake/OptionsGTK.cmake >+++ b/Source/cmake/OptionsGTK.cmake >@@ -374,6 +374,10 @@ if (ENABLED_COMPILER_SANITIZERS) > set(ENABLE_INTROSPECTION OFF) > endif () > >+if (ENABLED_HIDDEN_VISIBILITY) >+ SET_AND_EXPOSE_TO_BUILD(USE_EXPORT_MACROS ON) >+endif () >+ > # Override the cached variables, gtk-doc and gobject-introspection do not really work when cross-building. > if (CMAKE_CROSSCOMPILING) > set(ENABLE_GTKDOC OFF) >diff --git a/Source/cmake/WebKitCompilerFlags.cmake b/Source/cmake/WebKitCompilerFlags.cmake >index f56a47bbe4b..3ff16cc5541 100644 >--- a/Source/cmake/WebKitCompilerFlags.cmake >+++ b/Source/cmake/WebKitCompilerFlags.cmake >@@ -184,7 +184,7 @@ if (COMPILER_IS_GCC_OR_CLANG) > find_library(CLANG_ASAN_LIBRARY clang_rt.asan_dynamic_runtime_thunk-x86_64 ${CLANG_LIB_PATH}) > find_library(CLANG_ASAN_RT_LIBRARY clang_rt.asan_dynamic-x86_64 PATHS ${CLANG_LIB_PATH}) > set(SANITIZER_LINK_FLAGS "\"${CLANG_ASAN_LIBRARY}\" \"${CLANG_ASAN_RT_LIBRARY}\"") >- else () >+ elseif (CMAKE_COMPILER_IS_GNUCXX) > set(SANITIZER_LINK_FLAGS "-lpthread") > endif () > >@@ -212,6 +212,20 @@ if (COMPILER_IS_GCC_OR_CLANG) > set(SANITIZER_COMPILER_FLAGS "-fsanitize=leak ${SANITIZER_COMPILER_FLAGS}") > set(SANITIZER_LINK_FLAGS "-fsanitize=leak ${SANITIZER_LINK_FLAGS}") > >+ elseif (${SANITIZER} MATCHES "cfi" AND COMPILER_IS_CLANG) >+ if (NOT LTO_MODE) >+ message(FATAL_ERROR "CFI requires a LTO mode specified") >+ endif () >+ >+ if (${SANITIZER} MATCHES "cfi-debug") >+ set(CFI_FLAGS "-fno-sanitize-trap=cfi -fsanitize-recover=cfi") >+ endif() >+ >+ set(CFI_FLAGS "${CFI_FLAGS} -fvisibility=hidden -fsanitize-cfi-cross-dso -fsanitize=cfi") >+ set(CFI_FLAGS "${CFI_FLAGS} -fno-sanitize=cfi-derived-cast,cfi-unrelated-cast -fsanitize-blacklist=${TOOLS_DIR}/cfi/blacklist.txt") >+ set(SANITIZER_COMPILER_FLAGS "${CFI_FLAGS} ${SANITIZER_COMPILER_FLAGS}") >+ set(SANITIZER_LINK_FLAGS "${CFI_FLAGS} ${SANITIZER_LINK_FLAGS}") >+ > else () > message(FATAL_ERROR "Unsupported sanitizer: ${SANITIZER}") > endif () >@@ -229,6 +243,10 @@ if (NOT MSVC) > string(REGEX MATCHALL "-fsanitize=[^ ]*" ENABLED_COMPILER_SANITIZERS ${CMAKE_CXX_FLAGS}) > endif () > >+if (NOT MSVC) >+ string(REGEX MATCHALL "-fvisibility=hidden" ENABLED_HIDDEN_VISIBILITY ${CMAKE_CXX_FLAGS}) >+endif () >+ > if (UNIX AND NOT APPLE AND NOT ENABLED_COMPILER_SANITIZERS) > set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${CMAKE_SHARED_LINKER_FLAGS}") > endif () >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index bf3ca1d766f..fb1b65f1968 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,12 @@ >+2019-05-15 Christopher Reid <chris.reid@sony.com> >+ >+ [CMake] Add support for building with CFI >+ https://bugs.webkit.org/show_bug.cgi?id=197920 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * cfi/blacklist.txt: Added. >+ > 2019-05-07 Oriol Brufau <obrufau@igalia.com> > > Unreviewed. Add myself as a committer. >diff --git a/Tools/cfi/blacklist.txt b/Tools/cfi/blacklist.txt >new file mode 100644 >index 00000000000..3215ba214b2 >--- /dev/null >+++ b/Tools/cfi/blacklist.txt >@@ -0,0 +1,9 @@ >+# Constructs a function pointer to call from a uintptr_t. >+[cfi-icall] >+fun:*getInitializedOnMainThread* >+ >+# JS API callbacks >+[cfi-icall] >+src:*Source/JavaScriptCore/API/JSCallback*Function*.h >+src:*Source/JavaScriptCore/API/APICallbackFunction.h >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197920
:
369974
|
369975