diff options
-rw-r--r-- | llvm/include/llvm/BinaryFormat/Wasm.h | 2 | ||||
-rw-r--r-- | llvm/lib/MC/WasmObjectWriter.cpp | 4 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/weak-alias.ll | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h index eef473b20dd..4cb373a0b70 100644 --- a/llvm/include/llvm/BinaryFormat/Wasm.h +++ b/llvm/include/llvm/BinaryFormat/Wasm.h @@ -107,7 +107,7 @@ struct WasmElemSegment { struct WasmRelocation { uint32_t Type; // The type of the relocation. - int32_t Index; // Index into function to global index space. + uint32_t Index; // Index into function to global index space. uint64_t Offset; // Offset from the start of the section. int64_t Addend; // A value to add to the symbol. }; diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index 82352cb50c7..426f7e1bd9a 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -959,6 +959,10 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, // Populate the Imports set. for (const MCSymbol &S : Asm.symbols()) { + // Weak aliases don't have thier own function types. + if (S.isVariable()) + continue; + const auto &WS = static_cast<const MCSymbolWasm &>(S); int32_t Type; diff --git a/llvm/test/MC/WebAssembly/weak-alias.ll b/llvm/test/MC/WebAssembly/weak-alias.ll index 6e2b8631d2b..d870e88cb69 100644 --- a/llvm/test/MC/WebAssembly/weak-alias.ll +++ b/llvm/test/MC/WebAssembly/weak-alias.ll @@ -10,6 +10,14 @@ entry: ret i32 0 } +; CHECK: - Type: TYPE +; CHECK-NEXT: Signatures: +; CHECK-NEXT: - Index: 0 +; CHECK-NEXT: ReturnType: I32 +; CHECK-NEXT: ParamTypes: +; CHECK-NEXT: - Type: FUNCTION +; CHECK-NEXT: FunctionTypes: [ 0 ] + ; CHECK: - Type: EXPORT ; CHECK-NEXT: Exports: ; CHECK-NEXT: - Name: foo @@ -19,7 +27,6 @@ entry: ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 0 - ; CHECK: - Type: CUSTOM ; CHECK-NEXT: Name: name ; CHECK-NEXT: FunctionNames: |