Skip to content

Commit b3dcb49

Browse files
LiedtkeV8-internal LUCI CQ
authored andcommitted
[wasm] Remove parameter and return types from wasmReturnCallDirect
Same as commit 226938a but now for the tail call variant (in preparation for using wasm-gc signatures for wasm functions.) Bug: 445356784 Change-Id: I5b2501b45a4a3f7e15c8814008d2d6d5bc9a9974 Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9108116 Reviewed-by: Manos Koukoutos <manoskouk@google.com> Commit-Queue: Manos Koukoutos <manoskouk@google.com> Auto-Submit: Matthias Liedtke <mliedtke@google.com>
1 parent 0e5757e commit b3dcb49

6 files changed

Lines changed: 16 additions & 27 deletions

File tree

Sources/Fuzzilli/Base/ProgramBuilder.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3787,7 +3787,7 @@ public class ProgramBuilder {
37873787

37883788
public func wasmReturnCallDirect(signature: WasmSignature, function: Variable, functionArgs: [Variable]) {
37893789
assert(self.signature.outputTypes == signature.outputTypes)
3790-
b.emit(WasmReturnCallDirect(signature: signature),
3790+
b.emit(WasmReturnCallDirect(parameterCount: signature.parameterTypes.count),
37913791
withInputs: [function] + functionArgs,
37923792
types: [.wasmFunctionDef(signature)] + signature.parameterTypes)
37933793
}

Sources/Fuzzilli/FuzzIL/Instruction.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,8 +1318,7 @@ extension Instruction: ProtobufConvertible {
13181318
}
13191319
case .wasmReturnCallDirect(let op):
13201320
$0.wasmReturnCallDirect = Fuzzilli_Protobuf_WasmReturnCallDirect.with {
1321-
$0.parameterTypes = op.signature.parameterTypes.map(ILTypeToWasmTypeEnum)
1322-
$0.outputTypes = op.signature.outputTypes.map(ILTypeToWasmTypeEnum)
1321+
$0.parameterCount = Int32(op.parameterCount)
13231322
}
13241323
case .wasmReturnCallIndirect(let op):
13251324
$0.wasmReturnCallIndirect = Fuzzilli_Protobuf_WasmReturnCallIndirect.with {
@@ -2418,9 +2417,7 @@ extension Instruction: ProtobufConvertible {
24182417
case .wasmCallDirect(let p):
24192418
op = WasmCallDirect(parameterCount: Int(p.parameterCount), outputCount: Int(p.outputCount))
24202419
case .wasmReturnCallDirect(let p):
2421-
let parameters = p.parameterTypes.map(WasmTypeEnumToILType)
2422-
let outputs = p.outputTypes.map(WasmTypeEnumToILType)
2423-
op = WasmReturnCallDirect(signature: parameters => outputs)
2420+
op = WasmReturnCallDirect(parameterCount: Int(p.parameterCount))
24242421
case .wasmReturnCallIndirect(let p):
24252422
let parameters = p.parameterTypes.map(WasmTypeEnumToILType)
24262423
let outputs = p.outputTypes.map(WasmTypeEnumToILType)

Sources/Fuzzilli/FuzzIL/WasmOperations.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -972,12 +972,12 @@ final class WasmCallDirect: WasmOperation {
972972

973973
final class WasmReturnCallDirect: WasmOperation {
974974
override var opcode: Opcode { .wasmReturnCallDirect(self) }
975-
let signature: WasmSignature
976975

977-
init(signature: WasmSignature) {
978-
self.signature = signature
979-
super.init(numInputs: 1 + signature.parameterTypes.count, numOutputs: 0, attributes: [.isJump], requiredContext: [.wasmFunction])
976+
init(parameterCount: Int) {
977+
super.init(numInputs: 1 + parameterCount, numOutputs: 0, attributes: [.isJump], requiredContext: [.wasmFunction])
980978
}
979+
980+
var parameterCount: Int {numInputs - 1}
981981
}
982982

983983
final class WasmReturnCallIndirect: WasmOperation {

Sources/Fuzzilli/Lifting/FuzzILLifter.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,9 +1073,9 @@ public class FuzzILLifter: Lifter {
10731073
w.emit("\(outputs) <- WasmCallDirect \(inputs)")
10741074
}
10751075

1076-
case .wasmReturnCallDirect(let op):
1076+
case .wasmReturnCallDirect(_):
10771077
let inputs = instr.inputs.map(lift).joined(separator: ", ")
1078-
w.emit("WasmReturnCallDirect(\(op.signature)) \(inputs)")
1078+
w.emit("WasmReturnCallDirect \(inputs)")
10791079

10801080
case .wasmReturnCallIndirect(let op):
10811081
let inputs = instr.inputs.map(lift).joined(separator: ", ")

Sources/Fuzzilli/Protobuf/operations.pb.swift

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5059,9 +5059,7 @@ public struct Fuzzilli_Protobuf_WasmReturnCallDirect: Sendable {
50595059
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
50605060
// methods supported on all messages.
50615061

5062-
public var parameterTypes: [Fuzzilli_Protobuf_WasmILType] = []
5063-
5064-
public var outputTypes: [Fuzzilli_Protobuf_WasmILType] = []
5062+
public var parameterCount: Int32 = 0
50655063

50665064
public var unknownFields = SwiftProtobuf.UnknownStorage()
50675065

@@ -13488,34 +13486,29 @@ extension Fuzzilli_Protobuf_WasmCallDirect: SwiftProtobuf.Message, SwiftProtobuf
1348813486

1348913487
extension Fuzzilli_Protobuf_WasmReturnCallDirect: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
1349013488
public static let protoMessageName: String = _protobuf_package + ".WasmReturnCallDirect"
13491-
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}parameterTypes\0\u{1}outputTypes\0")
13489+
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}parameterCount\0")
1349213490

1349313491
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
1349413492
while let fieldNumber = try decoder.nextFieldNumber() {
1349513493
// The use of inline closures is to circumvent an issue where the compiler
1349613494
// allocates stack space for every case branch when no optimizations are
1349713495
// enabled. https://github.com/apple/swift-protobuf/issues/1034
1349813496
switch fieldNumber {
13499-
case 1: try { try decoder.decodeRepeatedMessageField(value: &self.parameterTypes) }()
13500-
case 2: try { try decoder.decodeRepeatedMessageField(value: &self.outputTypes) }()
13497+
case 1: try { try decoder.decodeSingularInt32Field(value: &self.parameterCount) }()
1350113498
default: break
1350213499
}
1350313500
}
1350413501
}
1350513502

1350613503
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
13507-
if !self.parameterTypes.isEmpty {
13508-
try visitor.visitRepeatedMessageField(value: self.parameterTypes, fieldNumber: 1)
13509-
}
13510-
if !self.outputTypes.isEmpty {
13511-
try visitor.visitRepeatedMessageField(value: self.outputTypes, fieldNumber: 2)
13504+
if self.parameterCount != 0 {
13505+
try visitor.visitSingularInt32Field(value: self.parameterCount, fieldNumber: 1)
1351213506
}
1351313507
try unknownFields.traverse(visitor: &visitor)
1351413508
}
1351513509

1351613510
public static func ==(lhs: Fuzzilli_Protobuf_WasmReturnCallDirect, rhs: Fuzzilli_Protobuf_WasmReturnCallDirect) -> Bool {
13517-
if lhs.parameterTypes != rhs.parameterTypes {return false}
13518-
if lhs.outputTypes != rhs.outputTypes {return false}
13511+
if lhs.parameterCount != rhs.parameterCount {return false}
1351913512
if lhs.unknownFields != rhs.unknownFields {return false}
1352013513
return true
1352113514
}

Sources/Fuzzilli/Protobuf/operations.proto

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,8 +1178,7 @@ message WasmCallDirect {
11781178
}
11791179

11801180
message WasmReturnCallDirect {
1181-
repeated WasmILType parameterTypes = 1;
1182-
repeated WasmILType outputTypes = 2;
1181+
int32 parameterCount = 1;
11831182
}
11841183

11851184
message WasmReturnCallIndirect {

0 commit comments

Comments
 (0)