llvm-project/lld/wasm/InputElement.h
Heejin Ahn 1d891d44f3 [WebAssembly] Rename event to tag
We recently decided to change 'event' to 'tag', and 'event section' to
'tag section', out of the rationale that the section contains a
generalized tag that references a type, which may be used for something
other than exceptions, and the name 'event' can be confusing in the web
context.

See
- https://github.com/WebAssembly/exception-handling/issues/159#issuecomment-857910130
- https://github.com/WebAssembly/exception-handling/pull/161

Reviewed By: tlively

Differential Revision: https://reviews.llvm.org/D104423
2021-06-17 20:34:19 -07:00

108 lines
2.8 KiB
C++

//===- InputElement.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLD_WASM_INPUT_ELEMENT_H
#define LLD_WASM_INPUT_ELEMENT_H
#include "Config.h"
#include "InputFiles.h"
#include "WriterUtils.h"
#include "lld/Common/LLVM.h"
#include "llvm/Object/Wasm.h"
namespace lld {
namespace wasm {
// Represents a single element (Global, Tag, Table, etc) within an input
// file.
class InputElement {
protected:
InputElement(StringRef name, ObjFile *f)
: file(f), live(!config->gcSections), name(name) {}
public:
StringRef getName() const { return name; }
uint32_t getAssignedIndex() const { return assignedIndex.getValue(); }
bool hasAssignedIndex() const { return assignedIndex.hasValue(); }
void assignIndex(uint32_t index) {
assert(!hasAssignedIndex());
assignedIndex = index;
}
ObjFile *file;
bool live = false;
protected:
StringRef name;
llvm::Optional<uint32_t> assignedIndex;
};
inline WasmInitExpr intConst(uint64_t value, bool is64) {
WasmInitExpr ie;
if (is64) {
ie.Opcode = llvm::wasm::WASM_OPCODE_I64_CONST;
ie.Value.Int64 = static_cast<int64_t>(value);
} else {
ie.Opcode = llvm::wasm::WASM_OPCODE_I32_CONST;
ie.Value.Int32 = static_cast<int32_t>(value);
}
return ie;
}
class InputGlobal : public InputElement {
public:
InputGlobal(const WasmGlobal &g, ObjFile *f)
: InputElement(g.SymbolName, f), type(g.Type), initExpr(g.InitExpr) {}
const WasmGlobalType &getType() const { return type; }
const WasmInitExpr &getInitExpr() const { return initExpr; }
void setPointerValue(uint64_t value) {
initExpr = intConst(value, config->is64.getValueOr(false));
}
private:
WasmGlobalType type;
WasmInitExpr initExpr;
};
class InputTag : public InputElement {
public:
InputTag(const WasmSignature &s, const WasmTag &t, ObjFile *f)
: InputElement(t.SymbolName, f), signature(s), type(t.Type) {}
const WasmTagType &getType() const { return type; }
const WasmSignature &signature;
private:
WasmTagType type;
};
class InputTable : public InputElement {
public:
InputTable(const WasmTable &t, ObjFile *f)
: InputElement(t.SymbolName, f), type(t.Type) {}
const WasmTableType &getType() const { return type; }
void setLimits(const WasmLimits &limits) { type.Limits = limits; }
private:
WasmTableType type;
};
} // namespace wasm
inline std::string toString(const wasm::InputElement *d) {
return (toString(d->file) + ":(" + d->getName() + ")").str();
}
} // namespace lld
#endif // LLD_WASM_INPUT_ELEMENT_H