Need WTFCrash workaround for shipping SafariForWebKitDevelopment binaries.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Feb 2016 00:59:11 +0000 (00:59 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Feb 2016 00:59:11 +0000 (00:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=154125

Reviewed by Joseph Pecoraro.

Presently shipping SafariForWebKitDevelopment binaries still expect to link to a
WTFCrash function.  We need to provide this function as a workaround until we can
update SafariForWebKitDevelopment to use the new inlined version.

We do this by doing:
1. Make WTFCrashImpl() the sole function for implementing a crash.
   The CRASH() macro is now defined to be WTFCrashImpl() instead of WTFCrash().
2. Renamed the legacy WTFCrash() to WTFCrashImpl() for debug or non-Darwin builds.
   For (non-debug && OS(DARWIN)) builds, WTFCrashImpl() will be an inlined
   function with an asm statement that issues a breakpoint trap.
3. Implement WTFCrash() as a function that calls CRASH().
   This satisfies the need of shipping SafariForWebKitDevelopment binaries.
4. Change WTFCrashWithSecurityImplication() to call CRASH().
   This ensures that we have a consistent implementation of how we crash.
5. Changed WTFLogAlwaysAndCrash() to call CRASH() instead of WTFCrash().
   This is just to have consistency in that all code in the WebKit project
   now crashes by calling CRASH(), not WTFCrash().

* wtf/Assertions.cpp:
* wtf/Assertions.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196458 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Assertions.h

index c4cf897..bd526ec 100644 (file)
@@ -1,3 +1,31 @@
+2016-02-11  Mark Lam  <mark.lam@apple.com>
+
+        Need WTFCrash workaround for shipping SafariForWebKitDevelopment binaries.
+        https://bugs.webkit.org/show_bug.cgi?id=154125
+
+        Reviewed by Joseph Pecoraro.
+
+        Presently shipping SafariForWebKitDevelopment binaries still expect to link to a
+        WTFCrash function.  We need to provide this function as a workaround until we can
+        update SafariForWebKitDevelopment to use the new inlined version.
+
+        We do this by doing:
+        1. Make WTFCrashImpl() the sole function for implementing a crash.
+           The CRASH() macro is now defined to be WTFCrashImpl() instead of WTFCrash().
+        2. Renamed the legacy WTFCrash() to WTFCrashImpl() for debug or non-Darwin builds.
+           For (non-debug && OS(DARWIN)) builds, WTFCrashImpl() will be an inlined
+           function with an asm statement that issues a breakpoint trap.
+        3. Implement WTFCrash() as a function that calls CRASH().
+           This satisfies the need of shipping SafariForWebKitDevelopment binaries.
+        4. Change WTFCrashWithSecurityImplication() to call CRASH().
+           This ensures that we have a consistent implementation of how we crash.
+        5. Changed WTFLogAlwaysAndCrash() to call CRASH() instead of WTFCrash().
+           This is just to have consistency in that all code in the WebKit project
+           now crashes by calling CRASH(), not WTFCrash().
+
+        * wtf/Assertions.cpp:
+        * wtf/Assertions.h:
+
 2016-02-09  Mark Lam  <mark.lam@apple.com>
 
         Changed WTFCrash to not trash the crash site register state.
index 71bb0f7..d2e342b 100644 (file)
@@ -313,7 +313,7 @@ void WTFSetCrashHook(WTFCrashHookFunction function)
 }
 
 #if !defined(NDEBUG) || !OS(DARWIN)
-void WTFCrash()
+void WTFCrashImpl()
 {
     if (globalHook)
         globalHook();
@@ -329,18 +329,17 @@ void WTFCrash()
 }
 #endif // !defined(NDEBUG) || !OS(DARWIN)
     
+// We need to keep WTFCrash() around (even on non-debug OS(DARWIN) builds) as a workaround
+// for presently shipping (circa early 2016) SafariForWebKitDevelopment binaries which still
+// expects to link to it.
+void WTFCrash()
+{
+    CRASH();
+}
+
 void WTFCrashWithSecurityImplication()
 {
-    if (globalHook)
-        globalHook();
-    WTFReportBacktrace();
-    *(int *)(uintptr_t)0xfbadbeef = 0;
-    // More reliable, but doesn't say fbadbeef.
-#if COMPILER(GCC_OR_CLANG)
-    __builtin_trap();
-#else
-    ((void(*)())0)();
-#endif
+    CRASH();
 }
 
 #if HAVE(SIGNAL_H)
@@ -456,7 +455,7 @@ void WTFLogAlwaysAndCrash(const char* format, ...)
     va_start(args, format);
     WTFLogAlwaysV(format, args);
     va_end(args);
-    WTFCrash();
+    CRASH();
 }
 
 WTFLogChannel* WTFLogChannelByName(WTFLogChannel* channels[], size_t count, const char* name)
index f75e35f..5a2fbff 100644 (file)
@@ -151,19 +151,12 @@ WTF_EXPORT_PRIVATE void WTFInstallReportBacktraceOnCrashHook();
 
 WTF_EXPORT_PRIVATE bool WTFIsDebuggerAttached();
 
-#ifdef __cplusplus
-}
-#endif
-
 #ifndef CRASH
-#define CRASH() WTFCrash()
+#define CRASH() WTFCrashImpl()
 #endif
 
-#ifdef __cplusplus
-extern "C" {
-#endif
 #if defined(NDEBUG) && OS(DARWIN)
-ALWAYS_INLINE NO_RETURN_DUE_TO_CRASH void WTFCrash()
+ALWAYS_INLINE NO_RETURN_DUE_TO_CRASH void WTFCrashImpl()
 {
     // Crash with a SIGTRAP i.e EXC_BREAKPOINT.
     // We are not using __builtin_trap because it is only guaranteed to abort, but not necessarily
@@ -180,21 +173,17 @@ ALWAYS_INLINE NO_RETURN_DUE_TO_CRASH void WTFCrash()
     __builtin_unreachable();
 }
 #else
-WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrash();
+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashImpl();
 #endif
 
-#ifdef __cplusplus
-}
-#endif
+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrash();
 
 #ifndef CRASH_WITH_SECURITY_IMPLICATION
 #define CRASH_WITH_SECURITY_IMPLICATION() WTFCrashWithSecurityImplication()
 #endif
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-    WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashWithSecurityImplication();
+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashWithSecurityImplication();
+
 #ifdef __cplusplus
 }
 #endif