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-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include "llvm/BinaryFormat/Wasm.h" |
10 | |
11 | llvm::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 | |
29 | llvm::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_RELOC |
36 | default: |
37 | llvm_unreachable("unknown reloc type"); |
38 | } |
39 | } |
40 | |
41 | llvm::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 ECase |
64 | } |
65 | |
66 | bool 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 |