cranelift-module: Add support for passing a StackMapSink when defining functions

Fixes #2738

This follows the convention set by the existing method of passing a
TrapSink by adding another argument for a StackMapSink.
This commit is contained in:
Will Robson
2021-03-18 16:49:17 +00:00
parent 59dfe4b9f4
commit 38926fb1fc
6 changed files with 26 additions and 24 deletions

View File

@@ -5,7 +5,7 @@ use cranelift_codegen::entity::SecondaryMap;
use cranelift_codegen::isa::TargetIsa;
use cranelift_codegen::{self, ir};
use cranelift_codegen::{
binemit::{Addend, CodeInfo, CodeOffset, NullStackMapSink, Reloc, RelocSink, TrapSink},
binemit::{Addend, CodeInfo, CodeOffset, Reloc, RelocSink, StackMapSink, TrapSink},
CodegenError,
};
use cranelift_module::{
@@ -248,6 +248,7 @@ impl Module for ObjectModule {
func_id: FuncId,
ctx: &mut cranelift_codegen::Context,
trap_sink: &mut dyn TrapSink,
stack_map_sink: &mut dyn StackMapSink,
) -> ModuleResult<ModuleCompiledFunction> {
info!(
"defining function {}: {}",
@@ -260,7 +261,6 @@ impl Module for ObjectModule {
} = ctx.compile(self.isa())?;
let mut code: Vec<u8> = vec![0; code_size as usize];
let mut reloc_sink = ObjectRelocSink::default();
let mut stack_map_sink = NullStackMapSink {};
unsafe {
ctx.emit_to_memory(
@@ -268,7 +268,7 @@ impl Module for ObjectModule {
code.as_mut_ptr(),
&mut reloc_sink,
trap_sink,
&mut stack_map_sink,
stack_map_sink,
)
};

View File

@@ -1,6 +1,9 @@
use cranelift_codegen::ir::*;
use cranelift_codegen::isa::CallConv;
use cranelift_codegen::{binemit::NullTrapSink, settings};
use cranelift_codegen::{
binemit::{NullStackMapSink, NullTrapSink},
settings,
};
use cranelift_codegen::{ir::types::I16, Context};
use cranelift_entity::EntityRef;
use cranelift_frontend::*;
@@ -51,8 +54,9 @@ fn define_simple_function(module: &mut ObjectModule) -> FuncId {
}
let mut trap_sink = NullTrapSink {};
let mut stack_map_sink = NullStackMapSink {};
module
.define_function(func_id, &mut ctx, &mut trap_sink)
.define_function(func_id, &mut ctx, &mut trap_sink, &mut stack_map_sink)
.unwrap();
func_id
@@ -191,8 +195,9 @@ fn libcall_function() {
}
let mut trap_sink = NullTrapSink {};
let mut stack_map_sink = NullStackMapSink {};
module
.define_function(func_id, &mut ctx, &mut trap_sink)
.define_function(func_id, &mut ctx, &mut trap_sink, &mut stack_map_sink)
.unwrap();
module.finish();