Skip to content

Commit 226938a

Browse files
LiedtkeV8-internal LUCI CQ
authored andcommitted
[wasm] Remove parameter and return types from WasmCallDirect
Bug: 445356784 Change-Id: Idbe0b038ecd47b371639219edababaf7e33d1054 Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/8929536 Reviewed-by: Doga Yüksel <dyuksel@google.com> Commit-Queue: Matthias Liedtke <mliedtke@google.com>
1 parent d9c265b commit 226938a

7 files changed

Lines changed: 28 additions & 29 deletions

File tree

Sources/Fuzzilli/Base/ProgramBuilder.swift

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

37673767
@discardableResult
37683768
public func wasmCallDirect(signature: WasmSignature, function: Variable, functionArgs: [Variable]) -> [Variable] {
3769-
return Array(b.emit(WasmCallDirect(signature: signature),
3769+
return Array(b.emit(WasmCallDirect(parameterCount: signature.parameterTypes.count, outputCount: signature.outputTypes.count),
37703770
withInputs: [function] + functionArgs,
37713771
types: [.wasmFunctionDef(signature)] + signature.parameterTypes
37723772
).outputs)

Sources/Fuzzilli/FuzzIL/Instruction.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,8 +1313,8 @@ extension Instruction: ProtobufConvertible {
13131313
}
13141314
case .wasmCallDirect(let op):
13151315
$0.wasmCallDirect = Fuzzilli_Protobuf_WasmCallDirect.with {
1316-
$0.parameterTypes = op.signature.parameterTypes.map(ILTypeToWasmTypeEnum)
1317-
$0.outputTypes = op.signature.outputTypes.map(ILTypeToWasmTypeEnum)
1316+
$0.parameterCount = Int32(op.parameterCount)
1317+
$0.outputCount = Int32(op.numOutputs)
13181318
}
13191319
case .wasmReturnCallDirect(let op):
13201320
$0.wasmReturnCallDirect = Fuzzilli_Protobuf_WasmReturnCallDirect.with {
@@ -2408,9 +2408,7 @@ extension Instruction: ProtobufConvertible {
24082408
let outputs = p.outputTypes.map(WasmTypeEnumToILType)
24092409
op = WasmCallIndirect(signature: parameters => outputs)
24102410
case .wasmCallDirect(let p):
2411-
let parameters = p.parameterTypes.map(WasmTypeEnumToILType)
2412-
let outputs = p.outputTypes.map(WasmTypeEnumToILType)
2413-
op = WasmCallDirect(signature: parameters => outputs)
2411+
op = WasmCallDirect(parameterCount: Int(p.parameterCount), outputCount: Int(p.outputCount))
24142412
case .wasmReturnCallDirect(let p):
24152413
let parameters = p.parameterTypes.map(WasmTypeEnumToILType)
24162414
let outputs = p.outputTypes.map(WasmTypeEnumToILType)

Sources/Fuzzilli/FuzzIL/JSTyper.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -878,8 +878,9 @@ public struct JSTyper: Analyzer {
878878
wasmTypeBeginBlock(instr, op.signature)
879879
case .wasmEndTryDelegate(let op):
880880
wasmTypeEndBlock(instr, op.outputTypes)
881-
case .wasmCallDirect(let op):
882-
for (output, outputType) in zip(instr.outputs, op.signature.outputTypes) {
881+
case .wasmCallDirect(_):
882+
let signature = type(of: instr.input(0)).wasmFunctionDefSignature!
883+
for (output, outputType) in zip(instr.outputs, signature.outputTypes) {
883884
setType(of: output, to: outputType)
884885
}
885886
// We don't need to update the DynamicObjectGroupManager, as all functions that can be called here are .wasmFunctionDef types, this means we have already added them when we saw the EndWasmFunction instruction.

Sources/Fuzzilli/FuzzIL/WasmOperations.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -963,12 +963,12 @@ final class WasmCallIndirect: WasmOperation {
963963

964964
final class WasmCallDirect: WasmOperation {
965965
override var opcode: Opcode { .wasmCallDirect(self) }
966-
let signature: WasmSignature
967966

968-
init(signature: WasmSignature) {
969-
self.signature = signature
970-
super.init(numInputs: 1 + signature.parameterTypes.count, numOutputs: signature.outputTypes.count, requiredContext: [.wasmFunction])
967+
init(parameterCount: Int, outputCount: Int) {
968+
super.init(numInputs: 1 + parameterCount, numOutputs: outputCount, requiredContext: [.wasmFunction])
971969
}
970+
971+
var parameterCount: Int {numInputs - 1}
972972
}
973973

974974
final class WasmReturnCallDirect: WasmOperation {

Sources/Fuzzilli/Lifting/FuzzILLifter.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,13 +1064,13 @@ public class FuzzILLifter: Lifter {
10641064
w.emit("\(outputs) <- WasmCallIndirect(\(op.signature)) \(inputs)")
10651065
}
10661066

1067-
case .wasmCallDirect(let op):
1067+
case .wasmCallDirect(_):
10681068
let inputs = instr.inputs.map(lift).joined(separator: ", ")
1069-
if op.signature.outputTypes.isEmpty {
1070-
w.emit("WasmCallDirect(\(op.signature)) \(inputs)")
1069+
if instr.outputs.isEmpty {
1070+
w.emit("WasmCallDirect \(inputs)")
10711071
} else {
10721072
let outputs = instr.outputs.map(lift).joined(separator: ", ")
1073-
w.emit("\(outputs) <- WasmCallDirect(\(op.signature)) \(inputs)")
1073+
w.emit("\(outputs) <- WasmCallDirect \(inputs)")
10741074
}
10751075

10761076
case .wasmReturnCallDirect(let op):

Sources/Fuzzilli/Protobuf/operations.pb.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5045,9 +5045,9 @@ public struct Fuzzilli_Protobuf_WasmCallDirect: Sendable {
50455045
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
50465046
// methods supported on all messages.
50475047

5048-
public var parameterTypes: [Fuzzilli_Protobuf_WasmILType] = []
5048+
public var parameterCount: Int32 = 0
50495049

5050-
public var outputTypes: [Fuzzilli_Protobuf_WasmILType] = []
5050+
public var outputCount: Int32 = 0
50515051

50525052
public var unknownFields = SwiftProtobuf.UnknownStorage()
50535053

@@ -13405,34 +13405,34 @@ extension Fuzzilli_Protobuf_WasmCallIndirect: SwiftProtobuf.Message, SwiftProtob
1340513405

1340613406
extension Fuzzilli_Protobuf_WasmCallDirect: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
1340713407
public static let protoMessageName: String = _protobuf_package + ".WasmCallDirect"
13408-
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}parameterTypes\0\u{1}outputTypes\0")
13408+
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}parameterCount\0\u{1}outputCount\0")
1340913409

1341013410
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
1341113411
while let fieldNumber = try decoder.nextFieldNumber() {
1341213412
// The use of inline closures is to circumvent an issue where the compiler
1341313413
// allocates stack space for every case branch when no optimizations are
1341413414
// enabled. https://github.com/apple/swift-protobuf/issues/1034
1341513415
switch fieldNumber {
13416-
case 1: try { try decoder.decodeRepeatedMessageField(value: &self.parameterTypes) }()
13417-
case 2: try { try decoder.decodeRepeatedMessageField(value: &self.outputTypes) }()
13416+
case 1: try { try decoder.decodeSingularInt32Field(value: &self.parameterCount) }()
13417+
case 2: try { try decoder.decodeSingularInt32Field(value: &self.outputCount) }()
1341813418
default: break
1341913419
}
1342013420
}
1342113421
}
1342213422

1342313423
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
13424-
if !self.parameterTypes.isEmpty {
13425-
try visitor.visitRepeatedMessageField(value: self.parameterTypes, fieldNumber: 1)
13424+
if self.parameterCount != 0 {
13425+
try visitor.visitSingularInt32Field(value: self.parameterCount, fieldNumber: 1)
1342613426
}
13427-
if !self.outputTypes.isEmpty {
13428-
try visitor.visitRepeatedMessageField(value: self.outputTypes, fieldNumber: 2)
13427+
if self.outputCount != 0 {
13428+
try visitor.visitSingularInt32Field(value: self.outputCount, fieldNumber: 2)
1342913429
}
1343013430
try unknownFields.traverse(visitor: &visitor)
1343113431
}
1343213432

1343313433
public static func ==(lhs: Fuzzilli_Protobuf_WasmCallDirect, rhs: Fuzzilli_Protobuf_WasmCallDirect) -> Bool {
13434-
if lhs.parameterTypes != rhs.parameterTypes {return false}
13435-
if lhs.outputTypes != rhs.outputTypes {return false}
13434+
if lhs.parameterCount != rhs.parameterCount {return false}
13435+
if lhs.outputCount != rhs.outputCount {return false}
1343613436
if lhs.unknownFields != rhs.unknownFields {return false}
1343713437
return true
1343813438
}

Sources/Fuzzilli/Protobuf/operations.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,8 +1173,8 @@ message WasmCallIndirect {
11731173
}
11741174

11751175
message WasmCallDirect {
1176-
repeated WasmILType parameterTypes = 1;
1177-
repeated WasmILType outputTypes = 2;
1176+
int32 parameterCount = 1;
1177+
int32 outputCount = 2;
11781178
}
11791179

11801180
message WasmReturnCallDirect {

0 commit comments

Comments
 (0)