xref: /llvm-project/llvm/lib/BinaryFormat/Wasm.cpp (revision a205f2904d0ae4e3c6ce73b6e0a0aff29e46bd96)
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 Schuff llvm::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 Schuff llvm::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 Schuff llvm::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 Fischer bool 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