⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 197793 in webkit


Ignore:
Timestamp:
Mar 8, 2016, 12:53:11 PM (11 years ago)
Author:
oliver@apple.com
Message:

Start moving to separated writable and executable mappings in the JIT
​https://bugs.webkit.org/show_bug.cgi?id=155178

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

Start moving to a separate writable and executable heap for the various
JITs.

As part of our work to harden the JIT against various attacks, we're
moving away from our current RWX heap and on to using separate RW and X
mappings. This means that simply leaking the location of the executable
mapping is not sufficient to compromise JSC, so we can continue to
use direct executable pointers in our GC objects (which we need for
performance), but keep the writable pointer in only a single location
so that we are less likely to leak the address. To further obscure the
address of the writable region we place it in an execute only region
of memory so that it is not possible to read the location from
anywhere. That means an attacker must have at least partial control
of PC (to call jitMemCopy) before they can start to attack the JIT.

This work is initially ARM64 only, as we use as the jitMemCopy is
currently specific to that platform's calling conventions and layout.
We're just landing it in the current form so that we can at least
ensure it doesn't regress.

  • Configurations/FeatureDefines.xcconfig:
  • assembler/ARM64Assembler.h:

(JSC::ARM64Assembler::ldp):
(JSC::ARM64Assembler::ldnp):
(JSC::ARM64Assembler::fillNops):
(JSC::ARM64Assembler::stp):
(JSC::ARM64Assembler::stnp):
(JSC::ARM64Assembler::replaceWithJump):
(JSC::ARM64Assembler::replaceWithLoad):
(JSC::ARM64Assembler::replaceWithAddressComputation):
(JSC::ARM64Assembler::setPointer):
(JSC::ARM64Assembler::repatchInt32):
(JSC::ARM64Assembler::repatchCompact):
(JSC::ARM64Assembler::linkJumpOrCall):
(JSC::ARM64Assembler::linkCompareAndBranch):
(JSC::ARM64Assembler::linkConditionalBranch):
(JSC::ARM64Assembler::linkTestAndBranch):
(JSC::ARM64Assembler::loadStoreRegisterPairOffset):
(JSC::ARM64Assembler::loadStoreRegisterPairNonTemporal):

  • assembler/LinkBuffer.cpp:

(JSC::LinkBuffer::copyCompactAndLinkCode):
(JSC::LinkBuffer::allocate):

  • assembler/LinkBuffer.h:

(JSC::LinkBuffer::LinkBuffer):

  • assembler/MacroAssemblerARM64.h:

(JSC::MacroAssemblerARM64::sub64):
(JSC::MacroAssemblerARM64::load64):
(JSC::MacroAssemblerARM64::loadPair64):
(JSC::MacroAssemblerARM64::loadPair64WithNonTemporalAccess):
(JSC::MacroAssemblerARM64::load8):
(JSC::MacroAssemblerARM64::store64):
(JSC::MacroAssemblerARM64::storePair64):
(JSC::MacroAssemblerARM64::storePair64WithNonTemporalAccess):
(JSC::MacroAssemblerARM64::store8):
(JSC::MacroAssemblerARM64::branchAdd64):
(JSC::MacroAssemblerARM64::branchSub64):

  • jit/ExecutableAllocator.h:

(JSC::performJITMemcpy):

  • jit/ExecutableAllocatorFixedVMPool.cpp:

(JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
(JSC::FixedVMPoolExecutableAllocator::initializeBulletproofJIT):
(JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):

  • runtime/Options.cpp:

(JSC::recomputeDependentOptions):

  • runtime/Options.h:

Source/WebCore:

Update feature defines.

  • Configurations/FeatureDefines.xcconfig:

Source/WebKit/mac:

Update feature defines.

  • Configurations/FeatureDefines.xcconfig:

Source/WebKit2:

Update feature defines.

  • Configurations/FeatureDefines.xcconfig:

Source/WTF:

Update feature defines.

  • wtf/FeatureDefines.h:
  • wtf/Platform.h: ARM64 for now.

Tools:

Making run-jsc-benchmarks slightly happier on my machine.

  • Scripts/run-jsc-benchmarks:
Location:
trunk
Files:
1 added
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r197781 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Start moving to a separate writable and executable heap for the various
     9        JITs.
     10
     11        As part of our work to harden the JIT against various attacks, we're
     12        moving away from our current RWX heap and on to using separate RW and X
     13        mappings. This means that simply leaking the location of the executable
     14        mapping is not sufficient to compromise JSC, so we can continue to
     15        use direct executable pointers in our GC objects (which we need for
     16        performance), but keep the writable pointer in only a single location
     17        so that we are less likely to leak the address. To further obscure the
     18        address of the writable region we place it in an execute only region
     19        of memory so that it is not possible to read the location from
     20        anywhere. That means an attacker must have at least partial control
     21        of PC (to call jitMemCopy) before they can start to attack the JIT.
     22
     23        This work is initially ARM64 only, as we use as the jitMemCopy is
     24        currently specific to that platform's calling conventions and layout.
     25        We're just landing it in the current form so that we can at least
     26        ensure it doesn't regress.
     27
     28        * Configurations/FeatureDefines.xcconfig:
     29        * assembler/ARM64Assembler.h:
     30        (JSC::ARM64Assembler::ldp):
     31        (JSC::ARM64Assembler::ldnp):
     32        (JSC::ARM64Assembler::fillNops):
     33        (JSC::ARM64Assembler::stp):
     34        (JSC::ARM64Assembler::stnp):
     35        (JSC::ARM64Assembler::replaceWithJump):
     36        (JSC::ARM64Assembler::replaceWithLoad):
     37        (JSC::ARM64Assembler::replaceWithAddressComputation):
     38        (JSC::ARM64Assembler::setPointer):
     39        (JSC::ARM64Assembler::repatchInt32):
     40        (JSC::ARM64Assembler::repatchCompact):
     41        (JSC::ARM64Assembler::linkJumpOrCall):
     42        (JSC::ARM64Assembler::linkCompareAndBranch):
     43        (JSC::ARM64Assembler::linkConditionalBranch):
     44        (JSC::ARM64Assembler::linkTestAndBranch):
     45        (JSC::ARM64Assembler::loadStoreRegisterPairOffset):
     46        (JSC::ARM64Assembler::loadStoreRegisterPairNonTemporal):
     47        * assembler/LinkBuffer.cpp:
     48        (JSC::LinkBuffer::copyCompactAndLinkCode):
     49        (JSC::LinkBuffer::allocate):
     50        * assembler/LinkBuffer.h:
     51        (JSC::LinkBuffer::LinkBuffer):
     52        * assembler/MacroAssemblerARM64.h:
     53        (JSC::MacroAssemblerARM64::sub64):
     54        (JSC::MacroAssemblerARM64::load64):
     55        (JSC::MacroAssemblerARM64::loadPair64):
     56        (JSC::MacroAssemblerARM64::loadPair64WithNonTemporalAccess):
     57        (JSC::MacroAssemblerARM64::load8):
     58        (JSC::MacroAssemblerARM64::store64):
     59        (JSC::MacroAssemblerARM64::storePair64):
     60        (JSC::MacroAssemblerARM64::storePair64WithNonTemporalAccess):
     61        (JSC::MacroAssemblerARM64::store8):
     62        (JSC::MacroAssemblerARM64::branchAdd64):
     63        (JSC::MacroAssemblerARM64::branchSub64):
     64        * jit/ExecutableAllocator.h:
     65        (JSC::performJITMemcpy):
     66        * jit/ExecutableAllocatorFixedVMPool.cpp:
     67        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
     68        (JSC::FixedVMPoolExecutableAllocator::initializeBulletproofJIT):
     69        (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator):
     70        * runtime/Options.cpp:
     71        (JSC::recomputeDependentOptions):
     72        * runtime/Options.h:
     73
    1742016-03-08  Michael Saboff  <msaboff@apple.com>
    275
  • trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig

    r197153 r197793  
    195195ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
    196196
    197 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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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);
     197ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ENABLE_SEPARATED_WX_HEAP;
     198ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
     199
     200FEATURE_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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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) $(ENABLE_SEPARATED_WX_HEAP);
  • trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h

    r196736 r197793  
    10891089
    10901090    template<int datasize>
     1091    ALWAYS_INLINE void ldp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
     1092    {
     1093        CHECK_DATASIZE();
     1094        insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, pimm, rn, rt, rt2));
     1095    }
     1096
     1097    template<int datasize>
     1098    ALWAYS_INLINE void ldnp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
     1099    {
     1100        CHECK_DATASIZE();
     1101        insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_LOAD, pimm, rn, rt, rt2));
     1102    }
     1103
     1104    template<int datasize>
    10911105    ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, RegisterID rm)
    10921106    {
    … …  
    14751489        RELEASE_ASSERT(!(size % sizeof(int32_t)));
    14761490        size_t n = size / sizeof(int32_t);
    1477         for (int32_t* ptr = static_cast<int32_t*>(base); n--;)
    1478             *ptr++ = nopPseudo();
     1491        for (int32_t* ptr = static_cast<int32_t*>(base); n--;) {
     1492            int insn = nopPseudo();
     1493            performJITMemcpy(ptr++, &insn, sizeof(int));
     1494        }
    14791495    }
    14801496   
    … …  
    16441660        CHECK_DATASIZE();
    16451661        insn(loadStoreRegisterPairPreIndex(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, simm, rn, rt, rt2));
     1662    }
     1663
     1664    template<int datasize>
     1665    ALWAYS_INLINE void stp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
     1666    {
     1667        CHECK_DATASIZE();
     1668        insn(loadStoreRegisterPairOffset(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, pimm, rn, rt, rt2));
     1669    }
     1670
     1671    template<int datasize>
     1672    ALWAYS_INLINE void stnp(RegisterID rt, RegisterID rt2, RegisterID rn, unsigned pimm = 0)
     1673    {
     1674        CHECK_DATASIZE();
     1675        insn(loadStoreRegisterPairNonTemporal(MEMPAIROPSIZE_INT(datasize), false, MemOp_STORE, pimm, rn, rt, rt2));
    16461676    }
    16471677
    … …  
    24712501        intptr_t offset = (reinterpret_cast<intptr_t>(to) - reinterpret_cast<intptr_t>(where)) >> 2;
    24722502        ASSERT(static_cast<int>(offset) == offset);
    2473         *static_cast<int*>(where) = unconditionalBranchImmediate(false, static_cast<int>(offset));
     2503        int insn = unconditionalBranchImmediate(false, static_cast<int>(offset));
     2504        performJITMemcpy(where, &insn, sizeof(int));
    24742505        cacheFlush(where, sizeof(int));
    24752506    }
    … …  
    24952526            ASSERT(!shift);
    24962527            ASSERT(!(imm12 & ~0xff8));
    2497             *static_cast<int*>(where) = loadStoreRegisterUnsignedImmediate(MemOpSize_64, false, MemOp_LOAD, encodePositiveImmediate<64>(imm12), rn, rd);
     2528            int insn = loadStoreRegisterUnsignedImmediate(MemOpSize_64, false, MemOp_LOAD, encodePositiveImmediate<64>(imm12), rn, rd);
     2529            performJITMemcpy(where, &insn, sizeof(int));
    24982530            cacheFlush(where, sizeof(int));
    24992531        }
    … …  
    25282560            ASSERT(opc == MemOp_LOAD);
    25292561            ASSERT(!(imm12 & ~0x1ff));
    2530             *static_cast<int*>(where) = addSubtractImmediate(Datasize_64, AddOp_ADD, DontSetFlags, 0, imm12 * sizeof(void*), rn, rt);
     2562            int insn = addSubtractImmediate(Datasize_64, AddOp_ADD, DontSetFlags, 0, imm12 * sizeof(void*), rn, rt);
     2563            performJITMemcpy(where, &insn, sizeof(int));
    25312564            cacheFlush(where, sizeof(int));
    25322565        }
    … …  
    25582591    {
    25592592        uintptr_t value = reinterpret_cast<uintptr_t>(valuePtr);
    2560         address[0] = moveWideImediate(Datasize_64, MoveWideOp_Z, 0, getHalfword(value, 0), rd);
    2561         address[1] = moveWideImediate(Datasize_64, MoveWideOp_K, 1, getHalfword(value, 1), rd);
    2562         address[2] = moveWideImediate(Datasize_64, MoveWideOp_K, 2, getHalfword(value, 2), rd);
     2593        int buffer[3];
     2594        buffer[0] = moveWideImediate(Datasize_64, MoveWideOp_Z, 0, getHalfword(value, 0), rd);
     2595        buffer[1] = moveWideImediate(Datasize_64, MoveWideOp_K, 1, getHalfword(value, 1), rd);
     2596        buffer[2] = moveWideImediate(Datasize_64, MoveWideOp_K, 2, getHalfword(value, 2), rd);
     2597        performJITMemcpy(address, buffer, sizeof(int) * 3);
    25632598
    25642599        if (flush)
    … …  
    25792614        ASSERT(checkMovk<Datasize_32>(address[1], 1, rd));
    25802615
     2616        int buffer[2];
    25812617        if (value >= 0) {
    2582             address[0] = moveWideImediate(Datasize_32, MoveWideOp_Z, 0, getHalfword(value, 0), rd);
    2583             address[1] = moveWideImediate(Datasize_32, MoveWideOp_K, 1, getHalfword(value, 1), rd);
     2618            buffer[0] = moveWideImediate(Datasize_32, MoveWideOp_Z, 0, getHalfword(value, 0), rd);
     2619            buffer[1] = moveWideImediate(Datasize_32, MoveWideOp_K, 1, getHalfword(value, 1), rd);
    25842620        } else {
    2585             address[0] = moveWideImediate(Datasize_32, MoveWideOp_N, 0, ~getHalfword(value, 0), rd);
    2586             address[1] = moveWideImediate(Datasize_32, MoveWideOp_K, 1, getHalfword(value, 1), rd);
     2621            buffer[0] = moveWideImediate(Datasize_32, MoveWideOp_N, 0, ~getHalfword(value, 0), rd);
     2622            buffer[1] = moveWideImediate(Datasize_32, MoveWideOp_K, 1, getHalfword(value, 1), rd);
    25872623        }
     2624        performJITMemcpy(where, &buffer, sizeof(int) * 2);
    25882625
    25892626        cacheFlush(where, sizeof(int) * 2);
    … …  
    26492686        else
    26502687            imm12 = encodePositiveImmediate<64>(value);
    2651         *static_cast<int*>(where) = loadStoreRegisterUnsignedImmediate(size, V, opc, imm12, rn, rt);
     2688        int insn = loadStoreRegisterUnsignedImmediate(size, V, opc, imm12, rn, rt);
     2689        performJITMemcpy(where, &insn, sizeof(int));
    26522690
    26532691        cacheFlush(where, sizeof(int));
    … …  
    28462884        ASSERT(static_cast<int>(offset) == offset);
    28472885
    2848         *from = unconditionalBranchImmediate(isCall, static_cast<int>(offset));
     2886        int insn = unconditionalBranchImmediate(isCall, static_cast<int>(offset));
     2887        performJITMemcpy(from, &insn, sizeof(int));
    28492888    }
    28502889
    … …  
    28612900
    28622901        if (useDirect || isDirect) {
    2863             *from = compareAndBranchImmediate(is64Bit ? Datasize_64 : Datasize_32, condition == ConditionNE, static_cast<int>(offset), rt);
    2864             if (!isDirect)
    2865                 *(from + 1) = nopPseudo();
     2902            int insn = compareAndBranchImmediate(is64Bit ? Datasize_64 : Datasize_32, condition == ConditionNE, static_cast<int>(offset), rt);
     2903            performJITMemcpy(from, &insn, sizeof(int));
     2904            if (!isDirect) {
     2905                insn = nopPseudo();
     2906                performJITMemcpy(from + 1, &insn, sizeof(int));
     2907            }
    28662908        } else {
    2867             *from = compareAndBranchImmediate(is64Bit ? Datasize_64 : Datasize_32, invert(condition) == ConditionNE, 2, rt);
     2909            int insn = compareAndBranchImmediate(is64Bit ? Datasize_64 : Datasize_32, invert(condition) == ConditionNE, 2, rt);
     2910            performJITMemcpy(from, &insn, sizeof(int));
    28682911            linkJumpOrCall<false>(from + 1, to);
    28692912        }
    … …  
    28822925
    28832926        if (useDirect || isDirect) {
    2884             *from = conditionalBranchImmediate(static_cast<int>(offset), condition);
    2885             if (!isDirect)
    2886                 *(from + 1) = nopPseudo();
     2927            int insn = conditionalBranchImmediate(static_cast<int>(offset), condition);
     2928            performJITMemcpy(from, &insn, sizeof(int));
     2929            if (!isDirect) {
     2930                insn = nopPseudo();
     2931                performJITMemcpy(from + 1, &insn, sizeof(int));
     2932            }
    28872933        } else {
    2888             *from = conditionalBranchImmediate(2, invert(condition));
     2934            int insn = conditionalBranchImmediate(2, invert(condition));
     2935            performJITMemcpy(from, &insn, sizeof(int));
    28892936            linkJumpOrCall<false>(from + 1, to);
    28902937        }
    … …  
    29042951
    29052952        if (useDirect || isDirect) {
    2906             *from = testAndBranchImmediate(condition == ConditionNE, static_cast<int>(bitNumber), static_cast<int>(offset), rt);
    2907             if (!isDirect)
    2908                 *(from + 1) = nopPseudo();
     2953            int insn = testAndBranchImmediate(condition == ConditionNE, static_cast<int>(bitNumber), static_cast<int>(offset), rt);
     2954            performJITMemcpy(from, &insn, sizeof(int));
     2955            if (!isDirect) {
     2956                insn = nopPseudo();
     2957                performJITMemcpy(from + 1, &insn, sizeof(int));
     2958            }
    29092959        } else {
    2910             *from = testAndBranchImmediate(invert(condition) == ConditionNE, static_cast<int>(bitNumber), 2, rt);
     2960            int insn = testAndBranchImmediate(invert(condition) == ConditionNE, static_cast<int>(bitNumber), 2, rt);
     2961            performJITMemcpy(from, &insn, sizeof(int));
    29112962            linkJumpOrCall<false>(from + 1, to);
    29122963        }
    … …  
    33473398    {
    33483399        return loadStoreRegisterPairPreIndex(size, V, opc, immediate, rn, xOrZrAsFPR(rt), xOrZrAsFPR(rt2));
     3400    }
     3401
     3402    // 'V' means vector
     3403    ALWAYS_INLINE static int loadStoreRegisterPairOffset(MemPairOpSize size, bool V, MemOp opc, int immediate, RegisterID rn, FPRegisterID rt, FPRegisterID rt2)
     3404    {
     3405        ASSERT(size < 3);
     3406        ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
     3407        ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
     3408        unsigned immedShiftAmount = memPairOffsetShift(V, size);
     3409        int imm7 = immediate >> immedShiftAmount;
     3410        ASSERT((imm7 << immedShiftAmount) == immediate && isInt7(imm7));
     3411        return (0x29000000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);
     3412    }
     3413
     3414    ALWAYS_INLINE static int loadStoreRegisterPairOffset(MemPairOpSize size, bool V, MemOp opc, int immediate, RegisterID rn, RegisterID rt, RegisterID rt2)
     3415    {
     3416        return loadStoreRegisterPairOffset(size, V, opc, immediate, rn, xOrZrAsFPR(rt), xOrZrAsFPR(rt2));
     3417    }
     3418
     3419    // 'V' means vector
     3420    ALWAYS_INLINE static int loadStoreRegisterPairNonTemporal(MemPairOpSize size, bool V, MemOp opc, int immediate, RegisterID rn, FPRegisterID rt, FPRegisterID rt2)
     3421    {
     3422        ASSERT(size < 3);
     3423        ASSERT(opc == (opc & 1)); // Only load or store, load signed 64 is handled via size.
     3424        ASSERT(V || (size != MemPairOp_LoadSigned_32) || (opc == MemOp_LOAD)); // There isn't an integer store signed.
     3425        unsigned immedShiftAmount = memPairOffsetShift(V, size);
     3426        int imm7 = immediate >> immedShiftAmount;
     3427        ASSERT((imm7 << immedShiftAmount) == immediate && isInt7(imm7));
     3428        return (0x28000000 | size << 30 | V << 26 | opc << 22 | (imm7 & 0x7f) << 15 | rt2 << 10 | xOrSp(rn) << 5 | rt);
     3429    }
     3430
     3431    ALWAYS_INLINE static int loadStoreRegisterPairNonTemporal(MemPairOpSize size, bool V, MemOp opc, int immediate, RegisterID rn, RegisterID rt, RegisterID rt2)
     3432    {
     3433        return loadStoreRegisterPairNonTemporal(size, V, opc, immediate, rn, xOrZrAsFPR(rt), xOrZrAsFPR(rt2));
    33493434    }
    33503435
  • trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp

    r194496 r197793  
    106106    m_assemblerStorage = macroAssembler.m_assembler.buffer().releaseAssemblerData();
    107107    uint8_t* inData = reinterpret_cast<uint8_t*>(m_assemblerStorage.buffer());
     108#if ENABLE(SEPARATED_WX_HEAP)
     109    AssemblerData outBuffer(m_size);
     110    uint8_t* outData = reinterpret_cast<uint8_t*>(outBuffer.buffer());
     111#else
    108112    uint8_t* outData = reinterpret_cast<uint8_t*>(m_code);
     113#endif
    109114    int readPtr = 0;
    110115    int writePtr = 0;
    … …  
    161166    shrink(writePtr + m_initialSize - readPtr);
    162167
     168#if ENABLE(SEPARATED_WX_HEAP)
     169    performJITMemcpy(m_code, outBuffer.buffer(), m_size);
     170#endif
     171
    163172#if DUMP_LINK_STATISTICS
    164173    dumpLinkStatistics(m_code, m_initialSize, m_size);
    … …  
    209218    }
    210219   
     220    ASSERT(m_vm != nullptr);
    211221    m_executableMemory = m_vm->executableAllocator.allocate(*m_vm, initialSize, ownerUID, effort);
    212222    if (!m_executableMemory)
  • trunk/Source/JavaScriptCore/assembler/LinkBuffer.h

    r191058 r197793  
    9696    }
    9797
    98     LinkBuffer(VM& vm, MacroAssembler& macroAssembler, void* code, size_t size)
     98    LinkBuffer(MacroAssembler& macroAssembler, void* code, size_t size, JITCompilationEffort effort = JITCompilationMustSucceed)
    9999        : m_size(size)
    100100#if ENABLE(BRANCH_COMPACTION)
    … …  
    103103        , m_didAllocate(false)
    104104        , m_code(code)
    105         , m_vm(&vm)
     105        , m_vm(0)
    106106#ifndef NDEBUG
    107107        , m_completed(false)
    108108#endif
    109109    {
    110         linkCode(macroAssembler, 0, JITCompilationCanFail);
     110        linkCode(macroAssembler, 0, effort);
    111111    }
    112112
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h

    r197652 r197793  
    762762        m_assembler.sub<64>(dest, dest, src);
    763763    }
     764
     765    void sub64(RegisterID a, RegisterID b, RegisterID dest)
     766    {
     767        m_assembler.sub<64>(dest, a, b);
     768    }
    764769   
    765770    void sub64(TrustedImm32 imm, RegisterID dest)
    … …  
    961966    }
    962967
     968    void load64(RegisterID src, PostIndex simm, RegisterID dest)
     969    {
     970        m_assembler.ldr<64>(dest, src, simm);
     971    }
     972
    963973    DataLabel32 load64WithAddressOffsetPatch(Address address, RegisterID dest)
    964974    {
    … …  
    977987    }
    978988
     989    void loadPair64(RegisterID src, RegisterID dest1, RegisterID dest2)
     990    {
     991        loadPair64(src, TrustedImm32(0), dest1, dest2);
     992    }
     993
     994    void loadPair64(RegisterID src, TrustedImm32 offset, RegisterID dest1, RegisterID dest2)
     995    {
     996        m_assembler.ldp<64>(dest1, dest2, src, offset.m_value);
     997    }
     998
     999    void loadPair64WithNonTemporalAccess(RegisterID src, RegisterID dest1, RegisterID dest2)
     1000    {
     1001        loadPair64WithNonTemporalAccess(src, TrustedImm32(0), dest1, dest2);
     1002    }
     1003
     1004    void loadPair64WithNonTemporalAccess(RegisterID src, TrustedImm32 offset, RegisterID dest1, RegisterID dest2)
     1005    {
     1006        m_assembler.ldnp<64>(dest1, dest2, src, offset.m_value);
     1007    }
     1008
    9791009    void abortWithReason(AbortReason reason)
    9801010    {
    … …  
    11301160    }
    11311161
     1162    void load8(RegisterID src, PostIndex simm, RegisterID dest)
     1163    {
     1164        m_assembler.ldr<8>(dest, src, simm);
     1165    }
     1166
    11321167    void load8SignedExtendTo32(ImplicitAddress address, RegisterID dest)
    11331168    {
    … …  
    12121247        moveToCachedReg(imm, dataMemoryTempRegister());
    12131248        store64(dataTempRegister, address);
     1249    }
     1250
     1251    void store64(RegisterID src, RegisterID dest, PostIndex simm)
     1252    {
     1253        m_assembler.str<64>(src, dest, simm);
    12141254    }
    12151255   
    … …  
    12221262    }
    12231263
     1264    void storePair64(RegisterID src1, RegisterID src2, RegisterID dest)
     1265    {
     1266        storePair64(src1, src2, dest, TrustedImm32(0));
     1267    }
     1268
     1269    void storePair64(RegisterID src1, RegisterID src2, RegisterID dest, TrustedImm32 offset)
     1270    {
     1271        m_assembler.stp<64>(src1, src2, dest, offset.m_value);
     1272    }
     1273
     1274    void storePair64WithNonTemporalAccess(RegisterID src1, RegisterID src2, RegisterID dest)
     1275    {
     1276        storePair64WithNonTemporalAccess(src1, src2, dest, TrustedImm32(0));
     1277    }
     1278
     1279    void storePair64WithNonTemporalAccess(RegisterID src1, RegisterID src2, RegisterID dest, TrustedImm32 offset)
     1280    {
     1281        m_assembler.stnp<64>(src1, src2, dest, offset.m_value);
     1282    }
     1283
    12241284    void store32(RegisterID src, ImplicitAddress address)
    12251285    {
    … …  
    13671427        move(imm, getCachedDataTempRegisterIDAndInvalidate());
    13681428        store8(dataTempRegister, address);
     1429    }
     1430
     1431    void store8(RegisterID src, RegisterID dest, PostIndex simm)
     1432    {
     1433        m_assembler.str<8>(src, dest, simm);
    13691434    }
    13701435
    … …  
    25872652    }
    25882653
     2654    Jump branchAdd64(RelationalCondition cond, TrustedImm32 imm, RegisterID dest)
     2655    {
     2656        ASSERT(isUInt12(imm.m_value));
     2657        m_assembler.add<64, S>(dest, dest, UInt12(imm.m_value));
     2658        return Jump(makeBranch(cond));
     2659    }
     2660
    25892661    Jump branchMul32(ResultCondition cond, RegisterID src1, RegisterID src2, RegisterID scratch1, RegisterID scratch2, RegisterID dest)
    25902662    {
    … …  
    27302802    {
    27312803        return branchSub64(cond, dest, imm, dest);
     2804    }
     2805
     2806    Jump branchSub64(RelationalCondition cond, TrustedImm32 imm, RegisterID dest)
     2807    {
     2808        ASSERT(isUInt12(imm.m_value));
     2809        m_assembler.sub<64, S>(dest, dest, UInt12(imm.m_value));
     2810        return Jump(makeBranch(cond));
    27322811    }
    27332812
  • trunk/Source/JavaScriptCore/jit/ExecutableAllocator.h

    r197441 r197793  
    9191
    9292extern uintptr_t startOfFixedExecutableMemoryPool;
     93extern uintptr_t endOfFixedExecutableMemoryPool;
     94
     95#if ENABLE(SEPARATED_WX_HEAP)
     96extern uintptr_t jitWriteFunctionAddress;
    9397#endif
     98#endif // ENABLE(EXECUTABLE_ALLOCATOR_FIXED)
     99
     100static inline void* performJITMemcpy(void *dst, const void *src, size_t n)
     101{
     102#if ENABLE(SEPARATED_WX_HEAP)
     103    // Use execute-only write thunk for writes inside the JIT region. This is a variant of
     104    // memcpy that takes an offset into the JIT region as its destination (first) parameter.
     105    if (jitWriteFunctionAddress && (uintptr_t)dst >= startOfFixedExecutableMemoryPool && (uintptr_t)dst <= endOfFixedExecutableMemoryPool) {
     106        using JITWriteFunction = void (*)(off_t, const void*, size_t);
     107        JITWriteFunction func = (JITWriteFunction)jitWriteFunctionAddress;
     108        off_t offset = (off_t)((uintptr_t)dst - startOfFixedExecutableMemoryPool);
     109        func(offset, src, n);
     110        return dst;
     111    }
     112#endif
     113
     114    // Use regular memcpy for writes outside the JIT region.
     115    return memcpy(dst, src, n);
     116}
    94117
    95118class ExecutableAllocator {
  • trunk/Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp

    r197563 r197793  
    4949#endif
    5050
     51#if ENABLE(SEPARATE_WX_HEAPPROOF_JIT)
     52#include "LinkBuffer.h"
     53#include "MacroAssembler.h"
     54
     55#if OS(DARWIN)
     56#include <mach/mach.h>
     57#include <mach/mach_vm.h>
     58#endif
     59
     60#endif
     61
    5162using namespace WTF;
    5263
    5364namespace JSC {
    54    
    55 uintptr_t startOfFixedExecutableMemoryPool;
     65
     66JS_EXPORT_PRIVATE uintptr_t startOfFixedExecutableMemoryPool;
     67JS_EXPORT_PRIVATE uintptr_t endOfFixedExecutableMemoryPool;
     68
     69#if ENABLE(SEPARATE_WX_HEAPPROOF_JIT)
     70JS_EXPORT_PRIVATE uintptr_t jitWriteFunctionAddress;
     71#endif
    5672
    5773class FixedVMPoolExecutableAllocator : public MetaAllocator {
    … …  
    7086        if (m_reservation) {
    7187            ASSERT(m_reservation.size() == reservationSize);
    72             addFreshFreeSpace(m_reservation.base(), m_reservation.size());
    73            
    74             startOfFixedExecutableMemoryPool = reinterpret_cast<uintptr_t>(m_reservation.base());
     88            void* reservationBase = m_reservation.base();
     89
     90#if ENABLE(SEPARATE_WX_HEAPPROOF_JIT)
     91            if (Options::useBulletproofJIT()) {
     92                // First page of our JIT allocation is reserved.
     93                ASSERT(reservationSize >= pageSize() * 2);
     94                reservationBase = (void*)((uintptr_t)reservationBase + pageSize());
     95                reservationSize -= pageSize();
     96                initializeBulletproofJIT(m_reservation.base(), pageSize(), reservationBase, reservationSize);
     97            }
     98#endif
     99
     100            addFreshFreeSpace(reservationBase, reservationSize);
     101
     102            startOfFixedExecutableMemoryPool = reinterpret_cast<uintptr_t>(reservationBase);
     103            endOfFixedExecutableMemoryPool = startOfFixedExecutableMemoryPool + reservationSize;
    75104        }
    76105    }
    … …  
    111140#endif
    112141    }
     142
     143private:
     144#if ENABLE(SEPARATE_WX_HEAPPROOF_JIT)
     145    void initializeBulletproofJIT(void* stubBase, size_t stubSize, void* jitBase, size_t jitSize)
     146    {
     147        mach_vm_address_t writableAddr = 0;
     148
     149        // Create a second mapping of the JIT region at a random address.
     150        vm_prot_t cur, max;
     151        kern_return_t ret = mach_vm_remap(mach_task_self(), &writableAddr, jitSize, 0,
     152            VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR,
     153            mach_task_self(), (mach_vm_address_t)jitBase, FALSE,
     154            &cur, &max, VM_INHERIT_DEFAULT);
     155
     156        RELEASE_ASSERT(ret == KERN_SUCCESS);
     157
     158
     159        // Assemble a thunk that will serve as the means for writing into the JIT region.
     160        MacroAssemblerCodeRef writeThunk = jitWriteThunkGenerator(writableAddr, stubBase, stubSize);
     161
     162#if defined(VM_PROT_EXECUTE_ONLY)
     163        // Prevent reading the write thunk code.
     164        int result = mprotect(stubBase, stubSize, VM_PROT_EXECUTE_ONLY);
     165        RELEASE_ASSERT(!result);
     166#endif
     167       
     168        // Prevent writing into the executable JIT mapping.
     169        result = mprotect(jitBase, jitSize, VM_PROT_READ | VM_PROT_EXECUTE);
     170        RELEASE_ASSERT(!result);
     171
     172        // Prevent execution in the writable JIT mapping.
     173        result = mprotect((void*)writableAddr, jitSize, VM_PROT_READ | VM_PROT_WRITE);
     174        RELEASE_ASSERT(!result);
     175
     176        // Zero out writableAddr to avoid leaking the address of the writable mapping.
     177        memset_s(&writableAddr, sizeof(writableAddr), 0, sizeof(writableAddr));
     178
     179        jitWriteFunctionAddress = (uintptr_t)writeThunk.code().executableAddress();
     180    }
     181
     182#if CPU(ARM64)
     183    MacroAssemblerCodeRef jitWriteThunkGenerator(mach_vm_address_t writableAddr, void* stubBase, size_t stubSize)
     184    {
     185        using namespace ARM64Registers;
     186        using TrustedImm32 = MacroAssembler::TrustedImm32;
     187
     188        MacroAssembler jit;
     189
     190        jit.move(MacroAssembler::TrustedImmPtr((const void*)writableAddr), x7);
     191        jit.addPtr(x7, x0);
     192
     193        jit.move(x0, x3);
     194        MacroAssembler::Jump smallCopy = jit.branch64(MacroAssembler::Below, x2, MacroAssembler::TrustedImm64(64));
     195
     196        jit.add64(TrustedImm32(32), x3);
     197        jit.and64(TrustedImm32(-32), x3);
     198        jit.loadPair64(x1, x12, x13);
     199        jit.loadPair64(x1, TrustedImm32(16), x14, x15);
     200        jit.sub64(x3, x0, x5);
     201        jit.addPtr(x5, x1);
     202
     203        jit.loadPair64(x1, x8, x9);
     204        jit.loadPair64(x1, TrustedImm32(16), x10, x11);
     205        jit.add64(TrustedImm32(32), x1);
     206        jit.sub64(x5, x2);
     207        jit.storePair64(x12, x13, x0);
     208        jit.storePair64(x14, x15, x0, TrustedImm32(16));
     209        MacroAssembler::Jump cleanup = jit.branchSub64(MacroAssembler::BelowOrEqual, TrustedImm32(64), x2);
     210
     211        MacroAssembler::Label copyLoop = jit.label();
     212        jit.storePair64WithNonTemporalAccess(x8, x9, x3);
     213        jit.storePair64WithNonTemporalAccess(x10, x11, x3, TrustedImm32(16));
     214        jit.add64(TrustedImm32(32), x3);
     215        jit.loadPair64WithNonTemporalAccess(x1, x8, x9);
     216        jit.loadPair64WithNonTemporalAccess(x1, TrustedImm32(16), x10, x11);
     217        jit.add64(TrustedImm32(32), x1);
     218        jit.branchSub64(MacroAssembler::Above, TrustedImm32(32), x2).linkTo(copyLoop, &jit);
     219
     220        cleanup.link(&jit);
     221        jit.add64(x2, x1);
     222        jit.loadPair64(x1, x12, x13);
     223        jit.loadPair64(x1, TrustedImm32(16), x14, x15);
     224        jit.storePair64(x8, x9, x3);
     225        jit.storePair64(x10, x11, x3, TrustedImm32(16));
     226        jit.addPtr(x2, x3);
     227        jit.storePair64(x12, x13, x3, TrustedImm32(32));
     228        jit.storePair64(x14, x15, x3, TrustedImm32(48));
     229        jit.ret();
     230
     231        MacroAssembler::Label local0 = jit.label();
     232        jit.load64(x1, PostIndex(8), x6);
     233        jit.store64(x6, x3, PostIndex(8));
     234        smallCopy.link(&jit);
     235        jit.branchSub64(MacroAssembler::AboveOrEqual, TrustedImm32(8), x2).linkTo(local0, &jit);
     236        MacroAssembler::Jump local2 = jit.branchAdd64(MacroAssembler::Equal, TrustedImm32(8), x2);
     237        MacroAssembler::Label local1 = jit.label();
     238        jit.load8(x1, PostIndex(1), x6);
     239        jit.store8(x6, x3, PostIndex(1));
     240        jit.branchSub64(MacroAssembler::NotEqual, TrustedImm32(1), x2).linkTo(local1, &jit);
     241        local2.link(&jit);
     242        jit.ret();
     243
     244        LinkBuffer linkBuffer(jit, stubBase, stubSize);
     245        return FINALIZE_CODE(linkBuffer, ("Bulletproof JIT write thunk"));
     246    }
     247#endif // CPU(ARM64)
     248#endif // ENABLE(SEPARATE_WX_HEAPPROOF_JIT)
    113249
    114250private:
  • trunk/Source/JavaScriptCore/runtime/Options.cpp

    r196756 r197793  
    294294#if !ENABLE(FTL_JIT)
    295295    Options::useFTLJIT() = false;
     296#endif
     297#if !ENABLE(SEPARATED_WX_HEAP)
     298    Options::useSeparatedWXHeap() = false;
    296299#endif
    297300#if OS(WINDOWS) && CPU(X86)
  • trunk/Source/JavaScriptCore/runtime/Options.h

    r196756 r197793  
    119119    v(bool, crashIfCantAllocateJITMemory, false, nullptr) \
    120120    v(unsigned, jitMemoryReservationSize, 0, "Set this number to change the executable allocation size in ExecutableAllocatorFixedVMPool. (In bytes.)") \
     121    v(bool, useSeparatedWXHeap, true, nullptr) \
    121122    \
    122123    v(bool, forceCodeBlockLiveness, false, nullptr) \
  • trunk/Source/WTF/ChangeLog

    r197788 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Update feature defines.
     9
     10        * wtf/FeatureDefines.h:
     11        * wtf/Platform.h: ARM64 for now.
     12
    1132016-03-08  Daniel Bates  <dabates@apple.com>
    214
  • trunk/Source/WTF/wtf/FeatureDefines.h

    r197058 r197793  
    824824#endif
    825825
     826#if !defined(ENABLE_SEPARATED_WX_HEAP)
     827#define ENABLE_SEPARATED_WX_HEAP 0
     828#endif
     829
    826830/* Asserts, invariants for macro definitions */
    827831
  • trunk/Source/WTF/wtf/Platform.h

    r197572 r197793  
    11391139#endif
    11401140
     1141#if !CPU(ARM64) && defined(ENABLE_SEPARATED_WX_HEAP)
     1142#undef ENABLE_SEPARATED_WX_HEAP
     1143#endif
     1144
    11411145#endif /* WTF_Platform_h */
  • trunk/Source/WebCore/ChangeLog

    r197792 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Update feature defines.
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122016-03-08  Commit Queue  <commit-queue@webkit.org>
    213
  • trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig

    r197153 r197793  
    195195ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
    196196
    197 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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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);
     197ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ENABLE_SEPARATED_WX_HEAP;
     198ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
     199
     200FEATURE_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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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) $(ENABLE_SEPARATED_WX_HEAP);
  • trunk/Source/WebKit/mac/ChangeLog

    r197791 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Update feature defines.
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122016-03-08  Anders Carlsson  <andersca@apple.com>
    213
  • trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig

    r197153 r197793  
    195195ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
    196196
    197 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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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);
     197ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ENABLE_SEPARATED_WX_HEAP;
     198ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
     199
     200FEATURE_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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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) $(ENABLE_SEPARATED_WX_HEAP);
  • trunk/Source/WebKit2/ChangeLog

    r197792 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Update feature defines.
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122016-03-08  Commit Queue  <commit-queue@webkit.org>
    213
  • trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig

    r197153 r197793  
    195195ENABLE_CUSTOM_ELEMENTS = ENABLE_CUSTOM_ELEMENTS;
    196196
    197 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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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);
     197ENABLE_SEPARATED_WX_HEAP[sdk=iphone*] = ENABLE_SEPARATED_WX_HEAP;
     198ENABLE_SEPARATED_WX_HEAP[sdk=macosx*] = ;
     199
     200FEATURE_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_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(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_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_SVG_OTF_CONVERTER) $(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) $(ENABLE_SEPARATED_WX_HEAP);
  • trunk/Tools/ChangeLog

    r197788 r197793  
     12016-03-08  Oliver Hunt  <oliver@apple.com>
     2
     3        Start moving to separated writable and executable mappings in the JIT
     4        https://bugs.webkit.org/show_bug.cgi?id=155178
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Making run-jsc-benchmarks slightly happier on my machine.
     9
     10        * Scripts/run-jsc-benchmarks:
     11
    1122016-03-08  Daniel Bates  <dabates@apple.com>
    213
  • trunk/Tools/Scripts/run-jsc-benchmarks

    r197361 r197793  
    28622862    end
    28632863    envs = []
    2864     while vm =~ /([a-zA-Z0-9_]+)=([a-zA-Z0-9_:.]+):/
     2864    while vm =~ /([a-zA-Z0-9_]+)=([a-zA-Z0-9_:.\/-]+):/
    28652865      envs << [$1, $2]
    28662866      vm = $~.post_match
Note: See TracChangeset for help on using the changeset viewer.