|
13 | 13 | //===----------------------------------------------------------------------===//
|
14 | 14 |
|
15 | 15 | #include "MCTargetDesc/WebAssemblyFixupKinds.h"
|
| 16 | +#include "MCTargetDesc/WebAssemblyMCExpr.h" |
16 | 17 | #include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
|
17 | 18 | #include "llvm/BinaryFormat/Wasm.h"
|
18 | 19 | #include "llvm/MC/MCAsmBackend.h"
|
@@ -68,33 +69,31 @@ unsigned WebAssemblyWasmObjectWriter::getRelocType(
|
68 | 69 | const MCSymbolRefExpr *RefA = Target.getSymA();
|
69 | 70 | assert(RefA);
|
70 | 71 | auto& SymA = cast<MCSymbolWasm>(RefA->getSymbol());
|
71 |
| - |
72 |
| - MCSymbolRefExpr::VariantKind Modifier = Target.getAccessVariant(); |
73 |
| - |
74 |
| - switch (Modifier) { |
75 |
| - case MCSymbolRefExpr::VK_GOT: |
76 |
| - case MCSymbolRefExpr::VK_WASM_GOT_TLS: |
77 |
| - return wasm::R_WASM_GLOBAL_INDEX_LEB; |
78 |
| - case MCSymbolRefExpr::VK_WASM_TBREL: |
79 |
| - assert(SymA.isFunction()); |
80 |
| - return is64Bit() ? wasm::R_WASM_TABLE_INDEX_REL_SLEB64 |
81 |
| - : wasm::R_WASM_TABLE_INDEX_REL_SLEB; |
82 |
| - case MCSymbolRefExpr::VK_WASM_TLSREL: |
83 |
| - return is64Bit() ? wasm::R_WASM_MEMORY_ADDR_TLS_SLEB64 |
84 |
| - : wasm::R_WASM_MEMORY_ADDR_TLS_SLEB; |
85 |
| - case MCSymbolRefExpr::VK_WASM_MBREL: |
86 |
| - assert(SymA.isData()); |
87 |
| - return is64Bit() ? wasm::R_WASM_MEMORY_ADDR_REL_SLEB64 |
88 |
| - : wasm::R_WASM_MEMORY_ADDR_REL_SLEB; |
89 |
| - case MCSymbolRefExpr::VK_WASM_TYPEINDEX: |
90 |
| - return wasm::R_WASM_TYPE_INDEX_LEB; |
91 |
| - case MCSymbolRefExpr::VK_None: |
92 |
| - break; |
93 |
| - case MCSymbolRefExpr::VK_WASM_FUNCINDEX: |
94 |
| - return wasm::R_WASM_FUNCTION_INDEX_I32; |
95 |
| - default: |
96 |
| - report_fatal_error("unknown VariantKind"); |
97 |
| - break; |
| 72 | + auto Spec = WebAssemblyMCExpr::Specifier(Target.getAccessVariant()); |
| 73 | + switch (Spec) { |
| 74 | + case WebAssemblyMCExpr::VK_GOT: |
| 75 | + return wasm::R_WASM_GLOBAL_INDEX_LEB; |
| 76 | + case WebAssemblyMCExpr::VK_GOT_TLS: |
| 77 | + SymA.setTLS(); |
| 78 | + return wasm::R_WASM_GLOBAL_INDEX_LEB; |
| 79 | + case WebAssemblyMCExpr::VK_TBREL: |
| 80 | + assert(SymA.isFunction()); |
| 81 | + return is64Bit() ? wasm::R_WASM_TABLE_INDEX_REL_SLEB64 |
| 82 | + : wasm::R_WASM_TABLE_INDEX_REL_SLEB; |
| 83 | + case WebAssemblyMCExpr::VK_TLSREL: |
| 84 | + SymA.setTLS(); |
| 85 | + return is64Bit() ? wasm::R_WASM_MEMORY_ADDR_TLS_SLEB64 |
| 86 | + : wasm::R_WASM_MEMORY_ADDR_TLS_SLEB; |
| 87 | + case WebAssemblyMCExpr::VK_MBREL: |
| 88 | + assert(SymA.isData()); |
| 89 | + return is64Bit() ? wasm::R_WASM_MEMORY_ADDR_REL_SLEB64 |
| 90 | + : wasm::R_WASM_MEMORY_ADDR_REL_SLEB; |
| 91 | + case WebAssemblyMCExpr::VK_TYPEINDEX: |
| 92 | + return wasm::R_WASM_TYPE_INDEX_LEB; |
| 93 | + case WebAssemblyMCExpr::VK_None: |
| 94 | + break; |
| 95 | + case WebAssemblyMCExpr::VK_FUNCINDEX: |
| 96 | + return wasm::R_WASM_FUNCTION_INDEX_I32; |
98 | 97 | }
|
99 | 98 |
|
100 | 99 | switch (unsigned(Fixup.getKind())) {
|
|
0 commit comments