Title: [184782] tags/Safari-601.1.32.2.81/Source/_javascript_Core

Diff

Modified: tags/Safari-601.1.32.2.81/Source/_javascript_Core/ChangeLog (184781 => 184782)


--- tags/Safari-601.1.32.2.81/Source/_javascript_Core/ChangeLog	2015-05-22 18:48:03 UTC (rev 184781)
+++ tags/Safari-601.1.32.2.81/Source/_javascript_Core/ChangeLog	2015-05-22 18:54:51 UTC (rev 184782)
@@ -1,3 +1,70 @@
+2015-05-22  Babak Shafiei  <bshaf...@apple.com>
+
+        Merge r184581.
+
+    2015-05-19  Mark Lam  <mark....@apple.com>
+
+            Fix the build of a universal binary with ARMv7k of _javascript_Core.
+            https://bugs.webkit.org/show_bug.cgi?id=145143
+
+            Reviewed by Geoffrey Garen.
+
+            The offlineasm works in 3 phases:
+
+            Phase 1:
+               Parse the llint asm files for config options and desired offsets.
+               Let's say the offlineasm discovers C unique options and O unique offsets.
+               The offlineasm will then generate a LLIntDesiredOffsets.h file with
+               C x C build configurations, each with a set of O offsets.
+
+               Each of these build configurations is given a unique configuration index number.
+
+            Phase 2: 
+               Compile the LLIntDesiredOffsets.h file into a JSCLLIntOffsetsExtractor binary.
+
+               If we're building a fat binary with 2 configurations: armv7, and armv7k,
+               then the fat binary will contain 2 blobs of offsets, one for each of these
+               build configurations.
+
+            Phase 3:
+               Parse the llint asm files and emit asm code using the offsets that are
+               extracted from the JSCLLIntOffsetsExtractor binary for the corresponding
+               configuration index number.
+
+            In the pre-existing code, there are no "if ARMv7k" statements in the llint asm
+            source.  As a result, OFFLINE_ASM_ARMv7k is not one of the config options in
+            the set of C unique options.
+
+            For armv7k builds, OFFLINE_ASM_ARMv7 is also true.  As a result, for an armv7k
+            target, we will end up building armv7 source.  In general, this is fine except:
+
+            1. armv7k has different alignment requirements from armv7.  Hence, their offset
+               values (in JSCLLIntOffsetsExtractor) will be different.
+
+            2. The offlineasm was never told that it needed to make a different configuration
+               for armv7k builds.  Hence, the armv7k build of LLIntDesiredOffsets.h will
+               build the armv7 configuration, and consequently, the armv7k blob of offsets in
+               JSCLLIntOffsetsExtractor will have the same configuration index number as
+               the armv7 blob of offsets.
+
+            In phase 3, when the offlineasm parses the JSCLLIntOffsetsExtractor fat binary
+            looking for the armv7 build's configuration index number, it discovers the
+            armv7k blob which has the same configuration number.  As a result, it
+            erroneously thinks the armv7k offsets are appropriate for emitting armv7 code.
+            Needless to say, armv7 code using armv7k offsets will lead to incorrect behavior
+            and all round badness.
+
+            The fix is to add a simple "if ARMv7k" statement to the llint asm files.  While
+            the if statement has no body, it does make the offlineasm aware of the need for
+            ARMv7k as a configuration option.  As a result, it will generate an armv7k
+            variant configuration in the LLIntDesiredOffsets.h file with its own unique
+            configuration index number.  With that, the JSCLLIntOffsetsExtractor fat binary
+            will no longer have duplicate configuration index numbers for the armv7 and
+            armv7k blobs of offsets, and the issue is resolved.
+
+            * llint/LLIntOfflineAsmConfig.h:
+            * llint/LowLevelInterpreter.asm:
+
 2015-05-20  Matthew Hanson  <matthew_han...@apple.com>
 
         Merge r184652. rdar://problem/21002666

Modified: tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LLIntOfflineAsmConfig.h (184781 => 184782)


--- tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LLIntOfflineAsmConfig.h	2015-05-22 18:48:03 UTC (rev 184781)
+++ tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LLIntOfflineAsmConfig.h	2015-05-22 18:54:51 UTC (rev 184782)
@@ -40,6 +40,7 @@
 #define OFFLINE_ASM_ARM64 0
 #define OFFLINE_ASM_X86_64 0
 #define OFFLINE_ASM_X86_64_WIN 0
+#define OFFLINE_ASM_ARMv7k 0
 #define OFFLINE_ASM_ARMv7s 0
 #define OFFLINE_ASM_MIPS 0
 #define OFFLINE_ASM_SH4 0
@@ -60,6 +61,12 @@
 #define OFFLINE_ASM_X86_WIN 0
 #endif
 
+#ifdef __ARM_ARCH_7K__
+#define OFFLINE_ASM_ARMv7k 1
+#else
+#define OFFLINE_ASM_ARMv7k 0
+#endif
+
 #ifdef __ARM_ARCH_7S__
 #define OFFLINE_ASM_ARMv7s 1
 #else

Modified: tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LowLevelInterpreter.asm (184781 => 184782)


--- tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LowLevelInterpreter.asm	2015-05-22 18:48:03 UTC (rev 184781)
+++ tags/Safari-601.1.32.2.81/Source/_javascript_Core/llint/LowLevelInterpreter.asm	2015-05-22 18:54:51 UTC (rev 184782)
@@ -24,9 +24,11 @@
 # First come the common protocols that both interpreters use. Note that each
 # of these must have an ASSERT() in LLIntData.cpp
 
-# Work-around for the fact that the toolchain's awareness of armv7s results in
-# a separate slab in the fat binary, yet the offlineasm doesn't know to expect
-# it.
+# Work-around for the fact that the toolchain's awareness of armv7k / armv7s
+# results in a separate slab in the fat binary, yet the offlineasm doesn't know
+# to expect it.
+if ARMv7k
+end
 if ARMv7s
 end
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to