summaryrefslogtreecommitdiff
path: root/wasm/WriterUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'wasm/WriterUtils.h')
-rw-r--r--wasm/WriterUtils.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/wasm/WriterUtils.h b/wasm/WriterUtils.h
new file mode 100644
index 000000000000..c1ed90793f78
--- /dev/null
+++ b/wasm/WriterUtils.h
@@ -0,0 +1,78 @@
+//===- WriterUtils.h --------------------------------------------*- C++ -*-===//
+//
+// The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_WASM_WRITERUTILS_H
+#define LLD_WASM_WRITERUTILS_H
+
+#include "llvm/ADT/Twine.h"
+#include "llvm/Object/Wasm.h"
+#include "llvm/Support/raw_ostream.h"
+
+using llvm::raw_ostream;
+
+// Needed for WasmSignatureDenseMapInfo
+inline bool operator==(const llvm::wasm::WasmSignature &LHS,
+ const llvm::wasm::WasmSignature &RHS) {
+ return LHS.ReturnType == RHS.ReturnType && LHS.ParamTypes == RHS.ParamTypes;
+}
+
+inline bool operator!=(const llvm::wasm::WasmSignature &LHS,
+ const llvm::wasm::WasmSignature &RHS) {
+ return !(LHS == RHS);
+}
+
+namespace lld {
+namespace wasm {
+
+struct OutputRelocation {
+ llvm::wasm::WasmRelocation Reloc;
+ uint32_t NewIndex;
+ uint32_t Value;
+};
+
+void debugWrite(uint64_t offset, llvm::Twine msg);
+
+void writeUleb128(raw_ostream &OS, uint32_t Number, const char *msg);
+
+void writeSleb128(raw_ostream &OS, int32_t Number, const char *msg);
+
+void writeBytes(raw_ostream &OS, const char *bytes, size_t count,
+ const char *msg = nullptr);
+
+void writeStr(raw_ostream &OS, const llvm::StringRef String,
+ const char *msg = nullptr);
+
+void writeU8(raw_ostream &OS, uint8_t byte, const char *msg);
+
+void writeU32(raw_ostream &OS, uint32_t Number, const char *msg);
+
+void writeValueType(raw_ostream &OS, int32_t Type, const char *msg);
+
+void writeSig(raw_ostream &OS, const llvm::wasm::WasmSignature &Sig);
+
+void writeInitExpr(raw_ostream &OS, const llvm::wasm::WasmInitExpr &InitExpr);
+
+void writeLimits(raw_ostream &OS, const llvm::wasm::WasmLimits &Limits);
+
+void writeGlobal(raw_ostream &OS, const llvm::wasm::WasmGlobal &Global);
+
+void writeImport(raw_ostream &OS, const llvm::wasm::WasmImport &Import);
+
+void writeExport(raw_ostream &OS, const llvm::wasm::WasmExport &Export);
+
+void writeReloc(raw_ostream &OS, const OutputRelocation &Reloc);
+
+} // namespace wasm
+
+std::string toString(const llvm::wasm::ValType Type);
+std::string toString(const llvm::wasm::WasmSignature &Sig);
+
+} // namespace lld
+
+#endif // LLD_WASM_WRITERUTILS_H