forked from OSchip/llvm-project
[WebAssembly] Allow multivalue signatures in object files
Summary: Also changes the wasm YAML format to reflect the possibility of having multiple return types and to put the returns after the params for consistency with the binary encoding. Reviewers: aheejin, sbc100 Subscribers: dschuff, jgravelle-google, hiraditya, sunfish, arphaman, rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69156 llvm-svn: 375283
This commit is contained in:
parent
c6921379f5
commit
393d0f799f
|
@ -5,8 +5,9 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I64
|
||||
ParamTypes:
|
||||
ReturnTypes:
|
||||
- I64
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0 ]
|
||||
- Type: GLOBAL
|
||||
|
|
|
@ -5,8 +5,9 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I64
|
||||
ParamTypes:
|
||||
ReturnTypes:
|
||||
- I64
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: env
|
||||
|
|
|
@ -19,8 +19,8 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -40,22 +40,25 @@ define void @call_ptr(i64 (i64)* %arg) {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I64
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I64
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 2
|
||||
; CHECK-NEXT: ReturnType: I64
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I64
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I64
|
||||
; CHECK-NEXT: - Index: 3
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 4
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 3, 1, 3, 4 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -20,12 +20,12 @@ define void @_start() {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
|
||||
; CHECK: - Type: EVENT
|
||||
; CHECK-NEXT: Events:
|
||||
|
|
|
@ -17,12 +17,13 @@ declare i32 @ret32(float) local_unnamed_addr #1
|
|||
; CHECK: - Type: TYPE
|
||||
; CHECK: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - F32
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
|
||||
; CHECK: - Type: CODE
|
||||
|
|
|
@ -18,12 +18,13 @@ declare i32 @ret32(float) local_unnamed_addr #1
|
|||
; CHECK: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - F32
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
|
||||
; CHECK: - Type: CODE
|
||||
|
|
|
@ -7,12 +7,14 @@ CHECK: Sections:
|
|||
CHECK: - Type: TYPE
|
||||
CHECK: Signatures:
|
||||
CHECK: - Index: 0
|
||||
CHECK: ReturnType: I32
|
||||
CHECK: ParamTypes:
|
||||
CHECK: - F32
|
||||
CHECK: ReturnTypes:
|
||||
CHECK: - I32
|
||||
CHECK: - Index: 1
|
||||
CHECK: ReturnType: I64
|
||||
CHECK: ParamTypes:
|
||||
CHECK: - F64
|
||||
CHECK: ReturnTypes:
|
||||
CHECK: - I64
|
||||
CHECK: - Type: FUNCTION
|
||||
CHECK: FunctionTypes: [ 0, 1 ]
|
||||
|
|
|
@ -38,14 +38,16 @@ entry:
|
|||
; CHECK: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 2
|
||||
; CHECK-NEXT: ReturnType: I64
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I64
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
|
||||
; CHECK: - Type: GLOBAL
|
||||
|
@ -64,7 +66,7 @@ entry:
|
|||
; CHECK-NEXT: Value: 456
|
||||
|
||||
; CHECK: - Type: DATA
|
||||
; CHECK-NEXT: Segments:
|
||||
; CHECK-NEXT: Segments:
|
||||
; CHECK-NEXT: - SectionOffset: 7
|
||||
; CHECK-NEXT: InitFlags: 0
|
||||
; CHECK-NEXT: Offset:
|
||||
|
@ -89,18 +91,21 @@ entry:
|
|||
; NO-GC: - Type: TYPE
|
||||
; NO-GC-NEXT: Signatures:
|
||||
; NO-GC-NEXT: - Index: 0
|
||||
; NO-GC-NEXT: ReturnType: NORESULT
|
||||
; NO-GC-NEXT: ParamTypes:
|
||||
; NO-GC-NEXT: ParamTypes: []
|
||||
; NO-GC-NEXT: ReturnTypes: []
|
||||
; NO-GC-NEXT: - Index: 1
|
||||
; NO-GC-NEXT: ReturnType: I64
|
||||
; NO-GC-NEXT: ParamTypes:
|
||||
; NO-GC-NEXT: - I64
|
||||
; NO-GC-NEXT: ReturnTypes:
|
||||
; NO-GC-NEXT: - I64
|
||||
; NO-GC-NEXT: - Index: 2
|
||||
; NO-GC-NEXT: ReturnType: I32
|
||||
; NO-GC-NEXT: ParamTypes:
|
||||
; NO-GC-NEXT: ParamTypes: []
|
||||
; NO-GC-NEXT: ReturnTypes:
|
||||
; NO-GC-NEXT: - I32
|
||||
; NO-GC-NEXT: - Index: 3
|
||||
; NO-GC-NEXT: ReturnType: I64
|
||||
; NO-GC-NEXT: ParamTypes:
|
||||
; NO-GC-NEXT: ParamTypes: []
|
||||
; NO-GC-NEXT: ReturnTypes:
|
||||
; NO-GC-NEXT: - I64
|
||||
; NO-GC-NEXT: - Type: FUNCTION
|
||||
|
||||
; NO-GC: - Type: GLOBAL
|
||||
|
@ -125,7 +130,7 @@ entry:
|
|||
; NO-GC-NEXT: Value: 456
|
||||
|
||||
; NO-GC: - Type: DATA
|
||||
; NO-GC-NEXT: Segments:
|
||||
; NO-GC-NEXT: Segments:
|
||||
; NO-GC-NEXT: - SectionOffset: 7
|
||||
; NO-GC-NEXT: InitFlags: 0
|
||||
; NO-GC-NEXT: Offset:
|
||||
|
|
|
@ -27,11 +27,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
; CHECK-NEXT: 0, 0 ]
|
||||
|
@ -220,8 +221,9 @@
|
|||
; RELOC-NEXT: - Type: TYPE
|
||||
; RELOC-NEXT: Signatures:
|
||||
; RELOC-NEXT: - Index: 0
|
||||
; RELOC-NEXT: ReturnType: I32
|
||||
; RELOC-NEXT: ParamTypes:
|
||||
; RELOC-NEXT: ParamTypes: []
|
||||
; RELOC-NEXT: ReturnTypes:
|
||||
; RELOC-NEXT: - I32
|
||||
; RELOC-NEXT: - Type: FUNCTION
|
||||
; RELOC-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
; RELOC-NEXT: 0, 0 ]
|
||||
|
|
|
@ -44,15 +44,16 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 2
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -18,8 +18,9 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -32,15 +32,16 @@ define i32 @callWeakFuncs() {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 2
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 0, 1, 2 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -26,11 +26,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1, 0, 0, 0, 0, 0 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -23,11 +23,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1, 1, 1 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
@ -131,11 +132,12 @@ entry:
|
|||
; RELOC-NEXT: - Type: TYPE
|
||||
; RELOC-NEXT: Signatures:
|
||||
; RELOC-NEXT: - Index: 0
|
||||
; RELOC-NEXT: ReturnType: NORESULT
|
||||
; RELOC-NEXT: ParamTypes:
|
||||
; RELOC-NEXT: ParamTypes: []
|
||||
; RELOC-NEXT: ReturnTypes: []
|
||||
; RELOC-NEXT: - Index: 1
|
||||
; RELOC-NEXT: ReturnType: I32
|
||||
; RELOC-NEXT: ParamTypes:
|
||||
; RELOC-NEXT: ParamTypes: []
|
||||
; RELOC-NEXT: ReturnTypes:
|
||||
; RELOC-NEXT: - I32
|
||||
; RELOC-NEXT: - Type: IMPORT
|
||||
; RELOC-NEXT: Imports:
|
||||
; RELOC-NEXT: - Module: env
|
||||
|
|
|
@ -23,11 +23,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 1, 1, 1 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -34,11 +34,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: FUNCTION
|
||||
; CHECK-NEXT: FunctionTypes: [ 0, 0, 1 ]
|
||||
; CHECK-NEXT: - Type: TABLE
|
||||
|
|
|
@ -145,7 +145,7 @@ struct Signature {
|
|||
uint32_t Index;
|
||||
SignatureForm Form = wasm::WASM_TYPE_FUNC;
|
||||
std::vector<ValueType> ParamTypes;
|
||||
ValueType ReturnType;
|
||||
std::vector<ValueType> ReturnTypes;
|
||||
};
|
||||
|
||||
struct SymbolInfo {
|
||||
|
|
|
@ -881,12 +881,9 @@ Error WasmObjectFile::parseTypeSection(ReadContext &Ctx) {
|
|||
Sig.Params.push_back(wasm::ValType(ParamType));
|
||||
}
|
||||
uint32_t ReturnCount = readVaruint32(Ctx);
|
||||
if (ReturnCount) {
|
||||
if (ReturnCount != 1) {
|
||||
return make_error<GenericBinaryError>(
|
||||
"Multiple return types not supported", object_error::parse_failed);
|
||||
}
|
||||
Sig.Returns.push_back(wasm::ValType(readUint8(Ctx)));
|
||||
while (ReturnCount--) {
|
||||
uint32_t ReturnType = readUint8(Ctx);
|
||||
Sig.Returns.push_back(wasm::ValType(ReturnType));
|
||||
}
|
||||
Signatures.push_back(std::move(Sig));
|
||||
}
|
||||
|
|
|
@ -334,12 +334,9 @@ void WasmWriter::writeSectionContent(raw_ostream &OS,
|
|||
encodeULEB128(Sig.ParamTypes.size(), OS);
|
||||
for (auto ParamType : Sig.ParamTypes)
|
||||
writeUint8(OS, ParamType);
|
||||
if (Sig.ReturnType == wasm::WASM_TYPE_NORESULT) {
|
||||
encodeULEB128(0, OS);
|
||||
} else {
|
||||
encodeULEB128(1, OS);
|
||||
writeUint8(OS, Sig.ReturnType);
|
||||
}
|
||||
encodeULEB128(Sig.ReturnTypes.size(), OS);
|
||||
for (auto ReturnType : Sig.ReturnTypes)
|
||||
writeUint8(OS, ReturnType);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -295,8 +295,8 @@ void ScalarEnumerationTraits<WasmYAML::SectionType>::enumeration(
|
|||
void MappingTraits<WasmYAML::Signature>::mapping(
|
||||
IO &IO, WasmYAML::Signature &Signature) {
|
||||
IO.mapRequired("Index", Signature.Index);
|
||||
IO.mapRequired("ReturnType", Signature.ReturnType);
|
||||
IO.mapRequired("ParamTypes", Signature.ParamTypes);
|
||||
IO.mapRequired("ReturnTypes", Signature.ReturnTypes);
|
||||
}
|
||||
|
||||
void MappingTraits<WasmYAML::Table>::mapping(IO &IO, WasmYAML::Table &Table) {
|
||||
|
@ -560,7 +560,6 @@ void ScalarEnumerationTraits<WasmYAML::ValueType>::enumeration(
|
|||
ECase(V128);
|
||||
ECase(FUNCREF);
|
||||
ECase(FUNC);
|
||||
ECase(NORESULT);
|
||||
#undef ECase
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+multivalue | FileCheck %s
|
||||
; RUN: llc < %s --filetype=obj -mattr=+multivalue | obj2yaml | FileCheck %s --check-prefix OBJ
|
||||
|
||||
; Test that the multivalue returns, function types, and block types
|
||||
; work as expected.
|
||||
|
@ -42,3 +43,19 @@ loop:
|
|||
; CHECK-NEXT: .int8 43
|
||||
; CHECK-NEXT: .int8 10
|
||||
; CHECK-NEXT: .ascii "multivalue"
|
||||
|
||||
; OBJ-LABEL: - Type: TYPE
|
||||
; OBJ-NEXT: Signatures:
|
||||
; OBJ-NEXT: - Index: 0
|
||||
; OBJ-NEXT: ParamTypes:
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: ReturnTypes:
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: - Index: 1
|
||||
; OBJ-NEXT: ParamTypes:
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: ReturnTypes:
|
||||
; OBJ-NEXT: - I32
|
||||
; OBJ-NEXT: - I64
|
||||
|
|
|
@ -215,12 +215,13 @@ define i1 @mismatched_return_trunc() {
|
|||
; return-called functions include the proper return types
|
||||
|
||||
; YAML-LABEL: - Index: 8
|
||||
; YAML-NEXT: ReturnType: I32
|
||||
; YAML-NEXT: ParamTypes:
|
||||
; YAML-NEXT: - I32
|
||||
; YAML-NEXT: - F32
|
||||
; YAML-NEXT: - I64
|
||||
; YAML-NEXT: - F64
|
||||
; YAML-NEXT: ReturnTypes:
|
||||
; YAML-NEXT: - I32
|
||||
define i32 @unique_caller(i32 (i32, float, i64, double)** %p) {
|
||||
%f = load i32 (i32, float, i64, double)*, i32 (i32, float, i64, double)** %p
|
||||
%v = tail call i32 %f(i32 0, float 0., i64 0, double 0.)
|
||||
|
|
|
@ -38,12 +38,12 @@ entry:
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -28,8 +28,9 @@ define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ParamTypes: []
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -35,8 +35,9 @@ test0:
|
|||
# BIN-NEXT: - Type: TYPE
|
||||
# BIN-NEXT: Signatures:
|
||||
# BIN-NEXT: - Index: 0
|
||||
# BIN-NEXT: ReturnType: I32
|
||||
# BIN-NEXT: ParamTypes: []
|
||||
# BIN-NEXT: ReturnTypes:
|
||||
# BIN-NEXT: - I32
|
||||
# BIN-NEXT: - Type: IMPORT
|
||||
# BIN-NEXT: Imports:
|
||||
# BIN-NEXT: - Module: env
|
||||
|
|
|
@ -19,13 +19,14 @@ define i32 @test_throw1(i8* %p) {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
|
||||
; CHECK: - Type: EVENT
|
||||
; CHECK-NEXT: Events:
|
||||
|
|
|
@ -27,15 +27,16 @@ define void @call(i32) {
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK: - Module: env
|
||||
|
|
|
@ -17,14 +17,15 @@ declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture r
|
|||
; CHECK-NEXT: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
|
|
|
@ -52,8 +52,9 @@ hidden_func:
|
|||
# CHECK-NEXT: - Type: TYPE
|
||||
# CHECK-NEXT: Signatures:
|
||||
# CHECK-NEXT: - Index: 0
|
||||
# CHECK-NEXT: ReturnType: I32
|
||||
# CHECK-NEXT: ParamTypes: []
|
||||
# CHECK-NEXT: ReturnTypes:
|
||||
# CHECK-NEXT: - I32
|
||||
# CHECK-NEXT: - Type: IMPORT
|
||||
# CHECK-NEXT: Imports:
|
||||
# CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -22,13 +22,15 @@ test0:
|
|||
# BIN-NEXT: - Type: TYPE
|
||||
# BIN-NEXT: Signatures:
|
||||
# BIN-NEXT: - Index: 0
|
||||
# BIN-NEXT: ReturnType: I32
|
||||
# BIN-NEXT: ParamTypes:
|
||||
# BIN-NEXT: - I32
|
||||
# BIN-NEXT: ReturnTypes:
|
||||
# BIN-NEXT: - I32
|
||||
# BIN-NEXT: - Index: 1
|
||||
# BIN-NEXT: ReturnType: F64
|
||||
# BIN-NEXT: ParamTypes:
|
||||
# BIN-NEXT: - F64
|
||||
# BIN-NEXT: ReturnTypes:
|
||||
# BIN-NEXT: - F64
|
||||
# BIN-NEXT: - Type: IMPORT
|
||||
# BIN-NEXT: Imports:
|
||||
# BIN-NEXT: - Module: env
|
||||
|
@ -64,4 +66,3 @@ test0:
|
|||
# BIN-NEXT: Flags: [ BINDING_LOCAL ]
|
||||
# BIN-NEXT: Function: 0
|
||||
# BIN-NEXT: ...
|
||||
|
||||
|
|
|
@ -37,32 +37,37 @@ define void @vararg(i32, i32, ...) {
|
|||
; CHECK-LABEL: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 1
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Index: 2
|
||||
; CHECK-NEXT: ReturnType: I64
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I64
|
||||
; CHECK-NEXT: - Index: 3
|
||||
; CHECK-NEXT: ReturnType: F32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - F32
|
||||
; CHECK-NEXT: - Index: 4
|
||||
; CHECK-NEXT: ReturnType: F64
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - F64
|
||||
; CHECK-NEXT: - Index: 5
|
||||
; CHECK-NEXT: ReturnType: V128
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - V128
|
||||
; CHECK-NEXT: - Index: 6
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; CHECK-NEXT: - Index: 7
|
||||
; CHECK-NEXT: ReturnType: NORESULT
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: ReturnTypes: []
|
||||
; should be no additional types
|
||||
; CHECK-NOT: ReturnType
|
||||
; CHECK-NOT: ReturnTypes
|
||||
|
|
|
@ -49,8 +49,9 @@ entry:
|
|||
; CHECK: - Type: TYPE
|
||||
; CHECK-NEXT: Signatures:
|
||||
; CHECK-NEXT: - Index: 0
|
||||
; CHECK-NEXT: ReturnType: I32
|
||||
; CHECK-NEXT: ParamTypes:
|
||||
; CHECK-NEXT: ReturnTypes:
|
||||
; CHECK-NEXT: - I32
|
||||
; CHECK-NEXT: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -7,9 +7,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: foo
|
||||
|
|
|
@ -16,8 +16,8 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: NORESULT
|
||||
ParamTypes: []
|
||||
ReturnTypes: []
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: env
|
||||
|
|
|
@ -6,14 +6,15 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: F32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- F32
|
||||
- Index: 1
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
- I32
|
||||
- I64
|
||||
ReturnTypes: []
|
||||
- Type: FUNCTION
|
||||
FunctionTypes:
|
||||
- 0
|
||||
|
@ -59,14 +60,15 @@ Sections:
|
|||
# CHECK: - Type: TYPE
|
||||
# CHECK: Signatures:
|
||||
# CHECK: - Index: 0
|
||||
# CHECK: ReturnType: F32
|
||||
# CHECK: ParamTypes:
|
||||
# CHECK: - I32
|
||||
# CHECK: ReturnTypes:
|
||||
# CHECK: - F32
|
||||
# CHECK: - Index: 1
|
||||
# CHECK: ReturnType: NORESULT
|
||||
# CHECK: ParamTypes:
|
||||
# CHECK: - I32
|
||||
# CHECK: - I64
|
||||
# CHECK: ReturnTypes: []
|
||||
# CHECK: - Type: CODE
|
||||
# CHECK: Relocations:
|
||||
# CHECK: - Type: R_WASM_TABLE_INDEX_SLEB
|
||||
|
|
|
@ -7,13 +7,14 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Index: 1
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes: []
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0 ]
|
||||
- Type: EVENT
|
||||
|
@ -53,13 +54,14 @@ Sections:
|
|||
# CHECK-NEXT: - Type: TYPE
|
||||
# CHECK-NEXT: Signatures:
|
||||
# CHECK-NEXT: - Index: 0
|
||||
# CHECK-NEXT: ReturnType: I32
|
||||
# CHECK-NEXT: ParamTypes:
|
||||
# CHECK-NEXT: - I32
|
||||
# CHECK-NEXT: ReturnTypes:
|
||||
# CHECK-NEXT: - I32
|
||||
# CHECK-NEXT: - Index: 1
|
||||
# CHECK-NEXT: ReturnType: NORESULT
|
||||
# CHECK-NEXT: ParamTypes:
|
||||
# CHECK-NEXT: - I32
|
||||
# CHECK-NEXT: ReturnTypes: []
|
||||
# CHECK-NEXT: - Type: FUNCTION
|
||||
# CHECK-NEXT: FunctionTypes: [ 0 ]
|
||||
# CHECK-NEXT: - Type: EVENT
|
||||
|
|
|
@ -6,8 +6,8 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
ReturnTypes: []
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0, 0 ]
|
||||
- Type: GLOBAL
|
||||
|
@ -25,7 +25,7 @@ Sections:
|
|||
Opcode: I64_CONST
|
||||
Value: 64
|
||||
- Type: EXPORT
|
||||
Exports:
|
||||
Exports:
|
||||
- Name: function_export
|
||||
Kind: FUNCTION
|
||||
Index: 1
|
||||
|
@ -52,7 +52,7 @@ Sections:
|
|||
# CHECK: Version: 0x00000001
|
||||
# CHECK: Sections:
|
||||
# CHECK: - Type: EXPORT
|
||||
# CHECK: Exports:
|
||||
# CHECK: Exports:
|
||||
# CHECK: - Name: function_export
|
||||
# CHECK: Kind: FUNCTION
|
||||
# CHECK: Index: 1
|
||||
|
|
|
@ -6,12 +6,12 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
ReturnTypes: []
|
||||
- Index: 1
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes: []
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 1, 0 ]
|
||||
- Type: CODE
|
||||
|
|
|
@ -6,9 +6,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: foo
|
||||
|
@ -25,7 +26,7 @@ Sections:
|
|||
# CHECK: Version: 0x00000001
|
||||
# CHECK: Sections:
|
||||
# CHECK: - Type: IMPORT
|
||||
# CHECK: Imports:
|
||||
# CHECK: Imports:
|
||||
# CHECK: - Module: foo
|
||||
# CHECK: Field: imported_memory
|
||||
# CHECK: Kind: MEMORY
|
||||
|
|
|
@ -6,9 +6,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: foo
|
||||
|
@ -42,7 +43,7 @@ Sections:
|
|||
# CHECK: Version: 0x00000001
|
||||
# CHECK: Sections:
|
||||
# CHECK: - Type: IMPORT
|
||||
# CHECK: Imports:
|
||||
# CHECK: Imports:
|
||||
# CHECK: - Module: foo
|
||||
# CHECK: Field: imported_function
|
||||
# CHECK: Kind: FUNCTION
|
||||
|
|
|
@ -7,8 +7,8 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: NORESULT
|
||||
ParamTypes: []
|
||||
ReturnTypes: []
|
||||
- Type: CODE
|
||||
Functions:
|
||||
- Index: 0
|
||||
|
|
|
@ -6,9 +6,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: foo
|
||||
|
|
|
@ -6,9 +6,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: foo
|
||||
|
|
|
@ -7,8 +7,8 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: NORESULT
|
||||
ParamTypes:
|
||||
ParamTypes: []
|
||||
ReturnTypes: []
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0, 0, 0 ]
|
||||
- Type: START
|
||||
|
|
|
@ -6,15 +6,17 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- F32
|
||||
- F32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Index: 1
|
||||
ReturnType: I64
|
||||
ParamTypes:
|
||||
- F64
|
||||
- F64
|
||||
ReturnTypes:
|
||||
- I64
|
||||
...
|
||||
# CHECK: --- !WASM
|
||||
# CHECK: FileHeader:
|
||||
|
@ -23,13 +25,15 @@ Sections:
|
|||
# CHECK: - Type: TYPE
|
||||
# CHECK: Signatures:
|
||||
# CHECK: - Index: 0
|
||||
# CHECK: ReturnType: I32
|
||||
# CHECK: ParamTypes:
|
||||
# CHECK: - F32
|
||||
# CHECK: - F32
|
||||
# CHECK: ReturnTypes:
|
||||
# CHECK: - I32
|
||||
# CHECK: - Index: 1
|
||||
# CHECK: ReturnType: I64
|
||||
# CHECK: ParamTypes:
|
||||
# CHECK: - F64
|
||||
# CHECK: - F64
|
||||
# CHECK: ReturnTypes:
|
||||
# CHECK: - I64
|
||||
# CHECK: ...
|
||||
|
|
|
@ -6,12 +6,13 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
ParamTypes: []
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0, 0 ]
|
||||
- Type: GLOBAL
|
||||
Globals:
|
||||
Globals:
|
||||
- Index: 0
|
||||
Type: I32
|
||||
Mutable: false
|
||||
|
@ -19,7 +20,7 @@ Sections:
|
|||
Opcode: I32_CONST
|
||||
Value: 1
|
||||
- Type: EXPORT
|
||||
Exports:
|
||||
Exports:
|
||||
- Name: function_export
|
||||
Kind: FUNCTION
|
||||
Index: 1
|
||||
|
@ -54,7 +55,7 @@ Sections:
|
|||
# CHECK: Version: 0x00000001
|
||||
# CHECK: Sections:
|
||||
# CHECK: - Type: EXPORT
|
||||
# CHECK: Exports:
|
||||
# CHECK: Exports:
|
||||
# CHECK: - Name: function_export
|
||||
# CHECK: Kind: FUNCTION
|
||||
# CHECK: Index: 1
|
||||
|
|
|
@ -9,9 +9,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: FUNCTION
|
||||
FunctionTypes: [ 0 ]
|
||||
- Type: GLOBAL
|
||||
|
|
|
@ -9,9 +9,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: env
|
||||
|
|
|
@ -9,9 +9,10 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes:
|
||||
- I32
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: env
|
||||
|
|
|
@ -9,11 +9,12 @@ Sections:
|
|||
- Type: TYPE
|
||||
Signatures:
|
||||
- Index: 0
|
||||
ReturnType: I32
|
||||
ParamTypes: []
|
||||
ReturnTypes:
|
||||
- I32
|
||||
- Index: 1
|
||||
ReturnType: NORESULT
|
||||
ParamTypes: []
|
||||
ReturnTypes: []
|
||||
- Type: IMPORT
|
||||
Imports:
|
||||
- Module: env
|
||||
|
|
|
@ -198,13 +198,10 @@ ErrorOr<WasmYAML::Object *> WasmDumper::dump() {
|
|||
for (const auto &FunctionSig : Obj.types()) {
|
||||
WasmYAML::Signature Sig;
|
||||
Sig.Index = Index++;
|
||||
Sig.ReturnType = wasm::WASM_TYPE_NORESULT;
|
||||
assert(FunctionSig.Returns.size() <= 1 &&
|
||||
"Functions with multiple returns are not supported");
|
||||
if (FunctionSig.Returns.size())
|
||||
Sig.ReturnType = static_cast<uint32_t>(FunctionSig.Returns[0]);
|
||||
for (const auto &ParamType : FunctionSig.Params)
|
||||
Sig.ParamTypes.emplace_back(static_cast<uint32_t>(ParamType));
|
||||
for (const auto &ReturnType : FunctionSig.Returns)
|
||||
Sig.ReturnTypes.emplace_back(static_cast<uint32_t>(ReturnType));
|
||||
TypeSec->Signatures.push_back(Sig);
|
||||
}
|
||||
S = std::move(TypeSec);
|
||||
|
|
Loading…
Reference in New Issue