[llvm-commits] [llvm] r136954 - /llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp

Rafael Ávila de Espíndola rafael.espindola at gmail.com
Mon Aug 8 08:18:20 PDT 2011


On 08/04/2011 08:53 PM, Jason W Kim wrote:
> Author: jasonwkim
> Date: Thu Aug  4 19:53:03 2011
> New Revision: 136954
>
> URL: http://llvm.org/viewvc/llvm-project?rev=136954&view=rev
> Log:
> Fix http://llvm.org/bugs/show_bug.cgi?id=10583\n - test for 1 and 2 byte fixups to be added

Thanks


> Modified:
>      llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
>
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp?rev=136954&r1=136953&r2=136954&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp Thu Aug  4 19:53:03 2011
> @@ -94,21 +94,17 @@
>       assert(Fixup.getOffset() + Size<= DataSize&&
>              "Invalid fixup offset!");
>
> -    // Check that the upper bits are either all 0 or all 1's
> -    switch (Size) {
> -    case 1:
> -      assert((isInt<8>(Value) || isUInt<8>(Value))&&
> -             "Value does not fit in a 1Byte Reloc");
> -      break;
> -    case 2:
> -      assert((isInt<16>(Value) || isUInt<16>(Value))&&
> -             "Value does not fit in a 2Byte Reloc");
> -      break;
> -    case 4:
> -      assert((isInt<32>(Value) || isUInt<32>(Value))&&
> -             "Value does not fit in a 4Byte Reloc");
> -      break;
> -    }
> +    // Check that uppper bits are either all zeros or all ones.
> +    // Specifically ignore overflow/underflow as long as the leakage is
> +    // limited to the lower bits. This is to remain compatible with
> +    // other assemblers.
> +
> +    const uint64_t Mask = ~0ULL;
> +    const uint64_t UpperV = (Value>>  (Size * 8));
> +    const uint64_t MaskF = (Mask>>  (Size * 8));
> +    assert(((Size == 8) ||
> +            ((UpperV&  MaskF) == 0ULL) || ((UpperV&  MaskF) == MaskF))&&
> +           "Value does not fit in the Fixup field");
>
>       for (unsigned i = 0; i != Size; ++i)
>         Data[Fixup.getOffset() + i] = uint8_t(Value>>  (i * 8));
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list