10b57cec5SDimitry Andric //===-- llvm/BinaryFormat/Wasm.cpp -------------------------------*- C++-*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "llvm/BinaryFormat/Wasm.h"
100b57cec5SDimitry Andric 
toString(wasm::WasmSymbolType Type)110b57cec5SDimitry Andric std::string llvm::wasm::toString(wasm::WasmSymbolType Type) {
120b57cec5SDimitry Andric   switch (Type) {
130b57cec5SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_FUNCTION:
140b57cec5SDimitry Andric     return "WASM_SYMBOL_TYPE_FUNCTION";
150b57cec5SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_GLOBAL:
160b57cec5SDimitry Andric     return "WASM_SYMBOL_TYPE_GLOBAL";
17af732203SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_TABLE:
18af732203SDimitry Andric     return "WASM_SYMBOL_TYPE_TABLE";
190b57cec5SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_DATA:
200b57cec5SDimitry Andric     return "WASM_SYMBOL_TYPE_DATA";
210b57cec5SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_SECTION:
220b57cec5SDimitry Andric     return "WASM_SYMBOL_TYPE_SECTION";
23*5f7ddb14SDimitry Andric   case wasm::WASM_SYMBOL_TYPE_TAG:
24*5f7ddb14SDimitry Andric     return "WASM_SYMBOL_TYPE_TAG";
250b57cec5SDimitry Andric   }
260b57cec5SDimitry Andric   llvm_unreachable("unknown symbol type");
270b57cec5SDimitry Andric }
280b57cec5SDimitry Andric 
relocTypetoString(uint32_t Type)290b57cec5SDimitry Andric std::string llvm::wasm::relocTypetoString(uint32_t Type) {
300b57cec5SDimitry Andric   switch (Type) {
310b57cec5SDimitry Andric #define WASM_RELOC(NAME, VALUE)                                                \
320b57cec5SDimitry Andric   case VALUE:                                                                  \
330b57cec5SDimitry Andric     return #NAME;
340b57cec5SDimitry Andric #include "llvm/BinaryFormat/WasmRelocs.def"
350b57cec5SDimitry Andric #undef WASM_RELOC
360b57cec5SDimitry Andric   default:
370b57cec5SDimitry Andric     llvm_unreachable("unknown reloc type");
380b57cec5SDimitry Andric   }
390b57cec5SDimitry Andric }
400b57cec5SDimitry Andric 
relocTypeHasAddend(uint32_t Type)410b57cec5SDimitry Andric bool llvm::wasm::relocTypeHasAddend(uint32_t Type) {
420b57cec5SDimitry Andric   switch (Type) {
430b57cec5SDimitry Andric   case R_WASM_MEMORY_ADDR_LEB:
445ffd83dbSDimitry Andric   case R_WASM_MEMORY_ADDR_LEB64:
450b57cec5SDimitry Andric   case R_WASM_MEMORY_ADDR_SLEB:
465ffd83dbSDimitry Andric   case R_WASM_MEMORY_ADDR_SLEB64:
470b57cec5SDimitry Andric   case R_WASM_MEMORY_ADDR_REL_SLEB:
485ffd83dbSDimitry Andric   case R_WASM_MEMORY_ADDR_REL_SLEB64:
490b57cec5SDimitry Andric   case R_WASM_MEMORY_ADDR_I32:
505ffd83dbSDimitry Andric   case R_WASM_MEMORY_ADDR_I64:
51af732203SDimitry Andric   case R_WASM_MEMORY_ADDR_TLS_SLEB:
52*5f7ddb14SDimitry Andric   case R_WASM_MEMORY_ADDR_TLS_SLEB64:
530b57cec5SDimitry Andric   case R_WASM_FUNCTION_OFFSET_I32:
54af732203SDimitry Andric   case R_WASM_FUNCTION_OFFSET_I64:
550b57cec5SDimitry Andric   case R_WASM_SECTION_OFFSET_I32:
56*5f7ddb14SDimitry Andric   case R_WASM_MEMORY_ADDR_LOCREL_I32:
570b57cec5SDimitry Andric     return true;
580b57cec5SDimitry Andric   default:
590b57cec5SDimitry Andric     return false;
600b57cec5SDimitry Andric   }
610b57cec5SDimitry Andric }
62