diff --git a/Cargo.lock b/Cargo.lock index e386c31..2aba87b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,7 +11,7 @@ dependencies = [ "cpp_demangle", "fallible-iterator", "gimli", - "object 0.27.1", + "object", "rustc-demangle", "smallvec", ] @@ -90,16 +90,28 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitvec" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5237f00a8c86130a0cc317830e558b966dd7850d48a953d998c813f01a41b527" +dependencies = [ + "funty 1.2.0", + "radium 0.6.2", + "tap", + "wyz 0.4.0", +] + [[package]] name = "bitvec" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1489fcb93a5bb47da0462ca93ad252ad6af2145cce58d10d46a83931ba9f016b" dependencies = [ - "funty", - "radium", + "funty 2.0.0", + "radium 0.7.0", "tap", - "wyz", + "wyz 0.5.0", ] [[package]] @@ -237,6 +249,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "funty" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1847abb9cb65d566acd5942e94aea9c8f547ad02c98e1649326fc0e8910b8b1e" + [[package]] name = "funty" version = "2.0.0" @@ -321,9 +339,9 @@ checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "jaylink" -version = "0.3.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d891935e08397d85684c1d3c88b6a0a6941c6e15e9f04a1ae9e30079f0b0df0" +checksum = "3f58b72b6aa9d25083b8c19d292fe015a936185fa200d15e225e1524a18222e9" dependencies = [ "bitflags", "byteorder", @@ -364,9 +382,9 @@ checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libusb1-sys" -version = "0.6.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dfab089105aa85a3b492b421bd90d55e6257f00f8447cc3873c44f8206809ce" +checksum = "e22e89d08bbe6816c6c5d446203b859eba35b8fa94bf1b7edb2f6d25d43f023f" dependencies = [ "cc", "libc", @@ -453,15 +471,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "object" -version = "0.28.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.12.0" @@ -533,13 +542,14 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "probe-rs" version = "0.12.0" -source = "git+https://github.com/probe-rs/probe-rs?rev=2fa97dc#2fa97dc5554cf14f306109a74dc11ceaccd4daf8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "232e7f2912aba17bef48f84f9d90bfc9e6c1d8c90959fcf1451ccb3a68819ee7" dependencies = [ "anyhow", "base64", "bincode", "bitfield", - "bitvec", + "bitvec 0.22.3", "enum-primitive-derive", "gimli", "hidapi", @@ -548,7 +558,7 @@ dependencies = [ "jep106", "log", "num-traits", - "object 0.28.4", + "object", "once_cell", "probe-rs-target", "rusb", @@ -564,7 +574,8 @@ dependencies = [ [[package]] name = "probe-rs-target" version = "0.12.0" -source = "git+https://github.com/probe-rs/probe-rs?rev=2fa97dc#2fa97dc5554cf14f306109a74dc11ceaccd4daf8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9610234697e695947df2f7b0cd71d4e4e2fe2fea13df90bdc44bb65e0ef16f" dependencies = [ "base64", "jep106", @@ -619,6 +630,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + [[package]] name = "radium" version = "0.7.0" @@ -675,9 +692,9 @@ dependencies = [ [[package]] name = "rusb" -version = "0.9.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703aa035c21c589b34fb5136b12e68fc8dcf7ea46486861381361dd8ebf5cee0" +checksum = "d9a5084628cc5be77b1c750b3e5ee0cc519d2f2491b3f06b78b3aac3328b00ad" dependencies = [ "libc", "libusb1-sys", @@ -706,9 +723,9 @@ checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "scroll" -version = "0.11.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" [[package]] name = "semver" @@ -825,7 +842,7 @@ name = "stackdump-core" version = "0.1.3" dependencies = [ "arrayvec", - "funty", + "funty 2.0.0", "gimli", "serde", ] @@ -835,9 +852,9 @@ name = "stackdump-trace" version = "0.1.3" dependencies = [ "addr2line", - "bitvec", + "bitvec 1.0.0", "colored", - "funty", + "funty 2.0.0", "gimli", "log", "phf", @@ -1060,6 +1077,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "wyz" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "129e027ad65ce1453680623c3fb5163cbf7107bfe1aa32257e7d0e63f9ced188" +dependencies = [ + "tap", +] + [[package]] name = "wyz" version = "0.5.0" diff --git a/capture-probe/Cargo.toml b/capture-probe/Cargo.toml index a18a2f4..1d9f76f 100644 --- a/capture-probe/Cargo.toml +++ b/capture-probe/Cargo.toml @@ -13,6 +13,7 @@ description = "Crate for capturing stack dumps of embedded devices with a debugg # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -probe-rs = { git = "https://github.com/probe-rs/probe-rs", rev = "2fa97dc" } +# probe-rs = { git = "https://github.com/probe-rs/probe-rs", rev = "2fa97dc" } +probe-rs = "0.12" stackdump-core = { version = "0.1.3", path = "../core", default-features = false } diff --git a/capture-probe/src/lib.rs b/capture-probe/src/lib.rs index 4f0ce36..1a8a934 100644 --- a/capture-probe/src/lib.rs +++ b/capture-probe/src/lib.rs @@ -15,7 +15,7 @@ impl<'a, 'probe> StackdumpCapturer<'a, 'probe> { let mut register_data = Vec::new(); let registers = self.0.get_mut().registers(); - for register in registers.platform_registers() { + for register in registers.registers() { register_data.push(self.0.get_mut().read_core_reg(register)?) } @@ -27,29 +27,30 @@ impl<'a, 'probe> StackdumpCapturer<'a, 'probe> { Ok(VecRegisterData::new(starting_register, register_data)) } - pub fn capture_fpu_registers( - &mut self, - ) -> Result>, probe_rs::Error> { - let registers = self.0.get_mut().registers(); + // Available on probe-rs master: + // pub fn capture_fpu_registers( + // &mut self, + // ) -> Result>, probe_rs::Error> { + // let registers = self.0.get_mut().registers(); - match registers.fpu_registers() { - Some(fpu_registers) => { - let mut register_data = Vec::new(); + // match registers.fpu_registers() { + // Some(fpu_registers) => { + // let mut register_data = Vec::new(); - for register in fpu_registers { - register_data.push(self.0.get_mut().read_core_reg(register)?) - } + // for register in fpu_registers { + // register_data.push(self.0.get_mut().read_core_reg(register)?) + // } - let starting_register = match self.0.get_mut().architecture() { - probe_rs::Architecture::Arm => stackdump_core::gimli::Arm::S0, - probe_rs::Architecture::Riscv => stackdump_core::gimli::RiscV::F0, - }; + // let starting_register = match self.0.get_mut().architecture() { + // probe_rs::Architecture::Arm => stackdump_core::gimli::Arm::S0, + // probe_rs::Architecture::Riscv => stackdump_core::gimli::RiscV::F0, + // }; - Ok(Some(VecRegisterData::new(starting_register, register_data))) - } - None => Ok(None), - } - } + // Ok(Some(VecRegisterData::new(starting_register, register_data))) + // } + // None => Ok(None), + // } + // } } impl<'a, 'probe> MemoryRegion for StackdumpCapturer<'a, 'probe> { @@ -60,7 +61,11 @@ impl<'a, 'probe> MemoryRegion for StackdumpCapturer<'a, 'probe> { let mut buffer = vec![0; address_range.clone().count()]; // Truncating to u32 is alright because probe-rs only supports 32-bit devices - match self.0.borrow_mut().read(address_range.start, &mut buffer) { + match self + .0 + .borrow_mut() + .read(address_range.start as _, &mut buffer) + { Ok(_) => Ok(Some(buffer)), Err(e) => Err(MemoryReadError(Rc::new(e))), } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 25502ea..c9681bd 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -21,4 +21,4 @@ simple_logger = "2.1.0" log = "0.4.14" termsize = "0.1" colored = "2" -probe-rs = { git = "https://github.com/probe-rs/probe-rs", rev = "2fa97dc" } +probe-rs = "0.12" diff --git a/cli/src/probe.rs b/cli/src/probe.rs index 62aef5a..7c378e0 100644 --- a/cli/src/probe.rs +++ b/cli/src/probe.rs @@ -1,5 +1,5 @@ use crate::Arguments; -use probe_rs::{config::TargetSelector, DebugProbeSelector, Permissions, Probe, Session}; +use probe_rs::{config::TargetSelector, Architecture, DebugProbeSelector, Probe, Session}; use stackdump_capture_probe::StackdumpCapturer; use stackdump_trace::{ platform::cortex_m::CortexMPlatform, stackdump_core::device_memory::DeviceMemory, @@ -16,13 +16,15 @@ pub(crate) fn trace_probe( let elf_data = std::fs::read(elf_file)?; let mut session = match probe_selector { - Some(selector) => Probe::open(selector)?.attach(target_selector, Permissions::default())?, - None => Session::auto_attach(target_selector, Permissions::default())?, + Some(selector) => Probe::open(selector)?.attach(target_selector)?, + None => Session::auto_attach(target_selector)?, }; let mut core = session.core(core.unwrap_or(0))?; - let core_type = core.core_type(); - let fpu_supported = core.fpu_support()?; + // TODO on master: Change this to use the core_type + let core_type = core.architecture(); + // TODO on master + // let fpu_supported = core.fpu_support()?; core.halt(Duration::from_secs(2))?; let mut stackcapturer = StackdumpCapturer::new(&mut core); @@ -30,15 +32,16 @@ pub(crate) fn trace_probe( let mut device_memory = DeviceMemory::new(); device_memory.add_register_data(stackcapturer.capture_core_registers()?); - if fpu_supported { - if let Some(fpu_registers) = stackcapturer.capture_fpu_registers()? { - device_memory.add_register_data(fpu_registers); - } - } + // TODO on master + // if fpu_supported { + // if let Some(fpu_registers) = stackcapturer.capture_fpu_registers()? { + // device_memory.add_register_data(fpu_registers); + // } + // } device_memory.add_memory_region(stackcapturer); - if core_type.is_cortex_m() { + if matches!(core_type, Architecture::Arm) { let frames = stackdump_trace::platform::trace::(device_memory, &elf_data)?; crate::print_frames(frames, args); } else {