1 //===- WriterUtils.h --------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLD_WASM_WRITERUTILS_H 10 #define LLD_WASM_WRITERUTILS_H 11 12 #include "lld/Common/LLVM.h" 13 #include "llvm/ADT/Twine.h" 14 #include "llvm/Object/Wasm.h" 15 16 namespace lld { 17 namespace wasm { 18 19 #ifdef LLVM_DEBUG 20 void debugWrite(uint64_t offset, const Twine &msg); 21 #else 22 #define debugWrite(...) (void *)0 23 #endif 24 25 void writeUleb128(raw_ostream &os, uint64_t number, const Twine &msg); 26 27 void writeSleb128(raw_ostream &os, int64_t number, const Twine &msg); 28 29 void writeBytes(raw_ostream &os, const char *bytes, size_t count, 30 const Twine &msg); 31 32 void writeStr(raw_ostream &os, StringRef string, const Twine &msg); 33 34 void writeU8(raw_ostream &os, uint8_t byte, const Twine &msg); 35 36 void writeU32(raw_ostream &os, uint32_t number, const Twine &msg); 37 38 void writeValueType(raw_ostream &os, llvm::wasm::ValType type, 39 const Twine &msg); 40 41 void writeSig(raw_ostream &os, const llvm::wasm::WasmSignature &sig); 42 43 void writeI32Const(raw_ostream &os, int32_t number, const Twine &msg); 44 45 void writeI64Const(raw_ostream &os, int64_t number, const Twine &msg); 46 47 void writePtrConst(raw_ostream &os, int64_t number, bool is64, 48 const Twine &msg); 49 50 void writeMemArg(raw_ostream &os, uint32_t alignment, uint64_t offset); 51 52 void writeInitExpr(raw_ostream &os, const llvm::wasm::WasmInitExpr &initExpr); 53 54 void writeInitExprMVP(raw_ostream &os, 55 const llvm::wasm::WasmInitExprMVP &initExpr); 56 57 void writeLimits(raw_ostream &os, const llvm::wasm::WasmLimits &limits); 58 59 void writeGlobalType(raw_ostream &os, const llvm::wasm::WasmGlobalType &type); 60 61 void writeTableType(raw_ostream &os, const llvm::wasm::WasmTableType &type); 62 63 void writeImport(raw_ostream &os, const llvm::wasm::WasmImport &import); 64 65 void writeExport(raw_ostream &os, const llvm::wasm::WasmExport &export_); 66 67 } // namespace wasm 68 69 std::string toString(llvm::wasm::ValType type); 70 std::string toString(const llvm::wasm::WasmSignature &sig); 71 std::string toString(const llvm::wasm::WasmGlobalType &type); 72 std::string toString(const llvm::wasm::WasmTableType &type); 73 74 } // namespace lld 75 76 #endif // LLD_WASM_WRITERUTILS_H 77