15f87ab33SSam Clegg //===-- llvm/BinaryFormat/Wasm.cpp -------------------------------*- C++-*-===// 25f87ab33SSam Clegg // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f87ab33SSam Clegg // 75f87ab33SSam Clegg //===----------------------------------------------------------------------===// 85f87ab33SSam Clegg 95f87ab33SSam Clegg #include "llvm/BinaryFormat/Wasm.h" 105f87ab33SSam Clegg toString(wasm::WasmSymbolType Type)11*a205f290SDerek Schuffllvm::StringRef llvm::wasm::toString(wasm::WasmSymbolType Type) { 1218c56a07SHeejin Ahn switch (Type) { 135f87ab33SSam Clegg case wasm::WASM_SYMBOL_TYPE_FUNCTION: 145f87ab33SSam Clegg return "WASM_SYMBOL_TYPE_FUNCTION"; 155f87ab33SSam Clegg case wasm::WASM_SYMBOL_TYPE_GLOBAL: 165f87ab33SSam Clegg return "WASM_SYMBOL_TYPE_GLOBAL"; 17388fb67bSPaulo Matos case wasm::WASM_SYMBOL_TYPE_TABLE: 18388fb67bSPaulo Matos return "WASM_SYMBOL_TYPE_TABLE"; 195f87ab33SSam Clegg case wasm::WASM_SYMBOL_TYPE_DATA: 205f87ab33SSam Clegg return "WASM_SYMBOL_TYPE_DATA"; 215f87ab33SSam Clegg case wasm::WASM_SYMBOL_TYPE_SECTION: 225f87ab33SSam Clegg return "WASM_SYMBOL_TYPE_SECTION"; 231d891d44SHeejin Ahn case wasm::WASM_SYMBOL_TYPE_TAG: 241d891d44SHeejin Ahn return "WASM_SYMBOL_TYPE_TAG"; 255f87ab33SSam Clegg } 265f87ab33SSam Clegg llvm_unreachable("unknown symbol type"); 275f87ab33SSam Clegg } 285f87ab33SSam Clegg relocTypetoString(uint32_t Type)29*a205f290SDerek Schuffllvm::StringRef llvm::wasm::relocTypetoString(uint32_t Type) { 3018c56a07SHeejin Ahn switch (Type) { 31f208f631SHeejin Ahn #define WASM_RELOC(NAME, VALUE) \ 32f208f631SHeejin Ahn case VALUE: \ 33f208f631SHeejin Ahn return #NAME; 345f87ab33SSam Clegg #include "llvm/BinaryFormat/WasmRelocs.def" 355f87ab33SSam Clegg #undef WASM_RELOC 365f87ab33SSam Clegg default: 375f87ab33SSam Clegg llvm_unreachable("unknown reloc type"); 385f87ab33SSam Clegg } 395f87ab33SSam Clegg } 40cadcb9ebSKeno Fischer sectionTypeToString(uint32_t Type)41*a205f290SDerek Schuffllvm::StringRef llvm::wasm::sectionTypeToString(uint32_t Type) { 42*a205f290SDerek Schuff #define ECase(X) \ 43*a205f290SDerek Schuff case wasm::WASM_SEC_##X: \ 44*a205f290SDerek Schuff return #X; 45*a205f290SDerek Schuff switch (Type) { 46*a205f290SDerek Schuff ECase(CUSTOM); 47*a205f290SDerek Schuff ECase(TYPE); 48*a205f290SDerek Schuff ECase(IMPORT); 49*a205f290SDerek Schuff ECase(FUNCTION); 50*a205f290SDerek Schuff ECase(TABLE); 51*a205f290SDerek Schuff ECase(MEMORY); 52*a205f290SDerek Schuff ECase(GLOBAL); 53*a205f290SDerek Schuff ECase(EXPORT); 54*a205f290SDerek Schuff ECase(START); 55*a205f290SDerek Schuff ECase(ELEM); 56*a205f290SDerek Schuff ECase(CODE); 57*a205f290SDerek Schuff ECase(DATA); 58*a205f290SDerek Schuff ECase(DATACOUNT); 59*a205f290SDerek Schuff ECase(TAG); 60*a205f290SDerek Schuff default: 61*a205f290SDerek Schuff llvm_unreachable("unknown section type"); 62*a205f290SDerek Schuff } 63*a205f290SDerek Schuff #undef ECase 64*a205f290SDerek Schuff } 65*a205f290SDerek Schuff relocTypeHasAddend(uint32_t Type)66cadcb9ebSKeno Fischerbool llvm::wasm::relocTypeHasAddend(uint32_t Type) { 67cadcb9ebSKeno Fischer switch (Type) { 68cadcb9ebSKeno Fischer case R_WASM_MEMORY_ADDR_LEB: 693b29376eSWouter van Oortmerssen case R_WASM_MEMORY_ADDR_LEB64: 70cadcb9ebSKeno Fischer case R_WASM_MEMORY_ADDR_SLEB: 713b29376eSWouter van Oortmerssen case R_WASM_MEMORY_ADDR_SLEB64: 72cadcb9ebSKeno Fischer case R_WASM_MEMORY_ADDR_REL_SLEB: 733b29376eSWouter van Oortmerssen case R_WASM_MEMORY_ADDR_REL_SLEB64: 74cadcb9ebSKeno Fischer case R_WASM_MEMORY_ADDR_I32: 753b29376eSWouter van Oortmerssen case R_WASM_MEMORY_ADDR_I64: 76a28a4662SSam Clegg case R_WASM_MEMORY_ADDR_TLS_SLEB: 77670944fbSWouter van Oortmerssen case R_WASM_MEMORY_ADDR_TLS_SLEB64: 78cadcb9ebSKeno Fischer case R_WASM_FUNCTION_OFFSET_I32: 7916f02431SWouter van Oortmerssen case R_WASM_FUNCTION_OFFSET_I64: 80cadcb9ebSKeno Fischer case R_WASM_SECTION_OFFSET_I32: 81aa0c571aSYuta Saito case R_WASM_MEMORY_ADDR_LOCREL_I32: 82cadcb9ebSKeno Fischer return true; 83cadcb9ebSKeno Fischer default: 84cadcb9ebSKeno Fischer return false; 85cadcb9ebSKeno Fischer } 86cadcb9ebSKeno Fischer } 87