//===-- llvm/BinaryFormat/Wasm.cpp -------------------------------*- 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 // //===----------------------------------------------------------------------===// #include "llvm/BinaryFormat/Wasm.h" llvm::StringRef llvm::wasm::toString(wasm::WasmSymbolType Type) { switch (Type) { case wasm::WASM_SYMBOL_TYPE_FUNCTION: return "WASM_SYMBOL_TYPE_FUNCTION"; case wasm::WASM_SYMBOL_TYPE_GLOBAL: return "WASM_SYMBOL_TYPE_GLOBAL"; case wasm::WASM_SYMBOL_TYPE_TABLE: return "WASM_SYMBOL_TYPE_TABLE"; case wasm::WASM_SYMBOL_TYPE_DATA: return "WASM_SYMBOL_TYPE_DATA"; case wasm::WASM_SYMBOL_TYPE_SECTION: return "WASM_SYMBOL_TYPE_SECTION"; case wasm::WASM_SYMBOL_TYPE_TAG: return "WASM_SYMBOL_TYPE_TAG"; } llvm_unreachable("unknown symbol type"); } llvm::StringRef llvm::wasm::relocTypetoString(uint32_t Type) { switch (Type) { #define WASM_RELOC(NAME, VALUE) \ case VALUE: \ return #NAME; #include "llvm/BinaryFormat/WasmRelocs.def" #undef WASM_RELOC default: llvm_unreachable("unknown reloc type"); } } llvm::StringRef llvm::wasm::sectionTypeToString(uint32_t Type) { #define ECase(X) \ case wasm::WASM_SEC_##X: \ return #X; switch (Type) { ECase(CUSTOM); ECase(TYPE); ECase(IMPORT); ECase(FUNCTION); ECase(TABLE); ECase(MEMORY); ECase(GLOBAL); ECase(EXPORT); ECase(START); ECase(ELEM); ECase(CODE); ECase(DATA); ECase(DATACOUNT); ECase(TAG); default: llvm_unreachable("unknown section type"); } #undef ECase } bool llvm::wasm::relocTypeHasAddend(uint32_t Type) { switch (Type) { case R_WASM_MEMORY_ADDR_LEB: case R_WASM_MEMORY_ADDR_LEB64: case R_WASM_MEMORY_ADDR_SLEB: case R_WASM_MEMORY_ADDR_SLEB64: case R_WASM_MEMORY_ADDR_REL_SLEB: case R_WASM_MEMORY_ADDR_REL_SLEB64: case R_WASM_MEMORY_ADDR_I32: case R_WASM_MEMORY_ADDR_I64: case R_WASM_MEMORY_ADDR_TLS_SLEB: case R_WASM_MEMORY_ADDR_TLS_SLEB64: case R_WASM_FUNCTION_OFFSET_I32: case R_WASM_FUNCTION_OFFSET_I64: case R_WASM_SECTION_OFFSET_I32: case R_WASM_MEMORY_ADDR_LOCREL_I32: return true; default: return false; } }