From 506ee0014a00f1943496592fb927075331ef66f3 Mon Sep 17 00:00:00 2001 From: Richard Patel Date: Wed, 23 Feb 2022 00:59:50 +0100 Subject: [PATCH] rbpf-cli: add coverage flag - adds DWARF parser using gimli - adds coverage module to derive an execution trace to line numbers - adds a gcov module to export a coverage profile to gcov intermediate JSON format - add basic CLI logger --- Cargo.lock | 907 +++++++++++++++++++-------------------- rbpf-cli/Cargo.toml | 5 + rbpf-cli/src/coverage.rs | 257 +++++++++++ rbpf-cli/src/gcov.rs | 21 + rbpf-cli/src/logger.rs | 32 ++ rbpf-cli/src/main.rs | 65 ++- 6 files changed, 813 insertions(+), 474 deletions(-) create mode 100644 rbpf-cli/src/coverage.rs create mode 100644 rbpf-cli/src/gcov.rs create mode 100644 rbpf-cli/src/logger.rs diff --git a/Cargo.lock b/Cargo.lock index 1f475ec09e..617b12ba16 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,7 +60,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.6", "once_cell", "version_check", ] @@ -82,9 +82,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi 0.3.9", ] @@ -150,9 +150,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" dependencies = [ "async-stream-impl", "futures-core", @@ -160,12 +160,12 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -175,8 +175,8 @@ version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -193,15 +193,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47594e438a243791dba58124b6669561f5baa14cb12046641d8008bf035e5a25" +checksum = "f523b4e98ba6897ae90994bc18423d9877c54f9047b06a00ddc8122a957b1c70" dependencies = [ "async-trait", "axum-core", @@ -228,9 +228,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a671c9ae99531afdd5d3ee8340b8da547779430689947144c140fc74a740244" +checksum = "d3ddbd16eabff8b45f21b98671fddcc93daaa7ac4c84f8473693437226040de5" dependencies = [ "async-trait", "bytes", @@ -247,7 +247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ "futures-core", - "getrandom 0.2.3", + "getrandom 0.2.6", "instant", "pin-project-lite", "rand 0.8.5", @@ -268,9 +268,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "base64ct" -version = "1.3.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874f8444adcb4952a8bc51305c8be95c8ec8237bb0d2e78d2e039f771f8828a0" +checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179" [[package]] name = "bincode" @@ -283,9 +283,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453c49e5950bb0eb63bb3df640e31618846c89d5b7faa54040d76e98e0134375" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" dependencies = [ "bitflags", "cexpr", @@ -293,8 +293,8 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "regex", "rustc-hash", "shlex", @@ -330,18 +330,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake3" version = "1.3.1" @@ -380,9 +368,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" dependencies = [ "generic-array 0.14.5", ] @@ -421,7 +409,7 @@ dependencies = [ "borsh-derive-internal", "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", - "proc-macro2 1.0.32", + "proc-macro2 1.0.37", "syn 1.0.91", ] @@ -431,8 +419,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -442,8 +430,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -467,9 +455,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.8.0" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" [[package]] name = "bv" @@ -517,8 +505,8 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -563,9 +551,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d74260d9bf6944e2208aa46841b4b8f0d7ffc0849a06837b2f510337f86b2b" +checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23" dependencies = [ "serde", ] @@ -598,7 +586,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.7", + "semver", "serde", "serde_json", ] @@ -609,25 +597,25 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" dependencies = [ - "rustc_version 0.4.0", + "rustc_version", ] [[package]] name = "cc" -version = "1.0.71" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" dependencies = [ "jobserver", ] [[package]] name = "cexpr" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db507a7679252d2276ed0dd8113c6875ec56d3089f9225b2b42c30cc1f8e5c89" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 6.1.2", + "nom", ] [[package]] @@ -686,9 +674,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.2.2" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10612c0ec0e0a1ff0e97980647cb058a6e7aedb913d01d009c406b8b7d0b26ee" +checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21" dependencies = [ "glob", "libc", @@ -697,9 +685,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", @@ -712,16 +700,16 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.8" +version = "3.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c47df61d9e16dc010b55dba1952a57d8c215dbb533fd13cdd13369aac73b1c" +checksum = "7c167e37342afc5f33fd87bbc870cedd020d2a6dffa05d45ccd9241fbdd146db" dependencies = [ "atty", "bitflags", "clap_derive", + "clap_lex", "indexmap", "lazy_static", - "os_str_bytes", "strsim 0.10.0", "termcolor", "textwrap 0.15.0", @@ -735,16 +723,25 @@ checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1" dependencies = [ "heck", "proc-macro-error", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] -name = "cmake" -version = "0.1.46" +name = "clap_lex" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7b858541263efe664aead4a5209a4ae5c5d2811167d4ed4ee0944503f8d2089" +checksum = "189ddd3b5d32a70b35e7686054371742a937b0d99128e76dde6340210e966669" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "cmake" +version = "0.1.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" dependencies = [ "cc", ] @@ -818,8 +815,8 @@ version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "unicode-xid 0.2.2", ] @@ -837,9 +834,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -865,18 +862,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if 1.0.0", ] @@ -917,10 +914,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" dependencies = [ + "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "lazy_static", @@ -930,9 +928,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if 1.0.0", "lazy_static", @@ -1047,14 +1045,14 @@ checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" [[package]] name = "derive_more" -version = "0.99.16" +version = "0.99.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", - "proc-macro2 1.0.32", - "quote 1.0.10", - "rustc_version 0.3.3", + "proc-macro2 1.0.37", + "quote 1.0.18", + "rustc_version", "syn 1.0.91", ] @@ -1099,7 +1097,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ - "block-buffer 0.10.0", + "block-buffer 0.10.2", "crypto-common", "subtle", ] @@ -1165,9 +1163,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "ed25519" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc" +checksum = "3d5c4b5e5959dc2c2b89918d8e2cc40fcdd623cef026ed09d2f0ee05199dc8e4" dependencies = [ "signature", ] @@ -1200,13 +1198,13 @@ dependencies = [ [[package]] name = "educe" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b50932a01e7ec5c06160492ab660fb19b6bb2a7878030dd6cd68d21df9d4d" +checksum = "c07b7cc9cd8c08d10db74fca3b20949b9b6199725c04a0cce6d543496098fcac" dependencies = [ "enum-ordinalize", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -1224,9 +1222,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.29" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a74ea89a0a1b98f6332de42c95baff457ada66d1cb4030f9ff151b2041a1c746" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if 1.0.0", ] @@ -1246,21 +1244,22 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] name = "enum-ordinalize" -version = "3.1.10" +version = "3.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b166c9e378360dd5a6666a9604bb4f54ae0cac39023ffbac425e917a2a04fef" +checksum = "2170fc0efee383079a8bdd05d6ea2a184d2a0f07a1c1dcabdb2fd5e9f24bc36c" dependencies = [ "num-bigint", "num-traits", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", + "rustc_version", "syn 1.0.91", ] @@ -1326,6 +1325,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fast-math" version = "0.1.1" @@ -1337,9 +1342,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" dependencies = [ "instant", ] @@ -1363,9 +1368,9 @@ checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] name = "filedescriptor" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed3d8a5e20435ff00469e51a0d82049bae66504b5c429920dadf9bb54d47b3f" +checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e" dependencies = [ "libc", "thiserror", @@ -1374,9 +1379,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1386,9 +1391,9 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" +checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" [[package]] name = "flate2" @@ -1445,12 +1450,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "futures" version = "0.1.31" @@ -1512,8 +1511,8 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -1619,15 +1618,26 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + [[package]] name = "glob" version = "0.3.0" @@ -1679,9 +1689,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ "bytes", "fnv", @@ -1692,7 +1702,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.6.9", + "tokio-util 0.7.1", "tracing", ] @@ -1818,15 +1828,15 @@ checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" [[package]] name = "httparse" -version = "1.5.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "6330e8a36bd8c859f3fa6d9382911fbb7147ec39807f63b923933a247240b9ba" [[package]] name = "httpdate" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "humantime" @@ -1836,9 +1846,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.14" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes", "futures-channel", @@ -1849,7 +1859,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", + "itoa 1.0.1", "pin-project-lite", "socket2", "tokio", @@ -1971,9 +1981,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1f03d4ab4d5dc9ec2d219f86c15d2a15fc08239d1cd3b2d6a19717c0a2f443" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "generic-array 0.14.5", ] @@ -1995,9 +2005,9 @@ checksum = "9448015e586b611e5d322f6703812bbca2f1e709d5773ecd38ddb4e3bb649504" [[package]] name = "ipnet" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "itertools" @@ -2100,8 +2110,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -2215,9 +2225,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" [[package]] name = "librocksdb-sys" @@ -2283,9 +2293,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +checksum = "6f35facd4a5673cb5a48822be2be1d4236c1c99cb4113cab7061ac720d5bf859" dependencies = [ "cc", "pkg-config", @@ -2306,18 +2316,19 @@ checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if 1.0.0", ] @@ -2366,9 +2377,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] @@ -2393,9 +2404,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minimal-lexical" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c64630dcdd71f1a64c435f54885086a0de5d6a12d104d69b165fb7d5286d677" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" @@ -2421,14 +2432,15 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", "miow", "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", "winapi 0.3.9", ] @@ -2457,8 +2469,8 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -2470,9 +2482,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -2499,9 +2511,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d99b651ff9697d6710f9613a07c5b4e0d655040faf56b3b471af108d55597" +checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2511,41 +2523,28 @@ dependencies = [ [[package]] name = "nom" -version = "6.1.2" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" -dependencies = [ - "bitvec", - "funty", - "memchr", - "version_check", -] - -[[package]] -name = "nom" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffd9d26838a953b4af82cbeb9f1592c6798916983959be223a7124e992742c1" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] name = "ntapi" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" dependencies = [ "winapi 0.3.9", ] [[package]] name = "num-bigint" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ "autocfg", "num-integer", @@ -2558,8 +2557,8 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -2607,17 +2606,17 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" dependencies = [ - "proc-macro-crate 1.1.0", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro-crate 1.1.3", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] name = "num_threads" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" dependencies = [ "libc", ] @@ -2630,9 +2629,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "once_cell" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] name = "opaque-debug" @@ -2662,24 +2661,24 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.0.5+3.0.2" +version = "111.18.0+1.1.1n" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd053af511ee4439768d9b839a1cdb32eee00f52fe5f748d64c0e8f73194ba1" +checksum = "7897a926e1e8d00219127dc020130eca4292e5ca666dd592480d72c3eca2ff6c" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.70" +version = "0.9.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6517987b3f8226b5da3661dad65ff7f300cc59fb5ea8333ca191fc65fde3edf" +checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" dependencies = [ "autocfg", "cc", @@ -2713,9 +2712,6 @@ name = "os_str_bytes" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] [[package]] name = "ouroboros" @@ -2736,8 +2732,8 @@ checksum = "084fd65d5dd8b3772edccb5ffd1e4b7eba43897ecd0f9401e330e8c542959408" dependencies = [ "Inflector", "proc-macro-error", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -2773,7 +2769,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core 0.9.1", + "parking_lot_core 0.9.2", ] [[package]] @@ -2792,15 +2788,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954" +checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", - "windows-sys 0.32.0", + "windows-sys 0.34.0", ] [[package]] @@ -2884,8 +2880,8 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -2925,29 +2921,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] name = "pin-project-lite" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" +checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" [[package]] name = "pin-utils" @@ -2968,9 +2964,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.22" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "plain" @@ -2992,15 +2988,15 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "predicates" -version = "2.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6ce811d0b2e103743eec01db1c50612221f173084ce2f7941053e94b6bb474" +checksum = "a5aab5be6e4732b473071984b3164dbbfb7a3674d30ea5ff44410b6bcd960c3c" dependencies = [ "difflib", "itertools", @@ -3009,15 +3005,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451" +checksum = "da1c2388b1513e1b605fcec39a95e0a9e8ef088f71443ef37099fa9ae6673fcb" [[package]] name = "predicates-tree" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338c7be2905b732ae3984a2f40032b5e94fd8f52505b186c7d4d68d193445df7" +checksum = "4d86de6de25020a36c6d3643a86d9a6a9f552107c0559c60ea03551b5e16c032" dependencies = [ "predicates-core", "termtree", @@ -3031,11 +3027,11 @@ checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5" [[package]] name = "prettyplease" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b83ec2d0af5c5c556257ff52c9f98934e243b9fd39604bfb2a9b75ec2e97f18" +checksum = "d9e07e3a46d0771a8a06b5f4441527802830b43e679ba12f44960f48dd4c6803" dependencies = [ - "proc-macro2 1.0.32", + "proc-macro2 1.0.37", "syn 1.0.91", ] @@ -3050,9 +3046,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", "toml", @@ -3065,8 +3061,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", "version_check", ] @@ -3077,8 +3073,8 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "version_check", ] @@ -3093,9 +3089,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.32" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" dependencies = [ "unicode-xid 0.2.2", ] @@ -3122,9 +3118,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd5316aa8f5c82add416dfbc25116b84b748a21153f512917e8143640a71bbd" +checksum = "a07b0857a71a8cb765763950499cae2413c3f9cede1133478c43600d9e146890" dependencies = [ "bytes", "prost-derive", @@ -3132,9 +3128,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "328f9f29b82409216decb172d81e936415d21245befa79cd34c3f29d87d1c50b" +checksum = "120fbe7988713f39d780a58cf1a7ef0d7ef66c6d87e5aa3438940c05357929f4" dependencies = [ "bytes", "cfg-if 1.0.0", @@ -3154,22 +3150,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df35198f0777b75e9ff669737c6da5136b59dba33cf5a010a6d1cc4d56defc6f" +checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" dependencies = [ "anyhow", "itertools", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] name = "prost-types" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926681c118ae6e512a3ccefd4abbe5521a14f4cc1e207356d4d00c0b7f2006fd" +checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" dependencies = [ "bytes", "prost", @@ -3237,9 +3233,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7996776e9ee3fc0e5c14476c1a640a17e993c847ae9c81191c2c102fbef903" +checksum = "df185e5e5f7611fa6e628ed8f9633df10114b03bbaecab186ec55822c44ac727" dependencies = [ "futures-util", "libc", @@ -3261,19 +3257,13 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.10" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ - "proc-macro2 1.0.32", + "proc-macro2 1.0.37", ] -[[package]] -name = "radium" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" - [[package]] name = "rand" version = "0.4.6" @@ -3361,7 +3351,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.6", ] [[package]] @@ -3425,7 +3415,12 @@ dependencies = [ name = "rbpf-cli" version = "1.11.0" dependencies = [ - "clap 3.1.8", + "bv", + "clap 3.1.12", + "gimli", + "goblin", + "itertools", + "log", "serde", "serde_json", "solana-bpf-loader-program", @@ -3458,21 +3453,22 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.3", + "getrandom 0.2.6", "redox_syscall", + "thiserror", ] [[package]] @@ -3486,7 +3482,7 @@ dependencies = [ "libm", "parking_lot 0.11.2", "smallvec", - "spin 0.9.2", + "spin 0.9.3", ] [[package]] @@ -3617,29 +3613,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.7", + "semver", ] [[package]] name = "rustix" -version = "0.34.3" +version = "0.34.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb617eb09c4ef1536405e357e3b63f39e3ab4cc2159db05395278ad5c352bb16" +checksum = "3f5d1c6ed6d1c6915aa64749b809fc1bafff49d160f5d927463658093d7d62ab" dependencies = [ "bitflags", "errno", @@ -3663,12 +3650,12 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", - "rustls-pemfile 0.2.1", + "rustls-pemfile 1.0.0", "schannel", "security-framework", ] @@ -3691,6 +3678,15 @@ dependencies = [ "base64 0.13.0", ] +[[package]] +name = "rustls-pemfile" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" +dependencies = [ + "base64 0.13.0", +] + [[package]] name = "rustversion" version = "1.0.6" @@ -3711,9 +3707,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "same-file" @@ -3755,8 +3751,8 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdbda6ac5cd1321e724fa9cee216f3a61885889b896f073b8f82322789c5250e" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -3772,9 +3768,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -3785,23 +3781,14 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", ] -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.7" @@ -3811,15 +3798,6 @@ dependencies = [ "serde", ] -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "serde" version = "1.0.136" @@ -3854,8 +3832,8 @@ version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -3912,8 +3890,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2881bccd7d60fb32dfa3d7b3136385312f8ad75e2674aab2852867a09790cae8" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "rustversion", "syn 1.0.91", ] @@ -4036,9 +4014,9 @@ dependencies = [ [[package]] name = "signature" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" [[package]] name = "simpl" @@ -4058,15 +4036,15 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" [[package]] name = "smallvec" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "smpl_jwt" @@ -4135,7 +4113,7 @@ dependencies = [ name = "solana-accounts-bench" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "log", "rayon", "solana-logger 1.11.0", @@ -4149,7 +4127,7 @@ dependencies = [ name = "solana-accounts-cluster-bench" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "log", "rand 0.7.3", "rayon", @@ -4181,7 +4159,7 @@ dependencies = [ "log", "num-derive", "num-traits", - "rustc_version 0.4.0", + "rustc_version", "serde", "solana-frozen-abi 1.11.0", "solana-frozen-abi-macro 1.11.0", @@ -4206,7 +4184,7 @@ dependencies = [ name = "solana-banking-bench" version = "1.11.0" dependencies = [ - "clap 3.1.8", + "clap 3.1.12", "crossbeam-channel", "log", "rand 0.7.3", @@ -4271,7 +4249,7 @@ dependencies = [ name = "solana-bench-streamer" version = "1.11.0" dependencies = [ - "clap 3.1.8", + "clap 3.1.12", "crossbeam-channel", "solana-net-utils", "solana-streamer", @@ -4282,7 +4260,7 @@ dependencies = [ name = "solana-bench-tps" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "crossbeam-channel", "log", "rayon", @@ -4319,7 +4297,7 @@ dependencies = [ "log", "rand 0.7.3", "rayon", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "solana-frozen-abi 1.11.0", @@ -4368,7 +4346,7 @@ version = "1.11.0" dependencies = [ "bzip2", "cargo_metadata", - "clap 3.1.8", + "clap 3.1.12", "regex", "serial_test", "solana-download-utils", @@ -4381,7 +4359,7 @@ name = "solana-cargo-test-bpf" version = "1.11.0" dependencies = [ "cargo_metadata", - "clap 3.1.8", + "clap 3.1.12", ] [[package]] @@ -4389,7 +4367,7 @@ name = "solana-clap-utils" version = "1.11.0" dependencies = [ "chrono", - "clap 2.33.3", + "clap 2.34.0", "rpassword", "solana-perf", "solana-remote-wallet", @@ -4406,7 +4384,7 @@ name = "solana-clap-v3-utils" version = "1.11.0" dependencies = [ "chrono", - "clap 3.1.8", + "clap 3.1.12", "rpassword", "solana-perf", "solana-remote-wallet", @@ -4424,7 +4402,7 @@ version = "1.11.0" dependencies = [ "bincode", "bs58", - "clap 2.33.3", + "clap 2.34.0", "console", "const_format", "criterion-stats", @@ -4435,7 +4413,7 @@ dependencies = [ "num-traits", "pretty-hex", "reqwest", - "semver 1.0.7", + "semver", "serde", "serde_derive", "serde_json", @@ -4485,13 +4463,13 @@ dependencies = [ "Inflector", "base64 0.13.0", "chrono", - "clap 2.33.3", + "clap 2.34.0", "console", "ed25519-dalek", "humantime", "indicatif", "pretty-hex", - "semver 1.0.7", + "semver", "serde", "serde_json", "solana-account-decoder", @@ -4516,7 +4494,7 @@ dependencies = [ "bincode", "bs58", "bytes", - "clap 2.33.3", + "clap 2.34.0", "crossbeam-channel", "futures 0.3.21", "futures-util", @@ -4534,7 +4512,7 @@ dependencies = [ "rayon", "reqwest", "rustls", - "semver 1.0.7", + "semver", "serde", "serde_derive", "serde_json", @@ -4630,7 +4608,7 @@ dependencies = [ "rayon", "reqwest", "retain_mut", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "serde_json", @@ -4676,7 +4654,7 @@ name = "solana-dos" version = "1.11.0" dependencies = [ "bincode", - "clap 3.1.8", + "clap 3.1.12", "log", "rand 0.7.3", "serde", @@ -4743,7 +4721,7 @@ version = "1.11.0" dependencies = [ "bincode", "byteorder", - "clap 2.33.3", + "clap 2.34.0", "crossbeam-channel", "log", "serde", @@ -4772,7 +4750,7 @@ dependencies = [ "lazy_static", "log", "memmap2", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_bytes", "serde_derive", @@ -4792,7 +4770,7 @@ dependencies = [ "lazy_static", "log", "memmap2", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_bytes", "serde_derive", @@ -4808,9 +4786,9 @@ version = "1.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "798b851026ff2366b318f7818a64846dd1ebc7e613f7893fba07a61cd55e6a48" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", - "rustc_version 0.4.0", + "proc-macro2 1.0.37", + "quote 1.0.18", + "rustc_version", "syn 1.0.91", ] @@ -4818,9 +4796,9 @@ dependencies = [ name = "solana-frozen-abi-macro" version = "1.11.0" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", - "rustc_version 0.4.0", + "proc-macro2 1.0.37", + "quote 1.0.18", + "rustc_version", "syn 1.0.91", ] @@ -4829,7 +4807,7 @@ name = "solana-genesis" version = "1.11.0" dependencies = [ "base64 0.13.0", - "clap 2.33.3", + "clap 2.34.0", "serde", "serde_json", "serde_yaml", @@ -4891,7 +4869,7 @@ version = "1.11.0" dependencies = [ "bincode", "bv", - "clap 2.33.3", + "clap 2.34.0", "crossbeam-channel", "flate2", "indexmap", @@ -4904,7 +4882,7 @@ dependencies = [ "rand 0.7.3", "rand_chacha 0.2.2", "rayon", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_bytes", "serde_derive", @@ -4938,7 +4916,7 @@ dependencies = [ "bincode", "bzip2", "chrono", - "clap 2.33.3", + "clap 2.34.0", "console", "crossbeam-channel", "ctrlc", @@ -4947,7 +4925,7 @@ dependencies = [ "lazy_static", "nix", "reqwest", - "semver 1.0.7", + "semver", "serde", "serde_yaml", "solana-clap-utils", @@ -4968,7 +4946,7 @@ name = "solana-keygen" version = "1.11.0" dependencies = [ "bs58", - "clap 3.1.8", + "clap 3.1.12", "dirs-next", "num_cpus", "solana-clap-v3-utils", @@ -5006,7 +4984,7 @@ dependencies = [ "rayon", "reed-solomon-erasure", "rocksdb", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_bytes", "sha2 0.10.2", @@ -5042,7 +5020,7 @@ dependencies = [ "assert_cmd", "bs58", "bytecount", - "clap 2.33.3", + "clap 2.34.0", "crossbeam-channel", "csv", "dashmap", @@ -5105,7 +5083,7 @@ name = "solana-log-analyzer" version = "1.11.0" dependencies = [ "byte-unit", - "clap 3.1.8", + "clap 3.1.12", "serde", "serde_json", "solana-logger 1.11.0", @@ -5144,7 +5122,7 @@ dependencies = [ name = "solana-merkle-root-bench" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "log", "solana-logger 1.11.0", "solana-measure", @@ -5182,7 +5160,7 @@ dependencies = [ name = "solana-net-shaper" version = "1.11.0" dependencies = [ - "clap 3.1.8", + "clap 3.1.12", "rand 0.7.3", "serde", "serde_json", @@ -5194,7 +5172,7 @@ name = "solana-net-utils" version = "1.11.0" dependencies = [ "bincode", - "clap 3.1.8", + "clap 3.1.12", "crossbeam-channel", "log", "nix", @@ -5271,7 +5249,7 @@ dependencies = [ name = "solana-poh-bench" version = "1.11.0" dependencies = [ - "clap 3.1.8", + "clap 3.1.12", "log", "rand 0.7.3", "rayon", @@ -5311,7 +5289,7 @@ dependencies = [ "num-traits", "parking_lot 0.12.0", "rand 0.7.3", - "rustc_version 0.4.0", + "rustc_version", "rustversion", "serde", "serde_bytes", @@ -5354,7 +5332,7 @@ dependencies = [ "num-traits", "parking_lot 0.12.0", "rand 0.7.3", - "rustc_version 0.4.0", + "rustc_version", "rustversion", "serde", "serde_bytes", @@ -5384,7 +5362,7 @@ dependencies = [ "log", "num-derive", "num-traits", - "rustc_version 0.4.0", + "rustc_version", "serde", "solana-frozen-abi 1.11.0", "solana-frozen-abi-macro 1.11.0", @@ -5437,7 +5415,7 @@ dependencies = [ "num-traits", "parking_lot 0.12.0", "qstring", - "semver 1.0.7", + "semver", "solana-sdk 1.11.0", "thiserror", "uriparse", @@ -5554,7 +5532,7 @@ dependencies = [ "rand_chacha 0.2.2", "rayon", "regex", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "solana-address-lookup-table-program", @@ -5613,7 +5591,7 @@ dependencies = [ "qstring", "rand 0.7.3", "rand_chacha 0.2.2", - "rustc_version 0.4.0", + "rustc_version", "rustversion", "serde", "serde_bytes", @@ -5664,7 +5642,7 @@ dependencies = [ "qstring", "rand 0.7.3", "rand_chacha 0.2.2", - "rustc_version 0.4.0", + "rustc_version", "rustversion", "serde", "serde_bytes", @@ -5690,8 +5668,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4d6c73b2dea5705afd28266015a00e7a9c3496a98a45104733fa81e8dabbb5" dependencies = [ "bs58", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "rustversion", "syn 1.0.91", ] @@ -5701,8 +5679,8 @@ name = "solana-sdk-macro" version = "1.11.0" dependencies = [ "bs58", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "rustversion", "syn 1.0.91", ] @@ -5725,7 +5703,7 @@ dependencies = [ name = "solana-stake-accounts" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "solana-clap-utils", "solana-cli-config", "solana-client", @@ -5744,7 +5722,7 @@ dependencies = [ "num-derive", "num-traits", "proptest", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "solana-config-program", @@ -5803,7 +5781,7 @@ dependencies = [ name = "solana-store-tool" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "log", "solana-logger 1.11.0", "solana-runtime", @@ -5839,7 +5817,7 @@ dependencies = [ name = "solana-sys-tuner" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "libc", "log", "nix", @@ -5880,7 +5858,7 @@ version = "1.11.0" dependencies = [ "bincode", "chrono", - "clap 2.33.3", + "clap 2.34.0", "console", "csv", "ctrlc", @@ -5910,7 +5888,7 @@ name = "solana-transaction-dos" version = "1.11.0" dependencies = [ "bincode", - "clap 2.33.3", + "clap 2.34.0", "log", "rand 0.7.3", "rayon", @@ -5971,7 +5949,7 @@ name = "solana-validator" version = "1.11.0" dependencies = [ "chrono", - "clap 2.33.3", + "clap 2.34.0", "console", "core_affinity", "crossbeam-channel", @@ -6022,7 +6000,7 @@ name = "solana-version" version = "1.11.0" dependencies = [ "log", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "solana-frozen-abi 1.11.0", @@ -6038,7 +6016,7 @@ dependencies = [ "log", "num-derive", "num-traits", - "rustc_version 0.4.0", + "rustc_version", "serde", "serde_derive", "solana-frozen-abi 1.11.0", @@ -6054,7 +6032,7 @@ dependencies = [ name = "solana-watchtower" version = "1.11.0" dependencies = [ - "clap 2.33.3", + "clap 2.34.0", "humantime", "log", "solana-clap-utils", @@ -6165,9 +6143,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d" [[package]] name = "spki" @@ -6295,8 +6273,8 @@ version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "unicode-xid 0.2.2", ] @@ -6312,8 +6290,8 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", "unicode-xid 0.2.2", ] @@ -6351,16 +6329,10 @@ dependencies = [ "chrono", "lazy_static", "libc", - "nom 7.0.0", + "nom", "winapi 0.3.9", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tar" version = "0.4.38" @@ -6402,8 +6374,8 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee42b4e559f17bce0385ebf511a7beb67d5cc33c12c96b7f4e9789919d9c10f" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -6423,9 +6395,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] @@ -6442,9 +6414,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a4ec180a2de59b57434704ccfad967f789b12737738798fa08798cd5824c16" +checksum = "507e9898683b6c43a9aa55b64259b721b52ba226e0f3779137e50ad114a4c90b" [[package]] name = "textwrap" @@ -6476,8 +6448,8 @@ version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -6498,9 +6470,9 @@ dependencies = [ [[package]] name = "tikv-jemalloc-sys" -version = "0.4.2+5.2.1-patched.2" +version = "0.4.3+5.2.1-patched.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5844e429d797c62945a566f8da4e24c7fe3fbd5d6617fd8bf7a0b7dc1ee0f22e" +checksum = "a1792ccb507d955b46af42c123ea8863668fae24d03721e40cad6a41773dbb49" dependencies = [ "cc", "fs_extra", @@ -6509,9 +6481,9 @@ dependencies = [ [[package]] name = "tikv-jemallocator" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c14a5a604eb8715bc5785018a37d00739b180bcf609916ddf4393d33d49ccdf" +checksum = "a5b7bcecfafe4998587d636f9ae9d55eb9d0499877b88757767c346875067098" dependencies = [ "libc", "tikv-jemalloc-sys", @@ -6558,9 +6530,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -6580,7 +6552,7 @@ dependencies = [ "bytes", "libc", "memchr", - "mio 0.8.0", + "mio 0.8.2", "num_cpus", "once_cell", "parking_lot 0.12.0", @@ -6593,9 +6565,9 @@ dependencies = [ [[package]] name = "tokio-io-timeout" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90c49f106be240de154571dd31fbe48acb10ba6c6dd6f6517ad603abffa42de9" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" dependencies = [ "pin-project-lite", "tokio", @@ -6607,8 +6579,8 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] @@ -6624,9 +6596,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" dependencies = [ "rustls", "tokio", @@ -6708,9 +6680,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "serde", ] @@ -6756,9 +6728,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d17087af5c80e5d5fc8ba9878e60258065a0a757e35efe7a05b7904bece1943" dependencies = [ "prettyplease", - "proc-macro2 1.0.32", + "proc-macro2 1.0.37", "prost-build", - "quote 1.0.10", + "quote 1.0.18", "syn 1.0.91", ] @@ -6815,9 +6787,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" dependencies = [ "cfg-if 1.0.0", "log", @@ -6828,22 +6800,23 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.18" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", ] [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", + "valuable", ] [[package]] @@ -6870,9 +6843,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.7" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5312f325fe3588e277415f5a6cca1f4ccad0f248c4cd5a4bd33032d7286abc22" +checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" dependencies = [ "sharded-slab", "thread_local", @@ -6915,9 +6888,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" @@ -7052,9 +7025,15 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8-width" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b" +checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "vcpkg" @@ -7070,9 +7049,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "void" @@ -7122,6 +7101,12 @@ version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.80" @@ -7141,17 +7126,17 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -7165,7 +7150,7 @@ version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ - "quote 1.0.10", + "quote 1.0.18", "wasm-bindgen-macro-support", ] @@ -7175,8 +7160,8 @@ version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -7190,9 +7175,9 @@ checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", @@ -7210,18 +7195,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.22.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c475786c6f47219345717a043a37ec04cb4bc185e28853adcc4fa0a947eba630" +checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" dependencies = [ "webpki", ] [[package]] name = "which" -version = "4.2.2" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9" +checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" dependencies = [ "either", "lazy_static", @@ -7286,15 +7271,15 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" +checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", ] [[package]] @@ -7305,9 +7290,9 @@ checksum = "29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca" [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_i686_gnu" @@ -7317,9 +7302,9 @@ checksum = "1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_msvc" @@ -7329,9 +7314,9 @@ checksum = "d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_x86_64_gnu" @@ -7341,9 +7326,9 @@ checksum = "8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_msvc" @@ -7353,9 +7338,9 @@ checksum = "08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "winreg" @@ -7366,12 +7351,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "xattr" version = "0.2.2" @@ -7410,12 +7389,12 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.2.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" +checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", + "proc-macro2 1.0.37", + "quote 1.0.18", "syn 1.0.91", "synstructure", ] diff --git a/rbpf-cli/Cargo.toml b/rbpf-cli/Cargo.toml index 0d5f6bb14d..ef6577869b 100644 --- a/rbpf-cli/Cargo.toml +++ b/rbpf-cli/Cargo.toml @@ -10,7 +10,12 @@ edition = "2021" publish = false [dependencies] +bv = "0.11.1" clap = { version = "3.1.5", features = ["cargo"] } +gimli = "0.26.1" +goblin = { version = "0.5.1", features = ["std"] } +itertools = "0.10.3" +log = { version = "0.4.14", features = ["std"] } serde = "1.0.136" serde_json = "1.0.79" solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.11.0" } diff --git a/rbpf-cli/src/coverage.rs b/rbpf-cli/src/coverage.rs new file mode 100644 index 0000000000..6a10d3e58b --- /dev/null +++ b/rbpf-cli/src/coverage.rs @@ -0,0 +1,257 @@ +use { + crate::gcov::{GcovFile, GcovIntermediate, GcovLine}, + bv::{BitVec, BitsMut}, + gimli::{Dwarf, EndianSlice, LineProgramHeader, RunTimeEndian, Unit, UnitHeader}, + goblin::elf::Elf, + itertools::Itertools, + log::*, + std::{ + borrow::Cow, + collections::{BTreeSet, HashMap}, + fmt::{Debug, Formatter}, + path::{Path, PathBuf}, + }, +}; + +#[derive(Default)] +pub(crate) struct FileCoverage { + file_path: Option, + hits: BTreeSet<(u64, u64)>, +} + +impl FileCoverage { + pub(crate) fn new(file_path: Option) -> Self { + Self { + file_path, + ..FileCoverage::default() + } + } +} + +#[derive(Default)] +pub(crate) struct Coverage { + hits: HashMap, +} + +impl Coverage { + pub(crate) fn from_trace( + elf_bytes: &[u8], + elf: &Elf<'_>, + trace: &[[u64; 12]], + ) -> Result> { + // Find text section. + let text_range = elf + .section_headers + .iter() + .find(|section| elf.shdr_strtab.get_at(section.sh_name) == Some(".text")) + .ok_or("missing .text section")? + .file_range() + .ok_or("invalid .text range")?; + + // Create bitmap of executed instructions. + let mut hits = BitVec::::new_fill(false, (text_range.len() / 8) as u64); + for ins in trace { + hits.set_bit(ins[11], true); + } + + // Teach gimli how to load a section from goblin. + let load_section = |id: gimli::SectionId| -> Result, gimli::Error> { + let file_range = elf + .section_headers + .iter() + .find(|section| { + let section_name = elf.shdr_strtab.get_at(section.sh_name); + section_name == Some(id.name()) + }) + .and_then(|section| section.file_range()); + Ok(match file_range { + None => { + debug!("Section {} not found", id.name()); + Cow::Borrowed(&[][..]) + } + Some(file_range) => { + let section_bytes = &elf_bytes[file_range.start..file_range.end]; + debug!("Section {}: {} bytes", id.name(), section_bytes.len()); + Cow::Borrowed(section_bytes) + } + }) + }; + + // Teach gimli how to switch endianness when needed. + let borrow_section: &dyn for<'a> Fn( + &'a Cow<[u8]>, + ) + -> gimli::EndianSlice<'a, gimli::RunTimeEndian> = + &|section| gimli::EndianSlice::new(&*section, gimli::RunTimeEndian::Little); + + // Load all of the sections. + let dwarf_cow = Dwarf::load(&load_section)?; + + // Create `EndianSlice`s for all of the sections. + let dwarf = dwarf_cow.borrow(&borrow_section); + + let mut cov = Self::default(); + + // Iterate over the compilation units. + let mut iter = dwarf.units(); + while let Some(header) = iter.next()? { + if let Err(e) = cov.process_unit(&dwarf, header, text_range.start as u64, &hits) { + error!("Failed to extract coverage from compile unit: {:?}", e); + } + } + + Ok(cov) + } + + fn process_unit( + &mut self, + dwarf: &Dwarf>, + header: UnitHeader, usize>, + text_section_offset: u64, + hits: &bv::BitVec, + ) -> Result<(), Box> { + debug!( + "Line number info for unit at <.debug_info+0x{:x}>", + header.offset().as_debug_info_offset().unwrap().0 + ); + let unit = dwarf.unit(header)?; + + // Get the line program for the compilation unit. + let program = match unit.line_program.clone() { + None => return Ok(()), + Some(program) => program, + }; + + let comp_dir = if let Some(ref dir) = unit.comp_dir { + PathBuf::from(dir.to_string_lossy().into_owned()) + } else { + PathBuf::new() + }; + + // Iterate over the line program rows. + let mut rows = program.rows(); + while let Some((header, row)) = rows.next_row()? { + if row.end_sequence() { + warn!( + "Possible gap in addresses: {:x} end-sequence", + row.address() + ); + continue; + } + + // Determine line/column. DWARF line/column is never 0, so we use that + // but other applications may want to display this differently. + let line = match row.line() { + Some(line) => line.get(), + None => 0, + }; + let column = match row.column() { + gimli::ColumnType::LeftEdge => 0, + gimli::ColumnType::Column(column) => column.get(), + }; + + if let Some(ins_index) = row + .address() + .checked_sub(text_section_offset) + .map(|x| x / 8) + { + if hits[ins_index] { + self.file_coverage(&comp_dir, dwarf, &unit, row, header) + .hits + .insert((line, column)); + } + } + } + + Ok(()) + } + + fn file_coverage( + &mut self, + comp_dir: &Path, + dwarf: &Dwarf>, + unit: &Unit>, + row: &gimli::LineRow, + header: &LineProgramHeader, usize>, + ) -> &mut FileCoverage { + let file_index = row.file_index(); + self.hits.entry(file_index).or_insert_with(|| { + // Create new FileCoverage object. + // Read path from ELF. + let file_path = row.file(header).and_then(|file| { + let mut path = PathBuf::from(comp_dir); + + // The directory index 0 is defined to correspond to the compilation unit directory. + if file.directory_index() != 0 { + if let Some(dir) = file.directory(header) { + path.push( + dwarf + .attr_string(unit, dir) + .ok()? + .to_string_lossy() + .as_ref(), + ); + } + } + + path.push( + dwarf + .attr_string(unit, file.path_name()) + .ok()? + .to_string_lossy() + .as_ref(), + ); + + Some(path) + }); + // Return newly created file cov object. + FileCoverage::new(file_path) + }) + } +} + +impl Debug for Coverage { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + for file_cov in self.hits.values() { + let file_path = match file_cov.file_path.as_ref() { + Some(p) => p, + None => continue, + }; + for (line, number) in &file_cov.hits { + writeln!(f, "file={:?} line={} col={}", file_path, line, number)?; + } + } + Ok(()) + } +} + +impl From<&Coverage> for GcovIntermediate { + fn from(cov: &Coverage) -> Self { + GcovIntermediate { + files: cov.hits.values().map(|file| file.into()).collect(), + } + } +} + +impl From<&FileCoverage> for GcovFile { + fn from(cov: &FileCoverage) -> Self { + let lines = cov + .hits + .iter() + .group_by(|(line, _)| line) + .into_iter() + .map(|(line, cols)| GcovLine { + line_number: *line, + count: cols.count(), // TODO count actual hits here, not cols + }) + .collect::>(); + GcovFile { + file: cov + .file_path + .as_ref() + .map(|x| x.to_string_lossy().to_string()) + .unwrap_or_else(|| "".to_string()), + lines, + } + } +} diff --git a/rbpf-cli/src/gcov.rs b/rbpf-cli/src/gcov.rs new file mode 100644 index 0000000000..6be664eb3e --- /dev/null +++ b/rbpf-cli/src/gcov.rs @@ -0,0 +1,21 @@ +use serde::Serialize; + +/// Gcov JSON intermediate format. +/// +/// Documented in [man gcov.1](https://man7.org/linux/man-pages/man1/gcov.1.html) +#[derive(Serialize)] +pub struct GcovIntermediate { + pub files: Vec, +} + +#[derive(Serialize)] +pub struct GcovFile { + pub file: String, + pub lines: Vec, +} + +#[derive(Serialize)] +pub struct GcovLine { + pub line_number: u64, + pub count: usize, +} diff --git a/rbpf-cli/src/logger.rs b/rbpf-cli/src/logger.rs new file mode 100644 index 0000000000..3162a6054f --- /dev/null +++ b/rbpf-cli/src/logger.rs @@ -0,0 +1,32 @@ +use log::{Level, LevelFilter, Log, Metadata, Record}; + +#[derive(Default)] +pub(crate) struct Logger { + pub(crate) verbose: bool, +} + +impl Logger { + pub(crate) fn new(verbose: bool) -> Self { + log::set_max_level(LevelFilter::Debug); + Self { verbose } + } +} + +impl Log for Logger { + fn enabled(&self, metadata: &Metadata) -> bool { + let target = if self.verbose { + Level::Debug + } else { + Level::Info + }; + metadata.level() <= target + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + eprintln!("{}", record.args()); + } + } + + fn flush(&self) {} +} diff --git a/rbpf-cli/src/main.rs b/rbpf-cli/src/main.rs index d4f75975d3..ff8f965372 100644 --- a/rbpf-cli/src/main.rs +++ b/rbpf-cli/src/main.rs @@ -1,5 +1,12 @@ +mod coverage; +mod gcov; +mod logger; + use { + crate::{coverage::Coverage, gcov::GcovIntermediate, logger::Logger}, clap::{crate_version, Arg, Command}, + goblin::elf::Elf, + log::*, serde::{Deserialize, Serialize}, serde_json::Result, solana_bpf_loader_program::{ @@ -44,10 +51,10 @@ struct Input { fn load_accounts(path: &Path) -> Result { let file = File::open(path).unwrap(); let input: Input = serde_json::from_reader(file)?; - eprintln!("Program input:"); - eprintln!("accounts {:?}", &input.accounts); - eprintln!("instruction_data {:?}", &input.instruction_data); - eprintln!("----------------------------------------"); + info!("Program input:"); + info!("accounts {:?}", &input.accounts); + info!("instruction_data {:?}", &input.instruction_data); + info!("----------------------------------------"); Ok(input) } @@ -146,6 +153,11 @@ native machine code before execting it in the virtual machine.", .short('t') .long("trace"), ) + .arg( + Arg::new("verbose") + .help("Show additional information") + .long("verbose"), + ) .arg( Arg::new("profile") .help("Output profile to 'profile.dot' file using tracing instrumentation") @@ -167,10 +179,19 @@ native machine code before execting it in the virtual machine.", .takes_value(true) .possible_values(&["json", "json-compact"]), ) + .arg( + Arg::new("coverage") + .help("Output coverage profile") + .short('c') + .long("coverage"), + ) .get_matches(); + log::set_boxed_logger(Box::new(Logger::new(matches.is_present("verbose")))).unwrap(); let config = Config { - enable_instruction_tracing: matches.is_present("trace") || matches.is_present("profile"), + enable_instruction_tracing: matches.is_present("trace") + || matches.is_present("profile") + || matches.is_present("coverage"), enable_symbol_and_section_labels: true, ..Config::default() }; @@ -322,21 +343,21 @@ native machine code before execting it in the virtual machine.", println!("{}", serde_json::to_string(&output).unwrap()); } _ => { - println!("Program output:"); - println!("{:?}", output); + info!("Program output:"); + info!("{:?}", output); } } if matches.is_present("trace") { - eprintln!("Trace is saved in trace.out"); + info!("Trace is saved in trace.out"); let mut file = File::create("trace.out").unwrap(); vm.get_tracer() .write(&mut file, analysis.analyze()) .unwrap(); } if matches.is_present("profile") { - eprintln!("Profile is saved in profile.dot"); - let tracer = &vm.get_tracer(); + info!("Profile is saved in profile.dot"); + let tracer = vm.get_tracer(); let analysis = analysis.analyze(); let dynamic_analysis = DynamicAnalysis::new(tracer, analysis); let mut file = File::create("profile.dot").unwrap(); @@ -344,6 +365,30 @@ native machine code before execting it in the virtual machine.", .visualize_graphically(&mut file, Some(&dynamic_analysis)) .unwrap(); } + if matches.is_present("coverage") { + // Read ELF to buffer. + let elf_size = file.seek(SeekFrom::End(0)).unwrap(); + file.seek(SeekFrom::Start(0)).unwrap(); + let mut elf_bytes = Vec::::with_capacity(elf_size as usize); + file.read_to_end(&mut elf_bytes) + .expect("failed to read ELF"); + // Parse ELF. + let elf = Elf::parse(&elf_bytes).expect("invalid ELF"); + // Get register state trace. + let tracer = vm.get_tracer(); + // Create coverage profile. + match Coverage::from_trace(&elf_bytes, &elf, &tracer.log) { + Err(err) => error!("Failed to build coverage profile: {}", err), + Ok(cov) => { + info!("Code coverage is saved in coverage.json"); + trace!("{:?}", cov); + let mut file = File::create("coverage.json").unwrap(); + let gcov: GcovIntermediate = (&cov).into(); + serde_json::to_writer_pretty(&mut file, &gcov) + .expect("Failed to write coverage JSON"); + } + } + } } #[derive(Serialize)]