@@ -27,8 +27,7 @@ class BPFAsmBackend : public MCAsmBackend {
2727 ~BPFAsmBackend () override = default ;
2828
2929 void applyFixup (const MCFragment &, const MCFixup &, const MCValue &Target,
30- MutableArrayRef<char > Data, uint64_t Value,
31- bool IsResolved) override ;
30+ char *Data, uint64_t Value, bool IsResolved) override ;
3231
3332 std::unique_ptr<MCObjectTargetWriter>
3433 createObjectTargetWriter () const override ;
@@ -66,35 +65,32 @@ bool BPFAsmBackend::writeNopData(raw_ostream &OS, uint64_t Count,
6665}
6766
6867void BPFAsmBackend::applyFixup (const MCFragment &F, const MCFixup &Fixup,
69- const MCValue &Target,
70- MutableArrayRef<char > Data, uint64_t Value,
71- bool IsResolved) {
68+ const MCValue &Target, char *Data,
69+ uint64_t Value, bool IsResolved) {
7270 maybeAddReloc (F, Fixup, Target, Value, IsResolved);
7371 if (Fixup.getKind () == FK_SecRel_8) {
7472 // The Value is 0 for global variables, and the in-section offset
7573 // for static variables. Write to the immediate field of the inst.
7674 assert (Value <= UINT32_MAX);
77- support::endian::write<uint32_t >(&Data[Fixup.getOffset () + 4 ],
78- static_cast <uint32_t >(Value),
75+ support::endian::write<uint32_t >(Data + 4 , static_cast <uint32_t >(Value),
7976 Endian);
8077 } else if (Fixup.getKind () == FK_Data_4 && !Fixup.isPCRel ()) {
81- support::endian::write<uint32_t >(& Data[Fixup. getOffset ()] , Value, Endian);
78+ support::endian::write<uint32_t >(Data, Value, Endian);
8279 } else if (Fixup.getKind () == FK_Data_8) {
83- support::endian::write<uint64_t >(& Data[Fixup. getOffset ()] , Value, Endian);
80+ support::endian::write<uint64_t >(Data, Value, Endian);
8481 } else if (Fixup.getKind () == FK_Data_4 && Fixup.isPCRel ()) {
8582 Value = (uint32_t )((Value - 8 ) / 8 );
8683 if (Endian == llvm::endianness::little) {
87- Data[Fixup. getOffset () + 1 ] = 0x10 ;
88- support::endian::write32le (& Data[Fixup. getOffset () + 4 ] , Value);
84+ Data[1 ] = 0x10 ;
85+ support::endian::write32le (Data + 4 , Value);
8986 } else {
90- Data[Fixup. getOffset () + 1 ] = 0x1 ;
91- support::endian::write32be (& Data[Fixup. getOffset () + 4 ] , Value);
87+ Data[1 ] = 0x1 ;
88+ support::endian::write32be (Data + 4 , Value);
9289 }
9390 } else if (Fixup.getKind () == BPF::FK_BPF_PCRel_4) {
9491 // The input Value represents the number of bytes.
9592 Value = (uint32_t )((Value - 8 ) / 8 );
96- support::endian::write<uint32_t >(&Data[Fixup.getOffset () + 4 ], Value,
97- Endian);
93+ support::endian::write<uint32_t >(Data + 4 , Value, Endian);
9894 } else {
9995 assert (Fixup.getKind () == FK_Data_2 && Fixup.isPCRel ());
10096
@@ -103,8 +99,7 @@ void BPFAsmBackend::applyFixup(const MCFragment &F, const MCFixup &Fixup,
10399 report_fatal_error (" Branch target out of insn range" );
104100
105101 Value = (uint16_t )((Value - 8 ) / 8 );
106- support::endian::write<uint16_t >(&Data[Fixup.getOffset () + 2 ], Value,
107- Endian);
102+ support::endian::write<uint16_t >(Data + 2 , Value, Endian);
108103 }
109104}
110105
0 commit comments