87 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/BinaryFormat/Wasm.h"10 11llvm::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 29llvm::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_RELOC36 default:37 llvm_unreachable("unknown reloc type");38 }39}40 41llvm::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 ECase64}65 66bool 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