REGRESSION (r159276): Fix lots of crashes for arm_traditional architecture.
authormsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Nov 2013 19:43:08 +0000 (19:43 +0000)
committermsaboff@apple.com <msaboff@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 14 Nov 2013 19:43:08 +0000 (19:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=124365

Reviewed by Oliver Hunt.

Crashes were caused by a mixup between regular registers and temporary registers in ARM_EXTRA_GPRS.

* llint/LowLevelInterpreter32_64.asm: Warning, t3 != a3. It's safer to use an implementation using aX
registers like the MIPS one for cCallX macros.
* offlineasm/arm.rb: Rearrange ARM_EXTRA_GPRS according to the new register distribution in LLINT.

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
Source/JavaScriptCore/offlineasm/arm.rb

index 3d645cb..b7d36dd 100644 (file)
@@ -1,5 +1,18 @@
 2013-11-14  Michael Saboff  <msaboff@apple.com>
 
+        REGRESSION (r159276): Fix lots of crashes for arm_traditional architecture.
+        https://bugs.webkit.org/show_bug.cgi?id=124365
+
+        Reviewed by Oliver Hunt.
+
+        Crashes were caused by a mixup between regular registers and temporary registers in ARM_EXTRA_GPRS.
+
+        * llint/LowLevelInterpreter32_64.asm: Warning, t3 != a3. It's safer to use an implementation using aX
+        registers like the MIPS one for cCallX macros.
+        * offlineasm/arm.rb: Rearrange ARM_EXTRA_GPRS according to the new register distribution in LLINT.
+
+2013-11-14  Michael Saboff  <msaboff@apple.com>
+
         REGRESSION (r159276): rbp register overwritten in Win 64 version of callToJavascript stub
         https://bugs.webkit.org/show_bug.cgi?id=124361
 
index 72f83c2..37f5c97 100644 (file)
@@ -97,18 +97,14 @@ macro dispatchAfterCall()
 end
 
 macro cCall2(function, arg1, arg2)
-    if ARM or ARMv7 or ARMv7_TRADITIONAL
-        move arg1, t0
-        move arg2, t1
+    if ARM or ARMv7 or ARMv7_TRADITIONAL or MIPS
+        move arg1, a0
+        move arg2, a1
         call function
     elsif X86
         poke arg1, 0
         poke arg2, 1
         call function
-    elsif MIPS
-        move arg1, a0
-        move arg2, a1
-        call function
     elsif SH4
         setargs arg1, arg2
         call function
@@ -121,11 +117,11 @@ end
 
 # This barely works. arg3 and arg4 should probably be immediates.
 macro cCall4(function, arg1, arg2, arg3, arg4)
-    if ARM or ARMv7 or ARMv7_TRADITIONAL
-        move arg1, t0
-        move arg2, t1
-        move arg3, t2
-        move arg4, t3
+    if ARM or ARMv7 or ARMv7_TRADITIONAL or MIPS
+        move arg1, a0
+        move arg2, a1
+        move arg3, a2
+        move arg4, a3
         call function
     elsif X86
         poke arg1, 0
@@ -133,12 +129,6 @@ macro cCall4(function, arg1, arg2, arg3, arg4)
         poke arg3, 2
         poke arg4, 3
         call function
-    elsif MIPS
-        move arg1, a0
-        move arg2, a1
-        move arg3, a2
-        move arg4, a3
-        call function
     elsif SH4
         setargs arg1, arg2, arg3, arg4
         call function
index 17a1bd8..0a37be9 100644 (file)
@@ -63,7 +63,7 @@ class SpecialRegister
     end
 end
 
-ARM_EXTRA_GPRS = [SpecialRegister.new("r9"), SpecialRegister.new("r8"), SpecialRegister.new("r3")]
+ARM_EXTRA_GPRS = [SpecialRegister.new("r10"), SpecialRegister.new("r12")]
 ARM_EXTRA_FPRS = [SpecialRegister.new("d7")]
 ARM_SCRATCH_FPR = SpecialRegister.new("d6")
 
@@ -223,7 +223,11 @@ class Sequence
         result = riscLowerMalformedImmediates(result, 0..0xff)
         result = riscLowerMisplacedAddresses(result)
         result = riscLowerRegisterReuse(result)
-        result = assignRegistersToTemporaries(result, :gpr, ARM_EXTRA_GPRS)
+        if isARMv7
+            result = assignRegistersToTemporaries(result, :gpr, ARM_EXTRA_GPRS.concat([SpecialRegister.new("r11")]))
+        else
+            result = assignRegistersToTemporaries(result, :gpr, ARM_EXTRA_GPRS.concat([SpecialRegister.new("r7")]))
+        end
         result = assignRegistersToTemporaries(result, :fpr, ARM_EXTRA_FPRS)
         return result
     end