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 llvm::StringRef 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 llvm::StringRef 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 llvm::StringRef llvm::wasm::sectionTypeToString(uint32_t Type) { 42 #define ECase(X) \ 43 case wasm::WASM_SEC_##X: \ 44 return #X; 45 switch (Type) { 46 ECase(CUSTOM); 47 ECase(TYPE); 48 ECase(IMPORT); 49 ECase(FUNCTION); 50 ECase(TABLE); 51 ECase(MEMORY); 52 ECase(GLOBAL); 53 ECase(EXPORT); 54 ECase(START); 55 ECase(ELEM); 56 ECase(CODE); 57 ECase(DATA); 58 ECase(DATACOUNT); 59 ECase(TAG); 60 default: 61 llvm_unreachable("unknown section type"); 62 } 63 #undef ECase 64 } 65 66 bool llvm::wasm::relocTypeHasAddend(uint32_t Type) { 67 switch (Type) { 68 case R_WASM_MEMORY_ADDR_LEB: 69 case R_WASM_MEMORY_ADDR_LEB64: 70 case R_WASM_MEMORY_ADDR_SLEB: 71 case R_WASM_MEMORY_ADDR_SLEB64: 72 case R_WASM_MEMORY_ADDR_REL_SLEB: 73 case R_WASM_MEMORY_ADDR_REL_SLEB64: 74 case R_WASM_MEMORY_ADDR_I32: 75 case R_WASM_MEMORY_ADDR_I64: 76 case R_WASM_MEMORY_ADDR_TLS_SLEB: 77 case R_WASM_MEMORY_ADDR_TLS_SLEB64: 78 case R_WASM_FUNCTION_OFFSET_I32: 79 case R_WASM_FUNCTION_OFFSET_I64: 80 case R_WASM_SECTION_OFFSET_I32: 81 case R_WASM_MEMORY_ADDR_LOCREL_I32: 82 return true; 83 default: 84 return false; 85 } 86 } 87