cranelift-faerie: upgrade to faerie 0.15.0, fix error reporting
the `FaerieProduct` exposes faerie-specific types, so we can give the `faerie::ArtifactError` on those methods. `ModuleError::Backend` now expects an `anyhow::Error`, so we change a .to_string into .into() and retain better error information.
This commit is contained in:
24
Cargo.lock
generated
24
Cargo.lock
generated
@@ -461,7 +461,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"cranelift-module",
|
"cranelift-module",
|
||||||
"faerie",
|
"faerie 0.15.0",
|
||||||
"goblin",
|
"goblin",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
]
|
]
|
||||||
@@ -499,6 +499,7 @@ dependencies = [
|
|||||||
name = "cranelift-module"
|
name = "cranelift-module"
|
||||||
version = "0.59.0"
|
version = "0.59.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
"cranelift-entity",
|
"cranelift-entity",
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
@@ -857,6 +858,21 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "faerie"
|
||||||
|
version = "0.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dfef65b0e94693295c5d2fe2506f0ee6f43465342d4b5331659936aee8b16084"
|
||||||
|
dependencies = [
|
||||||
|
"goblin",
|
||||||
|
"indexmap",
|
||||||
|
"log",
|
||||||
|
"scroll",
|
||||||
|
"string-interner",
|
||||||
|
"target-lexicon",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "failure"
|
name = "failure"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
@@ -2424,7 +2440,7 @@ name = "wasmtime-cli"
|
|||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"faerie",
|
"faerie 0.14.0",
|
||||||
"file-per-thread-logger",
|
"file-per-thread-logger",
|
||||||
"filecheck",
|
"filecheck",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -2453,7 +2469,7 @@ name = "wasmtime-debug"
|
|||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"faerie",
|
"faerie 0.14.0",
|
||||||
"gimli",
|
"gimli",
|
||||||
"more-asserts",
|
"more-asserts",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
@@ -2553,7 +2569,7 @@ name = "wasmtime-obj"
|
|||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"faerie",
|
"faerie 0.14.0",
|
||||||
"more-asserts",
|
"more-asserts",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cranelift-module = { path = "../module", version = "0.59.0" }
|
cranelift-module = { path = "../module", version = "0.59.0" }
|
||||||
faerie = "0.14.0"
|
faerie = "0.15.0"
|
||||||
goblin = "0.1.0"
|
goblin = "0.1.0"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
target-lexicon = "0.10"
|
target-lexicon = "0.10"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use crate::container;
|
use crate::container;
|
||||||
use crate::traps::{FaerieTrapManifest, FaerieTrapSink};
|
use crate::traps::{FaerieTrapManifest, FaerieTrapSink};
|
||||||
use anyhow::Error;
|
use anyhow::anyhow;
|
||||||
use cranelift_codegen::binemit::{
|
use cranelift_codegen::binemit::{
|
||||||
Addend, CodeOffset, NullStackmapSink, NullTrapSink, Reloc, RelocSink, Stackmap, StackmapSink,
|
Addend, CodeOffset, NullStackmapSink, NullTrapSink, Reloc, RelocSink, Stackmap, StackmapSink,
|
||||||
};
|
};
|
||||||
@@ -57,9 +57,9 @@ impl FaerieBuilder {
|
|||||||
libcall_names: Box<dyn Fn(ir::LibCall) -> String>,
|
libcall_names: Box<dyn Fn(ir::LibCall) -> String>,
|
||||||
) -> ModuleResult<Self> {
|
) -> ModuleResult<Self> {
|
||||||
if !isa.flags().is_pic() {
|
if !isa.flags().is_pic() {
|
||||||
return Err(ModuleError::Backend(
|
return Err(ModuleError::Backend(anyhow!(
|
||||||
"faerie requires TargetIsa be PIC".to_owned(),
|
"faerie requires TargetIsa be PIC"
|
||||||
));
|
)));
|
||||||
}
|
}
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
isa,
|
isa,
|
||||||
@@ -257,7 +257,7 @@ impl Backend for FaerieBackend {
|
|||||||
to,
|
to,
|
||||||
at: u64::from(offset),
|
at: u64::from(offset),
|
||||||
})
|
})
|
||||||
.map_err(|e| ModuleError::Backend(e.to_string()))?;
|
.map_err(|e| ModuleError::Backend(e.into()))?;
|
||||||
}
|
}
|
||||||
for &(offset, id, addend) in data_relocs {
|
for &(offset, id, addend) in data_relocs {
|
||||||
debug_assert_eq!(
|
debug_assert_eq!(
|
||||||
@@ -271,7 +271,7 @@ impl Backend for FaerieBackend {
|
|||||||
to,
|
to,
|
||||||
at: u64::from(offset),
|
at: u64::from(offset),
|
||||||
})
|
})
|
||||||
.map_err(|e| ModuleError::Backend(e.to_string()))?;
|
.map_err(|e| ModuleError::Backend(e.into()))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match *init {
|
match *init {
|
||||||
@@ -369,12 +369,12 @@ impl FaerieProduct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Call `emit` on the faerie `Artifact`, producing bytes in memory.
|
/// Call `emit` on the faerie `Artifact`, producing bytes in memory.
|
||||||
pub fn emit(&self) -> Result<Vec<u8>, Error> {
|
pub fn emit(&self) -> Result<Vec<u8>, faerie::ArtifactError> {
|
||||||
self.artifact.emit()
|
self.artifact.emit()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Call `write` on the faerie `Artifact`, writing to a file.
|
/// Call `write` on the faerie `Artifact`, writing to a file.
|
||||||
pub fn write(&self, sink: File) -> Result<(), Error> {
|
pub fn write(&self, sink: File) -> Result<(), faerie::ArtifactError> {
|
||||||
self.artifact.write(sink)
|
self.artifact.write(sink)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user