|  | //===-- 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; | 
|  | } | 
|  | } |