patches/firefox3-25-jslock.diff
author rohinis
Tue, 29 Nov 2011 17:32:55 +0000
branchs11express-2010-11
changeset 22234 c23e64da3e06
parent 17633 0a0292dce587
permissions -rw-r--r--
2011-11-29 Rohini S <[email protected]> * patches/Python26-22-audio.diff: Fixes CVE-2010-1634 * specs/SUNWPython26.spec: Fixes CR 7085446
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17633
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     1
diff --git a/js/src/jslock.cpp b/js/src/jslock.cpp
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     2
--- a/js/src/jslock.cpp
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     3
+++ b/js/src/jslock.cpp
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     4
@@ -109,17 +109,17 @@ NativeCompareAndSwap(jsword *w, jsword o
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     5
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     6
 static JS_ALWAYS_INLINE int
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     7
 NativeCompareAndSwap(jsword *w, jsword ov, jsword nv)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     8
 {
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     9
     /* Details on these functions available in the manpage for atomic */
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    10
     return OSAtomicCompareAndSwapPtrBarrier(ov, nv, w);
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    11
 }
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    12
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    13
-#elif defined(__i386) && (defined(__GNUC__) || defined(__SUNPRO_CC))
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    14
+#elif defined(__i386) && defined(__GNUC__)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    15
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    16
 /* Note: This fails on 386 cpus, cmpxchgl is a >= 486 instruction */
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    17
 static JS_ALWAYS_INLINE int
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    18
 NativeCompareAndSwap(jsword *w, jsword ov, jsword nv)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    19
 {
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    20
     unsigned int res;
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    21
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    22
     __asm__ __volatile__ (
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    23
@@ -128,16 +128,37 @@ NativeCompareAndSwap(jsword *w, jsword o
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    24
                           "sete %%al\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    25
                           "andl $1, %%eax\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    26
                           : "=a" (res)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    27
                           : "r" (w), "r" (nv), "a" (ov)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    28
                           : "cc", "memory");
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    29
     return (int)res;
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    30
 }
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    31
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    32
+#elif defined(__i386) && defined(__SUNPRO_CC)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    33
+
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    34
+/* Different code for Sun Studio because of a bug of SS12U1 */
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    35
+
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    36
+/* Note: This fails on 386 cpus, cmpxchgl is a >= 486 instruction */
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    37
+static JS_ALWAYS_INLINE int
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    38
+NativeCompareAndSwap(jsword *w, jsword ov, jsword nv)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    39
+{
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    40
+    unsigned int res;
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    41
+
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    42
+    __asm__ __volatile__ (
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    43
+                          "lock\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    44
+                          "cmpxchgl %2, (%1)\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    45
+                          "sete %%al\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    46
+                          "andl $1, %%eax\n"
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    47
+                          : "=a" (res)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    48
+                          : "c" (w), "d" (nv), "a" (ov)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    49
+                          : "cc", "memory");
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    50
+    return (int)res;
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    51
+}
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    52
+
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    53
 #elif defined(__x86_64) && (defined(__GNUC__) || defined(__SUNPRO_CC))
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    54
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    55
 static JS_ALWAYS_INLINE int
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    56
 NativeCompareAndSwap(jsword *w, jsword ov, jsword nv)
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    57
 {
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    58
     unsigned int res;
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    59
 
0a0292dce587 2010-03-04 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    60
     __asm__ __volatile__ (