Skip to content

Commit

Permalink
Simplified WebAssemblyAsmBackend by removing explicit ELF variant.
Browse files Browse the repository at this point in the history
The ELF version was broken (does not deal with wasm specific fixups),
and now is slightly less broken. It will be removed in its entirety
in the future which this change makes slightly easier (just remove
the IsELF bool).

Differential Revision: https://reviews.llvm.org/D47745

Patch by Wouter van Oortmerssen

llvm-svn: 333964
  • Loading branch information
dschuff committed Jun 4, 2018
1 parent aa65168 commit 72f1924
Showing 1 changed file with 8 additions and 82 deletions.
90 changes: 8 additions & 82 deletions llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,48 +29,14 @@
using namespace llvm;

namespace {
class WebAssemblyAsmBackendELF final : public MCAsmBackend {
bool Is64Bit;

public:
explicit WebAssemblyAsmBackendELF(bool Is64Bit)
: MCAsmBackend(support::little), Is64Bit(Is64Bit) {}
~WebAssemblyAsmBackendELF() override {}

void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
const MCValue &Target, MutableArrayRef<char> Data,
uint64_t Value, bool IsPCRel) const override;

std::unique_ptr<MCObjectTargetWriter>
createObjectTargetWriter() const override;

// No instruction requires relaxation
bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
const MCRelaxableFragment *DF,
const MCAsmLayout &Layout) const override {
return false;
}

unsigned getNumFixupKinds() const override {
// We currently just use the generic fixups in MCFixup.h and don't have any
// target-specific fixups.
return 0;
}

bool mayNeedRelaxation(const MCInst &Inst) const override { return false; }

void relaxInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
MCInst &Res) const override {}

bool writeNopData(raw_ostream &OS, uint64_t Count) const override;
};

class WebAssemblyAsmBackend final : public MCAsmBackend {
bool Is64Bit;
bool IsELF;

public:
explicit WebAssemblyAsmBackend(bool Is64Bit)
: MCAsmBackend(support::little), Is64Bit(Is64Bit) {}
public:
explicit WebAssemblyAsmBackend(bool Is64Bit, bool IsELF)
: MCAsmBackend(support::little), Is64Bit(Is64Bit), IsELF(IsELF) {}
~WebAssemblyAsmBackend() override {}

unsigned getNumFixupKinds() const override {
Expand Down Expand Up @@ -101,43 +67,6 @@ class WebAssemblyAsmBackend final : public MCAsmBackend {
bool writeNopData(raw_ostream &OS, uint64_t Count) const override;
};

bool WebAssemblyAsmBackendELF::writeNopData(raw_ostream &OS,
uint64_t Count) const {
for (uint64_t i = 0; i < Count; ++i)
OS << char(WebAssembly::Nop);

return true;
}

void WebAssemblyAsmBackendELF::applyFixup(const MCAssembler &Asm,
const MCFixup &Fixup,
const MCValue &Target,
MutableArrayRef<char> Data,
uint64_t Value, bool IsPCRel) const {
const MCFixupKindInfo &Info = getFixupKindInfo(Fixup.getKind());
assert(Info.Flags == 0 && "WebAssembly does not use MCFixupKindInfo flags");

unsigned NumBytes = alignTo(Info.TargetSize, 8) / 8;
if (Value == 0)
return; // Doesn't change encoding.

// Shift the value into position.
Value <<= Info.TargetOffset;

unsigned Offset = Fixup.getOffset();
assert(Offset + NumBytes <= Data.size() && "Invalid fixup offset!");

// For each byte of the fragment that the fixup touches, mask in the
// bits from the fixup value.
for (unsigned i = 0; i != NumBytes; ++i)
Data[Offset + i] |= uint8_t((Value >> (i * 8)) & 0xff);
}

std::unique_ptr<MCObjectTargetWriter>
WebAssemblyAsmBackendELF::createObjectTargetWriter() const {
return createWebAssemblyELFObjectWriter(Is64Bit, 0);
}

const MCFixupKindInfo &
WebAssemblyAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
const static MCFixupKindInfo Infos[WebAssembly::NumTargetFixupKinds] = {
Expand All @@ -160,9 +89,6 @@ WebAssemblyAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {

bool WebAssemblyAsmBackend::writeNopData(raw_ostream &OS,
uint64_t Count) const {
if (Count == 0)
return true;

for (uint64_t i = 0; i < Count; ++i)
OS << char(WebAssembly::Nop);

Expand Down Expand Up @@ -195,12 +121,12 @@ void WebAssemblyAsmBackend::applyFixup(const MCAssembler &Asm,

std::unique_ptr<MCObjectTargetWriter>
WebAssemblyAsmBackend::createObjectTargetWriter() const {
return createWebAssemblyWasmObjectWriter(Is64Bit);
return IsELF ? createWebAssemblyELFObjectWriter(Is64Bit, 0)
: createWebAssemblyWasmObjectWriter(Is64Bit);
}

} // end anonymous namespace

MCAsmBackend *llvm::createWebAssemblyAsmBackend(const Triple &TT) {
if (TT.isOSBinFormatELF())
return new WebAssemblyAsmBackendELF(TT.isArch64Bit());
return new WebAssemblyAsmBackend(TT.isArch64Bit());
return new WebAssemblyAsmBackend(TT.isArch64Bit(), TT.isOSBinFormatELF());
}

0 comments on commit 72f1924

Please sign in to comment.