<!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>[199299] trunk</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/199299">199299</a></dd>
<dt>Author</dt> <dd>oliver@apple.com</dd>
<dt>Date</dt> <dd>2016-04-11 12:00:48 -0700 (Mon, 11 Apr 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove compile time define for SEPARATED_HEAP
https://bugs.webkit.org/show_bug.cgi?id=155508

Reviewed by Mark Lam.

Source/JavaScriptCore:

Remove the SEPARATED_HEAP compile time flag. The separated
heap is available, but off by default, on x86_64, ARMv7, and
ARM64.

Working through the issues that happened last time essentially
required implementing the ARMv7 path for the separated heap
just so I could find all the ways it was going wrong.

We fixed all the logic by making the branch and jump logic in
the linker and assemblers take two parameters, the location to
write to, and the location we'll actually be writing to. We
need to do this because it's no longer sufficient to compute
jumps relative to region the linker is writing to.

The repatching jump, branch, and call functions only need the
executable address as the patching is performed directly using
performJITMemcpy function which works in terms of the executable
address.

There is no performance impact on jsc-benchmarks with the separate
heap either emabled or disabled.

* Configurations/FeatureDefines.xcconfig:
* assembler/ARM64Assembler.h:
(JSC::ARM64Assembler::linkJump):
(JSC::ARM64Assembler::linkCall):
(JSC::ARM64Assembler::relinkJump):
(JSC::ARM64Assembler::relinkCall):
(JSC::ARM64Assembler::link):
(JSC::ARM64Assembler::linkJumpOrCall):
(JSC::ARM64Assembler::linkCompareAndBranch):
(JSC::ARM64Assembler::linkConditionalBranch):
(JSC::ARM64Assembler::linkTestAndBranch):
(JSC::ARM64Assembler::relinkJumpOrCall):
* assembler/ARMv7Assembler.h:
(JSC::ARMv7Assembler::revertJumpTo_movT3movtcmpT2):
(JSC::ARMv7Assembler::revertJumpTo_movT3):
(JSC::ARMv7Assembler::link):
(JSC::ARMv7Assembler::linkJump):
(JSC::ARMv7Assembler::relinkJump):
(JSC::ARMv7Assembler::repatchCompact):
(JSC::ARMv7Assembler::replaceWithJump):
(JSC::ARMv7Assembler::replaceWithLoad):
(JSC::ARMv7Assembler::replaceWithAddressComputation):
(JSC::ARMv7Assembler::setInt32):
(JSC::ARMv7Assembler::setUInt7ForLoad):
(JSC::ARMv7Assembler::isB):
(JSC::ARMv7Assembler::isBX):
(JSC::ARMv7Assembler::isMOV_imm_T3):
(JSC::ARMv7Assembler::isMOVT):
(JSC::ARMv7Assembler::isNOP_T1):
(JSC::ARMv7Assembler::isNOP_T2):
(JSC::ARMv7Assembler::linkJumpT1):
(JSC::ARMv7Assembler::linkJumpT2):
(JSC::ARMv7Assembler::linkJumpT3):
(JSC::ARMv7Assembler::linkJumpT4):
(JSC::ARMv7Assembler::linkConditionalJumpT4):
(JSC::ARMv7Assembler::linkBX):
(JSC::ARMv7Assembler::linkConditionalBX):
(JSC::ARMv7Assembler::linkJumpAbsolute):
* assembler/LinkBuffer.cpp:
(JSC::LinkBuffer::copyCompactAndLinkCode):
* assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::link):
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::link):
* jit/ExecutableAllocator.h:
(JSC::performJITMemcpy):
* jit/ExecutableAllocatorFixedVMPool.cpp:
(JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
(JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):
(JSC::FixedVMPoolExecutableAllocator::genericWriteToJITRegion):
(JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): Deleted.
* runtime/Options.cpp:
(JSC::recomputeDependentOptions):
* runtime/Options.h:

Source/WebCore:

* Configurations/FeatureDefines.xcconfig:

Source/WebKit/mac:

* Configurations/FeatureDefines.xcconfig:

Source/WebKit2:

* Configurations/FeatureDefines.xcconfig:

Source/WTF:

* wtf/FeatureDefines.h:
* wtf/Platform.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerARM64Assemblerh">trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerARMv7Assemblerh">trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerLinkBuffercpp">trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerARM64h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerMacroAssemblerARMv7h">trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorh">trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitExecutableAllocatorFixedVMPoolcpp">trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeOptionscpp">trunk/Source/JavaScriptCore/runtime/Options.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeOptionsh">trunk/Source/JavaScriptCore/runtime/Options.h</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfFeatureDefinesh">trunk/Source/WTF/wtf/FeatureDefines.h</a></li>
<li><a href="#trunkSourceWTFwtfPlatformh">trunk/Source/WTF/wtf/Platform.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig">trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig">trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig</a></li>
<li><a href="#trunkToolsTestWebKitAPIConfigurationsFeatureDefinesxcconfig">trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1,3 +1,87 @@
</span><ins>+2016-04-05  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Remove compile time define for SEPARATED_HEAP
+        https://bugs.webkit.org/show_bug.cgi?id=155508
+
+        Reviewed by Mark Lam.
+
+        Remove the SEPARATED_HEAP compile time flag. The separated
+        heap is available, but off by default, on x86_64, ARMv7, and
+        ARM64.
+
+        Working through the issues that happened last time essentially
+        required implementing the ARMv7 path for the separated heap
+        just so I could find all the ways it was going wrong.
+
+        We fixed all the logic by making the branch and jump logic in
+        the linker and assemblers take two parameters, the location to
+        write to, and the location we'll actually be writing to. We 
+        need to do this because it's no longer sufficient to compute
+        jumps relative to region the linker is writing to.
+
+        The repatching jump, branch, and call functions only need the
+        executable address as the patching is performed directly using
+        performJITMemcpy function which works in terms of the executable
+        address.
+
+        There is no performance impact on jsc-benchmarks with the separate
+        heap either emabled or disabled.
+
+        * Configurations/FeatureDefines.xcconfig:
+        * assembler/ARM64Assembler.h:
+        (JSC::ARM64Assembler::linkJump):
+        (JSC::ARM64Assembler::linkCall):
+        (JSC::ARM64Assembler::relinkJump):
+        (JSC::ARM64Assembler::relinkCall):
+        (JSC::ARM64Assembler::link):
+        (JSC::ARM64Assembler::linkJumpOrCall):
+        (JSC::ARM64Assembler::linkCompareAndBranch):
+        (JSC::ARM64Assembler::linkConditionalBranch):
+        (JSC::ARM64Assembler::linkTestAndBranch):
+        (JSC::ARM64Assembler::relinkJumpOrCall):
+        * assembler/ARMv7Assembler.h:
+        (JSC::ARMv7Assembler::revertJumpTo_movT3movtcmpT2):
+        (JSC::ARMv7Assembler::revertJumpTo_movT3):
+        (JSC::ARMv7Assembler::link):
+        (JSC::ARMv7Assembler::linkJump):
+        (JSC::ARMv7Assembler::relinkJump):
+        (JSC::ARMv7Assembler::repatchCompact):
+        (JSC::ARMv7Assembler::replaceWithJump):
+        (JSC::ARMv7Assembler::replaceWithLoad):
+        (JSC::ARMv7Assembler::replaceWithAddressComputation):
+        (JSC::ARMv7Assembler::setInt32):
+        (JSC::ARMv7Assembler::setUInt7ForLoad):
+        (JSC::ARMv7Assembler::isB):
+        (JSC::ARMv7Assembler::isBX):
+        (JSC::ARMv7Assembler::isMOV_imm_T3):
+        (JSC::ARMv7Assembler::isMOVT):
+        (JSC::ARMv7Assembler::isNOP_T1):
+        (JSC::ARMv7Assembler::isNOP_T2):
+        (JSC::ARMv7Assembler::linkJumpT1):
+        (JSC::ARMv7Assembler::linkJumpT2):
+        (JSC::ARMv7Assembler::linkJumpT3):
+        (JSC::ARMv7Assembler::linkJumpT4):
+        (JSC::ARMv7Assembler::linkConditionalJumpT4):
+        (JSC::ARMv7Assembler::linkBX):
+        (JSC::ARMv7Assembler::linkConditionalBX):
+        (JSC::ARMv7Assembler::linkJumpAbsolute):
+        * assembler/LinkBuffer.cpp:
+        (JSC::LinkBuffer::copyCompactAndLinkCode):
+        * assembler/MacroAssemblerARM64.h:
+        (JSC::MacroAssemblerARM64::link):
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::link):
+        * jit/ExecutableAllocator.h:
+        (JSC::performJITMemcpy):
+        * jit/ExecutableAllocatorFixedVMPool.cpp:
+        (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps):
+        (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):
+        (JSC::FixedVMPoolExecutableAllocator::genericWriteToJITRegion):
+        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator): Deleted.
+        * runtime/Options.cpp:
+        (JSC::recomputeDependentOptions):
+        * runtime/Options.h:
+
</ins><span class="cx"> 2016-04-10  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Clean up how we reason about the states of AccessCases
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -193,7 +193,4 @@
</span><span class="cx"> ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
</span><span class="cx"> ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
</span><span class="cx"> 
</span><del>-ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ;
-ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
-
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTE
 D_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESS
 ION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEB
 GL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_SEPARATED_WX_HEAP);
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENAB
 LE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE
 _MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $
 (ENABLE_WEBGL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE);
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerARM64Assemblerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -2472,23 +2472,23 @@
</span><span class="cx">         m_jumpsToLink.append(LinkRecord(from.m_offset, to.m_offset, type, condition, bitNumber, compareRegister));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void linkJump(AssemblerLabel from, AssemblerLabel to)
</del><ins>+    void linkJump(AssemblerLabel from, void* executableCode, AssemblerLabel to)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(from.isSet());
</span><span class="cx">         ASSERT(to.isSet());
</span><del>-        relinkJumpOrCall&lt;false&gt;(addressOf(from), addressOf(to));
</del><ins>+        relinkJumpOrCall&lt;false&gt;(addressOf(from), addressOf(executableCode, from), addressOf(to));
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     static void linkJump(void* code, AssemblerLabel from, void* to)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(from.isSet());
</span><del>-        relinkJumpOrCall&lt;false&gt;(addressOf(code, from), to);
</del><ins>+        relinkJumpOrCall&lt;false&gt;(addressOf(code, from), addressOf(code, from), to);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, AssemblerLabel from, void* to)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(from.isSet());
</span><del>-        linkJumpOrCall&lt;true&gt;(addressOf(code, from) - 1, to);
</del><ins>+        linkJumpOrCall&lt;true&gt;(addressOf(code, from) - 1, addressOf(code, from) - 1, to);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void linkPointer(void* code, AssemblerLabel where, void* valuePtr)
</span><span class="lines">@@ -2656,15 +2656,20 @@
</span><span class="cx">         return readPointer(reinterpret_cast&lt;int*&gt;(from) - 4);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // The static relink, repatch, and replace methods can use can
+    // use |from| for both the write and executable address for call
+    // and jump patching as they're modifying existing (linked) code,
+    // so the address being provided is correct for relative address
+    // computation.
</ins><span class="cx">     static void relinkJump(void* from, void* to)
</span><span class="cx">     {
</span><del>-        relinkJumpOrCall&lt;false&gt;(reinterpret_cast&lt;int*&gt;(from), to);
</del><ins>+        relinkJumpOrCall&lt;false&gt;(reinterpret_cast&lt;int*&gt;(from), reinterpret_cast&lt;const int*&gt;(from), to);
</ins><span class="cx">         cacheFlush(from, sizeof(int));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     static void relinkCall(void* from, void* to)
</span><span class="cx">     {
</span><del>-        relinkJumpOrCall&lt;true&gt;(reinterpret_cast&lt;int*&gt;(from) - 1, to);
</del><ins>+        relinkJumpOrCall&lt;true&gt;(reinterpret_cast&lt;int*&gt;(from) - 1, reinterpret_cast&lt;const int*&gt;(from) - 1, to);
</ins><span class="cx">         cacheFlush(reinterpret_cast&lt;int*&gt;(from) - 1, sizeof(int));
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -2806,29 +2811,30 @@
</span><span class="cx">         return m_jumpsToLink;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void ALWAYS_INLINE link(LinkRecord&amp; record, uint8_t* from, uint8_t* to)
</del><ins>+    static void ALWAYS_INLINE link(LinkRecord&amp; record, uint8_t* from, const uint8_t* fromInstruction8, uint8_t* to)
</ins><span class="cx">     {
</span><ins>+        const int* fromInstruction = reinterpret_cast&lt;const int*&gt;(fromInstruction8);
</ins><span class="cx">         switch (record.linkType()) {
</span><span class="cx">         case LinkJumpNoCondition:
</span><del>-            linkJumpOrCall&lt;false&gt;(reinterpret_cast&lt;int*&gt;(from), to);
</del><ins>+            linkJumpOrCall&lt;false&gt;(reinterpret_cast&lt;int*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpConditionDirect:
</span><del>-            linkConditionalBranch&lt;true&gt;(record.condition(), reinterpret_cast&lt;int*&gt;(from), to);
</del><ins>+            linkConditionalBranch&lt;true&gt;(record.condition(), reinterpret_cast&lt;int*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpCondition:
</span><del>-            linkConditionalBranch&lt;false&gt;(record.condition(), reinterpret_cast&lt;int*&gt;(from) - 1, to);
</del><ins>+            linkConditionalBranch&lt;false&gt;(record.condition(), reinterpret_cast&lt;int*&gt;(from) - 1, fromInstruction - 1, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpCompareAndBranchDirect:
</span><del>-            linkCompareAndBranch&lt;true&gt;(record.condition(), record.is64Bit(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from), to);
</del><ins>+            linkCompareAndBranch&lt;true&gt;(record.condition(), record.is64Bit(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpCompareAndBranch:
</span><del>-            linkCompareAndBranch&lt;false&gt;(record.condition(), record.is64Bit(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from) - 1, to);
</del><ins>+            linkCompareAndBranch&lt;false&gt;(record.condition(), record.is64Bit(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from) - 1, fromInstruction - 1, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpTestBitDirect:
</span><del>-            linkTestAndBranch&lt;true&gt;(record.condition(), record.bitNumber(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from), to);
</del><ins>+            linkTestAndBranch&lt;true&gt;(record.condition(), record.bitNumber(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpTestBit:
</span><del>-            linkTestAndBranch&lt;false&gt;(record.condition(), record.bitNumber(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from) - 1, to);
</del><ins>+            linkTestAndBranch&lt;false&gt;(record.condition(), record.bitNumber(), record.compareRegister(), reinterpret_cast&lt;int*&gt;(from) - 1, fromInstruction - 1, to);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="lines">@@ -2870,7 +2876,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;bool isCall&gt;
</span><del>-    static void linkJumpOrCall(int* from, void* to)
</del><ins>+    static void linkJumpOrCall(int* from, const int* fromInstruction, void* to)
</ins><span class="cx">     {
</span><span class="cx">         bool link;
</span><span class="cx">         int imm26;
</span><span class="lines">@@ -2880,7 +2886,7 @@
</span><span class="cx">         ASSERT_UNUSED(isCall, (link == isCall) || disassembleNop(from));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(from) &amp; 3));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(to) &amp; 3));
</span><del>-        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(from)) &gt;&gt; 2;
</del><ins>+        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(fromInstruction)) &gt;&gt; 2;
</ins><span class="cx">         ASSERT(static_cast&lt;int&gt;(offset) == offset);
</span><span class="cx"> 
</span><span class="cx">         int insn = unconditionalBranchImmediate(isCall, static_cast&lt;int&gt;(offset));
</span><span class="lines">@@ -2888,11 +2894,11 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;bool isDirect&gt;
</span><del>-    static void linkCompareAndBranch(Condition condition, bool is64Bit, RegisterID rt, int* from, void* to)
</del><ins>+    static void linkCompareAndBranch(Condition condition, bool is64Bit, RegisterID rt, int* from, const int* fromInstruction, void* to)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(from) &amp; 3));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(to) &amp; 3));
</span><del>-        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(from)) &gt;&gt; 2;
</del><ins>+        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(fromInstruction)) &gt;&gt; 2;
</ins><span class="cx">         ASSERT(((offset &lt;&lt; 38) &gt;&gt; 38) == offset);
</span><span class="cx"> 
</span><span class="cx">         bool useDirect = ((offset &lt;&lt; 45) &gt;&gt; 45) == offset; // Fits in 19 bits
</span><span class="lines">@@ -2908,16 +2914,16 @@
</span><span class="cx">         } else {
</span><span class="cx">             int insn = compareAndBranchImmediate(is64Bit ? Datasize_64 : Datasize_32, invert(condition) == ConditionNE, 2, rt);
</span><span class="cx">             performJITMemcpy(from, &amp;insn, sizeof(int));
</span><del>-            linkJumpOrCall&lt;false&gt;(from + 1, to);
</del><ins>+            linkJumpOrCall&lt;false&gt;(from + 1, fromInstruction + 1, to);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;bool isDirect&gt;
</span><del>-    static void linkConditionalBranch(Condition condition, int* from, void* to)
</del><ins>+    static void linkConditionalBranch(Condition condition, int* from, const int* fromInstruction, void* to)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(from) &amp; 3));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(to) &amp; 3));
</span><del>-        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(from)) &gt;&gt; 2;
</del><ins>+        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(fromInstruction)) &gt;&gt; 2;
</ins><span class="cx">         ASSERT(((offset &lt;&lt; 38) &gt;&gt; 38) == offset);
</span><span class="cx"> 
</span><span class="cx">         bool useDirect = ((offset &lt;&lt; 45) &gt;&gt; 45) == offset; // Fits in 19 bits
</span><span class="lines">@@ -2933,16 +2939,16 @@
</span><span class="cx">         } else {
</span><span class="cx">             int insn = conditionalBranchImmediate(2, invert(condition));
</span><span class="cx">             performJITMemcpy(from, &amp;insn, sizeof(int));
</span><del>-            linkJumpOrCall&lt;false&gt;(from + 1, to);
</del><ins>+            linkJumpOrCall&lt;false&gt;(from + 1, fromInstruction + 1, to);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;bool isDirect&gt;
</span><del>-    static void linkTestAndBranch(Condition condition, unsigned bitNumber, RegisterID rt, int* from, void* to)
</del><ins>+    static void linkTestAndBranch(Condition condition, unsigned bitNumber, RegisterID rt, int* from, const int* fromInstruction, void* to)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(from) &amp; 3));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(to) &amp; 3));
</span><del>-        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(from)) &gt;&gt; 2;
</del><ins>+        intptr_t offset = (reinterpret_cast&lt;intptr_t&gt;(to) - reinterpret_cast&lt;intptr_t&gt;(fromInstruction)) &gt;&gt; 2;
</ins><span class="cx">         ASSERT(static_cast&lt;int&gt;(offset) == offset);
</span><span class="cx">         ASSERT(((offset &lt;&lt; 38) &gt;&gt; 38) == offset);
</span><span class="cx"> 
</span><span class="lines">@@ -2959,12 +2965,12 @@
</span><span class="cx">         } else {
</span><span class="cx">             int insn = testAndBranchImmediate(invert(condition) == ConditionNE, static_cast&lt;int&gt;(bitNumber), 2, rt);
</span><span class="cx">             performJITMemcpy(from, &amp;insn, sizeof(int));
</span><del>-            linkJumpOrCall&lt;false&gt;(from + 1, to);
</del><ins>+            linkJumpOrCall&lt;false&gt;(from + 1, fromInstruction + 1, to);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     template&lt;bool isCall&gt;
</span><del>-    static void relinkJumpOrCall(int* from, void* to)
</del><ins>+    static void relinkJumpOrCall(int* from, const int* fromInstruction, void* to)
</ins><span class="cx">     {
</span><span class="cx">         if (!isCall &amp;&amp; disassembleNop(from)) {
</span><span class="cx">             unsigned op01;
</span><span class="lines">@@ -2979,7 +2985,7 @@
</span><span class="cx">                 if (imm19 == 8)
</span><span class="cx">                     condition = invert(condition);
</span><span class="cx"> 
</span><del>-                linkConditionalBranch&lt;false&gt;(condition, from - 1, to);
</del><ins>+                linkConditionalBranch&lt;false&gt;(condition, from - 1, fromInstruction - 1, to);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -2992,7 +2998,7 @@
</span><span class="cx">                 if (imm19 == 8)
</span><span class="cx">                     op = !op;
</span><span class="cx"> 
</span><del>-                linkCompareAndBranch&lt;false&gt;(op ? ConditionNE : ConditionEQ, opSize == Datasize_64, rt, from - 1, to);
</del><ins>+                linkCompareAndBranch&lt;false&gt;(op ? ConditionNE : ConditionEQ, opSize == Datasize_64, rt, from - 1, fromInstruction - 1, to);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -3004,12 +3010,12 @@
</span><span class="cx">                 if (imm14 == 8)
</span><span class="cx">                     op = !op;
</span><span class="cx"> 
</span><del>-                linkTestAndBranch&lt;false&gt;(op ? ConditionNE : ConditionEQ, bitNumber, rt, from - 1, to);
</del><ins>+                linkTestAndBranch&lt;false&gt;(op ? ConditionNE : ConditionEQ, bitNumber, rt, from - 1, fromInstruction - 1, to);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        linkJumpOrCall&lt;isCall&gt;(from, to);
</del><ins>+        linkJumpOrCall&lt;isCall&gt;(from, fromInstruction, to);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static int* addressOf(void* code, AssemblerLabel label)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerARMv7Assemblerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1327,11 +1327,14 @@
</span><span class="cx">         uint16_t* address = static_cast&lt;uint16_t*&gt;(instructionStart);
</span><span class="cx">         ARMThumbImmediate lo16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(imm));
</span><span class="cx">         ARMThumbImmediate hi16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(imm &gt;&gt; 16));
</span><del>-        address[0] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
-        address[1] = twoWordOp5i6Imm4Reg4EncodedImmSecond(right, lo16);
-        address[2] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
-        address[3] = twoWordOp5i6Imm4Reg4EncodedImmSecond(right, hi16);
-        address[4] = OP_CMP_reg_T2 | left;
</del><ins>+        uint16_t instruction[] = {
+            twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16),
+            twoWordOp5i6Imm4Reg4EncodedImmSecond(right, lo16),
+            twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16),
+            twoWordOp5i6Imm4Reg4EncodedImmSecond(right, hi16),
+            OP_CMP_reg_T2 | left
+        };
+        performJITMemcpy(address, instruction, sizeof(uint16_t) * 5);
</ins><span class="cx">         cacheFlush(address, sizeof(uint16_t) * 5);
</span><span class="cx">     }
</span><span class="cx"> #else
</span><span class="lines">@@ -1342,8 +1345,11 @@
</span><span class="cx">         ASSERT(!BadReg(rd));
</span><span class="cx">         
</span><span class="cx">         uint16_t* address = static_cast&lt;uint16_t*&gt;(instructionStart);
</span><del>-        address[0] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, imm);
-        address[1] = twoWordOp5i6Imm4Reg4EncodedImmSecond(rd, imm);
</del><ins>+        uint16_t instruction[] = {
+            twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, imm),
+            twoWordOp5i6Imm4Reg4EncodedImmSecond(rd, imm)
+        };
+        performJITMemcpy(address, instruction, sizeof(uint16_t) * 2);
</ins><span class="cx">         cacheFlush(address, sizeof(uint16_t) * 2);
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="lines">@@ -2125,29 +2131,30 @@
</span><span class="cx">         return m_jumpsToLink;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void ALWAYS_INLINE link(LinkRecord&amp; record, uint8_t* from, uint8_t* to)
</del><ins>+    static void ALWAYS_INLINE link(LinkRecord&amp; record, uint8_t* from, const uint8_t* fromInstruction8, uint8_t* to)
</ins><span class="cx">     {
</span><ins>+        const uint16_t* fromInstruction = reinterpret_cast_ptr&lt;const uint16_t*&gt;(fromInstruction8);
</ins><span class="cx">         switch (record.linkType()) {
</span><span class="cx">         case LinkJumpT1:
</span><del>-            linkJumpT1(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkJumpT1(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpT2:
</span><del>-            linkJumpT2(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkJumpT2(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpT3:
</span><del>-            linkJumpT3(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkJumpT3(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkJumpT4:
</span><del>-            linkJumpT4(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkJumpT4(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkConditionalJumpT4:
</span><del>-            linkConditionalJumpT4(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkConditionalJumpT4(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkConditionalBX:
</span><del>-            linkConditionalBX(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkConditionalBX(record.condition(), reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         case LinkBX:
</span><del>-            linkBX(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), to);
</del><ins>+            linkBX(reinterpret_cast_ptr&lt;uint16_t*&gt;(from), fromInstruction, to);
</ins><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><span class="lines">@@ -2184,7 +2191,7 @@
</span><span class="cx">         ASSERT(from.isSet());
</span><span class="cx">         
</span><span class="cx">         uint16_t* location = reinterpret_cast&lt;uint16_t*&gt;(reinterpret_cast&lt;intptr_t&gt;(code) + from.m_offset);
</span><del>-        linkJumpAbsolute(location, to);
</del><ins>+        linkJumpAbsolute(location, location, to);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static void linkCall(void* code, AssemblerLabel from, void* to)
</span><span class="lines">@@ -2200,12 +2207,16 @@
</span><span class="cx">         setPointer(reinterpret_cast&lt;char*&gt;(code) + where.m_offset, value, false);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // The static relink and replace methods can use can use |from| for both
+    // the write and executable address for call and jump patching
+    // as they're modifying existing (linked) code, so the address being
+    // provided is correct for relative address computation.
</ins><span class="cx">     static void relinkJump(void* from, void* to)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(from) &amp; 1));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(to) &amp; 1));
</span><span class="cx"> 
</span><del>-        linkJumpAbsolute(reinterpret_cast&lt;uint16_t*&gt;(from), to);
</del><ins>+        linkJumpAbsolute(reinterpret_cast&lt;uint16_t*&gt;(from), reinterpret_cast&lt;uint16_t*&gt;(from), to);
</ins><span class="cx"> 
</span><span class="cx">         cacheFlush(reinterpret_cast&lt;uint16_t*&gt;(from) - 5, 5 * sizeof(uint16_t));
</span><span class="cx">     }
</span><span class="lines">@@ -2244,8 +2255,9 @@
</span><span class="cx">         offset |= (1 &lt;&lt; 11);
</span><span class="cx"> 
</span><span class="cx">         uint16_t* location = reinterpret_cast&lt;uint16_t*&gt;(where);
</span><del>-        location[1] &amp;= ~((1 &lt;&lt; 12) - 1);
-        location[1] |= offset;
</del><ins>+        uint16_t instruction = location[1] &amp; ~((1 &lt;&lt; 12) - 1);
+        instruction |= offset;
+        performJITMemcpy(location + 1, &amp;instruction, sizeof(uint16_t));
</ins><span class="cx">         cacheFlush(location, sizeof(uint16_t) * 2);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2269,16 +2281,16 @@
</span><span class="cx"> #if OS(LINUX)
</span><span class="cx">         if (canBeJumpT4(reinterpret_cast&lt;uint16_t*&gt;(instructionStart), to)) {
</span><span class="cx">             uint16_t* ptr = reinterpret_cast&lt;uint16_t*&gt;(instructionStart) + 2;
</span><del>-            linkJumpT4(ptr, to);
</del><ins>+            linkJumpT4(ptr, ptr, to);
</ins><span class="cx">             cacheFlush(ptr - 2, sizeof(uint16_t) * 2);
</span><span class="cx">         } else {
</span><span class="cx">             uint16_t* ptr = reinterpret_cast&lt;uint16_t*&gt;(instructionStart) + 5;
</span><del>-            linkBX(ptr, to);
</del><ins>+            linkBX(ptr, ptr, to);
</ins><span class="cx">             cacheFlush(ptr - 5, sizeof(uint16_t) * 5);
</span><span class="cx">         }
</span><span class="cx"> #else
</span><span class="cx">         uint16_t* ptr = reinterpret_cast&lt;uint16_t*&gt;(instructionStart) + 2;
</span><del>-        linkJumpT4(ptr, to);
</del><ins>+        linkJumpT4(ptr, ptr, to);
</ins><span class="cx">         cacheFlush(ptr - 2, sizeof(uint16_t) * 2);
</span><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="lines">@@ -2299,14 +2311,17 @@
</span><span class="cx">         switch (ptr[0] &amp; 0xFFF0) {
</span><span class="cx">         case OP_LDR_imm_T3:
</span><span class="cx">             break;
</span><del>-        case OP_ADD_imm_T3:
</del><ins>+        case OP_ADD_imm_T3: {
</ins><span class="cx">             ASSERT(!(ptr[1] &amp; 0xF000));
</span><del>-            ptr[0] &amp;= 0x000F;
-            ptr[0] |= OP_LDR_imm_T3;
-            ptr[1] |= (ptr[1] &amp; 0x0F00) &lt;&lt; 4;
-            ptr[1] &amp;= 0xF0FF;
</del><ins>+            uint16_t instructions[2];
+            instructions[0] = ptr[0] &amp; 0x000F;
+            instructions[0] |= OP_LDR_imm_T3;
+            instructions[1] = ptr[1] | (ptr[1] &amp; 0x0F00) &lt;&lt; 4;
+            instructions[1] &amp;= 0xF0FF;
+            performJITMemcpy(ptr, instructions, sizeof(uint16_t) * 2);
</ins><span class="cx">             cacheFlush(ptr, sizeof(uint16_t) * 2);
</span><span class="cx">             break;
</span><ins>+        }
</ins><span class="cx">         default:
</span><span class="cx">             RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="lines">@@ -2317,14 +2332,17 @@
</span><span class="cx">         ASSERT(!(bitwise_cast&lt;uintptr_t&gt;(instructionStart) &amp; 1));
</span><span class="cx">         uint16_t* ptr = reinterpret_cast&lt;uint16_t*&gt;(instructionStart);
</span><span class="cx">         switch (ptr[0] &amp; 0xFFF0) {
</span><del>-        case OP_LDR_imm_T3:
</del><ins>+        case OP_LDR_imm_T3: {
</ins><span class="cx">             ASSERT(!(ptr[1] &amp; 0x0F00));
</span><del>-            ptr[0] &amp;= 0x000F;
-            ptr[0] |= OP_ADD_imm_T3;
-            ptr[1] |= (ptr[1] &amp; 0xF000) &gt;&gt; 4;
-            ptr[1] &amp;= 0x0FFF;
</del><ins>+            uint16_t instructions[2];
+            instructions[0] = ptr[0] &amp; 0x000F;
+            instructions[0] |= OP_ADD_imm_T3;
+            instructions[1] = ptr[1] | (ptr[1] &amp; 0xF000) &gt;&gt; 4;
+            instructions[1] &amp;= 0x0FFF;
+            performJITMemcpy(ptr, instructions, sizeof(uint16_t) * 2);
</ins><span class="cx">             cacheFlush(ptr, sizeof(uint16_t) * 2);
</span><span class="cx">             break;
</span><ins>+        }
</ins><span class="cx">         case OP_ADD_imm_T3:
</span><span class="cx">             break;
</span><span class="cx">         default:
</span><span class="lines">@@ -2452,11 +2470,13 @@
</span><span class="cx"> 
</span><span class="cx">         ARMThumbImmediate lo16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(value));
</span><span class="cx">         ARMThumbImmediate hi16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(value &gt;&gt; 16));
</span><del>-        location[-4] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
-        location[-3] = twoWordOp5i6Imm4Reg4EncodedImmSecond((location[-3] &gt;&gt; 8) &amp; 0xf, lo16);
-        location[-2] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
-        location[-1] = twoWordOp5i6Imm4Reg4EncodedImmSecond((location[-1] &gt;&gt; 8) &amp; 0xf, hi16);
</del><ins>+        uint16_t instructions[4];
+        instructions[0] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
+        instructions[1] = twoWordOp5i6Imm4Reg4EncodedImmSecond((location[-3] &gt;&gt; 8) &amp; 0xf, lo16);
+        instructions[2] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
+        instructions[3] = twoWordOp5i6Imm4Reg4EncodedImmSecond((location[-1] &gt;&gt; 8) &amp; 0xf, hi16);
</ins><span class="cx"> 
</span><ins>+        performJITMemcpy(location - 4, instructions, 4 * sizeof(uint16_t));
</ins><span class="cx">         if (flush)
</span><span class="cx">             cacheFlush(location - 4, 4 * sizeof(uint16_t));
</span><span class="cx">     }
</span><span class="lines">@@ -2484,8 +2504,10 @@
</span><span class="cx">         ASSERT(imm.isValid());
</span><span class="cx">         ASSERT(imm.isUInt7());
</span><span class="cx">         uint16_t* location = reinterpret_cast&lt;uint16_t*&gt;(code);
</span><del>-        location[0] &amp;= ~((static_cast&lt;uint16_t&gt;(0x7f) &gt;&gt; 2) &lt;&lt; 6);
-        location[0] |= (imm.getUInt7() &gt;&gt; 2) &lt;&lt; 6;
</del><ins>+        uint16_t instruction;
+        instruction = location[0] &amp; ~((static_cast&lt;uint16_t&gt;(0x7f) &gt;&gt; 2) &lt;&lt; 6);
+        instruction |= (imm.getUInt7() &gt;&gt; 2) &lt;&lt; 6;
+        performJITMemcpy(location, &amp;instruction, sizeof(uint16_t));
</ins><span class="cx">         cacheFlush(location, sizeof(uint16_t));
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2494,39 +2516,39 @@
</span><span class="cx">         setInt32(code, reinterpret_cast&lt;uint32_t&gt;(value), flush);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isB(void* address)
</del><ins>+    static bool isB(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return ((instruction[0] &amp; 0xf800) == OP_B_T4a) &amp;&amp; ((instruction[1] &amp; 0xd000) == OP_B_T4b);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isBX(void* address)
</del><ins>+    static bool isBX(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return (instruction[0] &amp; 0xff87) == OP_BX;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isMOV_imm_T3(void* address)
</del><ins>+    static bool isMOV_imm_T3(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return ((instruction[0] &amp; 0xFBF0) == OP_MOV_imm_T3) &amp;&amp; ((instruction[1] &amp; 0x8000) == 0);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isMOVT(void* address)
</del><ins>+    static bool isMOVT(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return ((instruction[0] &amp; 0xFBF0) == OP_MOVT) &amp;&amp; ((instruction[1] &amp; 0x8000) == 0);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isNOP_T1(void* address)
</del><ins>+    static bool isNOP_T1(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return instruction[0] == OP_NOP_T1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static bool isNOP_T2(void* address)
</del><ins>+    static bool isNOP_T2(const void* address)
</ins><span class="cx">     {
</span><del>-        uint16_t* instruction = static_cast&lt;uint16_t*&gt;(address);
</del><ins>+        const uint16_t* instruction = static_cast&lt;const uint16_t*&gt;(address);
</ins><span class="cx">         return (instruction[0] == OP_NOP_T2a) &amp;&amp; (instruction[1] == OP_NOP_T2b);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2574,7 +2596,7 @@
</span><span class="cx">         return ((relative &lt;&lt; 7) &gt;&gt; 7) == relative;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkJumpT1(Condition cond, uint16_t* instruction, void* target)
</del><ins>+    static void linkJumpT1(Condition cond, uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(        
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="lines">@@ -2589,10 +2611,11 @@
</span><span class="cx">         
</span><span class="cx">         // All branch offsets should be an even distance.
</span><span class="cx">         ASSERT(!(relative &amp; 1));
</span><del>-        instruction[-1] = OP_B_T1 | ((cond &amp; 0xf) &lt;&lt; 8) | ((relative &amp; 0x1fe) &gt;&gt; 1);
</del><ins>+        uint16_t newInstruction = OP_B_T1 | ((cond &amp; 0xf) &lt;&lt; 8) | ((relative &amp; 0x1fe) &gt;&gt; 1);
+        performJITMemcpy(writeTarget - 1, &amp;newInstruction, sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkJumpT2(uint16_t* instruction, void* target)
</del><ins>+    static void linkJumpT2(uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(        
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="lines">@@ -2607,10 +2630,11 @@
</span><span class="cx">         
</span><span class="cx">         // All branch offsets should be an even distance.
</span><span class="cx">         ASSERT(!(relative &amp; 1));
</span><del>-        instruction[-1] = OP_B_T2 | ((relative &amp; 0xffe) &gt;&gt; 1);
</del><ins>+        uint16_t newInstruction = OP_B_T2 | ((relative &amp; 0xffe) &gt;&gt; 1);
+        performJITMemcpy(writeTarget - 1, &amp;newInstruction, sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkJumpT3(Condition cond, uint16_t* instruction, void* target)
</del><ins>+    static void linkJumpT3(Condition cond, uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="lines">@@ -2621,11 +2645,13 @@
</span><span class="cx">         
</span><span class="cx">         // All branch offsets should be an even distance.
</span><span class="cx">         ASSERT(!(relative &amp; 1));
</span><del>-        instruction[-2] = OP_B_T3a | ((relative &amp; 0x100000) &gt;&gt; 10) | ((cond &amp; 0xf) &lt;&lt; 6) | ((relative &amp; 0x3f000) &gt;&gt; 12);
-        instruction[-1] = OP_B_T3b | ((relative &amp; 0x80000) &gt;&gt; 8) | ((relative &amp; 0x40000) &gt;&gt; 5) | ((relative &amp; 0xffe) &gt;&gt; 1);
</del><ins>+        uint16_t instructions[2];
+        instructions[0] = OP_B_T3a | ((relative &amp; 0x100000) &gt;&gt; 10) | ((cond &amp; 0xf) &lt;&lt; 6) | ((relative &amp; 0x3f000) &gt;&gt; 12);
+        instructions[1] = OP_B_T3b | ((relative &amp; 0x80000) &gt;&gt; 8) | ((relative &amp; 0x40000) &gt;&gt; 5) | ((relative &amp; 0xffe) &gt;&gt; 1);
+        performJITMemcpy(writeTarget - 2, instructions, 2 * sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkJumpT4(uint16_t* instruction, void* target)
</del><ins>+    static void linkJumpT4(uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(        
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="lines">@@ -2639,47 +2665,55 @@
</span><span class="cx">         
</span><span class="cx">         // All branch offsets should be an even distance.
</span><span class="cx">         ASSERT(!(relative &amp; 1));
</span><del>-        instruction[-2] = OP_B_T4a | ((relative &amp; 0x1000000) &gt;&gt; 14) | ((relative &amp; 0x3ff000) &gt;&gt; 12);
-        instruction[-1] = OP_B_T4b | ((relative &amp; 0x800000) &gt;&gt; 10) | ((relative &amp; 0x400000) &gt;&gt; 11) | ((relative &amp; 0xffe) &gt;&gt; 1);
</del><ins>+        uint16_t instructions[2];
+        instructions[0] = OP_B_T4a | ((relative &amp; 0x1000000) &gt;&gt; 14) | ((relative &amp; 0x3ff000) &gt;&gt; 12);
+        instructions[1] = OP_B_T4b | ((relative &amp; 0x800000) &gt;&gt; 10) | ((relative &amp; 0x400000) &gt;&gt; 11) | ((relative &amp; 0xffe) &gt;&gt; 1);
+        performJITMemcpy(writeTarget - 2, instructions, 2 * sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkConditionalJumpT4(Condition cond, uint16_t* instruction, void* target)
</del><ins>+    static void linkConditionalJumpT4(Condition cond, uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(        
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(target) &amp; 1));
</span><span class="cx">         
</span><del>-        instruction[-3] = ifThenElse(cond) | OP_IT;
-        linkJumpT4(instruction, target);
</del><ins>+        uint16_t newInstruction = ifThenElse(cond) | OP_IT;
+        performJITMemcpy(writeTarget - 3, &amp;newInstruction, sizeof(uint16_t));
+        linkJumpT4(writeTarget, instruction, target);
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkBX(uint16_t* instruction, void* target)
</del><ins>+    static void linkBX(uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(
</span><del>-        ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</del><ins>+        ASSERT_UNUSED(instruction, !(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
+        ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(writeTarget) &amp; 1));
</ins><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(target) &amp; 1));
</span><span class="cx">         
</span><span class="cx">         const uint16_t JUMP_TEMPORARY_REGISTER = ARMRegisters::ip;
</span><span class="cx">         ARMThumbImmediate lo16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(reinterpret_cast&lt;uint32_t&gt;(target) + 1));
</span><span class="cx">         ARMThumbImmediate hi16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(reinterpret_cast&lt;uint32_t&gt;(target) &gt;&gt; 16));
</span><del>-        instruction[-5] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
-        instruction[-4] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, lo16);
-        instruction[-3] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
-        instruction[-2] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, hi16);
-        instruction[-1] = OP_BX | (JUMP_TEMPORARY_REGISTER &lt;&lt; 3);
</del><ins>+        uint16_t instructions[5];
+        instructions[0] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
+        instructions[1] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, lo16);
+        instructions[2] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
+        instructions[3] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, hi16);
+        instructions[4] = OP_BX | (JUMP_TEMPORARY_REGISTER &lt;&lt; 3);
+
+        performJITMemcpy(writeTarget - 5, instructions, 5 * sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkConditionalBX(Condition cond, uint16_t* instruction, void* target)
</del><ins>+    static void linkConditionalBX(Condition cond, uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(        
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(target) &amp; 1));
</span><span class="cx">         
</span><del>-        linkBX(instruction, target);
-        instruction[-6] = ifThenElse(cond, true, true) | OP_IT;
</del><ins>+        linkBX(writeTarget, instruction, target);
+        uint16_t newInstruction = ifThenElse(cond, true, true) | OP_IT;
+        performJITMemcpy(writeTarget - 6, &amp;newInstruction, sizeof(uint16_t));
</ins><span class="cx">     }
</span><span class="cx">     
</span><del>-    static void linkJumpAbsolute(uint16_t* instruction, void* target)
</del><ins>+    static void linkJumpAbsolute(uint16_t* writeTarget, const uint16_t* instruction, void* target)
</ins><span class="cx">     {
</span><span class="cx">         // FIMXE: this should be up in the MacroAssembler layer. :-(
</span><span class="cx">         ASSERT(!(reinterpret_cast&lt;intptr_t&gt;(instruction) &amp; 1));
</span><span class="lines">@@ -2687,26 +2721,31 @@
</span><span class="cx">         
</span><span class="cx">         ASSERT((isMOV_imm_T3(instruction - 5) &amp;&amp; isMOVT(instruction - 3) &amp;&amp; isBX(instruction - 1))
</span><span class="cx">                || (isNOP_T1(instruction - 5) &amp;&amp; isNOP_T2(instruction - 4) &amp;&amp; isB(instruction - 2)));
</span><del>-        
</del><ins>+
</ins><span class="cx">         if (canBeJumpT4(instruction, target)) {
</span><span class="cx">             // There may be a better way to fix this, but right now put the NOPs first, since in the
</span><span class="cx">             // case of an conditional branch this will be coming after an ITTT predicating *three*
</span><span class="cx">             // instructions!  Looking backwards to modify the ITTT to an IT is not easy, due to
</span><span class="cx">             // variable wdith encoding - the previous instruction might *look* like an ITTT but
</span><span class="cx">             // actually be the second half of a 2-word op.
</span><del>-            instruction[-5] = OP_NOP_T1;
-            instruction[-4] = OP_NOP_T2a;
-            instruction[-3] = OP_NOP_T2b;
-            linkJumpT4(instruction, target);
</del><ins>+            uint16_t instructions[3];
+            instructions[0] = OP_NOP_T1;
+            instructions[1] = OP_NOP_T2a;
+            instructions[2] = OP_NOP_T2b;
+            performJITMemcpy(writeTarget - 5, instructions, 3 * sizeof(uint16_t));
+            linkJumpT4(writeTarget, instruction, target);
</ins><span class="cx">         } else {
</span><span class="cx">             const uint16_t JUMP_TEMPORARY_REGISTER = ARMRegisters::ip;
</span><span class="cx">             ARMThumbImmediate lo16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(reinterpret_cast&lt;uint32_t&gt;(target) + 1));
</span><span class="cx">             ARMThumbImmediate hi16 = ARMThumbImmediate::makeUInt16(static_cast&lt;uint16_t&gt;(reinterpret_cast&lt;uint32_t&gt;(target) &gt;&gt; 16));
</span><del>-            instruction[-5] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
-            instruction[-4] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, lo16);
-            instruction[-3] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
-            instruction[-2] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, hi16);
-            instruction[-1] = OP_BX | (JUMP_TEMPORARY_REGISTER &lt;&lt; 3);
</del><ins>+
+            uint16_t instructions[5];
+            instructions[0] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOV_imm_T3, lo16);
+            instructions[1] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, lo16);
+            instructions[2] = twoWordOp5i6Imm4Reg4EncodedImmFirst(OP_MOVT, hi16);
+            instructions[3] = twoWordOp5i6Imm4Reg4EncodedImmSecond(JUMP_TEMPORARY_REGISTER, hi16);
+            instructions[4] = OP_BX | (JUMP_TEMPORARY_REGISTER &lt;&lt; 3);
+            performJITMemcpy(writeTarget - 5, instructions, 5 * sizeof(uint16_t));
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerLinkBuffercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -105,12 +105,11 @@
</span><span class="cx">     Vector&lt;LinkRecord, 0, UnsafeVectorOverflow&gt;&amp; jumpsToLink = macroAssembler.jumpsToLink();
</span><span class="cx">     m_assemblerStorage = macroAssembler.m_assembler.buffer().releaseAssemblerData();
</span><span class="cx">     uint8_t* inData = reinterpret_cast&lt;uint8_t*&gt;(m_assemblerStorage.buffer());
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><ins>+
</ins><span class="cx">     AssemblerData outBuffer(m_size);
</span><span class="cx">     uint8_t* outData = reinterpret_cast&lt;uint8_t*&gt;(outBuffer.buffer());
</span><del>-#else
-    uint8_t* outData = reinterpret_cast&lt;uint8_t*&gt;(m_code);
-#endif
</del><ins>+    uint8_t* codeOutData = reinterpret_cast&lt;uint8_t*&gt;(m_code);
+
</ins><span class="cx">     int readPtr = 0;
</span><span class="cx">     int writePtr = 0;
</span><span class="cx">     unsigned jumpCount = jumpsToLink.size();
</span><span class="lines">@@ -136,11 +135,11 @@
</span><span class="cx">         // branches we need to be precise, forward branches we are pessimistic
</span><span class="cx">         const uint8_t* target;
</span><span class="cx">         if (jumpsToLink[i].to() &gt;= jumpsToLink[i].from())
</span><del>-            target = outData + jumpsToLink[i].to() - offset; // Compensate for what we have collapsed so far
</del><ins>+            target = codeOutData + jumpsToLink[i].to() - offset; // Compensate for what we have collapsed so far
</ins><span class="cx">         else
</span><del>-            target = outData + jumpsToLink[i].to() - executableOffsetFor(jumpsToLink[i].to());
</del><ins>+            target = codeOutData + jumpsToLink[i].to() - executableOffsetFor(jumpsToLink[i].to());
</ins><span class="cx">             
</span><del>-        JumpLinkType jumpLinkType = MacroAssembler::computeJumpType(jumpsToLink[i], outData + writePtr, target);
</del><ins>+        JumpLinkType jumpLinkType = MacroAssembler::computeJumpType(jumpsToLink[i], codeOutData + writePtr, target);
</ins><span class="cx">         // Compact branch if we can...
</span><span class="cx">         if (MacroAssembler::canCompact(jumpsToLink[i].type())) {
</span><span class="cx">             // Step back in the write stream
</span><span class="lines">@@ -157,17 +156,15 @@
</span><span class="cx">     recordLinkOffsets(m_assemblerStorage, readPtr, m_initialSize, readPtr - writePtr);
</span><span class="cx">         
</span><span class="cx">     for (unsigned i = 0; i &lt; jumpCount; ++i) {
</span><del>-        uint8_t* location = outData + jumpsToLink[i].from();
-        uint8_t* target = outData + jumpsToLink[i].to() - executableOffsetFor(jumpsToLink[i].to());
-        MacroAssembler::link(jumpsToLink[i], location, target);
</del><ins>+        uint8_t* location = codeOutData + jumpsToLink[i].from();
+        uint8_t* target = codeOutData + jumpsToLink[i].to() - executableOffsetFor(jumpsToLink[i].to());
+        MacroAssembler::link(jumpsToLink[i], outData + jumpsToLink[i].from(), location, target);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     jumpsToLink.clear();
</span><span class="cx">     shrink(writePtr + m_initialSize - readPtr);
</span><span class="cx"> 
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><span class="cx">     performJITMemcpy(m_code, outBuffer.buffer(), m_size);
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> #if DUMP_LINK_STATISTICS
</span><span class="cx">     dumpLinkStatistics(m_code, m_initialSize, m_size);
</span><span class="lines">@@ -193,7 +190,7 @@
</span><span class="cx"> #if CPU(ARM_TRADITIONAL)
</span><span class="cx">     macroAssembler.m_assembler.prepareExecutableCopy(m_code);
</span><span class="cx"> #endif
</span><del>-    memcpy(m_code, buffer.data(), buffer.codeSize());
</del><ins>+    performJITMemcpy(m_code, buffer.data(), buffer.codeSize());
</ins><span class="cx"> #if CPU(MIPS)
</span><span class="cx">     macroAssembler.m_assembler.relocateJumps(buffer.data(), m_code);
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerARM64h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx">     static JumpLinkType computeJumpType(JumpType jumpType, const uint8_t* from, const uint8_t* to) { return ARM64Assembler::computeJumpType(jumpType, from, to); }
</span><span class="cx">     static JumpLinkType computeJumpType(LinkRecord&amp; record, const uint8_t* from, const uint8_t* to) { return ARM64Assembler::computeJumpType(record, from, to); }
</span><span class="cx">     static int jumpSizeDelta(JumpType jumpType, JumpLinkType jumpLinkType) { return ARM64Assembler::jumpSizeDelta(jumpType, jumpLinkType); }
</span><del>-    static void link(LinkRecord&amp; record, uint8_t* from, uint8_t* to) { return ARM64Assembler::link(record, from, to); }
</del><ins>+    static void link(LinkRecord&amp; record, uint8_t* from, const uint8_t* fromInstruction, uint8_t* to) { return ARM64Assembler::link(record, from, fromInstruction, to); }
</ins><span class="cx"> 
</span><span class="cx">     static const Scale ScalePtr = TimesEight;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerMacroAssemblerARMv7h"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     static JumpLinkType computeJumpType(JumpType jumpType, const uint8_t* from, const uint8_t* to) { return ARMv7Assembler::computeJumpType(jumpType, from, to); }
</span><span class="cx">     static JumpLinkType computeJumpType(LinkRecord&amp; record, const uint8_t* from, const uint8_t* to) { return ARMv7Assembler::computeJumpType(record, from, to); }
</span><span class="cx">     static int jumpSizeDelta(JumpType jumpType, JumpLinkType jumpLinkType) { return ARMv7Assembler::jumpSizeDelta(jumpType, jumpLinkType); }
</span><del>-    static void link(LinkRecord&amp; record, uint8_t* from, uint8_t* to) { return ARMv7Assembler::link(record, from, to); }
</del><ins>+    static void link(LinkRecord&amp; record, uint8_t* from, const uint8_t* fromInstruction, uint8_t* to) { return ARMv7Assembler::link(record, from, fromInstruction, to); }
</ins><span class="cx"> 
</span><span class="cx">     struct ArmAddress {
</span><span class="cx">         enum AddressType {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -92,29 +92,30 @@
</span><span class="cx"> extern JS_EXPORTDATA uintptr_t startOfFixedExecutableMemoryPool;
</span><span class="cx"> extern JS_EXPORTDATA uintptr_t endOfFixedExecutableMemoryPool;
</span><span class="cx"> 
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
-extern JS_EXPORTDATA uintptr_t jitWriteFunctionAddress;
-#endif
-#endif // ENABLE(EXECUTABLE_ALLOCATOR_FIXED)
</del><ins>+typedef void (*JITWriteFunction)(off_t, const void*, size_t);
+extern JS_EXPORTDATA JITWriteFunction jitWriteFunction;
</ins><span class="cx"> 
</span><span class="cx"> static inline void* performJITMemcpy(void *dst, const void *src, size_t n)
</span><span class="cx"> {
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><span class="cx">     // Use execute-only write thunk for writes inside the JIT region. This is a variant of
</span><span class="cx">     // memcpy that takes an offset into the JIT region as its destination (first) parameter.
</span><del>-    if (jitWriteFunctionAddress &amp;&amp; (uintptr_t)dst &gt;= startOfFixedExecutableMemoryPool &amp;&amp; (uintptr_t)dst &lt;= endOfFixedExecutableMemoryPool) {
-        using JITWriteFunction = void (*)(off_t, const void*, size_t);
-        JITWriteFunction func = (JITWriteFunction)jitWriteFunctionAddress;
</del><ins>+    if (jitWriteFunction &amp;&amp; (uintptr_t)dst &gt;= startOfFixedExecutableMemoryPool &amp;&amp; (uintptr_t)dst &lt;= endOfFixedExecutableMemoryPool) {
</ins><span class="cx">         off_t offset = (off_t)((uintptr_t)dst - startOfFixedExecutableMemoryPool);
</span><del>-        func(offset, src, n);
</del><ins>+        jitWriteFunction(offset, src, n);
</ins><span class="cx">         return dst;
</span><span class="cx">     }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">     // Use regular memcpy for writes outside the JIT region.
</span><span class="cx">     return memcpy(dst, src, n);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#else // ENABLE(EXECUTABLE_ALLOCATOR_FIXED)
+static inline void* performJITMemcpy(void *dst, const void *src, size_t n)
+{
+    return memcpy(dst, src, n);
+}
+#endif
+
</ins><span class="cx"> class ExecutableAllocator {
</span><span class="cx">     enum ProtectionSetting { Writable, Executable };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitExecutableAllocatorFixedVMPoolcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -48,10 +48,19 @@
</span><span class="cx"> #include &lt;stdio.h&gt;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><span class="cx"> #include &quot;LinkBuffer.h&quot;
</span><span class="cx"> #include &quot;MacroAssembler.h&quot;
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000)
+#define HAVE_REMAP_JIT 1
+#endif
+
+#if HAVE(REMAP_JIT)
+#if CPU(ARM64) &amp;&amp; PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000
+#define USE_EXECUTE_ONLY_JIT_WRITE_FUNCTION 1
+#endif
+#endif
+
</ins><span class="cx"> #if OS(DARWIN)
</span><span class="cx"> #include &lt;mach/mach.h&gt;
</span><span class="cx"> extern &quot;C&quot; {
</span><span class="lines">@@ -79,8 +88,6 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#endif
-
</del><span class="cx"> using namespace WTF;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="lines">@@ -88,8 +95,10 @@
</span><span class="cx"> JS_EXPORTDATA uintptr_t startOfFixedExecutableMemoryPool;
</span><span class="cx"> JS_EXPORTDATA uintptr_t endOfFixedExecutableMemoryPool;
</span><span class="cx"> 
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
-JS_EXPORTDATA uintptr_t jitWriteFunctionAddress;
</del><ins>+JS_EXPORTDATA JITWriteFunction jitWriteFunction;
+
+#if !USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION) &amp;&amp; HAVE(REMAP_JIT)
+static uintptr_t startOfFixedWritableMemoryPool;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> class FixedVMPoolExecutableAllocator : public MetaAllocator {
</span><span class="lines">@@ -109,7 +118,6 @@
</span><span class="cx">             ASSERT(m_reservation.size() == reservationSize);
</span><span class="cx">             void* reservationBase = m_reservation.base();
</span><span class="cx"> 
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><span class="cx">             if (Options::useSeparatedWXHeap()) {
</span><span class="cx">                 // First page of our JIT allocation is reserved.
</span><span class="cx">                 ASSERT(reservationSize &gt;= pageSize() * 2);
</span><span class="lines">@@ -117,7 +125,6 @@
</span><span class="cx">                 reservationSize -= pageSize();
</span><span class="cx">                 initializeSeparatedWXHeaps(m_reservation.base(), pageSize(), reservationBase, reservationSize);
</span><span class="cx">             }
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx">             addFreshFreeSpace(reservationBase, reservationSize);
</span><span class="cx"> 
</span><span class="lines">@@ -163,7 +170,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-#if ENABLE(SEPARATED_WX_HEAP)
</del><ins>+#if OS(DARWIN) &amp;&amp; HAVE(REMAP_JIT)
</ins><span class="cx">     void initializeSeparatedWXHeaps(void* stubBase, size_t stubSize, void* jitBase, size_t jitSize)
</span><span class="cx">     {
</span><span class="cx">         mach_vm_address_t writableAddr = 0;
</span><span class="lines">@@ -184,40 +191,39 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         // Assemble a thunk that will serve as the means for writing into the JIT region.
</span><del>-        MacroAssemblerCodeRef writeThunk = jitWriteThunkGenerator(writableAddr, stubBase, stubSize);
</del><ins>+        MacroAssemblerCodeRef writeThunk = jitWriteThunkGenerator(reinterpret_cast&lt;void*&gt;(writableAddr), stubBase, stubSize);
</ins><span class="cx"> 
</span><span class="cx">         int result = 0;
</span><span class="cx"> 
</span><del>-        if (!remapSucceeded) {
-#if defined(VM_PROT_EXECUTE_ONLY)
-            // Prevent reading the write thunk code.
-            result = mprotect(stubBase, stubSize, VM_PROT_EXECUTE_ONLY);
-            RELEASE_ASSERT(!result);
</del><ins>+#if USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION)
+        // Prevent reading the write thunk code.
+        result = mprotect(stubBase, stubSize, VM_PROT_EXECUTE_ONLY);
+        RELEASE_ASSERT(!result);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-            // Prevent writing into the executable JIT mapping.
-            result = mprotect(jitBase, jitSize, VM_PROT_READ | VM_PROT_EXECUTE);
-            RELEASE_ASSERT(!result);
</del><ins>+        // Prevent writing into the executable JIT mapping.
+        result = mprotect(jitBase, jitSize, VM_PROT_READ | VM_PROT_EXECUTE);
+        RELEASE_ASSERT(!result);
</ins><span class="cx"> 
</span><del>-            // Prevent execution in the writable JIT mapping.
-            result = mprotect((void*)writableAddr, jitSize, VM_PROT_READ | VM_PROT_WRITE);
-            RELEASE_ASSERT(!result);
</del><ins>+        // Prevent execution in the writable JIT mapping.
+        result = mprotect((void*)writableAddr, jitSize, VM_PROT_READ | VM_PROT_WRITE);
+        RELEASE_ASSERT(!result);
</ins><span class="cx"> 
</span><del>-            // Zero out writableAddr to avoid leaking the address of the writable mapping.
-            memset_s(&amp;writableAddr, sizeof(writableAddr), 0, sizeof(writableAddr));
-        }
-        jitWriteFunctionAddress = (uintptr_t)writeThunk.code().executableAddress();
</del><ins>+        // Zero out writableAddr to avoid leaking the address of the writable mapping.
+        memset_s(&amp;writableAddr, sizeof(writableAddr), 0, sizeof(writableAddr));
+
+        jitWriteFunction = reinterpret_cast&lt;JITWriteFunction&gt;(writeThunk.code().executableAddress());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-#if CPU(ARM64)
-    MacroAssemblerCodeRef jitWriteThunkGenerator(mach_vm_address_t writableAddr, void* stubBase, size_t stubSize)
</del><ins>+#if CPU(ARM64) &amp;&amp; USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION)
+    MacroAssemblerCodeRef jitWriteThunkGenerator(void* writableAddr, void* stubBase, size_t stubSize)
</ins><span class="cx">     {
</span><span class="cx">         using namespace ARM64Registers;
</span><span class="cx">         using TrustedImm32 = MacroAssembler::TrustedImm32;
</span><span class="cx"> 
</span><span class="cx">         MacroAssembler jit;
</span><span class="cx"> 
</span><del>-        jit.move(MacroAssembler::TrustedImmPtr((const void*)writableAddr), x7);
</del><ins>+        jit.move(MacroAssembler::TrustedImmPtr(writableAddr), x7);
</ins><span class="cx">         jit.addPtr(x7, x0);
</span><span class="cx"> 
</span><span class="cx">         jit.move(x0, x3);
</span><span class="lines">@@ -274,9 +280,30 @@
</span><span class="cx">         LinkBuffer linkBuffer(jit, stubBase, stubSize);
</span><span class="cx">         return FINALIZE_CODE(linkBuffer, (&quot;Bulletproof JIT write thunk&quot;));
</span><span class="cx">     }
</span><del>-#endif // CPU(ARM64)
-#endif // ENABLE(SEPARATED_WX_HEAP)
</del><ins>+#else // CPU(ARM64) &amp;&amp; USE(EXECUTE_ONLY_JIT_WRITE_FUNCTION)
+    static void genericWriteToJITRegion(off_t offset, const void* data, size_t dataSize)
+    {
+        memcpy((void*)(startOfFixedWritableMemoryPool + offset), data, dataSize);
+    }
</ins><span class="cx"> 
</span><ins>+    MacroAssemblerCodeRef jitWriteThunkGenerator(void* address, void*, size_t)
+    {
+        startOfFixedWritableMemoryPool = reinterpret_cast&lt;uintptr_t&gt;(address);
+        uintptr_t function = (uintptr_t)((void*)&amp;genericWriteToJITRegion);
+#if CPU(ARM_THUMB2)
+        // Handle thumb offset
+        function -= 1;
+#endif
+        return MacroAssemblerCodeRef::createSelfManagedCodeRef(MacroAssemblerCodePtr((void*)function));
+    }
+#endif
+
+#else // OS(DARWIN) &amp;&amp; HAVE(REMAP_JIT)
+    void initializeSeparatedWXHeaps(void*, size_t, void*, size_t)
+    {
+    }
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx">     PageReservation m_reservation;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeOptionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Options.cpp (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Options.cpp        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/runtime/Options.cpp        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -294,9 +294,7 @@
</span><span class="cx"> #if !ENABLE(FTL_JIT)
</span><span class="cx">     Options::useFTLJIT() = false;
</span><span class="cx"> #endif
</span><del>-#if !ENABLE(SEPARATED_WX_HEAP)
-    Options::useSeparatedWXHeap() = false;
-#endif
</del><ins>+    
</ins><span class="cx"> #if OS(WINDOWS) &amp;&amp; CPU(X86) 
</span><span class="cx">     // Disable JIT on Windows if SSE2 is not present 
</span><span class="cx">     if (!MacroAssemblerX86::supportsFloatingPoint())
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeOptionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Options.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Options.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/JavaScriptCore/runtime/Options.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     \
</span><span class="cx">     v(bool, crashIfCantAllocateJITMemory, false, nullptr) \
</span><span class="cx">     v(unsigned, jitMemoryReservationSize, 0, &quot;Set this number to change the executable allocation size in ExecutableAllocatorFixedVMPool. (In bytes.)&quot;) \
</span><del>-    v(bool, useSeparatedWXHeap, true, nullptr) \
</del><ins>+    v(bool, useSeparatedWXHeap, false, nullptr) \
</ins><span class="cx">     \
</span><span class="cx">     v(bool, forceCodeBlockLiveness, false, nullptr) \
</span><span class="cx">     v(bool, forceICFailure, false, nullptr) \
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WTF/ChangeLog        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-04-05  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Remove compile time define for SEPARATED_HEAP
+        https://bugs.webkit.org/show_bug.cgi?id=155508
+
+        Reviewed by Mark Lam.
+
+        * wtf/FeatureDefines.h:
+        * wtf/Platform.h:
+
</ins><span class="cx"> 2016-04-11  Fujii Hironori  &lt;Hironori.Fujii@jp.sony.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CMake] Make FOLDER property INHERITED
</span></span></pre></div>
<a id="trunkSourceWTFwtfFeatureDefinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/FeatureDefines.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/FeatureDefines.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WTF/wtf/FeatureDefines.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -779,10 +779,6 @@
</span><span class="cx"> #define ENABLE_XSLT 1
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if !defined(ENABLE_SEPARATED_WX_HEAP)
-#define ENABLE_SEPARATED_WX_HEAP 0
-#endif
-
</del><span class="cx"> /* Asserts, invariants for macro definitions */
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(VIDEO_TRACK) &amp;&amp; !ENABLE(VIDEO)
</span></span></pre></div>
<a id="trunkSourceWTFwtfPlatformh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Platform.h (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Platform.h        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WTF/wtf/Platform.h        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1142,10 +1142,4 @@
</span><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if defined(ENABLE_SEPARATED_WX_HEAP)
-#if !(CPU(ARM64) &amp;&amp; ((PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000)))
-#undef ENABLE_SEPARATED_WX_HEAP
-#endif
-#endif
-
</del><span class="cx"> #endif /* WTF_Platform_h */
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebCore/ChangeLog        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-04-05  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Remove compile time define for SEPARATED_HEAP
+        https://bugs.webkit.org/show_bug.cgi?id=155508
+
+        Reviewed by Mark Lam.
+
+        * Configurations/FeatureDefines.xcconfig:
+
</ins><span class="cx"> 2016-04-11  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge AttributedDOMTokenList into DOMTokenList
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -193,7 +193,4 @@
</span><span class="cx"> ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
</span><span class="cx"> ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
</span><span class="cx"> 
</span><del>-ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ;
-ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
-
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTE
 D_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESS
 ION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEB
 GL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_SEPARATED_WX_HEAP);
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENAB
 LE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE
 _MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $
 (ENABLE_WEBGL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE);
</ins></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-04-05  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Remove compile time define for SEPARATED_HEAP
+        https://bugs.webkit.org/show_bug.cgi?id=155508
+
+        Reviewed by Mark Lam.
+
+        * Configurations/FeatureDefines.xcconfig:
+
</ins><span class="cx"> 2016-04-08  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove support for custom target picker actions
</span></span></pre></div>
<a id="trunkSourceWebKitmacConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -193,7 +193,4 @@
</span><span class="cx"> ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
</span><span class="cx"> ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
</span><span class="cx"> 
</span><del>-ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ;
-ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
-
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTE
 D_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESS
 ION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEB
 GL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_SEPARATED_WX_HEAP);
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENAB
 LE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE
 _MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $
 (ENABLE_WEBGL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE);
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebKit2/ChangeLog        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-04-05  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Remove compile time define for SEPARATED_HEAP
+        https://bugs.webkit.org/show_bug.cgi?id=155508
+
+        Reviewed by Mark Lam.
+
+        * Configurations/FeatureDefines.xcconfig:
+
</ins><span class="cx"> 2016-04-11  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r199290.
</span></span></pre></div>
<a id="trunkSourceWebKit2ConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -193,7 +193,4 @@
</span><span class="cx"> ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
</span><span class="cx"> ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
</span><span class="cx"> 
</span><del>-ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ;
-ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
-
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTE
 D_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESS
 ION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEB
 GL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_SEPARATED_WX_HEAP);
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENAB
 LE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE
 _MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $
 (ENABLE_WEBGL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE);
</ins></span></pre></div>
<a id="trunkToolsTestWebKitAPIConfigurationsFeatureDefinesxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig (199298 => 199299)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig        2016-04-11 18:49:13 UTC (rev 199298)
+++ trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig        2016-04-11 19:00:48 UTC (rev 199299)
</span><span class="lines">@@ -193,7 +193,4 @@
</span><span class="cx"> ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
</span><span class="cx"> ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
</span><span class="cx"> 
</span><del>-ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ;
-ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
-
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTE
 D_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESS
 ION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEB
 GL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE) $(ENABLE_SEPARATED_WX_HEAP);
</del><ins>+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENAB
 LE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FETCH_API) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE
 _MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RESOURCE_USAGE) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $
 (ENABLE_WEBGL2) $(ENABLE_WEB_ANIMATIONS) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SHADOW_DOM) $(ENABLE_CUSTOM_ELEMENTS) $(ENABLE_VIDEO_PRESENTATION_MODE);
</ins></span></pre>
</div>
</div>

</body>
</html>