Changeset 195578 in webkit
- Timestamp:
- Jan 25, 2016 8:01:33 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r195576 r195578 1 2016-01-25 Benjamin Poulain <bpoulain@apple.com> 2 3 [JSC] We should never use x18 on iOS ARM64 4 https://bugs.webkit.org/show_bug.cgi?id=153461 5 6 Reviewed by Filip Pizlo. 7 8 The register x18 is reserved in the iOS variant of the ARM64 ABI. 9 10 The weird thing is: if you use it, its value will change completely 11 randomly. It looks like it is changed by the system on interrupts. 12 13 This patch adds x18 to the reserved register and add assertions 14 to the assembler to prevent similar problems in the future. 15 16 * assembler/ARM64Assembler.h: 17 (JSC::ARM64Assembler::xOrSp): 18 (JSC::ARM64Assembler::xOrZr): 19 * assembler/AbstractMacroAssembler.h: 20 (JSC::isIOS): Deleted. 21 * assembler/AssemblerCommon.h: 22 (JSC::isIOS): 23 * jit/RegisterSet.cpp: 24 (JSC::RegisterSet::reservedHardwareRegisters): 25 1 26 2016-01-25 Commit Queue <commit-queue@webkit.org> 2 27 -
trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h
r194635 r195578 3277 3277 } 3278 3278 3279 static int xOrSp(RegisterID reg) { ASSERT(!isZr(reg)); return reg; } 3280 static int xOrZr(RegisterID reg) { ASSERT(!isSp(reg)); return reg & 31; } 3279 static int xOrSp(RegisterID reg) 3280 { 3281 ASSERT(!isZr(reg)); 3282 ASSERT(!isIOS() || reg != ARM64Registers::x18); 3283 return reg; 3284 } 3285 static int xOrZr(RegisterID reg) 3286 { 3287 ASSERT(!isSp(reg)); 3288 ASSERT(!isIOS() || reg != ARM64Registers::x18); 3289 return reg & 31; 3290 } 3281 3291 static FPRegisterID xOrZrAsFPR(RegisterID reg) { return static_cast<FPRegisterID>(xOrZr(reg)); } 3282 3292 static int xOrZrOrSp(bool useZr, RegisterID reg) { return useZr ? xOrZr(reg) : xOrSp(reg); } -
trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
r195139 r195578 77 77 } 78 78 79 inline bool isIOS()80 {81 #if PLATFORM(IOS)82 return true;83 #else84 return false;85 #endif86 }87 88 79 inline bool optimizeForARMv7IDIVSupported() 89 80 { -
trunk/Source/JavaScriptCore/assembler/AssemblerCommon.h
r194635 r195578 28 28 29 29 namespace JSC { 30 31 ALWAYS_INLINE bool isIOS() 32 { 33 #if PLATFORM(IOS) 34 return true; 35 #else 36 return false; 37 #endif 38 } 30 39 31 40 ALWAYS_INLINE bool isInt9(int32_t value) -
trunk/Source/JavaScriptCore/jit/RegisterSet.cpp
r195182 r195578 46 46 { 47 47 #if CPU(ARM64) 48 #if PLATFORM(IOS) 49 return RegisterSet(ARM64Registers::x18, ARM64Registers::lr); 50 #else 48 51 return RegisterSet(ARM64Registers::lr); 52 #endif // PLATFORM(IOS) 49 53 #else 50 54 return RegisterSet();
Note: See TracChangeset
for help on using the changeset viewer.