diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2bc36f15..ac65d3cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: test: strategy: matrix: - rustc_sup_version: [ 1.75.0, 1.76.0, 1.77.0, 1.78.0, 1.79.0 ] + rustc_sup_version: [ 1.76.0, 1.77.0, 1.78.0, 1.79.0, 1.80.0 ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -25,7 +25,7 @@ jobs: - name: Install actual rustc uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.80.0 override: true components: rustfmt, clippy - name: Run functional tests on own stack unwind implementation @@ -42,7 +42,7 @@ jobs: - name: Install rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.80.0 override: true components: rustfmt, clippy - name: Set up Python 3.7 @@ -69,7 +69,7 @@ jobs: - name: Install rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.79.0 + toolchain: 1.80.0 override: true components: rustfmt, clippy - name: Install libunwind diff --git a/examples/Cargo.lock b/examples/Cargo.lock deleted file mode 100644 index 1580f11d..00000000 --- a/examples/Cargo.lock +++ /dev/null @@ -1,1791 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atomic" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39" -dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "binascii" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "calc" -version = "0.0.0" - -[[package]] -name = "calc_bin" -version = "0.0.0" -dependencies = [ - "libloading", -] - -[[package]] -name = "calc_lib" -version = "0.0.0" - -[[package]] -name = "calculations" -version = "0.0.0" - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "cookie" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" -dependencies = [ - "percent-encoding", - "time", - "version_check", -] - -[[package]] -name = "devise" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8" -dependencies = [ - "devise_codegen", - "devise_core", -] - -[[package]] -name = "devise_codegen" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6" -dependencies = [ - "devise_core", - "quote", -] - -[[package]] -name = "devise_core" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a" -dependencies = [ - "bitflags 2.3.1", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "figment" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e56602b469b2201400dec66a66aec5a9b8761ee97cd1b8c96ab2483fcc16cc9" -dependencies = [ - "atomic", - "pear", - "serde", - "toml", - "uncased", - "version_check", -] - -[[package]] -name = "fizzbuzz" -version = "0.0.0" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generator" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "h2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hello_world" -version = "0.0.0" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.4.9", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", - "serde", -] - -[[package]] -name = "inlinable_string" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "is-terminal" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.153" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" - -[[package]] -name = "libloading" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mt" -version = "0.0.0" - -[[package]] -name = "multer" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" -dependencies = [ - "bytes", - "encoding_rs", - "futures-util", - "http", - "httparse", - "log", - "memchr", - "mime", - "spin", - "tokio", - "tokio-util", - "version_check", -] - -[[package]] -name = "nix" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags 2.3.1", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "panic" -version = "0.0.0" -dependencies = [ - "uuid", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "pastebin" -version = "0.0.0" -dependencies = [ - "rand", - "rocket", -] - -[[package]] -name = "pear" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec95680a7087503575284e5063e14b694b7a9c0b065e5dceec661e0497127e8" -dependencies = [ - "inlinable_string", - "pear_codegen", - "yansi", -] - -[[package]] -name = "pear_codegen" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9661a3a53f93f09f2ea882018e4d7c88f6ff2956d809a276060476fd8c879d3c" -dependencies = [ - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pin-project" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "printer_lib" -version = "0.0.0" - -[[package]] -name = "proc-macro2" -version = "1.0.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2de98502f212cfcea8d0bb305bd0f49d7ebdd75b64ba0a68f937d888f4e0d6db" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "606c4ba35817e2922a308af55ad51bab3645b59eae5c570d4a6cf07e36bd493b" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "version_check", - "yansi", -] - -[[package]] -name = "quote" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "recursion" -version = "0.0.0" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "ref-cast" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "regex" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" -dependencies = [ - "regex-syntax 0.7.1", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "rocket" -version = "0.5.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9" -dependencies = [ - "async-stream", - "async-trait", - "atomic", - "binascii", - "bytes", - "either", - "figment", - "futures", - "indexmap", - "is-terminal", - "log", - "memchr", - "multer", - "num_cpus", - "parking_lot", - "pin-project-lite", - "rand", - "ref-cast", - "rocket_codegen", - "rocket_http", - "serde", - "state", - "tempfile", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "ubyte", - "version_check", - "yansi", -] - -[[package]] -name = "rocket_codegen" -version = "0.5.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b" -dependencies = [ - "devise", - "glob", - "indexmap", - "proc-macro2", - "quote", - "rocket_http", - "syn", - "unicode-xid", -] - -[[package]] -name = "rocket_http" -version = "0.5.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4" -dependencies = [ - "cookie", - "either", - "futures", - "http", - "hyper", - "indexmap", - "log", - "memchr", - "pear", - "percent-encoding", - "pin-project-lite", - "ref-cast", - "serde", - "smallvec", - "stable-pattern", - "state", - "time", - "tokio", - "uncased", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustix" -version = "0.37.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.163" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.163" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[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 = "signals" -version = "0.0.0" -dependencies = [ - "nix", - "signal-hook", -] - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "sleeper" -version = "0.0.0" - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - -[[package]] -name = "stable-pattern" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" -dependencies = [ - "memchr", -] - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "syn" -version = "2.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" -dependencies = [ - "time-core", -] - -[[package]] -name = "todos" -version = "0.1.0" -dependencies = [ - "axum", - "serde", - "tokio", - "tower", - "tower-http", - "tracing", - "tracing-subscriber", - "uuid", -] - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.5", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "tokioticker" -version = "0.0.0" -dependencies = [ - "log", - "rand", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" -dependencies = [ - "bitflags 1.3.2", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "ubyte" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6" -dependencies = [ - "serde", -] - -[[package]] -name = "uncased" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" -dependencies = [ - "serde", - "version_check", -] - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "uuid" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" -dependencies = [ - "atomic", - "getrandom", - "serde", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vars" -version = "0.0.0" -dependencies = [ - "uuid", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[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", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -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", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" diff --git a/examples/pastebin/Cargo.toml b/examples/pastebin/Cargo.toml index be9e6900..550d96c0 100644 --- a/examples/pastebin/Cargo.toml +++ b/examples/pastebin/Cargo.toml @@ -8,3 +8,7 @@ publish = false [dependencies] rocket = "0.5.0-rc.3" rand = "0.8" + +# FIXME: looks like rocket currently doesnt work with rust 1.80+ +[patch.crates-io] +time = { git = "https://github.com/time-rs/time" } diff --git a/examples/vars/src/vars.rs b/examples/vars/src/vars.rs index 63d3ad9b..785ee8b8 100644 --- a/examples/vars/src/vars.rs +++ b/examples/vars/src/vars.rs @@ -514,7 +514,7 @@ fn shadowing() { fn uuid() { let uuid_v4 = uuid::Uuid::new_v4(); - let uuid_v7 = uuid::Uuid::new_v7(uuid::timestamp::Timestamp::from_rfc4122(1, 1)); + let uuid_v7 = uuid::Uuid::new_v7(uuid::timestamp::Timestamp::from_gregorian(1, 1)); let nop: Option = None; } diff --git a/src/debugger/debugee/dwarf/location.rs b/src/debugger/debugee/dwarf/location.rs index 4fdd6ba0..821e5ee7 100644 --- a/src/debugger/debugee/dwarf/location.rs +++ b/src/debugger/debugee/dwarf/location.rs @@ -15,7 +15,8 @@ impl<'a> Location<'a> { /// - DW_FORM_loclistx /// - W_FORM_sec_offset /// - DW_FORM_loclistx - /// Return `None` otherwise. + /// + /// Return `None` otherwise. pub(super) fn try_as_expression( &self, dwarf_ctx: &DebugInformation, diff --git a/src/debugger/debugee/dwarf/mod.rs b/src/debugger/debugee/dwarf/mod.rs index 4a3b278d..3036e833 100644 --- a/src/debugger/debugee/dwarf/mod.rs +++ b/src/debugger/debugee/dwarf/mod.rs @@ -28,7 +28,7 @@ use crate::debugger::error::Error::{ use crate::debugger::register::{DwarfRegisterMap, RegisterMap}; use crate::debugger::variable::select::ObjectBinaryRepr; use crate::debugger::ExplorationContext; -use crate::{muted_error, resolve_unit_call, weak_error}; +use crate::{muted_error, resolve_unit_call, version_switch, weak_error}; use fallible_iterator::FallibleIterator; use gimli::CfaRule::RegisterAndOffset; use gimli::{ @@ -537,27 +537,43 @@ impl DebugInformation { } } - // now check tls variables - // for rust we expect that tls variable represents in dwarf like - // variable with name "__KEY" and namespace like [.., variable_name, __getit] - let tls_ns_part = &[name, "__getit"]; for unit in units { - let mb_var_locations = resolve_unit_call!(self.dwarf(), unit, locate_var_die, "__KEY"); - if let Some(vars) = mb_var_locations { - vars.iter().for_each(|(namespaces, entry_idx)| { - if namespaces.contains(tls_ns_part) { - let entry = resolve_unit_call!(&self.inner, unit, entry, *entry_idx); - if let DieVariant::Variable(ref var) = entry.die { - found.push(ContextualDieRef { - debug_info: self, - unit_idx: unit.idx(), - node: &entry.node, - die: var, - }); - } + let rustc_version = unit.rustc_version().unwrap_or_default(); + + let tls_ns_part = version_switch!( + rustc_version, + (1, 0, 0) ..= (1, 79, u32::MAX) => { + // now check tls variables + // for rust we expect that tls variable represents in dwarf like + // variable with name "__KEY" and namespace like [.., variable_name, __getit] + vec![name, "__getit"] + }, + (1, 80, 0) ..= (1, u32::MAX, u32::MAX) => { + vec![name] + }, + ); + let tls_ns_part = tls_ns_part.expect("infallible: all rustc versions are covered"); + + let mut tls_collector = |(namespaces, entry_idx): &(NamespaceHierarchy, usize)| { + if namespaces.contains(&tls_ns_part) { + let entry = resolve_unit_call!(&self.inner, unit, entry, *entry_idx); + if let DieVariant::Variable(ref var) = entry.die { + found.push(ContextualDieRef { + debug_info: self, + unit_idx: unit.idx(), + node: &entry.node, + die: var, + }); } - }); - } + } + }; + + if let Some(vars) = resolve_unit_call!(self.dwarf(), unit, locate_var_die, "__KEY") { + vars.iter().for_each(&mut tls_collector); + }; + if let Some(vars) = resolve_unit_call!(self.dwarf(), unit, locate_var_die, "VAL") { + vars.iter().for_each(&mut tls_collector); + }; } Ok(found) diff --git a/src/debugger/debugee/dwarf/unit/mod.rs b/src/debugger/debugee/dwarf/unit/mod.rs index 70bbc5d2..01ede44a 100644 --- a/src/debugger/debugee/dwarf/unit/mod.rs +++ b/src/debugger/debugee/dwarf/unit/mod.rs @@ -745,6 +745,7 @@ impl Unit { /// # Arguments /// /// * `template`: function search template, contains a function name and full or partial namespace. + /// /// For example: "ns1::ns2::fn1" or "ns2::fn1" pub fn search_functions(&self, template: &str) -> UnitResult> { match self.lazy_part.get() { diff --git a/src/debugger/debugee/dwarf/utils.rs b/src/debugger/debugee/dwarf/utils.rs index a6fae174..b71a1de0 100644 --- a/src/debugger/debugee/dwarf/utils.rs +++ b/src/debugger/debugee/dwarf/utils.rs @@ -21,11 +21,12 @@ struct PathIndexInner { /// This index is optimized for queries along the last parts of the path. Optimization is based on /// the expectation that the last part of the path (head) has a high cardinality. /// -/// For example, if index contain function paths like "namespace_1::namespace_2::my_fn" than acceptable +/// For example, if index contains function paths like "namespace_1::namespace_2::my_fn" than acceptable /// requests are: /// - "my_fn" /// - "namespace_2::my_fn" /// - "namespace_1::namespace_2::my_fn" +/// /// Other requests are not accepted. #[derive(Clone, Debug)] pub struct PathSearchIndex { diff --git a/src/debugger/variable/mod.rs b/src/debugger/variable/mod.rs index eb6f01ca..51fdd888 100644 --- a/src/debugger/variable/mod.rs +++ b/src/debugger/variable/mod.rs @@ -302,7 +302,7 @@ impl PointerVariable { return None; } - self.value.map(|ptr| { + self.value.and_then(|ptr| { let data = deref_size.and_then(|sz| { let raw_data = debugger::read_memory_by_pid( eval_ctx.expl_ctx.pid_on_focus(), @@ -350,7 +350,7 @@ impl PointerVariable { let items = raw_data .chunks(deref_size) .enumerate() - .map(|(i, chunk)| { + .filter_map(|(i, chunk)| { let data = ObjectBinaryRepr { raw_data: raw_data.slice_ref(chunk), address: Some(base_addr + (i * deref_size)), @@ -1158,12 +1158,12 @@ impl<'a> VariableParser<'a> { }; let member_val = parent_data.and_then(|data| member.value(eval_ctx, self.r#type, data)); - Some(self.parse_inner( + self.parse_inner( eval_ctx, VariableIdentity::no_namespace(member.name.clone()), member_val, type_ref, - )) + ) } fn parse_array( @@ -1194,7 +1194,7 @@ impl<'a> VariableParser<'a> { Some( raw_items_iter - .map(|(i, chunk)| { + .filter_map(|(i, chunk)| { let offset = i * el_size; let data = ObjectBinaryRepr { raw_data: bytes.slice_ref(chunk), @@ -1235,7 +1235,7 @@ impl<'a> VariableParser<'a> { enumerators: &HashMap, ) -> CEnumVariable { let in_debugee_loc = data.as_ref().and_then(|d| d.address); - let mb_discr = discr_type.map(|type_id| { + let mb_discr = discr_type.and_then(|type_id| { self.parse_inner( eval_ctx, VariableIdentity::no_namespace(None), @@ -1331,11 +1331,14 @@ impl<'a> VariableParser<'a> { identity: VariableIdentity, data: Option, type_id: TypeIdentity, - ) -> VariableIR { + ) -> Option { match &self.r#type.types[&type_id] { - TypeDeclaration::Scalar(scalar_type) => { - VariableIR::Scalar(self.parse_scalar(identity, data, type_id, scalar_type)) - } + TypeDeclaration::Scalar(scalar_type) => Some(VariableIR::Scalar(self.parse_scalar( + identity, + data, + type_id, + scalar_type, + ))), TypeDeclaration::Structure { namespaces: type_ns_h, members, @@ -1366,21 +1369,25 @@ impl<'a> VariableParser<'a> { // - cell/refcell // - rc/arc if struct_name.as_deref() == Some("&str") { - return VariableIR::Specialized(parser_ext.parse_str(eval_ctx, struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_str(eval_ctx, struct_var), + )); }; if struct_name.as_deref() == Some("String") { - return VariableIR::Specialized(parser_ext.parse_string(eval_ctx, struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_string(eval_ctx, struct_var), + )); }; if struct_name.as_ref().map(|name| name.starts_with("Vec")) == Some(true) && type_ns_h.contains(&["vec"]) { - return VariableIR::Specialized(parser_ext.parse_vector( + return Some(VariableIR::Specialized(parser_ext.parse_vector( eval_ctx, struct_var, type_params, - )); + ))); }; let rust_version = eval_ctx.rustc_version().unwrap_or_default(); @@ -1391,19 +1398,28 @@ impl<'a> VariableParser<'a> { (1, 78, 0) ..= (1, u32::MAX, u32::MAX) => type_ns_h.contains(&["std", "sys", "thread_local", "fast_local"]), ); if is_tls_type == Some(true) { - return VariableIR::Specialized(parser_ext.parse_tls(struct_var, type_params)); + return version_switch!( + rust_version, + (1, 0, 0) ..= (1, 79, u32::MAX) => Some(VariableIR::Specialized(parser_ext.parse_tls_old(struct_var, type_params))), + (1, 80, 0) ..= (1, u32::MAX, u32::MAX) => Some(VariableIR::Specialized(parser_ext.parse_tls(struct_var, type_params)?)), + ) + .expect("infallible: all rustc versions are covered"); } if struct_name.as_ref().map(|name| name.starts_with("HashMap")) == Some(true) && type_ns_h.contains(&["collections", "hash", "map"]) { - return VariableIR::Specialized(parser_ext.parse_hashmap(eval_ctx, struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_hashmap(eval_ctx, struct_var), + )); }; if struct_name.as_ref().map(|name| name.starts_with("HashSet")) == Some(true) && type_ns_h.contains(&["collections", "hash", "set"]) { - return VariableIR::Specialized(parser_ext.parse_hashset(eval_ctx, struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_hashset(eval_ctx, struct_var), + )); }; if struct_name @@ -1412,12 +1428,12 @@ impl<'a> VariableParser<'a> { == Some(true) && type_ns_h.contains(&["collections", "btree", "map"]) { - return VariableIR::Specialized(parser_ext.parse_btree_map( + return Some(VariableIR::Specialized(parser_ext.parse_btree_map( eval_ctx, struct_var, type_id, type_params, - )); + ))); }; if struct_name @@ -1426,7 +1442,9 @@ impl<'a> VariableParser<'a> { == Some(true) && type_ns_h.contains(&["collections", "btree", "set"]) { - return VariableIR::Specialized(parser_ext.parse_btree_set(struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_btree_set(struct_var), + )); }; if struct_name @@ -1435,23 +1453,25 @@ impl<'a> VariableParser<'a> { == Some(true) && type_ns_h.contains(&["collections", "vec_deque"]) { - return VariableIR::Specialized(parser_ext.parse_vec_dequeue( + return Some(VariableIR::Specialized(parser_ext.parse_vec_dequeue( eval_ctx, struct_var, type_params, - )); + ))); }; if struct_name.as_ref().map(|name| name.starts_with("Cell")) == Some(true) && type_ns_h.contains(&["cell"]) { - return VariableIR::Specialized(parser_ext.parse_cell(struct_var)); + return Some(VariableIR::Specialized(parser_ext.parse_cell(struct_var))); }; if struct_name.as_ref().map(|name| name.starts_with("RefCell")) == Some(true) && type_ns_h.contains(&["cell"]) { - return VariableIR::Specialized(parser_ext.parse_refcell(struct_var)); + return Some(VariableIR::Specialized( + parser_ext.parse_refcell(struct_var), + )); }; if struct_name @@ -1460,7 +1480,7 @@ impl<'a> VariableParser<'a> { == Some(true) && type_ns_h.contains(&["rc"]) { - return VariableIR::Specialized(parser_ext.parse_rc(struct_var)); + return Some(VariableIR::Specialized(parser_ext.parse_rc(struct_var))); }; if struct_name @@ -1469,47 +1489,47 @@ impl<'a> VariableParser<'a> { == Some(true) && type_ns_h.contains(&["sync"]) { - return VariableIR::Specialized(parser_ext.parse_arc(struct_var)); + return Some(VariableIR::Specialized(parser_ext.parse_arc(struct_var))); }; if struct_name.as_ref().map(|name| name == "Uuid") == Some(true) && type_ns_h.contains(&["uuid"]) { - return VariableIR::Specialized(parser_ext.parse_uuid(struct_var)); + return Some(VariableIR::Specialized(parser_ext.parse_uuid(struct_var))); }; - VariableIR::Struct(struct_var) - } - TypeDeclaration::Array(decl) => { - VariableIR::Array(self.parse_array(eval_ctx, identity, data, type_id, decl)) + Some(VariableIR::Struct(struct_var)) } + TypeDeclaration::Array(decl) => Some(VariableIR::Array( + self.parse_array(eval_ctx, identity, data, type_id, decl), + )), TypeDeclaration::CStyleEnum { discr_type, enumerators, .. - } => VariableIR::CEnum(self.parse_c_enum( + } => Some(VariableIR::CEnum(self.parse_c_enum( eval_ctx, identity, data, type_id, *discr_type, enumerators, - )), + ))), TypeDeclaration::RustEnum { discr_type, enumerators, .. - } => VariableIR::RustEnum(self.parse_rust_enum( + } => Some(VariableIR::RustEnum(self.parse_rust_enum( eval_ctx, identity, data, type_id, discr_type.as_ref().map(|t| t.as_ref()), enumerators, + ))), + TypeDeclaration::Pointer { target_type, .. } => Some(VariableIR::Pointer( + self.parse_pointer(identity, data, type_id, *target_type), )), - TypeDeclaration::Pointer { target_type, .. } => { - VariableIR::Pointer(self.parse_pointer(identity, data, type_id, *target_type)) - } TypeDeclaration::Union { members, .. } => { let struct_var = self.parse_struct_variable( eval_ctx, @@ -1519,7 +1539,7 @@ impl<'a> VariableParser<'a> { HashMap::new(), members, ); - VariableIR::Struct(struct_var) + Some(VariableIR::Struct(struct_var)) } TypeDeclaration::Subroutine { return_type, .. } => { let ret_type = return_type.and_then(|t_id| self.r#type.type_name(t_id)); @@ -1529,22 +1549,24 @@ impl<'a> VariableParser<'a> { return_type_name: ret_type, address: data.and_then(|d| d.address), }; - VariableIR::Subroutine(fn_var) + Some(VariableIR::Subroutine(fn_var)) } TypeDeclaration::ModifiedType { inner, modifier, .. } => { let in_debugee_loc = data.as_ref().and_then(|d| d.address); - VariableIR::CModifiedVariable(CModifiedVariable { + Some(VariableIR::CModifiedVariable(CModifiedVariable { identity: identity.clone(), type_id: Some(type_id), type_name: self.r#type.type_name(type_id), modifier: *modifier, - value: inner.map(|inner_type| { - Box::new(self.parse_inner(eval_ctx, identity, data, inner_type)) + value: inner.and_then(|inner_type| { + Some(Box::new( + self.parse_inner(eval_ctx, identity, data, inner_type)?, + )) }), address: in_debugee_loc, - }) + })) } } } @@ -1554,7 +1576,7 @@ impl<'a> VariableParser<'a> { eval_ctx: &EvaluationContext, identity: VariableIdentity, value: Option, - ) -> VariableIR { + ) -> Option { self.parse_inner(eval_ctx, identity, value, self.r#type.root) } } diff --git a/src/debugger/variable/select.rs b/src/debugger/variable/select.rs index ab2cca82..1934be96 100644 --- a/src/debugger/variable/select.rs +++ b/src/debugger/variable/select.rs @@ -452,11 +452,11 @@ impl<'a> SelectExpressionEvaluator<'a> { &self.debugger.debugee, r#type, ); - Some(parser.parse( + parser.parse( evaluation_context, VariableIdentity::from_variable_die(variable_die), data, - )) + ) } DQE::PtrCast(addr, ..) => { let data = ObjectBinaryRepr { @@ -464,11 +464,11 @@ impl<'a> SelectExpressionEvaluator<'a> { address: None, size: std::mem::size_of::(), }; - Some(parser.parse( + parser.parse( evaluation_context, VariableIdentity::new(NamespaceHierarchy::default(), None), Some(data), - )) + ) } DQE::Field(expr, field) => { let var = self.evaluate_single_variable(expr, variable_die, r#type)?; diff --git a/src/debugger/variable/specialization/mod.rs b/src/debugger/variable/specialization/mod.rs index 93256140..287497a8 100644 --- a/src/debugger/variable/specialization/mod.rs +++ b/src/debugger/variable/specialization/mod.rs @@ -19,6 +19,7 @@ use anyhow::Context; use bytes::Bytes; use fallible_iterator::FallibleIterator; use itertools::Itertools; +use log::warn; use std::collections::HashMap; use AssumeError::{FieldNotFound, IncompleteInterp, UnknownSize}; @@ -343,7 +344,7 @@ impl<'a> VariableParserExtension<'a> { }; let items = raw_items_iter - .map(|(i, chunk)| { + .filter_map(|(i, chunk)| { let data = ObjectBinaryRepr { raw_data: raw_data.slice_ref(chunk), address: Some(data_ptr + (i * el_type_size)), @@ -392,20 +393,20 @@ impl<'a> VariableParserExtension<'a> { }) } - pub fn parse_tls( + pub fn parse_tls_old( &self, structure: StructVariable, type_params: &HashMap>, ) -> SpecializedVariableIR { SpecializedVariableIR::Tls { tls_var: weak_error!(self - .parse_tls_inner(VariableIR::Struct(structure.clone()), type_params) + .parse_tls_inner_old(VariableIR::Struct(structure.clone()), type_params) .context("TLS variable interpretation")), original: structure, } } - fn parse_tls_inner( + fn parse_tls_inner_old( &self, ir: VariableIR, type_params: &HashMap>, @@ -456,6 +457,74 @@ impl<'a> VariableParserExtension<'a> { ))) } + pub fn parse_tls( + &self, + structure: StructVariable, + type_params: &HashMap>, + ) -> Option { + let tls_var = self + .parse_tls_inner(VariableIR::Struct(structure.clone()), type_params) + .context("TLS variable interpretation"); + + let var = match tls_var { + Ok(Some(var)) => Some(var), + Ok(None) => return None, + Err(e) => { + let e = e.context("TLS variable interpretation"); + warn!(target: "debugger", "{:#}", e); + None + } + }; + + Some(SpecializedVariableIR::Tls { + tls_var: var, + original: structure, + }) + } + + fn parse_tls_inner( + &self, + ir: VariableIR, + type_params: &HashMap>, + ) -> Result, ParsingError> { + // we assume that tls variable name represents in dwarf + // as namespace flowed before "__getit" namespace + let namespace = &ir.identity().namespace; + let name = namespace + .iter() + .find_position(|&ns| ns.contains("{constant#")) + .map(|(pos, _)| namespace[pos - 1].clone()); + + let inner_type = type_params + .get("T") + .ok_or(TypeParameterNotFound("T"))? + .ok_or(TypeParameterTypeNotFound("T"))?; + + let state = ir + .bfs_iterator() + .find(|child| child.name() == "state") + .ok_or(FieldNotFound("state"))?; + + let state = state.assume_field_as_rust_enum("value")?; + if let Some(VariableIR::Struct(val)) = state.value.as_deref() { + let tls_val = if val.identity.name.as_deref() == Some("Alive") { + Some(Box::new(val.members[0].clone())) + } else { + return Ok(None); + }; + + return Ok(Some(TlsVariable { + identity: VariableIdentity::no_namespace(name), + inner_value: tls_val, + inner_type: self.parser.r#type.type_name(inner_type), + })); + }; + + Err(ParsingError::Assume(IncompleteInterp( + "expect TLS inner value as option", + ))) + } + pub fn parse_hashmap( &self, eval_ctx: &EvaluationContext, @@ -510,7 +579,7 @@ impl<'a> VariableParserExtension<'a> { kv_type, ); - if let VariableIR::Struct(mut tuple) = tuple { + if let Some(VariableIR::Struct(mut tuple)) = tuple { if tuple.members.len() == 2 { let v = tuple.members.pop(); let k = tuple.members.pop(); @@ -584,7 +653,7 @@ impl<'a> VariableParserExtension<'a> { kv_type, ); - if let VariableIR::Struct(mut tuple) = tuple { + if let Some(VariableIR::Struct(mut tuple)) = tuple { if tuple.members.len() == 2 { let _ = tuple.members.pop(); let k = tuple.members.pop().unwrap(); @@ -653,22 +722,26 @@ impl<'a> VariableParserExtension<'a> { let iterator = reflection.iter(eval_ctx)?; let kv_items = iterator .map_err(ParsingError::from) - .map(|(k, v)| { - let key = self.parser.parse_inner( + .filter_map(|(k, v)| { + let Some(key) = self.parser.parse_inner( eval_ctx, VariableIdentity::no_namespace(Some("k".to_string())), Some(k), k_type, - ); + ) else { + return Ok(None); + }; - let value = self.parser.parse_inner( + let Some(value) = self.parser.parse_inner( eval_ctx, VariableIdentity::no_namespace(Some("v".to_string())), Some(v), v_type, - ); + ) else { + return Ok(None); + }; - Ok((key, value)) + Ok(Some((key, value))) }) .collect::>()?; @@ -778,7 +851,7 @@ impl<'a> VariableParserExtension<'a> { .0 .chain(slice_ranges.1) .enumerate() - .map(|(i, real_idx)| { + .filter_map(|(i, real_idx)| { let offset = real_idx * el_type_size; let el_raw_data = &data[offset..(real_idx + 1) * el_type_size]; let el_data = ObjectBinaryRepr { diff --git a/src/version.rs b/src/version.rs index 1b5fb0f7..35e1d769 100644 --- a/src/version.rs +++ b/src/version.rs @@ -56,6 +56,7 @@ static SUPPORTED_RUSTC: &[(Version, Version)] = &[ (Version((1, 77, 0)), Version((1, 77, u32::MAX))), (Version((1, 78, 0)), Version((1, 78, u32::MAX))), (Version((1, 79, 0)), Version((1, 79, u32::MAX))), + (Version((1, 80, 0)), Version((1, 80, u32::MAX))), ]; pub fn supported_versions_to_string() -> String { @@ -68,7 +69,7 @@ pub fn supported_versions_to_string() -> String { ) } -/// Check rustc version, return true if a version supported, false otherwise. False positive. +/// Check a rustc version, return true if a version supported, false otherwise. False positive. pub fn probe_file(obj: &object::File) -> bool { let Some(comment_sect) = obj.section_by_name(".comment") else { return true; diff --git a/tests/debugger/variables.rs b/tests/debugger/variables.rs index 209f9b42..a942ae42 100644 --- a/tests/debugger/variables.rs +++ b/tests/debugger/variables.rs @@ -7,6 +7,7 @@ use bugstalker::debugger::variable::select::{Literal, LiteralOrWildcard, Variabl use bugstalker::debugger::variable::{select, VariableIR}; use bugstalker::debugger::{variable, Debugger, DebuggerBuilder}; use bugstalker::ui::command::parser::expression; +use bugstalker::version::Version; use bugstalker::{debugger, version_switch}; use chumsky::Parser; use debugger::variable::SupportedScalar; @@ -1045,7 +1046,16 @@ fn test_read_tls_variables() { only_local: false, })) .unwrap(); - assert_uninit_tls(&vars[0], "THREAD_LOCAL_VAR_1", "Cell"); + let rust_version = rust_version(VARS_APP).unwrap(); + version_switch!( + rust_version, + (1, 0, 0) ..= (1, 79, u32::MAX) => { + assert_uninit_tls(&vars[0], "THREAD_LOCAL_VAR_1", "Cell"); + }, + (1, 80, 0) ..= (1, u32::MAX, u32::MAX) => { + assert!(vars.is_empty()); + }, + ); // assert tls variables changes in another thread debugger.set_breakpoint_at_line("vars.rs", 203).unwrap(); @@ -1092,6 +1102,8 @@ fn test_read_closures() { assert_struct(&vars[3], "closure", "{closure_env#2}", |_, member| { assert_string(member, "outer", "outer val") }); + + let rust_version = rust_version(VARS_APP).unwrap(); assert_struct( &vars[7], "trait_once", @@ -1112,12 +1124,15 @@ fn test_read_closures() { ); } 1 => { - assert_pointer(member, "vtable", "&[usize; 3]"); + let exp_type = if rust_version >= Version((1, 80, 0)) { + "&[usize; 4]" + } else { + "&[usize; 3]" + }; + + assert_pointer(member, "vtable", exp_type); let deref = read_single_var(&debugger, "*trait_once.vtable"); - assert_array(&deref, "*vtable", "[usize]", |i, _| match i { - 0..=2 => {} - _ => panic!("3 items expected"), - }); + assert_array(&deref, "*vtable", "[usize]", |_, _| {}); } _ => panic!("2 members expected"), }, @@ -1142,12 +1157,14 @@ fn test_read_closures() { ); } 1 => { - assert_pointer(member, "vtable", "&[usize; 3]"); + let exp_type = if rust_version >= Version((1, 80, 0)) { + "&[usize; 5]" + } else { + "&[usize; 3]" + }; + assert_pointer(member, "vtable", exp_type); let deref = read_single_var(&debugger, "*trait_mut.vtable"); - assert_array(&deref, "*vtable", "[usize]", |i, _| match i { - 0..=2 => {} - _ => panic!("3 items expected"), - }); + assert_array(&deref, "*vtable", "[usize]", |_, _| {}); } _ => panic!("2 members expected"), }, @@ -1172,12 +1189,14 @@ fn test_read_closures() { ); } 1 => { - assert_pointer(member, "vtable", "&[usize; 3]"); + let exp_type = if rust_version >= Version((1, 80, 0)) { + "&[usize; 6]" + } else { + "&[usize; 3]" + }; + assert_pointer(member, "vtable", exp_type); let deref = read_single_var(&debugger, "*trait_fn.vtable"); - assert_array(&deref, "*vtable", "[usize]", |i, _| match i { - 0..=2 => {} - _ => panic!("3 items expected"), - }); + assert_array(&deref, "*vtable", "[usize]", |_, _| {}); } _ => panic!("2 members expected"), }, diff --git a/tests/integration/test_variables.py b/tests/integration/test_variables.py index 3ed00db6..1aaaa9ef 100644 --- a/tests/integration/test_variables.py +++ b/tests/integration/test_variables.py @@ -335,16 +335,16 @@ def test_read_tls_variables(self): """Reading rust tls variables""" self.debugger.cmd('break vars.rs:194', 'New breakpoint') self.debugger.cmd('run', '194 let nop: Option = None;') - self.debugger.cmd('var THREAD_LOCAL_VAR_1', 'vars::THREAD_LOCAL_VAR_1::__getit::__KEY = Cell(2)') - self.debugger.cmd('var THREAD_LOCAL_VAR_2', 'vars::THREAD_LOCAL_VAR_2::__getit::__KEY = Cell<&str>(2)') + self.debugger.cmd('var THREAD_LOCAL_VAR_1', '::VAL = Cell(2)') + self.debugger.cmd('var THREAD_LOCAL_VAR_2', '::VAL = Cell<&str>(2)') # assert uninit tls variables self.debugger.cmd('break vars.rs:199', 'New breakpoint') self.debugger.cmd('continue', '199 let nop: Option = None;') - self.debugger.cmd('var THREAD_LOCAL_VAR_1', 'vars::THREAD_LOCAL_VAR_1::__getit::__KEY = Cell(uninit)') + self.debugger.cmd('var THREAD_LOCAL_VAR_1') # assert tls variables changes in another thread self.debugger.cmd('break vars.rs:203', 'New breakpoint') self.debugger.cmd('continue', '203 let nop: Option = None;') - self.debugger.cmd('var THREAD_LOCAL_VAR_1', 'vars::THREAD_LOCAL_VAR_1::__getit::__KEY = Cell(1)') + self.debugger.cmd('var THREAD_LOCAL_VAR_1', '::VAL = Cell(1)') def test_custom_select(self): """Reading memory by select expressions"""