<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[196458] trunk/Source/WTF</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/196458">196458</a></dd>
<dt>Author</dt> <dd>mark.lam@apple.com</dd>
<dt>Date</dt> <dd>2016-02-11 16:59:11 -0800 (Thu, 11 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>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 &amp;&amp; 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:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfAssertionscpp">trunk/Source/WTF/wtf/Assertions.cpp</a></li>
<li><a href="#trunkSourceWTFwtfAssertionsh">trunk/Source/WTF/wtf/Assertions.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (196457 => 196458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-02-12 00:40:17 UTC (rev 196457)
+++ trunk/Source/WTF/ChangeLog        2016-02-12 00:59:11 UTC (rev 196458)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2016-02-11  Mark Lam  &lt;mark.lam@apple.com&gt;
+
+        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 &amp;&amp; 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:
+
</ins><span class="cx"> 2016-02-09  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Changed WTFCrash to not trash the crash site register state.
</span></span></pre></div>
<a id="trunkSourceWTFwtfAssertionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Assertions.cpp (196457 => 196458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Assertions.cpp        2016-02-12 00:40:17 UTC (rev 196457)
+++ trunk/Source/WTF/wtf/Assertions.cpp        2016-02-12 00:59:11 UTC (rev 196458)
</span><span class="lines">@@ -313,7 +313,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if !defined(NDEBUG) || !OS(DARWIN)
</span><del>-void WTFCrash()
</del><ins>+void WTFCrashImpl()
</ins><span class="cx"> {
</span><span class="cx">     if (globalHook)
</span><span class="cx">         globalHook();
</span><span class="lines">@@ -329,18 +329,17 @@
</span><span class="cx"> }
</span><span class="cx"> #endif // !defined(NDEBUG) || !OS(DARWIN)
</span><span class="cx">     
</span><ins>+// 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();
+}
+
</ins><span class="cx"> void WTFCrashWithSecurityImplication()
</span><span class="cx"> {
</span><del>-    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
</del><ins>+    CRASH();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(SIGNAL_H)
</span><span class="lines">@@ -456,7 +455,7 @@
</span><span class="cx">     va_start(args, format);
</span><span class="cx">     WTFLogAlwaysV(format, args);
</span><span class="cx">     va_end(args);
</span><del>-    WTFCrash();
</del><ins>+    CRASH();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WTFLogChannel* WTFLogChannelByName(WTFLogChannel* channels[], size_t count, const char* name)
</span></span></pre></div>
<a id="trunkSourceWTFwtfAssertionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Assertions.h (196457 => 196458)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Assertions.h        2016-02-12 00:40:17 UTC (rev 196457)
+++ trunk/Source/WTF/wtf/Assertions.h        2016-02-12 00:59:11 UTC (rev 196458)
</span><span class="lines">@@ -151,19 +151,12 @@
</span><span class="cx"> 
</span><span class="cx"> WTF_EXPORT_PRIVATE bool WTFIsDebuggerAttached();
</span><span class="cx"> 
</span><del>-#ifdef __cplusplus
-}
-#endif
-
</del><span class="cx"> #ifndef CRASH
</span><del>-#define CRASH() WTFCrash()
</del><ins>+#define CRASH() WTFCrashImpl()
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#ifdef __cplusplus
-extern &quot;C&quot; {
-#endif
</del><span class="cx"> #if defined(NDEBUG) &amp;&amp; OS(DARWIN)
</span><del>-ALWAYS_INLINE NO_RETURN_DUE_TO_CRASH void WTFCrash()
</del><ins>+ALWAYS_INLINE NO_RETURN_DUE_TO_CRASH void WTFCrashImpl()
</ins><span class="cx"> {
</span><span class="cx">     // Crash with a SIGTRAP i.e EXC_BREAKPOINT.
</span><span class="cx">     // We are not using __builtin_trap because it is only guaranteed to abort, but not necessarily
</span><span class="lines">@@ -180,22 +173,18 @@
</span><span class="cx">     __builtin_unreachable();
</span><span class="cx"> }
</span><span class="cx"> #else
</span><del>-WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrash();
</del><ins>+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashImpl();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#ifdef __cplusplus
-}
-#endif
</del><ins>+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrash();
</ins><span class="cx"> 
</span><span class="cx"> #ifndef CRASH_WITH_SECURITY_IMPLICATION
</span><span class="cx"> #define CRASH_WITH_SECURITY_IMPLICATION() WTFCrashWithSecurityImplication()
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashWithSecurityImplication();
+
</ins><span class="cx"> #ifdef __cplusplus
</span><del>-extern &quot;C&quot; {
-#endif
-    WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashWithSecurityImplication();
-#ifdef __cplusplus
</del><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>