[bpf] emit jmp fixups in little endian
authorAlexei Starovoitov <alexei.starovoitov@gmail.com>
Fri, 22 May 2015 18:47:33 +0000 (18:47 +0000)
committerAlexei Starovoitov <alexei.starovoitov@gmail.com>
Fri, 22 May 2015 18:47:33 +0000 (18:47 +0000)
The 'off' field of 'struct bpf_insn' is in cpu-endianness,
since the rest is emitted as little endian, make sure
that 'off' field is little endian as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238038 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp

index 8393135a2b9c1a3f6083dfe43fddeae258ea09a8..48f34e484590af47a1083cb270614845e792de20 100644 (file)
@@ -68,7 +68,9 @@ void BPFAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
     return;
   }
   assert(Fixup.getKind() == FK_PCRel_2);
-  *(uint16_t *)&Data[Fixup.getOffset() + 2] = (uint16_t)((Value - 8) / 8);
+  Value = (uint16_t)((Value - 8) / 8);
+  Data[Fixup.getOffset() + 2] = Value & 0xFF;
+  Data[Fixup.getOffset() + 3] = Value >> 8;
 }
 
 MCObjectWriter *BPFAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {