Changeset 90731 in webkit


Ignore:
Timestamp:
Jul 11, 2011 3:31:20 AM (13 years ago)
Author:
loki@webkit.org
Message:

Signed arithmetic bug in dataTransfer32.
https://bugs.webkit.org/show_bug.cgi?id=64257

Reviewed by Zoltan Herczeg.

An arithmetic bug is fixed. If the offset of dataTransfer is half of the
addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
a load instruction is emitted with a wrong zero offset.

Inspired by Jacob Bramley's patch from JaegerMonkey.

  • assembler/ARMAssembler.cpp:

(JSC::ARMAssembler::dataTransfer32):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r90688 r90731  
     12011-07-11  Gabor Loki  <loki@webkit.org>
     2
     3        Signed arithmetic bug in dataTransfer32.
     4        https://bugs.webkit.org/show_bug.cgi?id=64257
     5
     6        Reviewed by Zoltan Herczeg.
     7
     8        An arithmetic bug is fixed. If the offset of dataTransfer is half of the
     9        addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
     10        a load instruction is emitted with a wrong zero offset.
     11
     12        Inspired by Jacob Bramley's patch from JaegerMonkey.
     13
     14        * assembler/ARMAssembler.cpp:
     15        (JSC::ARMAssembler::dataTransfer32):
     16
    1172011-07-09  Thouraya Andolsi  <thouraya.andolsi@st.com>
    218
  • trunk/Source/JavaScriptCore/assembler/ARMAssembler.cpp

    r87527 r90731  
    277277        }
    278278    } else {
    279         offset = -offset;
    280         if (offset <= 0xfff)
    281             dtr_d(isLoad, srcDst, base, offset | transferFlag);
    282         else if (offset <= 0xfffff) {
    283             sub_r(ARMRegisters::S0, base, OP2_IMM | (offset >> 12) | (10 << 8));
    284             dtr_d(isLoad, srcDst, ARMRegisters::S0, (offset & 0xfff) | transferFlag);
     279        if (offset >= -0xfff)
     280            dtr_d(isLoad, srcDst, base, -offset | transferFlag);
     281        else if (offset >= -0xfffff) {
     282            sub_r(ARMRegisters::S0, base, OP2_IMM | (-offset >> 12) | (10 << 8));
     283            dtr_d(isLoad, srcDst, ARMRegisters::S0, (-offset & 0xfff) | transferFlag);
    285284        } else {
    286285            moveImm(offset, ARMRegisters::S0);
    287             dtr_dr(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
     286            dtr_ur(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
    288287        }
    289288    }
Note: See TracChangeset for help on using the changeset viewer.