1 //===-- llvm/BinaryFormat/Wasm.cpp -------------------------------*- 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 #include "llvm/BinaryFormat/Wasm.h" 10 11 std::string llvm::wasm::toString(wasm::WasmSymbolType Type) { 12 switch (Type) { 13 case wasm::WASM_SYMBOL_TYPE_FUNCTION: 14 return "WASM_SYMBOL_TYPE_FUNCTION"; 15 case wasm::WASM_SYMBOL_TYPE_GLOBAL: 16 return "WASM_SYMBOL_TYPE_GLOBAL"; 17 case wasm::WASM_SYMBOL_TYPE_TABLE: 18 return "WASM_SYMBOL_TYPE_TABLE"; 19 case wasm::WASM_SYMBOL_TYPE_DATA: 20 return "WASM_SYMBOL_TYPE_DATA"; 21 case wasm::WASM_SYMBOL_TYPE_SECTION: 22 return "WASM_SYMBOL_TYPE_SECTION"; 23 case wasm::WASM_SYMBOL_TYPE_TAG: 24 return "WASM_SYMBOL_TYPE_TAG"; 25 } 26 llvm_unreachable("unknown symbol type"); 27 } 28 29 std::string llvm::wasm::relocTypetoString(uint32_t Type) { 30 switch (Type) { 31 #define WASM_RELOC(NAME, VALUE) \ 32 case VALUE: \ 33 return #NAME; 34 #include "llvm/BinaryFormat/WasmRelocs.def" 35 #undef WASM_RELOC 36 default: 37 llvm_unreachable("unknown reloc type"); 38 } 39 } 40 41 bool llvm::wasm::relocTypeHasAddend(uint32_t Type) { 42 switch (Type) { 43 case R_WASM_MEMORY_ADDR_LEB: 44 case R_WASM_MEMORY_ADDR_LEB64: 45 case R_WASM_MEMORY_ADDR_SLEB: 46 case R_WASM_MEMORY_ADDR_SLEB64: 47 case R_WASM_MEMORY_ADDR_REL_SLEB: 48 case R_WASM_MEMORY_ADDR_REL_SLEB64: 49 case R_WASM_MEMORY_ADDR_I32: 50 case R_WASM_MEMORY_ADDR_I64: 51 case R_WASM_MEMORY_ADDR_TLS_SLEB: 52 case R_WASM_MEMORY_ADDR_TLS_SLEB64: 53 case R_WASM_FUNCTION_OFFSET_I32: 54 case R_WASM_FUNCTION_OFFSET_I64: 55 case R_WASM_SECTION_OFFSET_I32: 56 case R_WASM_MEMORY_ADDR_LOCREL_I32: 57 return true; 58 default: 59 return false; 60 } 61 } 62