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)11*81ad6265SDimitry Andricllvm::StringRef 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"; 17e8d8bef9SDimitry Andric case wasm::WASM_SYMBOL_TYPE_TABLE: 18e8d8bef9SDimitry 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"; 23fe6060f1SDimitry Andric case wasm::WASM_SYMBOL_TYPE_TAG: 24fe6060f1SDimitry Andric return "WASM_SYMBOL_TYPE_TAG"; 250b57cec5SDimitry Andric } 260b57cec5SDimitry Andric llvm_unreachable("unknown symbol type"); 270b57cec5SDimitry Andric } 280b57cec5SDimitry Andric relocTypetoString(uint32_t Type)29*81ad6265SDimitry Andricllvm::StringRef 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 sectionTypeToString(uint32_t Type)41*81ad6265SDimitry Andricllvm::StringRef llvm::wasm::sectionTypeToString(uint32_t Type) { 42*81ad6265SDimitry Andric #define ECase(X) \ 43*81ad6265SDimitry Andric case wasm::WASM_SEC_##X: \ 44*81ad6265SDimitry Andric return #X; 45*81ad6265SDimitry Andric switch (Type) { 46*81ad6265SDimitry Andric ECase(CUSTOM); 47*81ad6265SDimitry Andric ECase(TYPE); 48*81ad6265SDimitry Andric ECase(IMPORT); 49*81ad6265SDimitry Andric ECase(FUNCTION); 50*81ad6265SDimitry Andric ECase(TABLE); 51*81ad6265SDimitry Andric ECase(MEMORY); 52*81ad6265SDimitry Andric ECase(GLOBAL); 53*81ad6265SDimitry Andric ECase(EXPORT); 54*81ad6265SDimitry Andric ECase(START); 55*81ad6265SDimitry Andric ECase(ELEM); 56*81ad6265SDimitry Andric ECase(CODE); 57*81ad6265SDimitry Andric ECase(DATA); 58*81ad6265SDimitry Andric ECase(DATACOUNT); 59*81ad6265SDimitry Andric ECase(TAG); 60*81ad6265SDimitry Andric default: 61*81ad6265SDimitry Andric llvm_unreachable("unknown section type"); 62*81ad6265SDimitry Andric } 63*81ad6265SDimitry Andric #undef ECase 64*81ad6265SDimitry Andric } 65*81ad6265SDimitry Andric relocTypeHasAddend(uint32_t Type)660b57cec5SDimitry Andricbool llvm::wasm::relocTypeHasAddend(uint32_t Type) { 670b57cec5SDimitry Andric switch (Type) { 680b57cec5SDimitry Andric case R_WASM_MEMORY_ADDR_LEB: 695ffd83dbSDimitry Andric case R_WASM_MEMORY_ADDR_LEB64: 700b57cec5SDimitry Andric case R_WASM_MEMORY_ADDR_SLEB: 715ffd83dbSDimitry Andric case R_WASM_MEMORY_ADDR_SLEB64: 720b57cec5SDimitry Andric case R_WASM_MEMORY_ADDR_REL_SLEB: 735ffd83dbSDimitry Andric case R_WASM_MEMORY_ADDR_REL_SLEB64: 740b57cec5SDimitry Andric case R_WASM_MEMORY_ADDR_I32: 755ffd83dbSDimitry Andric case R_WASM_MEMORY_ADDR_I64: 76e8d8bef9SDimitry Andric case R_WASM_MEMORY_ADDR_TLS_SLEB: 77fe6060f1SDimitry Andric case R_WASM_MEMORY_ADDR_TLS_SLEB64: 780b57cec5SDimitry Andric case R_WASM_FUNCTION_OFFSET_I32: 79e8d8bef9SDimitry Andric case R_WASM_FUNCTION_OFFSET_I64: 800b57cec5SDimitry Andric case R_WASM_SECTION_OFFSET_I32: 81fe6060f1SDimitry Andric case R_WASM_MEMORY_ADDR_LOCREL_I32: 820b57cec5SDimitry Andric return true; 830b57cec5SDimitry Andric default: 840b57cec5SDimitry Andric return false; 850b57cec5SDimitry Andric } 860b57cec5SDimitry Andric } 87