Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(llvm-backend) Clean up various warnings #310

Merged
merged 13 commits into from
Apr 1, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions lib/llvm-backend/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ use wasmer_runtime_core::{
export::Context,
module::{ModuleInfo, ModuleInner},
structures::TypedIndex,
types::{
FuncIndex, FuncSig, LocalFuncIndex, LocalOrImport, MemoryIndex, SigIndex, TableIndex, Type,
Value,
},
types::{FuncIndex, FuncSig, LocalFuncIndex, LocalOrImport, SigIndex, Type, Value},
vm::{self, ImportBacking},
vmcalls,
};
Expand Down Expand Up @@ -57,6 +54,7 @@ enum LLVMResult {
OBJECT_LOAD_FAILURE,
}

#[allow(dead_code)]
#[repr(C)]
enum WasmTrapType {
Unreachable = 0,
Expand Down Expand Up @@ -220,7 +218,7 @@ pub struct LLVMBackend {
}

impl LLVMBackend {
pub fn new(module: Module, intrinsics: Intrinsics) -> (Self, LLVMProtectedCaller) {
pub fn new(module: Module, _intrinsics: Intrinsics) -> (Self, LLVMProtectedCaller) {
Target::initialize_x86(&InitializationConfig {
asm_parser: true,
asm_printer: true,
Expand Down
16 changes: 6 additions & 10 deletions lib/llvm-backend/src/code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ use inkwell::{
context::Context,
module::{Linkage, Module},
passes::PassManager,
types::{BasicType, BasicTypeEnum, FunctionType, IntType, PointerType},
types::{BasicType, BasicTypeEnum, FunctionType, PointerType},
values::{BasicValue, FloatValue, FunctionValue, IntValue, PhiValue, PointerValue},
AddressSpace, FloatPredicate, IntPredicate,
};
use smallvec::SmallVec;
use wasmer_runtime_core::{
memory::MemoryType,
module::{ExportIndex, ModuleInfo},
module::ModuleInfo,
structures::{Map, SliceMap, TypedIndex},
types::{
FuncIndex, FuncSig, GlobalIndex, LocalFuncIndex, LocalOrImport, MemoryIndex, SigIndex,
Expand Down Expand Up @@ -102,7 +102,6 @@ pub fn parse_function_bodies(

parse_function(
&context,
&module,
&builder,
&intrinsics,
info,
Expand Down Expand Up @@ -143,7 +142,6 @@ pub fn parse_function_bodies(

fn parse_function(
context: &Context,
module: &Module,
builder: &Builder,
intrinsics: &Intrinsics,
info: &ModuleInfo,
Expand All @@ -155,7 +153,6 @@ fn parse_function(
) -> Result<(), BinaryReaderError> {
let sig_index = info.func_assoc[func_index.convert_up(info)];
let func_sig = &info.signatures[sig_index];
let llvm_sig = &signatures[sig_index];

let function = functions[func_index];
let mut state = State::new();
Expand Down Expand Up @@ -193,7 +190,7 @@ fn parse_function(
let param_len = locals.len();

let mut local_idx = 0;
for (index, local) in locals_reader.into_iter().enumerate() {
for local in locals_reader.into_iter() {
let (count, ty) = local?;
let wasmer_ty = type_to_type(ty)?;
let ty = type_to_llvm(intrinsics, wasmer_ty);
Expand Down Expand Up @@ -490,7 +487,6 @@ fn parse_function(
if let ControlFrame::IfElse {
if_else,
next,
phis,
if_else_state,
..
} = &frame
Expand Down Expand Up @@ -866,7 +862,7 @@ fn parse_function(
let value = call_site.try_as_basic_value().left().unwrap();
state.push1(value);
}
returns @ _ => unimplemented!("multi-value returns"),
_ => unimplemented!("multi-value returns"),
}
}

Expand Down Expand Up @@ -2158,7 +2154,7 @@ fn parse_function(
[one_value] => {
builder.build_return(Some(one_value));
}
returns @ _ => {
_ => {
// let struct_ty = llvm_sig.get_return_type().as_struct_type();
// let ret_struct = struct_ty.const_zero();
unimplemented!("multi-value returns not yet implemented")
Expand Down Expand Up @@ -2211,7 +2207,7 @@ fn trap_if_not_representatable_as_int(
),
};

let masked = builder.build_and(
builder.build_and(
float_bits,
int_ty.const_int(exponent_mask, false),
"masked_bits",
Expand Down
60 changes: 5 additions & 55 deletions lib/llvm-backend/src/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ use inkwell::{
context::Context,
module::Module,
types::{BasicType, FloatType, FunctionType, IntType, PointerType, StructType, VoidType},
values::{
BasicValue, BasicValueEnum, FloatValue, FunctionValue, InstructionValue, IntValue,
PointerValue,
},
values::{BasicValue, BasicValueEnum, FloatValue, FunctionValue, IntValue, PointerValue},
AddressSpace,
};
use std::marker::PhantomData;
Expand Down Expand Up @@ -117,7 +114,6 @@ pub struct Intrinsics {

pub throw_trap: FunctionValue,

ctx_ty: StructType,
pub ctx_ptr_ty: PointerType,
}

Expand Down Expand Up @@ -370,7 +366,6 @@ impl Intrinsics {
void_ty.fn_type(&[i32_ty_basic], false),
None,
),
ctx_ty,
ctx_ptr_ty,
}
}
Expand All @@ -383,9 +378,6 @@ impl Intrinsics {
cache_builder: Builder,
) -> CtxType<'a> {
CtxType {
ctx_ty: self.ctx_ty,
ctx_ptr_ty: self.ctx_ptr_ty,

ctx_ptr_value: func_value.get_nth_param(0).unwrap().into_pointer_value(),

builder,
Expand Down Expand Up @@ -435,9 +427,6 @@ struct ImportedFuncCache {
}

pub struct CtxType<'a> {
ctx_ty: StructType,
ctx_ptr_ty: PointerType,

ctx_ptr_value: PointerValue,

builder: &'a Builder,
Expand All @@ -460,9 +449,8 @@ impl<'a> CtxType<'a> {
}

pub fn memory(&mut self, index: MemoryIndex) -> MemoryCache {
let (cached_memories, builder, info, ctx_ptr_value, intrinsics, cache_builder) = (
let (cached_memories, info, ctx_ptr_value, intrinsics, cache_builder) = (
&mut self.cached_memories,
self.builder,
self.info,
self.ctx_ptr_value,
self.intrinsics,
Expand Down Expand Up @@ -618,10 +606,8 @@ impl<'a> CtxType<'a> {
}

pub fn dynamic_sigindex(&mut self, index: SigIndex) -> IntValue {
let (cached_sigindices, builder, info, ctx_ptr_value, intrinsics, cache_builder) = (
let (cached_sigindices, ctx_ptr_value, intrinsics, cache_builder) = (
&mut self.cached_sigindices,
self.builder,
self.info,
self.ctx_ptr_value,
self.intrinsics,
&self.cache_builder,
Expand Down Expand Up @@ -651,9 +637,8 @@ impl<'a> CtxType<'a> {
}

pub fn global_cache(&mut self, index: GlobalIndex) -> GlobalCache {
let (cached_globals, builder, ctx_ptr_value, info, intrinsics, cache_builder) = (
let (cached_globals, ctx_ptr_value, info, intrinsics, cache_builder) = (
&mut self.cached_globals,
self.builder,
self.ctx_ptr_value,
self.info,
self.intrinsics,
Expand Down Expand Up @@ -728,9 +713,8 @@ impl<'a> CtxType<'a> {
}

pub fn imported_func(&mut self, index: ImportedFuncIndex) -> (PointerValue, PointerValue) {
let (cached_imported_functions, builder, ctx_ptr_value, intrinsics, cache_builder) = (
let (cached_imported_functions, ctx_ptr_value, intrinsics, cache_builder) = (
&mut self.cached_imported_functions,
self.builder,
self.ctx_ptr_value,
self.intrinsics,
&self.cache_builder,
Expand Down Expand Up @@ -770,38 +754,4 @@ impl<'a> CtxType<'a> {

(imported_func_cache.func_ptr, imported_func_cache.ctx_ptr)
}

pub fn build_trap(&self) {
self.builder.build_call(self.intrinsics.trap, &[], "trap");
}
}

// pub struct Ctx {
// /// A pointer to an array of locally-defined memories, indexed by `MemoryIndex`.
// pub(crate) memories: *mut *mut LocalMemory,

// /// A pointer to an array of locally-defined tables, indexed by `TableIndex`.
// pub(crate) tables: *mut *mut LocalTable,

// /// A pointer to an array of locally-defined globals, indexed by `GlobalIndex`.
// pub(crate) globals: *mut *mut LocalGlobal,

// /// A pointer to an array of imported memories, indexed by `MemoryIndex,
// pub(crate) imported_memories: *mut *mut LocalMemory,

// /// A pointer to an array of imported tables, indexed by `TableIndex`.
// pub(crate) imported_tables: *mut *mut LocalTable,

// /// A pointer to an array of imported globals, indexed by `GlobalIndex`.
// pub(crate) imported_globals: *mut *mut LocalGlobal,

// /// A pointer to an array of imported functions, indexed by `FuncIndex`.
// pub(crate) imported_funcs: *mut ImportedFunc,

// local_backing: *mut LocalBacking,
// import_backing: *mut ImportBacking,
// module: *const ModuleInner,

// pub data: *mut c_void,
// pub data_finalizer: Option<extern "C" fn(data: *mut c_void)>,
// }
16 changes: 4 additions & 12 deletions lib/llvm-backend/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
#![cfg_attr(nightly, feature(unwind_attributes))]

use inkwell::{
execution_engine::JitFunction,
targets::{CodeModel, FileType, InitializationConfig, RelocMode, Target, TargetMachine},
OptimizationLevel,
};
use wasmer_runtime_core::{
backend::{Compiler, CompilerConfig, Token},
cache::{Artifact, Error as CacheError},
Expand Down Expand Up @@ -47,19 +42,16 @@ impl Compiler for LLVMCompiler {

// Create placeholder values here.
let cache_gen = {
use wasmer_runtime_core::backend::{
sys::Memory, CacheGen, ProtectedCaller, UserTrapper,
};
use wasmer_runtime_core::backend::{sys::Memory, CacheGen};
use wasmer_runtime_core::cache::Error as CacheError;
use wasmer_runtime_core::error::RuntimeResult;
use wasmer_runtime_core::module::ModuleInfo;
use wasmer_runtime_core::types::{FuncIndex, Value};
use wasmer_runtime_core::vm;

struct Placeholder;

impl CacheGen for Placeholder {
fn generate_cache(
&self,
module: &ModuleInner,
_module: &ModuleInner,
) -> Result<(Box<ModuleInfo>, Box<[u8]>, Memory), CacheError> {
unimplemented!()
}
Expand Down
22 changes: 9 additions & 13 deletions lib/llvm-backend/src/platform/unix.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
use libc::{c_void, siginfo_t};
use nix::sys::signal::{
sigaction, SaFlags, SigAction, SigHandler, SigSet, Signal, SIGBUS, SIGFPE, SIGILL, SIGSEGV,
};
use nix::sys::signal::{sigaction, SaFlags, SigAction, SigHandler, SigSet, SIGBUS, SIGSEGV};

/// `__register_frame` and `__deregister_frame` on macos take a single fde as an
/// argument, so we need to parse the fde table here.
Expand Down Expand Up @@ -51,24 +49,22 @@ pub unsafe fn install_signal_handler() {
SaFlags::SA_ONSTACK | SaFlags::SA_SIGINFO,
SigSet::empty(),
);
// sigaction(SIGFPE, &sa).unwrap();
// sigaction(SIGILL, &sa).unwrap();
sigaction(SIGSEGV, &sa).unwrap();
sigaction(SIGBUS, &sa).unwrap();
}

#[cfg_attr(nightly, unwind(allowed))]
extern "C" fn signal_trap_handler(
signum: ::nix::libc::c_int,
siginfo: *mut siginfo_t,
ucontext: *mut c_void,
_signum: ::nix::libc::c_int,
_siginfo: *mut siginfo_t,
_ucontext: *mut c_void,
) {
unsafe {
/// Apparently, we can unwind from arbitary instructions, as long
/// as we don't need to catch the exception inside the function that
/// was interrupted.
///
/// This works on macos, not sure about linux.
// Apparently, we can unwind from arbitary instructions, as long
// as we don't need to catch the exception inside the function that
// was interrupted.
//
// This works on macos, not sure about linux.
throw_trap(2);
}
}
17 changes: 4 additions & 13 deletions lib/llvm-backend/src/trampolines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ use inkwell::{
builder::Builder,
context::Context,
module::{Linkage, Module},
passes::PassManager,
types::{BasicType, BasicTypeEnum, FunctionType, PointerType},
values::{BasicValue, FunctionValue, PhiValue, PointerValue},
AddressSpace, FloatPredicate, IntPredicate,
types::{BasicType, FunctionType},
values::FunctionValue,
AddressSpace,
};
use wasmer_runtime_core::{
module::ModuleInfo,
Expand Down Expand Up @@ -43,20 +42,12 @@ pub fn generate_trampolines(
Some(Linkage::External),
);

generate_trampoline(
trampoline_func,
func_type,
sig,
context,
builder,
intrinsics,
);
generate_trampoline(trampoline_func, sig, context, builder, intrinsics);
}
}

fn generate_trampoline(
trampoline_func: FunctionValue,
sig_type: FunctionType,
func_sig: &FuncSig,
context: &Context,
builder: &Builder,
Expand Down