From f2d838c3ea90fb74861aec482f0d57ed20e8f8d9 Mon Sep 17 00:00:00 2001 From: Dion Dokter Date: Mon, 21 Aug 2023 15:55:38 +0200 Subject: [PATCH] Added volatile and const and did bug fixing --- CHANGELOG.md | 8 + Cargo.lock | 1243 +++++++++++++---- Cargo.toml | 1 + capture-probe/Cargo.toml | 6 +- capture-probe/src/lib.rs | 2 +- capture/Cargo.toml | 4 +- cli/Cargo.toml | 8 +- cli/src/logging.rs | 2 +- core/Cargo.toml | 4 +- trace/Cargo.toml | 12 +- trace/src/type_value_tree/rendering.rs | 18 +- trace/src/type_value_tree/variable_type.rs | 4 + trace/src/variables/mod.rs | 194 ++- .../type_value_tree_building/const_type.rs | 42 + .../type_value_tree_building/enumeration.rs | 2 +- .../variables/type_value_tree_building/mod.rs | 6 + .../type_value_tree_building/pointer.rs | 19 +- .../type_value_tree_building/tagged_union.rs | 2 +- .../type_value_tree_building/volatile_type.rs | 38 + 19 files changed, 1230 insertions(+), 385 deletions(-) create mode 100644 trace/src/variables/type_value_tree_building/const_type.rs create mode 100644 trace/src/variables/type_value_tree_building/volatile_type.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bae8da..3da0bdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +## Cli 0.1.8, Capture 0.5.0, Core 0.4.0, Trace 0.4.0, Capture-probe 0.4.0 (21-08-23) + +- Updated gimli to 0.28 +- Updated Addr2line to 0.21 +- Updated to probe-rs 0.20 +- Fixed bug where the abstract origin didn't get handled +- Volatile and const types can now be traced (relevant for C) + ## Cli 0.1.7 (19-05-23) - Update to trace 0.3.0 diff --git a/Cargo.lock b/Cargo.lock index c2d8124..3614116 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,17 +2,47 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "CoreFoundation-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0e9889e6db118d49d88d84728d0e964d973a5680befb5f85f55141beea5c20b" +dependencies = [ + "libc", + "mach", +] + +[[package]] +name = "IOKit-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99696c398cbaf669d2368076bdb3d627fb0ce51a26899d7c61228c5c0af3bf4a" +dependencies = [ + "CoreFoundation-sys", + "libc", + "mach", +] + [[package]] name = "addr2line" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +dependencies = [ + "gimli 0.27.3", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "cpp_demangle", - "fallible-iterator", - "gimli", + "fallible-iterator 0.3.0", + "gimli 0.28.0", "memmap2", - "object 0.31.1", + "object 0.32.0", "rustc-demangle", "smallvec", ] @@ -23,90 +53,86 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" dependencies = [ "memchr", ] [[package]] name = "anstream" -version = "0.2.6" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", + "anstyle-query", "anstyle-wincon", - "concolor-override", - "concolor-query", + "colorchoice", "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "0.3.5" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" [[package]] name = "anstyle-parse" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" dependencies = [ "utf8parse", ] +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "anstyle-wincon" -version = "0.2.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c" dependencies = [ "anstyle", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" dependencies = [ "serde", ] [[package]] -name = "atty" -version = "0.2.14" +name = "atomic-polyfill" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", + "critical-section", ] [[package]] @@ -115,11 +141,35 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +dependencies = [ + "addr2line 0.20.0", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.31.1", + "rustc-demangle", +] + +[[package]] +name = "backtrace-ext" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" +dependencies = [ + "backtrace", +] + [[package]] name = "base64" -version = "0.21.0" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" [[package]] name = "bincode" @@ -130,6 +180,28 @@ dependencies = [ "serde", ] +[[package]] +name = "binread" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16598dfc8e6578e9b597d9910ba2e73618385dc9f4b1d43dd92c349d6be6418f" +dependencies = [ + "binread_derive", + "rustversion", +] + +[[package]] +name = "binread_derive" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9672209df1714ee804b1f4d4f68c8eb2a90b1f7a07acf472f88ce198ef1fed" +dependencies = [ + "either", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bitfield" version = "0.14.0" @@ -142,6 +214,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bitvec" version = "1.0.1" @@ -154,6 +232,35 @@ dependencies = [ "wyz", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.29", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -162,9 +269,12 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -174,9 +284,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.2.1" +version = "4.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +checksum = "03aef18ddf7d879c15ce20f04826ef8418101c7e528014c3eeea13321047dca3" dependencies = [ "clap_builder", "clap_derive", @@ -185,68 +295,67 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.1" +version = "4.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +checksum = "f8ce6fffb678c9b80a70b6b6de0aad31df727623a70fd9a842c30cd573e2fa98" dependencies = [ "anstream", "anstyle", - "bitflags", "clap_lex", "strsim", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.29", ] [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "colored" -version = "2.0.0" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" dependencies = [ - "atty", + "is-terminal", "lazy_static", - "winapi", + "windows-sys 0.48.0", ] [[package]] -name = "concolor-override" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" +name = "cpp_demangle" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119" dependencies = [ - "windows-sys 0.45.0", + "cfg-if", ] [[package]] -name = "cpp_demangle" -version = "0.4.0" +name = "cpufeatures" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b446fd40bcc17eddd6a4a78f24315eb90afdb3334999ddfd4909985c47722442" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ - "cfg-if", + "libc", ] [[package]] @@ -258,6 +367,123 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "deku" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819b87cc7a05b3abe3fc38e59b3980a5fd3162f25a247116441a9171d3e84481" +dependencies = [ + "bitvec", + "deku_derive", +] + +[[package]] +name = "deku_derive" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2ca12572239215a352a74ad7c776d7e8a914f8a23511c6cbedddd887e5009e" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + [[package]] name = "enum-primitive-derive" version = "0.2.2" @@ -282,15 +508,21 @@ dependencies = [ "termcolor", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -303,22 +535,75 @@ dependencies = [ "libc", ] +[[package]] +name = "esp-idf-part" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28192549b6c3d0bfd3be8ff694802b8d92ff7e1b12a6fd0285ca96c66e97bed3" +dependencies = [ + "csv", + "deku", + "heapless", + "md5", + "parse_int", + "regex", + "serde", + "serde_plain", + "strum 0.24.1", + "thiserror", +] + +[[package]] +name = "espflash" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ffcda1657e04a141ba03c2314164fa9eb638dc879cb9cf6cb8d33b03553cc70" +dependencies = [ + "base64", + "binread", + "bytemuck", + "esp-idf-part", + "flate2", + "log", + "miette", + "serde", + "serialport", + "sha2", + "slip-codec", + "strum 0.25.0", + "thiserror", + "toml", + "xmas-elf", +] + [[package]] name = "fallible-iterator" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "funty" version = "2.0.0" @@ -326,62 +611,82 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] -name = "getrandom" -version = "0.2.9" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "cfg-if", - "libc", - "wasi", + "typenum", + "version_check", ] [[package]] name = "gimli" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "fallible-iterator", + "fallible-iterator 0.2.0", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +dependencies = [ + "fallible-iterator 0.3.0", "indexmap", "stable_deref_trait", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "hash32" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" dependencies = [ - "ahash", + "byteorder", ] [[package]] -name = "heck" -version = "0.4.1" +name = "hashbrown" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "heapless" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" dependencies = [ - "libc", + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "hidapi" -version = "2.2.2" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7461dc5aae7f2f360289bae7d169690e51c182d4b5a56adeb8c7f312965f0411" +checksum = "723777263b0dcc5730aec947496bd8c3940ba63c15f5633b288cc615f4f6af79" dependencies = [ "cc", "libc", @@ -395,6 +700,12 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "ihex" version = "3.0.0" @@ -403,21 +714,21 @@ checksum = "365a784774bb381e8c19edb91190a90d7f2625e057b55de2bc0f6b57bc779ff2" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ - "autocfg", + "equivalent", "hashbrown", ] [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi", "libc", "windows-sys 0.48.0", ] @@ -428,17 +739,23 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi", "io-lifetimes", "rustix", "windows-sys 0.48.0", ] +[[package]] +name = "is_ci" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb" + [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jaylink" @@ -446,7 +763,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d891935e08397d85684c1d3c88b6a0a6941c6e15e9f04a1ae9e30079f0b0df0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "byteorder", "log", "rusb", @@ -475,9 +792,29 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libudev" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0" +dependencies = [ + "libc", + "libudev-sys", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] [[package]] name = "libusb1-sys" @@ -493,19 +830,50 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.1" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "lock_api" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "mach" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd13ee2dd61cc82833ba05ade5a30bb3d63f7ced605ef827063c63078302de9" dependencies = [ - "cfg-if", + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", ] +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + [[package]] name = "memchr" version = "2.5.0" @@ -521,20 +889,64 @@ dependencies = [ "libc", ] +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "backtrace", + "backtrace-ext", + "is-terminal", + "miette-derive", + "once_cell", + "owo-colors", + "supports-color", + "supports-hyperlinks", + "supports-unicode", + "terminal_size 0.1.17", + "textwrap 0.15.2", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.29", +] + [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "static_assertions", +] + [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] @@ -549,36 +961,57 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.30.3" +name = "object" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +dependencies = [ + "memchr", +] + +[[package]] +name = "object" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" +dependencies = [ + "flate2", + "memchr", + "ruzstd", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "owo-colors" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] -name = "object" -version = "0.31.1" +name = "parse_int" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "2d695b79916a2c08bcff7be7647ab60d1402885265005a6658ffe6d763553c5a" dependencies = [ - "flate2", - "memchr", - "ruzstd", + "num-traits", ] [[package]] -name = "once_cell" -version = "1.17.1" +name = "paste" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "phf" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", "phf_shared", @@ -586,9 +1019,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", "rand", @@ -596,43 +1029,43 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] name = "phf_shared" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "probe-rs" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df602f325620d61e428db16dedf5c5f0e497eb3fbd272300739846a22d460f" +checksum = "da6dec485ee49527950926fc3634980c7acb88b22dfb3b45b727ecc4d32e4298" dependencies = [ "anyhow", "base64", @@ -640,20 +1073,24 @@ dependencies = [ "bitfield", "bitvec", "enum-primitive-derive", - "gimli", + "esp-idf-part", + "espflash", + "gimli 0.27.3", "hidapi", "ihex", "jaylink", "jep106", "kmp", "num-traits", - "object 0.30.3", + "object 0.31.1", "once_cell", + "paste", "probe-rs-target", "rusb", "scroll", "serde", "serde_yaml", + "signal-hook", "static_assertions", "svg", "thiserror", @@ -662,29 +1099,39 @@ dependencies = [ [[package]] name = "probe-rs-target" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b74d80339128f3a0b54416b1bb9a9ba1fa77d1eaf1e994cdd4fb827adc245cd" +checksum = "d366537c8443497a4634c340a8253903172a528679bd079921f366eb338a4557" dependencies = [ "base64", "jep106", "serde", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -712,9 +1159,21 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "regex" -version = "1.7.3" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" dependencies = [ "aho-corasick", "memchr", @@ -723,9 +1182,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] name = "rusb" @@ -739,17 +1198,26 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] [[package]] name = "rustix" -version = "0.37.8" +version = "0.37.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aef160324be24d31a62147fae491c14d2204a3865c7ca8c3b0d7f7bcb3ea635" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -759,26 +1227,32 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ruzstd" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" dependencies = [ "byteorder", - "thiserror", + "thiserror-core", "twox-hash", ] [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll" @@ -786,31 +1260,55 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" + [[package]] name = "serde" -version = "1.0.159" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.29", +] + +[[package]] +name = "serde_plain" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6018081315db179d0ce57b1fe4b62a12a0028c9cf9bbef868c9cf477b3c34ae" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", ] [[package]] name = "serde_yaml" -version = "0.9.21" +version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d684e3ec7de3bf5466b32bd75303ac16f0736426e5a4e0d6e489559ce1249c" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ "indexmap", "itoa", @@ -819,13 +1317,60 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serialport" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c32634e2bd4311420caa504404a55fad2131292c485c97014cbed89a5899885f" +dependencies = [ + "CoreFoundation-sys", + "IOKit-sys", + "bitflags 2.0.2", + "cfg-if", + "libudev", + "mach2", + "nix", + "regex", + "scopeguard", + "winapi", +] + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + [[package]] name = "simple_logger" -version = "4.1.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78beb34673091ccf96a8816fce8bfd30d1292c7621ca2bcb5f2ba0fae4f558d" +checksum = "2230cd5c29b815c9b699fb610b49a5ed65588f3509d9f0108be3a885da629333" dependencies = [ - "atty", "colored", "log", "time", @@ -838,11 +1383,17 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +[[package]] +name = "slip-codec" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399892aa22101014dcebb84944dc950f6d02695e91ea5f7e11baf02998fc59e2" + [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "smawk" @@ -850,6 +1401,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -858,7 +1418,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stackdump-capture" -version = "0.4.0" +version = "0.5.0" dependencies = [ "arrayvec", "stackdump-core", @@ -866,7 +1426,7 @@ dependencies = [ [[package]] name = "stackdump-capture-probe" -version = "0.3.0" +version = "0.4.0" dependencies = [ "probe-rs", "stackdump-core", @@ -874,7 +1434,7 @@ dependencies = [ [[package]] name = "stackdump-cli" -version = "0.1.7" +version = "0.1.8" dependencies = [ "clap", "colored", @@ -883,34 +1443,34 @@ dependencies = [ "probe-rs", "stackdump-capture-probe", "stackdump-trace", - "textwrap", + "textwrap 0.16.0", ] [[package]] name = "stackdump-core" -version = "0.3.0" +version = "0.4.0" dependencies = [ "arrayvec", "funty", - "gimli", + "gimli 0.28.0", "serde", ] [[package]] name = "stackdump-trace" -version = "0.3.0" +version = "0.4.0" dependencies = [ - "addr2line", + "addr2line 0.21.0", "bitvec", "colored", "funty", - "gimli", + "gimli 0.28.0", "log", "phf", "simple_logger", "stackdump-core", - "strum", - "strum_macros", + "strum 0.25.0", + "strum_macros 0.25.2", "thiserror", "trees", ] @@ -932,6 +1492,18 @@ name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros 0.24.3", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.2", +] [[package]] name = "strum_macros" @@ -946,6 +1518,47 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.29", +] + +[[package]] +name = "supports-color" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4950e7174bffabe99455511c39707310e7e9b440364a2fcb1cc21521be57b354" +dependencies = [ + "is-terminal", + "is_ci", +] + +[[package]] +name = "supports-hyperlinks" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d" +dependencies = [ + "is-terminal", +] + +[[package]] +name = "supports-unicode" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6c2cb240ab5dd21ed4906895ee23fe5a48acdbd15a3ce388e7b62a9b66baf7" +dependencies = [ + "is-terminal", +] + [[package]] name = "svg" version = "0.13.1" @@ -965,9 +1578,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.13" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -989,6 +1602,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "terminal_size" version = "0.2.6" @@ -999,6 +1622,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + [[package]] name = "textwrap" version = "0.16.0" @@ -1006,37 +1640,58 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" dependencies = [ "smawk", - "terminal_size", + "terminal_size 0.2.6", "unicode-linebreak", "unicode-width", ] [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" dependencies = [ "thiserror-impl", ] +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 2.0.29", ] [[package]] name = "time" -version = "0.3.20" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "a79d09ac6b08c1ab3906a2f7cc2e81a0e27c7ae89c63812df75e52bef0751e07" dependencies = [ + "deranged", "itoa", "libc", "num_threads", @@ -1047,19 +1702,53 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "75c65469ed6b3a4809d987a41eb1dc918e9bc1d92211cbad7ae82931846f7451" dependencies = [ "time-core", ] +[[package]] +name = "toml" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" version = "0.1.37" @@ -1075,20 +1764,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", ] @@ -1109,21 +1798,23 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-linebreak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137" -dependencies = [ - "hashbrown", - "regex", -] +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-width" @@ -1133,9 +1824,9 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unsafe-libyaml" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" [[package]] name = "utf8parse" @@ -1155,12 +1846,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - [[package]] name = "winapi" version = "0.3.9" @@ -1207,52 +1892,28 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -1263,9 +1924,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -1275,9 +1936,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -1287,9 +1948,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -1299,9 +1960,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -1311,9 +1972,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -1323,9 +1984,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -1335,9 +1996,18 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97" +dependencies = [ + "memchr", +] [[package]] name = "wyz" @@ -1347,3 +2017,18 @@ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] + +[[package]] +name = "xmas-elf" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f820cc767d65b32eef9d7ce7201448f28501c59edc55d47b71375fea579fc2df" +dependencies = [ + "zero", +] + +[[package]] +name = "zero" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fe21bcc34ca7fe6dd56cc2cb1261ea59d6b93620215aefb5ea6032265527784" diff --git a/Cargo.toml b/Cargo.toml index 043ac89..29fa54e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "capture", diff --git a/capture-probe/Cargo.toml b/capture-probe/Cargo.toml index 02fc6d1..6cc6ebf 100644 --- a/capture-probe/Cargo.toml +++ b/capture-probe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stackdump-capture-probe" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "MIT OR Apache-2.0" homepage = "https://github.com/tweedegolf/stackdump" @@ -13,6 +13,6 @@ 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 = "0.18.0" -stackdump-core = { version = "0.3.0", path = "../core" } +probe-rs = "0.20.0" +stackdump-core = { version = "0.4.0", path = "../core" } diff --git a/capture-probe/src/lib.rs b/capture-probe/src/lib.rs index 7388886..232882a 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.all_registers() { register_data.push(self.0.get_mut().read_core_reg(register)?) } diff --git a/capture/Cargo.toml b/capture/Cargo.toml index 7aca321..4d9cf2a 100644 --- a/capture/Cargo.toml +++ b/capture/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stackdump-capture" -version = "0.4.0" +version = "0.5.0" edition = "2021" rust-version = "1.59" license = "MIT OR Apache-2.0" @@ -12,5 +12,5 @@ categories = ["embedded", "no-std"] description = "Crate for capturing stack dumps" [dependencies] -stackdump-core = { version = "0.3.0", path = "../core", default-features = false } +stackdump-core = { version = "0.4.0", path = "../core", default-features = false } arrayvec = { version = "0.7.2", default-features = false } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 207aab2..80c70a4 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stackdump-cli" -version = "0.1.7" +version = "0.1.8" edition = "2021" rust-version = "1.59" license = "MIT OR Apache-2.0" @@ -15,10 +15,10 @@ description = "Crate for capturing stack dumps" [dependencies] clap = { version = "4.2.1", features = ["derive", "color", "suggestions"] } -stackdump-trace = { version = "0.3.0", path = "../trace" } -stackdump-capture-probe = { version = "0.3.0", path = "../capture-probe" } +stackdump-trace = { version = "0.4.0", path = "../trace" } +stackdump-capture-probe = { version = "0.4.0", path = "../capture-probe" } env_logger = "0.10" log = "0.4.14" textwrap = { version = "0.16.0", features = ["terminal_size"] } colored = "2" -probe-rs = "0.18.0" +probe-rs = "0.20.0" diff --git a/cli/src/logging.rs b/cli/src/logging.rs index cb9ed0f..c0a2ee8 100644 --- a/cli/src/logging.rs +++ b/cli/src/logging.rs @@ -43,7 +43,7 @@ impl fmt::Display for Padded { write!(f, "{: (style: &'a mut Style, level: Level) -> StyledValue<'a, &'static str> { +fn colored_level(style: &mut Style, level: Level) -> StyledValue<'_, &'static str> { match level { Level::Trace => style.set_color(Color::Magenta).value("TRACE"), Level::Debug => style.set_color(Color::Blue).value("DEBUG"), diff --git a/core/Cargo.toml b/core/Cargo.toml index 707865a..ee0f756 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stackdump-core" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "MIT OR Apache-2.0" homepage = "https://github.com/tweedegolf/stackdump" @@ -13,7 +13,7 @@ description = "Crate for stack dump definitions" [dependencies] arrayvec = { version = "0.7.2", default-features = false, features = ["serde"] } serde = { version = "1.0.136", default-features = false, features = ["derive"] } -gimli = { version = "0.27.2", default-features = false } +gimli = { version = "0.28.0", default-features = false } funty = { version = "2.0.0", default-features = false } [features] diff --git a/trace/Cargo.toml b/trace/Cargo.toml index d93a078..362a0b4 100644 --- a/trace/Cargo.toml +++ b/trace/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stackdump-trace" -version = "0.3.0" +version = "0.4.0" edition = "2021" license = "MIT OR Apache-2.0" homepage = "https://github.com/tweedegolf/stackdump" @@ -11,18 +11,18 @@ categories = ["embedded"] description = "Crate for tracing stack dumps" [dependencies] -addr2line = "0.20.0" -gimli = "0.27.2" +addr2line = "0.21.0" +gimli = "0.28.0" bitvec = "1.0.0" -stackdump-core = { version = "0.3.0", path = "../core" } +stackdump-core = { version = "0.4.0", path = "../core" } thiserror = "1.0.30" log = "0.4.14" trees = "0.4.2" colored = "2.0.0" phf = { version = "0.11", features = ["macros"] } funty = { version = "2.0.0", default-features = false } -strum = "0.24" -strum_macros = "0.24" +strum = "0.25.0" +strum_macros = "0.25.2" [dev-dependencies] simple_logger = "4.1.0" diff --git a/trace/src/type_value_tree/rendering.rs b/trace/src/type_value_tree/rendering.rs index edf578f..303d525 100644 --- a/trace/src/type_value_tree/rendering.rs +++ b/trace/src/type_value_tree/rendering.rs @@ -3,7 +3,7 @@ use crate::{ render_colors::{Theme, ThemeColors}, type_value_tree::VariableDataError, }; -use colored::ColoredString; +use colored::{ColoredString, Colorize}; use phf::phf_map; pub fn render_type_value_tree( @@ -23,7 +23,17 @@ fn render_unknown( .into(); }; - match type_value_node.data().variable_type.archetype { + let const_string = match type_value_node.data().variable_type.const_type { + true => "const ", + false => "", + }; + + let volatile_string = match type_value_node.data().variable_type.volatile { + true => "volatile ", + false => "", + }; + + let type_value_string = match type_value_node.data().variable_type.archetype { Archetype::TaggedUnion => render_tagged_union(type_value_node, theme), Archetype::Structure | Archetype::Union @@ -39,7 +49,9 @@ fn render_unknown( } Archetype::Subroutine => "_".into(), Archetype::Unknown => "?".into(), - } + }; + + format!("{const_string}{volatile_string}{type_value_string}").normal() } fn render_tagged_union( diff --git a/trace/src/type_value_tree/variable_type.rs b/trace/src/type_value_tree/variable_type.rs index e076758..f192c71 100644 --- a/trace/src/type_value_tree/variable_type.rs +++ b/trace/src/type_value_tree/variable_type.rs @@ -4,6 +4,10 @@ use gimli::{DebugInfoOffset, DwAte}; pub struct VariableType { pub name: String, pub archetype: Archetype, + /// Is the type a volatile type? (This is a C-ism) + pub volatile: bool, + /// Is the type const? (This is a C-ism) + pub const_type: bool, } #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/trace/src/variables/mod.rs b/trace/src/variables/mod.rs index cc15241..8dfef9c 100644 --- a/trace/src/variables/mod.rs +++ b/trace/src/variables/mod.rs @@ -8,6 +8,7 @@ use crate::{ error::TraceError, + get_entry_type_reference_tree_recursive, gimli_extensions::{AttributeExt, DebuggingInformationEntryExt}, type_value_tree::{ value::{StringFormat, Value}, @@ -41,12 +42,41 @@ fn get_entry_name( unit: &Unit, entry: &DebuggingInformationEntry, ) -> Result { - // Find the attribute - let name_attr = entry.required_attr(&unit.header, gimli::constants::DW_AT_name)?; - // Read as a string type - let attr_string = dwarf.attr_string(unit, name_attr.value())?; - // Convert to String - Ok(attr_string.to_string()?.into()) + if entry.tag() == gimli::constants::DW_TAG_volatile_type + || entry.tag() == gimli::constants::DW_TAG_const_type + { + // These tags don't have a name of their own, + // so we must follow the the DW_AT_type attribute that points to another entry + + let abbreviations = dwarf.abbreviations(&unit.header)?; + + get_entry_type_reference_tree_recursive!( + variable_type_value_tree = (dwarf, unit, &abbreviations, entry) + ); + + get_entry_name(dwarf, unit, variable_type_value_tree?.root()?.entry()) + } else { + // Find the attribute + let name_attr = entry.required_attr(&unit.header, gimli::constants::DW_AT_name); + + match name_attr { + Ok(name_attr) => { + // Read as a string type + let attr_string = dwarf.attr_string(unit, name_attr.value())?; + // Convert to String + Ok(attr_string.to_string()?.into()) + } + Err(_) if entry.tag() == gimli::constants::DW_TAG_array_type => { + // Arrays can be anonymous + return Ok("array".into()); + } + Err(_) if entry.tag() == gimli::constants::DW_TAG_subroutine_type => { + // Subroutines can be anonymous + return Ok("subroutine".into()); + } + Err(e) => Err(e), + } + } } /// If available, get the EntriesTree of the `DW_AT_abstract_origin` attribute of the given entry @@ -55,34 +85,25 @@ fn get_entry_abstract_origin_reference_tree<'abbrev, 'unit>( unit_header: &'unit UnitHeader, abbreviations: &'abbrev Abbreviations, entry: &DebuggingInformationEntry, -) -> Result>, GetEntryTreeError> { +) -> Result, GetEntryTreeError> { // Find the attribute let abstract_origin_attr = entry - .attr(gimli::constants::DW_AT_abstract_origin) - .map_err(|e| GetEntryTreeError::TraceError(e.into()))?; - - let abstract_origin_attr = match abstract_origin_attr { - Some(abstract_origin_attr) => abstract_origin_attr, - None => return Ok(None), - }; + .required_attr(unit_header, gimli::constants::DW_AT_abstract_origin) + .map_err(GetEntryTreeError::TraceError)?; // Check its offset match abstract_origin_attr.value() { AttributeValue::UnitRef(offset) => { // Get the entries for the type - Ok(Some( - unit_header - .entries_tree(abbreviations, Some(offset)) - .map_err(|e| GetEntryTreeError::TraceError(e.into()))?, - )) + Ok(unit_header + .entries_tree(abbreviations, Some(offset)) + .map_err(|e| GetEntryTreeError::TraceError(e.into()))?) } AttributeValue::DebugInfoRef(offset) => { if let Some(offset) = offset.to_unit_offset(unit_header) { - return Ok(Some( - unit_header - .entries_tree(abbreviations, Some(offset)) - .map_err(|e| GetEntryTreeError::TraceError(e.into()))?, - )); + return unit_header + .entries_tree(abbreviations, Some(offset)) + .map_err(|e| GetEntryTreeError::TraceError(e.into())); } // The offset is not in our current compilation unit. Let's see if we can find the correct one @@ -121,7 +142,7 @@ fn get_entry_type_reference_tree<'abbrev, 'unit>( // Find the attribute let type_attr = entry .required_attr(unit_header, gimli::constants::DW_AT_type) - .map_err(|e| GetEntryTreeError::TraceError(e.into()))?; + .map_err(GetEntryTreeError::TraceError)?; // Check its offset match type_attr.value() { @@ -133,9 +154,9 @@ fn get_entry_type_reference_tree<'abbrev, 'unit>( } AttributeValue::DebugInfoRef(offset) => { if let Some(offset) = offset.to_unit_offset(unit_header) { - return Ok(unit_header + return unit_header .entries_tree(abbreviations, Some(offset)) - .map_err(|e| GetEntryTreeError::TraceError(e.into()))?); + .map_err(|e| GetEntryTreeError::TraceError(e.into())); } // The offset is not in our current compilation unit. Let's see if we can find the correct one @@ -183,7 +204,7 @@ macro_rules! get_entry_abstract_origin_reference_tree_recursive { ($tree_name:ident = ($dwarf:expr, $unit:expr, $abbreviations:expr, $entry:expr)) => { let mut __unit_header = $unit.header.clone(); #[allow(unused_mut)] - let mut $tree_name = match crate::variables::get_entry_abstract_origin_reference_tree( + let mut $tree_name = match $crate::variables::get_entry_abstract_origin_reference_tree( $dwarf, &__unit_header, $abbreviations, @@ -209,7 +230,7 @@ macro_rules! get_entry_type_reference_tree_recursive { ($tree_name:ident = ($dwarf:expr, $unit:expr, $abbreviations:expr, $entry:expr)) => { let mut __unit_header = $unit.header.clone(); #[allow(unused_mut)] - let mut $tree_name = match crate::variables::get_entry_type_reference_tree( + let mut $tree_name = match $crate::variables::get_entry_type_reference_tree( $dwarf, &__unit_header, $abbreviations, @@ -259,9 +280,9 @@ where /// /// This is done based on the `DW_AT_decl_file`, `DW_AT_decl_line` and `DW_AT_decl_column` attributes. /// These are normally present on variables and functions. -fn find_entry_location<'unit>( +fn find_entry_location( dwarf: &Dwarf, - unit: &'unit Unit, + unit: &Unit, entry: &DebuggingInformationEntry, ) -> Result { // Get the attributes @@ -441,6 +462,16 @@ fn build_type_value_tree( type_value.data_mut().variable_type.archetype = Archetype::Subroutine; Ok(type_value_tree) } // Ignore + gimli::constants::DW_TAG_volatile_type => type_value_tree_building::build_volatile_type( + dwarf, + unit, + abbreviations, + node, + type_cache, + ), + gimli::constants::DW_TAG_const_type => { + type_value_tree_building::build_const_type(dwarf, unit, abbreviations, node, type_cache) + } tag => Err(TraceError::TagNotImplemented { tag_name: tag.to_string(), entry_debug_info_offset: entry.offset().to_debug_info_offset(&unit.header).unwrap().0, @@ -504,7 +535,6 @@ where // Turn the expression into an evaluation let result = evaluate_expression( - dwarf, unit, device_memory, frame_base, @@ -522,7 +552,6 @@ where } fn evaluate_expression( - dwarf: &Dwarf, unit: &Unit, device_memory: &DeviceMemory, frame_base: Option, @@ -561,7 +590,6 @@ where } EvaluationResult::RequiresEntryValue(ex) => { let entry_pieces = evaluate_expression( - dwarf, unit, device_memory, frame_base, @@ -736,22 +764,26 @@ fn read_base_type( data: &BitSlice, ) -> Result, VariableDataError> { match encoding { - gimli::constants::DW_ATE_unsigned => match data.len() { - 8 => Ok(Value::Uint(data.load_le::() as _)), - 16 => Ok(Value::Uint(data.load_le::() as _)), - 32 => Ok(Value::Uint(data.load_le::() as _)), - 64 => Ok(Value::Uint(data.load_le::() as _)), - 128 => Ok(Value::Uint(data.load_le::() as _)), - _ => Err(VariableDataError::InvalidSize { bits: data.len() }), - }, - gimli::constants::DW_ATE_signed => match data.len() { - 8 => Ok(Value::Int(data.load_le::() as _)), - 16 => Ok(Value::Int(data.load_le::() as _)), - 32 => Ok(Value::Int(data.load_le::() as _)), - 64 => Ok(Value::Int(data.load_le::() as _)), - 128 => Ok(Value::Int(data.load_le::() as _)), - _ => Err(VariableDataError::InvalidSize { bits: data.len() }), - }, + gimli::constants::DW_ATE_unsigned | gimli::constants::DW_ATE_unsigned_char => { + match data.len() { + 8 => Ok(Value::Uint(data.load_le::() as _)), + 16 => Ok(Value::Uint(data.load_le::() as _)), + 32 => Ok(Value::Uint(data.load_le::() as _)), + 64 => Ok(Value::Uint(data.load_le::() as _)), + 128 => Ok(Value::Uint(data.load_le::() as _)), + _ => Err(VariableDataError::InvalidSize { bits: data.len() }), + } + } + gimli::constants::DW_ATE_signed | gimli::constants::DW_ATE_signed_char => { + match data.len() { + 8 => Ok(Value::Int(data.load_le::() as _)), + 16 => Ok(Value::Int(data.load_le::() as _)), + 32 => Ok(Value::Int(data.load_le::() as _)), + 64 => Ok(Value::Int(data.load_le::() as _)), + 128 => Ok(Value::Int(data.load_le::() as _)), + _ => Err(VariableDataError::InvalidSize { bits: data.len() }), + } + } gimli::constants::DW_ATE_float => match data.len() { 32 => Ok(Value::Float(f32::from_bits(data.load_le::()) as _)), 64 => Ok(Value::Float(f64::from_bits(data.load_le::()) as _)), @@ -942,8 +974,8 @@ fn read_variable_data( Err(_) => TypeValueTree::new(TypeValue { name: "Pointee".into(), variable_type: VariableType { - name: "".into(), archetype: Archetype::Unknown, + ..Default::default() }, bit_range: 0..0, variable_value: Err(VariableDataError::Unknown), @@ -1045,7 +1077,7 @@ where get_entry_abstract_origin_reference_tree_recursive!( abstract_origin_tree = (dwarf, unit, abbreviations, entry) ); - let mut abstract_origin_tree = abstract_origin_tree?; + let mut abstract_origin_tree = abstract_origin_tree.ok(); let abstract_origin_node = abstract_origin_tree .as_mut() @@ -1066,27 +1098,36 @@ where variable_name = Ok("param".into()); } - // Get the type of the variable + // Get the type of the variable or its abstract origin get_entry_type_reference_tree_recursive!( - variable_type_value_tree = (dwarf, unit, abbreviations, entry) + variable_type_tree = (dwarf, unit, abbreviations, entry) ); - let variable_type_value_tree = variable_type_value_tree.and_then(|mut type_tree| { - let type_root = type_tree.root()?; - build_type_value_tree(dwarf, unit, abbreviations, type_root, type_cache) - }); - - // Alternatively, get the type from the abstract origin - let variable_type_value_tree = match (variable_type_value_tree, abstract_origin_entry) { - (Err(_), Some(entry)) => { - get_entry_type_reference_tree_recursive!(tree = (dwarf, unit, abbreviations, entry)); - tree.and_then(|mut type_tree| { - let type_root = type_tree.root()?; - build_type_value_tree(dwarf, unit, abbreviations, type_root, type_cache) - }) + get_entry_abstract_origin_reference_tree_recursive!( + abstract_origin_tree = (dwarf, unit, abbreviations, entry) + ); + + let variable_type_value_tree = (|| match (variable_type_tree, abstract_origin_tree) { + (Ok(mut variable_type_tree), _) => { + let type_root = variable_type_tree.root()?; + build_type_value_tree(dwarf, unit, abbreviations, type_root, type_cache) } - (variable_type, _) => variable_type, - }; + (_, Ok(mut abstract_origin_tree)) => { + let abstract_entry = abstract_origin_tree.root()?.entry().clone(); + get_entry_type_reference_tree_recursive!( + abstract_variable_type_tree = (dwarf, unit, abbreviations, &abstract_entry) + ); + + match abstract_variable_type_tree { + Ok(mut abstract_variable_type_tree) => { + let type_root = abstract_variable_type_tree.root()?; + build_type_value_tree(dwarf, unit, abbreviations, type_root, type_cache) + } + Err(e) => Err(e), + } + } + (Err(e), _) => Err(e), + })(); let variable_kind = VariableKind { zero_sized: variable_type_value_tree @@ -1161,10 +1202,10 @@ where })) } (Ok(variable_name), Err(type_error)) => { - log::debug!( + log::info!( "Could not read the type of variable `{}` of entry {:X?}: {}", variable_name, - entry.offset(), + entry.offset().to_debug_info_offset(&unit.header), type_error ); Ok(None) @@ -1172,7 +1213,7 @@ where (Err(name_error), _) => { log::debug!( "Could not get the name of a variable of entry {:X?}: {}", - entry.offset(), + entry.offset().to_debug_info_offset(&unit.header), name_error ); Ok(None) @@ -1298,7 +1339,8 @@ where | gimli::constants::DW_TAG_typedef | gimli::constants::DW_TAG_restrict_type | gimli::constants::DW_TAG_const_type - | gimli::constants::DW_TAG_union_type => return Ok(()), + | gimli::constants::DW_TAG_union_type + | gimli::constants::DW_TAG_volatile_type => return Ok(()), gimli::constants::DW_TAG_variable => { if let Some(variable) = read_variable_entry( dwarf, @@ -1313,7 +1355,11 @@ where } } tag => { - log::error!("Unexpected tag in the search of static variables: {}", tag); + log::error!( + "Unexpected tag in the search of static variables: {} at {:X?}", + tag, + entry.offset().to_debug_info_offset(&unit.header) + ); return Ok(()); } } diff --git a/trace/src/variables/type_value_tree_building/const_type.rs b/trace/src/variables/type_value_tree_building/const_type.rs new file mode 100644 index 0000000..db679ec --- /dev/null +++ b/trace/src/variables/type_value_tree_building/const_type.rs @@ -0,0 +1,42 @@ +use crate::{ + error::TraceError, get_entry_type_reference_tree_recursive, type_value_tree::TypeValueTree, + variables::build_type_value_tree, DefaultReader, +}; +use gimli::{Abbreviations, DebugInfoOffset, Dwarf, Unit}; +use std::collections::HashMap; + +pub fn build_const_type( + dwarf: &Dwarf, + unit: &Unit, + abbreviations: &Abbreviations, + node: gimli::EntriesTreeNode, + type_cache: &mut HashMap, TraceError>>, +) -> Result, TraceError> { + // Const is expressed as a type of its own, but that's BS. + // So we're just gonna take the underlying type tree and use that as the real type which we then mark as const. + + // Get the entry + let entry = node.entry(); + + // Get the underlying type tree + get_entry_type_reference_tree_recursive!( + underlying_type_tree = (dwarf, unit, abbreviations, entry) + ); + + // Build a normal type value tree from the underlying tree + let mut type_value_tree = underlying_type_tree.map(|mut type_tree| { + type_tree + .root() + .map(|root| build_type_value_tree(dwarf, unit, abbreviations, root, type_cache)) + })???; + + // Mark it as const + type_value_tree + .root_mut() + .data_mut() + .variable_type + .const_type = true; + + // Return the type value tree we built from the underlying tree + Ok(type_value_tree) +} diff --git a/trace/src/variables/type_value_tree_building/enumeration.rs b/trace/src/variables/type_value_tree_building/enumeration.rs index 29df252..d74e4f1 100644 --- a/trace/src/variables/type_value_tree_building/enumeration.rs +++ b/trace/src/variables/type_value_tree_building/enumeration.rs @@ -68,8 +68,8 @@ pub fn build_enumeration( type_value.push_back(TypeValueTree::new(TypeValue { name: enumerator_name, variable_type: VariableType { - name: "".into(), archetype: Archetype::Enumerator, + ..Default::default() }, bit_range: underlying_type_bitrange.clone(), variable_value: Ok(Value::Int(const_value as i128)), diff --git a/trace/src/variables/type_value_tree_building/mod.rs b/trace/src/variables/type_value_tree_building/mod.rs index 0ec7ec3..334e276 100644 --- a/trace/src/variables/type_value_tree_building/mod.rs +++ b/trace/src/variables/type_value_tree_building/mod.rs @@ -18,3 +18,9 @@ pub use typedef::build_typedef; mod enumeration; pub use enumeration::build_enumeration; + +mod volatile_type; +pub use volatile_type::build_volatile_type; + +mod const_type; +pub use const_type::build_const_type; diff --git a/trace/src/variables/type_value_tree_building/pointer.rs b/trace/src/variables/type_value_tree_building/pointer.rs index 9da98ae..3252321 100644 --- a/trace/src/variables/type_value_tree_building/pointer.rs +++ b/trace/src/variables/type_value_tree_building/pointer.rs @@ -1,7 +1,7 @@ use crate::{ error::TraceError, get_entry_type_reference_tree_recursive, - gimli_extensions::{AttributeExt, DebuggingInformationEntryExt}, + gimli_extensions::AttributeExt, type_value_tree::{variable_type::Archetype, TypeValue, TypeValueTree}, variables::{build_type_value_tree, get_entry_name}, DefaultReader, @@ -56,13 +56,16 @@ pub fn build_pointer( // We do perform the check though to be sure. let address_class = entry - .required_attr(&unit.header, gimli::constants::DW_AT_address_class)? - .required_address_class()?; - if address_class != gimli::constants::DW_ADDR_none { - return Err(TraceError::UnexpectedPointerClass { - pointer_name: name, - class_value: address_class, - }); + .attr(gimli::constants::DW_AT_address_class)? + .map(|address_class| address_class.required_address_class()) + .transpose()?; + if let Some(address_class) = address_class { + if address_class != gimli::constants::DW_ADDR_none { + return Err(TraceError::UnexpectedPointerClass { + pointer_name: name, + class_value: address_class, + }); + } } type_value.data_mut().variable_type.name = name; diff --git a/trace/src/variables/type_value_tree_building/tagged_union.rs b/trace/src/variables/type_value_tree_building/tagged_union.rs index 57b5aed..4291720 100644 --- a/trace/src/variables/type_value_tree_building/tagged_union.rs +++ b/trace/src/variables/type_value_tree_building/tagged_union.rs @@ -112,8 +112,8 @@ pub fn build_tagged_union( let mut variant_tree = TypeValueTree::new(TypeValue { name: "variant".into(), variable_type: VariableType { - name: "".into(), archetype: Archetype::TaggedUnionVariant, + ..Default::default() }, bit_range: 0..0, variable_value: discriminator_value diff --git a/trace/src/variables/type_value_tree_building/volatile_type.rs b/trace/src/variables/type_value_tree_building/volatile_type.rs new file mode 100644 index 0000000..fd3d507 --- /dev/null +++ b/trace/src/variables/type_value_tree_building/volatile_type.rs @@ -0,0 +1,38 @@ +use crate::{ + error::TraceError, get_entry_type_reference_tree_recursive, type_value_tree::TypeValueTree, + variables::build_type_value_tree, DefaultReader, +}; +use gimli::{Abbreviations, DebugInfoOffset, Dwarf, Unit}; +use std::collections::HashMap; + +pub fn build_volatile_type( + dwarf: &Dwarf, + unit: &Unit, + abbreviations: &Abbreviations, + node: gimli::EntriesTreeNode, + type_cache: &mut HashMap, TraceError>>, +) -> Result, TraceError> { + // Volatile is expressed as a type of its own, but that's BS. + // So we're just gonna take the underlying type tree and use that as the real type which we then mark as volatile. + + // Get the entry + let entry = node.entry(); + + // Get the underlying type tree + get_entry_type_reference_tree_recursive!( + underlying_type_tree = (dwarf, unit, abbreviations, entry) + ); + + // Build a normal type value tree from the underlying tree + let mut type_value_tree = underlying_type_tree.map(|mut type_tree| { + type_tree + .root() + .map(|root| build_type_value_tree(dwarf, unit, abbreviations, root, type_cache)) + })???; + + // Mark it as volatile + type_value_tree.root_mut().data_mut().variable_type.volatile = true; + + // Return the type value tree we built from the underlying tree + Ok(type_value_tree) +}