diff --git a/Cargo.lock b/Cargo.lock index acf52f1ea4..67a0d40694 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ name = "aho-corasick" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -48,7 +48,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "arrayvec" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", @@ -69,24 +69,30 @@ dependencies = [ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "autocfg" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "backtrace" -version = "0.3.9" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -147,7 +153,7 @@ name = "blake2-rfc" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -232,7 +238,7 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.25" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -259,7 +265,7 @@ dependencies = [ "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -352,11 +358,11 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-epoch 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -364,7 +370,7 @@ name = "crossbeam-epoch" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -375,12 +381,12 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -396,7 +402,7 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -519,7 +525,7 @@ name = "error-chain" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -527,7 +533,7 @@ name = "failure" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -538,7 +544,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -595,7 +601,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -628,13 +634,13 @@ dependencies = [ "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "h2" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -708,8 +714,8 @@ dependencies = [ "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -718,20 +724,20 @@ dependencies = [ [[package]] name = "hyper" -version = "0.12.16" +version = "0.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -759,7 +765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -870,7 +876,7 @@ name = "libloading" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -880,7 +886,7 @@ version = "5.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bindgen 0.37.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "make-cmd 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -930,7 +936,7 @@ dependencies = [ [[package]] name = "memchr" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1028,9 +1034,9 @@ dependencies = [ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1053,7 +1059,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1095,7 +1101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "num_cpus" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1108,7 +1114,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "openssl" -version = "0.10.15" +version = "0.10.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1116,7 +1122,7 @@ dependencies = [ "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1126,10 +1132,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "openssl-sys" -version = "0.9.39" +version = "0.9.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1420,23 +1426,12 @@ dependencies = [ "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rbpf" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", - "combine 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1444,7 +1439,7 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1455,7 +1450,7 @@ dependencies = [ "argon2rs 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1464,7 +1459,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1496,7 +1491,7 @@ dependencies = [ "encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "libflate 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1517,7 +1512,7 @@ name = "ring" version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1528,7 +1523,7 @@ name = "rlua" version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1545,7 +1540,7 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1633,7 +1628,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1709,7 +1704,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1782,14 +1777,6 @@ dependencies = [ "solana-sdk 0.12.0", ] -[[package]] -name = "solana-bpf-noop" -version = "0.12.0" -dependencies = [ - "rbpf 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.0", -] - [[package]] name = "solana-bpfloader" version = "0.12.0" @@ -1802,7 +1789,7 @@ dependencies = [ "serde 1.0.82 (registry+https://github.com/rust-lang/crates.io-index)", "solana-logger 0.12.0", "solana-sdk 0.12.0", - "solana_rbpf 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "solana_rbpf 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1917,7 +1904,7 @@ name = "solana-jsonrpc-http-server" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "solana-jsonrpc-core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1930,7 +1917,7 @@ name = "solana-jsonrpc-http-server" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", "solana-jsonrpc-core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1987,7 +1974,7 @@ dependencies = [ "globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "solana-jsonrpc-core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2003,7 +1990,7 @@ dependencies = [ "globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "solana-jsonrpc-core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2233,7 +2220,7 @@ dependencies = [ [[package]] name = "solana_rbpf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2241,7 +2228,7 @@ dependencies = [ "elfkit 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2271,7 +2258,7 @@ dependencies = [ [[package]] name = "syn" -version = "0.15.22" +version = "0.15.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2294,7 +2281,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2303,7 +2290,7 @@ name = "sys-info" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2315,7 +2302,7 @@ dependencies = [ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2334,7 +2321,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2356,11 +2343,11 @@ dependencies = [ [[package]] name = "time" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2372,7 +2359,7 @@ dependencies = [ "bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2438,12 +2425,12 @@ name = "tokio-reactor" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2468,11 +2455,11 @@ name = "tokio-threadpool" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2482,7 +2469,7 @@ name = "tokio-timer" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2725,11 +2712,12 @@ dependencies = [ "checksum ar 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "579681b3fecd1e9d6b5ce6969e05f9feb913f296eddaf595be1166a5ca597bc4" "checksum argon2rs 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f67b0b6a86dae6e67ff4ca2b6201396074996379fba2b92ff649126f37cb392" "checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee" -"checksum arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f405cc4c21cd8b784f6c8fc2adf9bc00f59558f0049b5ec21517f875963040cc" +"checksum arrayvec 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "d18513977c2d8261c448511c5c53dc66b26dfccbc3d4446672dea1e71a7d8a26" "checksum ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae7d751998c189c1d4468cf0a39bb2eae052a9c58d50ebb3b9591ee3813ad50" "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" -"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" -"checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" +"checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727" +"checksum backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b5b493b66e03090ebc4343eb02f94ff944e0cbc9ac6571491d170ba026741eb5" +"checksum backtrace-sys 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3fcce89e5ad5c8949caa9434501f7b55415b3e7ad5270cb88c75a8d35e8f1279" "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" "checksum bincode 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9f2fb9e29e72fd6bc12071533d5dc7664cb01480c59406f656d7ac25c7bd8ff7" "checksum bindgen 0.37.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1b25ab82877ea8fe6ce1ce1f8ac54361f0218bad900af9eb11803994bf67c221" @@ -2748,7 +2736,7 @@ dependencies = [ "checksum byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" "checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" "checksum bytes 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "40ade3d27603c2cb345eb0912aec461a6dec7e06a4ae48589904e808335c7afa" -"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" +"checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749" "checksum cexpr 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42aac45e9567d97474a834efdee3081b3c942b2205be932092f53354ce503d6c" "checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" @@ -2762,11 +2750,11 @@ dependencies = [ "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa" "checksum crc32fast 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e91d5240c6975ef33aeb5f148f35275c25eda8e8a5f95abe421978b05b8bf192" "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" -"checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3" +"checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13" "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" -"checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8" +"checksum crossbeam-epoch 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f10a4f8f409aaac4b16a5474fb233624238fcdeefb9ba50d5ea059aab63ba31c" "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" -"checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816" +"checksum crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "41ee4864f4797060e52044376f7d107429ce1fb43460021b126424b7180ee21a" "checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" "checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c" "checksum dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "88972de891f6118092b643d85a0b28e0678e0f948d7f879aa32f2d5aafe97d2a" @@ -2794,7 +2782,7 @@ dependencies = [ "checksum generic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef25c5683767570c2bbd7deba372926a55eaae9982d7726ee2a1050239d45b9d" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" "checksum globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4743617a7464bbda3c8aec8558ff2f9429047e025771037df561d383337ff865" -"checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" +"checksum h2 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "1ac030ae20dee464c5d0f36544d8b914a6bc606da44a57e052d2b0f5dae129e0" "checksum hashbrown 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "64b7d419d0622ae02fe5da6b9a5e1964b610a65bb37923b976aeebb6dbb8f86e" "checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" @@ -2802,7 +2790,7 @@ dependencies = [ "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" "checksum humantime 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca7e5f2e110db35f93b837c81797f3714500b81d517bf20c431b16d3ca4f114" "checksum hyper 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "df0caae6b71d266b91b4a83111a61d2b94ed2e2bea024c532b933dcff867e58c" -"checksum hyper 0.12.16 (registry+https://github.com/rust-lang/crates.io-index)" = "0aeedb8ca5f0f96be00f84073c6d0d5f962ecad020ef543dff99a7c12717a60e" +"checksum hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)" = "f1ebec079129e43af5e234ef36ee3d7e6085687d145b7ea653b262d16c6b65f1" "checksum hyper-native-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d375598f442742b0e66208ee12501391f1c7ac0bafb90b4fe53018f81f06068" "checksum hyper-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "32cd73f14ad370d3b4d4b7dce08f69b81536c82e39fcc89731930fe5788cd661" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" @@ -2827,7 +2815,7 @@ dependencies = [ "checksum make-cmd 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8ca8afbe8af1785e09636acb5a41e08a765f5f0340568716c18a8700ba3c0d3" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" "checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" -"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16" +"checksum memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db4c41318937f6e76648f42826b1d9ade5c09cafb5aef7e351240a70f39206e9" "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0a907b83e7b9e987032439a387e187119cddafc92d5c2aaeb1d92580a793f630" @@ -2844,11 +2832,11 @@ dependencies = [ "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" -"checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" +"checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238" "checksum opaque-debug 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "51ecbcb821e1bd256d456fe858aaa7f380b63863eab2eb86eee1bd9f33dd6682" -"checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613" +"checksum openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ec7bd7ca4cce6dbdc77e7c1230682740d307d1218a87fb0349a571272be749f9" "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" -"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" +"checksum openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)" = "1bb974e77de925ef426b6bc82fce15fd45bdcbeb5728bffcfc7cdeeb7ce1c2d6" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" @@ -2883,8 +2871,7 @@ dependencies = [ "checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3" "checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473" "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356" -"checksum rbpf 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9c11162e7a92d2ede17ea2e5ef83025fd3e252638e43bf92294ea61791d1c4" -"checksum redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "679da7508e9a6390aeaf7fbd02a800fdc64b73fe2204dd2c8ae66d22d9d5ad5d" +"checksum redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "a84bcd297b87a545980a2d25a0beb72a1f490c31f0a9fde52fca35bfbb1ceb70" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum redox_users 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "214a97e49be64fd2c86f568dd0cb2c757d2cc53de95b273b6ad0a1c908482f26" "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" @@ -2894,7 +2881,7 @@ dependencies = [ "checksum ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a" "checksum rlua 0.15.3 (registry+https://github.com/rust-lang/crates.io-index)" = "187f5174337682c1ae2d957b107f4c84e204ce2e084c76532194d3849db09a28" "checksum rocksdb 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39be726e556e6f21d54d21cdf1be9f6df30c0411a5856c1abf3f4bb12498f2ed" -"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" +"checksum rustc-demangle 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "01b90379b8664dd83460d59bdc5dd1fd3172b8913788db483ed1325171eab2f7" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" @@ -2928,12 +2915,12 @@ dependencies = [ "checksum solana-jsonrpc-server-utils 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6acfebc12e709d8525f039e7135b922fb7efaf49cd536ad97bbedd0391dcf989" "checksum solana-jsonrpc-ws-server 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a21f3c0cd97c2673854b1e4558cea4dba59fce27ec9f0e130f847da9e10355c" "checksum solana-ws 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de774a72a468e65a10791246f0335869a19bed7d85ba3c05381c4bb6247acb7f" -"checksum solana_rbpf 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "54bbd72559d4234ba8de64fed347f63cf6f4916630f38feb4f78affb044e27e6" +"checksum solana_rbpf 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "15165ac3f27bf3a967e37059d932f074cfafc35756c98e9b477610f831f8536a" "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" "checksum string 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98998cced76115b1da46f63388b909d118a37ae0be0f82ad35773d4a4bc9d18d" "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -"checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7" +"checksum syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9545a6a093a3f0bd59adb472700acc08cad3776f860f16a897dfce8c88721cbc" "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" "checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" "checksum sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "617f594d3869801871433390254b4a79f2a18176d7f4ad5784fa990bc8c12986" @@ -2942,7 +2929,7 @@ dependencies = [ "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" -"checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" +"checksum time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "847da467bf0db05882a9e2375934a8a55cffdc9db0d128af1518200260ba1f6c" "checksum tokio 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "a7817d4c98cc5be21360b3b37d6036fe9b7aefa5b7a201b7b16ff33423822f7d" "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" "checksum tokio-current-thread 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "331c8acc267855ec06eb0c94618dcbbfea45bed2d20b77252940095273fb58f6" diff --git a/Cargo.toml b/Cargo.toml index 10943193a1..a6d1633ddd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ codecov = { repository = "solana-labs/solana", branch = "master", service = "git [features] bpf_c = ["solana-bpfloader/bpf_c"] +bpf_rust = ["solana-bpfloader/bpf_rust"] chacha = [] cuda = [] erasure = [] @@ -100,7 +101,6 @@ members = [ "ledger-tool", "logger", "metrics", - "programs/bpf/rust/noop", "programs/native/bpf_loader", "programs/native/budget", "programs/native/erc20", @@ -116,3 +116,4 @@ members = [ "vote-signer", "wallet", ] +exclude = ["programs/bpf/rust/noop"] diff --git a/ci/test-stable-perf.sh b/ci/test-stable-perf.sh index 0c4008ec00..09cd8aac80 100755 --- a/ci/test-stable-perf.sh +++ b/ci/test-stable-perf.sh @@ -18,7 +18,10 @@ ci/affects-files.sh \ exit 0 } -FEATURES=bpf_c,erasure,chacha +# Must be built out of band +make -C programs/bpf/rust/noop/ all + +FEATURES=bpf_c,bpf_rust,erasure,chacha if [[ $(uname) = Darwin ]]; then ./build-perf-libs.sh else diff --git a/programs/bpf/rust/noop/.gitignore b/programs/bpf/rust/noop/.gitignore new file mode 100644 index 0000000000..a50bd949cb --- /dev/null +++ b/programs/bpf/rust/noop/.gitignore @@ -0,0 +1,4 @@ +/out/ +/target/ + +Cargo.lock diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index bb4cc6bdaa..7e464b084e 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -1,12 +1,17 @@ + +# Note: This crate must be built using the makefile, try `make help` instead of `cargo build` + [package] -name = "solana-bpf-noop" +name = "solana-bpf-rust-noop" version = "0.12.0" -description = "Solana BPF noop program" +description = "Solana BPF noop program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" [dependencies] -rbpf = "0.1.0" -solana-sdk = { path = "../../../../sdk", version = "0.12.0" } +heapless = { version = "0.4.0", default-features = false } + +[workspace] +members = [] diff --git a/programs/bpf/rust/noop/bpf.ld b/programs/bpf/rust/noop/bpf.ld new file mode 100644 index 0000000000..62a7170662 --- /dev/null +++ b/programs/bpf/rust/noop/bpf.ld @@ -0,0 +1,19 @@ +PHDRS +{ + text PT_LOAD ; + rodata PT_LOAD ; + dynamic PT_DYNAMIC ; +} + +SECTIONS +{ + . = SIZEOF_HEADERS; + .text : { *(.text) } :text + .rodata : { *(.rodata) } :rodata + .dynamic : { *(.dynamic) } :dynamic + .dynsym : { *(.dynsym) } :dynamic + .dynstr : { *(.dynstr) } :dynamic + .gnu.hash : { *(.gnu.hash) } :dynamic + .rel.dyn : { *(.rel.dyn) } :dynamic + .hash : { *(.hash) } :dynamic +} diff --git a/programs/bpf/rust/noop/build.sh b/programs/bpf/rust/noop/build.sh deleted file mode 100755 index 9839ff6f75..0000000000 --- a/programs/bpf/rust/noop/build.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -ex - -# TODO building release flavor with rust produces a bunch of output .bc files -INTERDIR=../../../target/release -OUTDIR="${1:-../../../target/debug/}" -mkdir -p "$OUTDIR" -# cargo +nightly rustc --release -- -C panic=abort --emit=llvm-ir -cargo +nightly rustc --release -- -C panic=abort --emit=llvm-bc -cp "$INTERDIR"/deps/noop_rust-*.bc "$OUTDIR"/noop_rust.bc -/usr/local/opt/llvm/bin/llc -march=bpf -filetype=obj -o "$OUTDIR"/noop_rust.o "$OUTDIR"/noop_rust.bc diff --git a/programs/bpf/rust/noop/dump.sh b/programs/bpf/rust/noop/dump.sh deleted file mode 100755 index 5703734ad9..0000000000 --- a/programs/bpf/rust/noop/dump.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -/usr/local/opt/llvm/bin/llvm-objdump -color -source -disassemble target/release/noop_rust.o diff --git a/programs/bpf/rust/noop/makefile b/programs/bpf/rust/noop/makefile new file mode 100755 index 0000000000..8714aef36f --- /dev/null +++ b/programs/bpf/rust/noop/makefile @@ -0,0 +1,145 @@ +LOCAL_PATH := $(dir $(lastword $(MAKEFILE_LIST))) +SDK_PATH := $(abspath $(LOCAL_PATH)/../../../../sdk/bpf) +INSTALL_SH := $(abspath $(SDK_PATH)/scripts/install.sh) + +all: +.PHONY: help all install dump clean + +ifneq ($(V),1) +_@ :=@ +endif + +TARGET_NAME := solana_bpf_rust_noop +SRC_DIR ?= ./src +OUT_DIR ?= ./out +INSTALL_DIR ?= ./out +CARGO_OUT_DIR ?=$(LOCAL_PATH)target/release + +ifeq ($(DOCKER),1) +$(warning DOCKER=1 is experimential and may not work as advertised) +LLVM_DIR = $(SDK_PATH)/llvm-docker +LLVM_SYSTEM_INC_DIRS := /usr/local/lib/clang/8.0.0/include +else +LLVM_DIR = $(SDK_PATH)/llvm-native +LLVM_SYSTEM_INC_DIRS := $(LLVM_DIR)/lib/clang/8.0.0/include +endif + +CARGO := cargo +ifdef LLVM_DIR +LLC := $(LLVM_DIR)/bin/llc +LLD := $(LLVM_DIR)/bin/ld.lld +OBJ_COPY := $(LLVM_DIR)/bin/llvm-objcopy +OBJ_DUMP := $(LLVM_DIR)/bin/llvm-objdump +endif + +CARGO_FLAGS := \ + +nightly \ + -vv rustc \ + -vv \ + --release \ + -- \ + --emit=llvm-ir \ + -C panic=abort \ + +LLC_FLAGS := \ + -march=bpf \ + -filetype=obj \ + +LLD_FLAGS := \ + -z notext \ + -shared \ + --Bdynamic \ + $(LOCAL_PATH)bpf.ld \ + +OBJ_COPY_FLAGS := \ + --remove-section .eh_frame \ + +OBJ_DUMP_FLAGS := \ + -color \ + -source \ + -disassemble \ + +help: + @echo '' + @echo 'solana-bpf-rust-noop makefile' + @echo '' + @echo 'This makefile will build the solana-bpf-rust-noop crate into a BPF shared object' + @echo '' + @echo 'This makefile is not run as part of the Solana workspace. Doing so' + @echo 'would result in a cargo deadlock since this makefile also calls cargo with parameters' + @echo 'required to build the BPF program from Rust.' + @echo '' + @echo 'Note: Rust BPF programs are tested as part of the Solana integration tests when' + @echo ' feature "bpf_rust" is enabled. The solana-bpf-rust-noop crate must be built' + @echo ' with this makefile first before bulding Solana.' + @echo '' + @echo ' Here is a sample command that will run this BPF program:' + @echo '' + @echo ' export RUST_LOG=solana_bpf_loader=info; cargo test --features="bpf_rust" -- --nocapture test_program_bpf_rust' + @echo '' + @echo 'User settings' + @echo ' - The following setting are overridable on the command line, default values shown:' + @echo ' - Show commands while building: V=1' + @echo ' V=$(V)' + @echo ' - Location to place output files:' + @echo ' OUT_DIR=$(OUT_DIR)' + @echo ' - Location to install the final shared object:' + @echo ' INSTALL_DIR=$(INSTALL_DIR)' + @echo ' - Location of LLVM:' + @echo ' LLVM_DIR=$(LLVM_DIR)' + @echo '' + @echo 'Usage:' + @echo ' - make help - This help message' + @echo ' - make all - Build $(OUT_DIR)/$(TARGET_NAME).so' + @echo ' - make dump - Dumps the contents of $(OUT_DIR)/$(TARGET_NAME).so to stdout, requires greadelf and rustfilt' + @echo '' + +.PHONY: $(INSTALL_SH) +$(INSTALL_SH): + $(_@)$(INSTALL_SH) + +.PRECIOUS: $(OUT_DIR)/%.ll +$(OUT_DIR)/%.ll: $(SRC_DIR)/* + @echo "[cargo] $@ ($<)" + $(_@)mkdir -p $(OUT_DIR) + $(_@)rm -f $(CARGO_OUT_DIR)/deps/$(TARGET_NAME)-*.ll + $(_@)$(CARGO) $(CARGO_FLAGS) + $(_@)cp $(CARGO_OUT_DIR)/deps/$(TARGET_NAME)-*.ll $(OUT_DIR)/$(TARGET_NAME).ll + +.PRECIOUS: $(OUT_DIR)/%.o +$(OUT_DIR)/%.o: $(OUT_DIR)/%.ll $(INSTALL_SH) + @echo "[llc] $@ ($<)" + $(_@)$(LLC) $(LLC_FLAGS) -o $@ $< + $(_@)$(OBJ_COPY) $(OBJ_COPY_FLAGS) $@ + +.PRECIOUS: $(OUT_DIR)/%.so +$(OUT_DIR)/%.so: $(OUT_DIR)/%.o $(INSTALL_SH) + @echo "[lld] $@ ($<)" + $(_@)$(LLD) $(LLD_FLAGS) -o $@ $< + +-include $(wildcard $(OUT_DIR)/$(TARGET_NAME).d) + +define \n + + +endef + +all: $(OUT_DIR)/$(TARGET_NAME).so + +# Warning: Do not build as part of install (e.g. install must not depend +# on $(TARGET_NAME).so) doing so will deadlock cargo due to recrusive +# calls to cargo +install: + $(_@)mkdir -p $(INSTALL_DIR) + $(_@)cp $(OUT_DIR)/$(TARGET_NAME).so $(INSTALL_DIR) + +dump: $(OUT_DIR)/$(TARGET_NAME).so + $(_@)greadelf -aW $(OUT_DIR)/$(TARGET_NAME).so | rustfilt + $(_@)$(OBJ_DUMP) -disassemble -source $(OUT_DIR)/$(TARGET_NAME).so | rustfilt + +test: + cargo test -- --test-threads 1 + +clean: + $(_@)rm -rf $(OUT_DIR) + cargo clean diff --git a/programs/bpf/rust/noop/src/lib.rs b/programs/bpf/rust/noop/src/lib.rs index 029e10f96f..bff0cd8f74 100644 --- a/programs/bpf/rust/noop/src/lib.rs +++ b/programs/bpf/rust/noop/src/lib.rs @@ -1,15 +1,22 @@ -extern crate rbpf; +//! @brief Example Rust-based BPF program that prints out the parameters passed to it -use std::mem::transmute; +#![cfg(not(test))] +#![no_std] -#[no_mangle] -#[link_section = ".text,entrypoint"] // TODO platform independent needed -pub extern "C" fn entrypoint(_raw: *mut u8) { - let bpf_func_trace_printk = unsafe { - transmute::(u64::from( - rbpf::helpers::BPF_TRACE_PRINTK_IDX, - )) - }; +mod solana_sdk; - bpf_func_trace_printk(0, 0, 1, 2, 3); +use solana_sdk::*; + +fn process(ka: &mut [SolKeyedAccount], data: &[u8], info: &SolClusterInfo) -> bool { + sol_log("Tick height:"); + sol_log_64(info.tick_height, 0, 0, 0, 0); + sol_log("Program identifier:"); + sol_log_key(&info.program_id); + + // Log the provided account keys and instruction input data. In the case of + // the no-op program, no account keys or input data are expected but real + // programs will have specific requirements so they can do their work. + sol_log("Account keys and instruction input data:"); + sol_log_params(ka, data); + true } diff --git a/programs/bpf/rust/noop/src/solana_sdk.rs b/programs/bpf/rust/noop/src/solana_sdk.rs new file mode 100644 index 0000000000..69e0fa2256 --- /dev/null +++ b/programs/bpf/rust/noop/src/solana_sdk.rs @@ -0,0 +1,381 @@ +//! @brief Solana Rust-based BPF program utility functions and types + +extern crate heapless; + +use self::heapless::consts::*; +use self::heapless::String; // fixed capacity `std::Vec` // type level integer used to specify capacity +#[cfg(test)] +use self::tests::process; +use core::mem::size_of; +use core::slice::from_raw_parts; +#[cfg(not(test))] +use process; + +extern "C" { + fn sol_log_(message: *const u8); +} +/// Helper function that prints a string to stdout +pub fn sol_log(message: &str) { + let mut c_string: String = String::new(); + if message.len() < 256 { + if c_string.push_str(message).is_err() { + c_string + .push_str("Attempted to log a malformed string\0") + .is_ok(); + } + if c_string.push('\0').is_err() { + c_string.push_str("Failed to log string\0").is_ok(); + }; + } else { + c_string + .push_str("Attempted to log a string that is too long\0") + .is_ok(); + } + unsafe { + sol_log_(c_string.as_bytes().as_ptr()); + } +} + +extern "C" { + fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64); +} +/// Helper function that prints a 64 bit values represented in hexadecimal +/// to stdout +pub fn sol_log_64(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { + unsafe { + sol_log_64_(arg1, arg2, arg3, arg4, arg5); + } +} + +/// Prints the hexadecimal representation of a public key +/// +/// @param key The public key to print +#[allow(dead_code)] +pub fn sol_log_key(key: &SolPubkey) { + for (i, k) in key.key.iter().enumerate() { + sol_log_64(0, 0, 0, i as u64, u64::from(*k)); + } +} + +/// Prints the hexadecimal representation of a slice +/// +/// @param slice The array to print +#[allow(dead_code)] +pub fn sol_log_slice(slice: &[u8]) { + for (i, s) in slice.iter().enumerate() { + sol_log_64(0, 0, 0, i as u64, u64::from(*s)); + } +} + +/// Prints the hexadecimal representation of the program's input parameters +/// +/// @param ka A pointer to an array of SolKeyedAccount to print +/// @param data A pointer to the instruction data to print +#[allow(dead_code)] +pub fn sol_log_params(ka: &[SolKeyedAccount], data: &[u8]) { + sol_log("- Number of KeyedAccounts"); + sol_log_64(0, 0, 0, 0, ka.len() as u64); + for k in ka.iter() { + sol_log("- Is signer"); + sol_log_64(0, 0, 0, 0, k.is_signer as u64); + sol_log("- Key"); + sol_log_key(&k.key); + sol_log("- Tokens"); + sol_log_64(0, 0, 0, 0, k.tokens); + sol_log("- Userdata"); + sol_log_slice(k.userdata); + sol_log("- Owner"); + sol_log_key(&k.owner); + } + sol_log("- Instruction data"); + sol_log_slice(data); +} + +pub const SIZE_PUBKEY: usize = 32; + +/// Public key +pub struct SolPubkey<'a> { + pub key: &'a [u8], +} + +/// Keyed Account +pub struct SolKeyedAccount<'a> { + /// Public key of the account + pub key: SolPubkey<'a>, + /// Public key of the account + pub is_signer: u64, + /// Number of tokens owned by this account + pub tokens: u64, + /// On-chain data within this account + pub userdata: &'a [u8], + /// Program that owns this account + pub owner: SolPubkey<'a>, +} + +/// Information about the state of the cluster immediately before the program +/// started executing the current instruction +pub struct SolClusterInfo<'a> { + /// Current ledger tick + pub tick_height: u64, + ///program_id of the currently executing program + pub program_id: SolPubkey<'a>, +} + +#[no_mangle] +pub extern "C" fn entrypoint(input: *mut u8) -> bool { + const NUM_KA: usize = 1; // Number of KeyedAccounts expected + let mut offset: usize = 0; + + // Number of KeyedAccounts present + + let num_ka = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let num_ka_ptr: *const u64 = input.add(offset) as *const u64; + *num_ka_ptr + }; + offset += 8; + + if num_ka != NUM_KA as u64 { + return false; + } + + // KeyedAccounts + + let is_signer = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let is_signer_ptr: *const u64 = input.add(offset) as *const u64; + *is_signer_ptr + }; + offset += size_of::(); + + let key_slice = unsafe { from_raw_parts(input.add(offset), SIZE_PUBKEY) }; + let key = SolPubkey { key: &key_slice }; + offset += SIZE_PUBKEY; + + let tokens = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let tokens_ptr: *const u64 = input.add(offset) as *const u64; + *tokens_ptr + }; + offset += size_of::(); + + let userdata_length = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let userdata_length_ptr: *const u64 = input.add(offset) as *const u64; + *userdata_length_ptr + } as usize; + offset += size_of::(); + + let userdata = unsafe { from_raw_parts(input.add(offset), userdata_length) }; + offset += userdata_length; + + let owner_slice = unsafe { from_raw_parts(input.add(offset), SIZE_PUBKEY) }; + let owner = SolPubkey { key: &owner_slice }; + offset += SIZE_PUBKEY; + + let mut ka = [SolKeyedAccount { + key, + is_signer, + tokens, + userdata, + owner, + }]; + + // Instruction data + + let data_length = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let data_length_ptr: *const u64 = input.add(offset) as *const u64; + *data_length_ptr + } as usize; + offset += size_of::(); + + let data = unsafe { from_raw_parts(input.add(offset), data_length) }; + offset += data_length; + + // Tick height + + let tick_height = unsafe { + #[allow(clippy::cast_ptr_alignment)] + let tick_height_ptr: *const u64 = input.add(offset) as *const u64; + *tick_height_ptr + }; + offset += size_of::(); + + // Id + + let program_id_slice = unsafe { from_raw_parts(input.add(offset), SIZE_PUBKEY) }; + let program_id: SolPubkey = SolPubkey { + key: &program_id_slice, + }; + + let info = SolClusterInfo { + tick_height, + program_id, + }; + + // Call user implementable function + process(&mut ka, &data, &info) +} + +#[cfg(test)] +mod tests { + extern crate std; + + use self::std::ffi::CStr; + use self::std::println; + use self::std::string::String; + use super::*; + + static mut _LOG_SCENARIO: u64 = 0; + fn get_log_scenario() -> u64 { + unsafe { _LOG_SCENARIO } + } + fn set_log_scenario(test: u64) { + unsafe { _LOG_SCENARIO = test }; + } + + #[no_mangle] + fn sol_log_(message: *const u8) { + let scenario = get_log_scenario(); + let c_str = unsafe { CStr::from_ptr(message as *const i8) }; + let string = c_str.to_str().unwrap(); + match scenario { + 1 => assert_eq!(string, "This is a test message"), + 2 => assert_eq!(string, "Attempted to log a string that is too long"), + 3 => { + let s: String = ['a'; 255].iter().collect(); + assert_eq!(string, s); + } + 4 => println!("{:?}", string), + _ => panic!("Unkown sol_log test"), + } + } + + static mut _LOG_64_SCENARIO: u64 = 0; + fn get_log_64_scenario() -> u64 { + unsafe { _LOG_64_SCENARIO } + } + fn set_log_64_scenario(test: u64) { + unsafe { _LOG_64_SCENARIO = test }; + } + + #[no_mangle] + fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { + let scenario = get_log_64_scenario(); + match scenario { + 1 => { + assert_eq!(1, arg1); + assert_eq!(2, arg2); + assert_eq!(3, arg3); + assert_eq!(4, arg4); + assert_eq!(5, arg5); + } + 2 => { + assert_eq!(0, arg1); + assert_eq!(0, arg2); + assert_eq!(0, arg3); + assert_eq!(arg4 + 1, arg5); + } + 3 => { + assert_eq!(0, arg1); + assert_eq!(0, arg2); + assert_eq!(0, arg3); + assert_eq!(arg4 + 1, arg5); + } + 4 => println!("{:?} {:?} {:?} {:?} {:?}", arg1, arg2, arg3, arg4, arg5), + _ => panic!("Unknown sol_log_64 test"), + } + } + + #[test] + fn test_sol_log() { + set_log_scenario(1); + sol_log("This is a test message"); + } + + #[test] + fn test_sol_log_long() { + set_log_scenario(2); + let s: String = ['a'; 256].iter().collect(); + sol_log(&s); + } + + #[test] + fn test_sol_log_max_length() { + set_log_scenario(3); + let s: String = ['a'; 255].iter().collect(); + sol_log(&s); + } + + #[test] + fn test_sol_log_64() { + set_log_64_scenario(1); + sol_log_64(1, 2, 3, 4, 5); + } + + #[test] + fn test_sol_log_key() { + set_log_64_scenario(2); + let key_array = [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, + ]; + let key = SolPubkey { key: &key_array }; + sol_log_key(&key); + } + + #[test] + fn test_sol_log_slice() { + set_log_64_scenario(3); + let array = [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, + ]; + sol_log_slice(&array); + } + + pub fn process(ka: &mut [SolKeyedAccount], data: &[u8], info: &SolClusterInfo) -> bool { + assert_eq!(1, ka.len()); + assert_eq!(1, ka[0].is_signer); + let key = [ + 151, 116, 3, 85, 181, 39, 151, 99, 155, 29, 208, 191, 255, 191, 11, 161, 4, 43, 104, + 189, 202, 240, 231, 111, 146, 255, 199, 71, 67, 34, 254, 68, + ]; + assert_eq!(SIZE_PUBKEY, ka[0].key.key.len()); + assert_eq!(key, ka[0].key.key); + assert_eq!(48, ka[0].tokens); + assert_eq!(1, ka[0].userdata.len()); + let owner = [0; 32]; + assert_eq!(SIZE_PUBKEY, ka[0].owner.key.len()); + assert_eq!(owner, ka[0].owner.key); + let d = [1, 0, 0, 0, 0, 0, 0, 0, 1]; + assert_eq!(9, data.len()); + assert_eq!(d, data); + assert_eq!(1, info.tick_height); + let program_id = [ + 190, 103, 191, 69, 193, 202, 38, 193, 95, 62, 131, 135, 105, 13, 142, 240, 155, 120, + 177, 90, 212, 54, 10, 118, 40, 33, 192, 8, 54, 141, 187, 63, + ]; + assert_eq!(program_id, info.program_id.key); + + true + } + + #[test] + fn test_entrypoint() { + set_log_scenario(4); + set_log_64_scenario(4); + let mut input: [u8; 154] = [ + 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 151, 116, 3, 85, 181, 39, 151, 99, 155, + 29, 208, 191, 255, 191, 11, 161, 4, 43, 104, 189, 202, 240, 231, 111, 146, 255, 199, + 71, 67, 34, 254, 68, 48, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 190, 103, 191, + 69, 193, 202, 38, 193, 95, 62, 131, 135, 105, 13, 142, 240, 155, 120, 177, 90, 212, 54, + 10, 118, 40, 33, 192, 8, 54, 141, 187, 63, + ]; + + entrypoint(&mut input[0] as *mut u8); + } +} diff --git a/programs/native/bpf_loader/Cargo.toml b/programs/native/bpf_loader/Cargo.toml index 18a8a4aa12..8629022fb6 100644 --- a/programs/native/bpf_loader/Cargo.toml +++ b/programs/native/bpf_loader/Cargo.toml @@ -10,6 +10,7 @@ edition = "2018" [features] bpf_c = [] +bpf_rust = [] [dependencies] bincode = "1.0.0" @@ -17,7 +18,7 @@ byteorder = "1.2.1" elf = "0.0.10" libc = "0.2.45" log = "0.4.2" -solana_rbpf = "=0.1.5" +solana_rbpf = "=0.1.6" serde = "1.0.82" solana-logger = { path = "../../../logger", version = "0.12.0" } solana-sdk = { path = "../../../sdk", version = "0.12.0" } diff --git a/programs/native/bpf_loader/build.rs b/programs/native/bpf_loader/build.rs index 6c9332868a..6550923316 100644 --- a/programs/native/bpf_loader/build.rs +++ b/programs/native/bpf_loader/build.rs @@ -6,7 +6,6 @@ fn main() { println!("cargo:rerun-if-changed=build.rs"); let bpf_c = !env::var("CARGO_FEATURE_BPF_C").is_err(); - if bpf_c { let out_dir = "OUT_DIR=../../../target/".to_string() + &env::var("PROFILE").unwrap() @@ -40,4 +39,50 @@ fn main() { .expect("Failed to build C-based BPF programs"); assert!(status.success()); } + + let bpf_rust = !env::var("CARGO_FEATURE_BPF_RUST").is_err(); + if bpf_rust { + let install_dir = "INSTALL_DIR=../../../../target/".to_string() + + &env::var("PROFILE").unwrap() + + &"/bpf".to_string(); + + if !Path::new("../../bpf/rust/noop/out/solana_bpf_rust_noop.so").is_file() { + // Cannot build Rust BPF programs as part of main build because + // to build it requires calling Cargo with different parameters which + // would deadlock due to recursive cargo calls + panic!( + "solana_bpf_rust_noop.so not found, you must manually run \ + `make all` in programs/bpf/rust/noop to build it" + ); + } + + let rerun_if_changed_files = vec![ + "../../bpf/rust/noop/bpf.ld", + "../../bpf/rust/noop/makefile", + "../../bpf/rust/noop/out/solana_bpf_rust_noop.so", + ]; + + for file in rerun_if_changed_files { + if !Path::new(file).is_file() { + panic!("{} is not a file", file); + } + println!("cargo:rerun-if-changed={}", file); + } + + println!( + "cargo:warning=(not a warning) Installing Rust-based BPF program: solana_bpf_rust_noop" + ); + let status = Command::new("make") + .current_dir("../../bpf/rust/noop") + .arg("install") + .arg("V=1") + .arg("OUT_DIR=out") + .arg(&install_dir) + .status() + .expect( + "solana_bpf_rust_noop.so not found, you must manually run \ + `make all` in its program directory", + ); + assert!(status.success()); + } } diff --git a/programs/native/bpf_loader/src/lib.rs b/programs/native/bpf_loader/src/lib.rs index 48c582f593..ee6788bc6f 100644 --- a/programs/native/bpf_loader/src/lib.rs +++ b/programs/native/bpf_loader/src/lib.rs @@ -85,7 +85,9 @@ pub fn create_vm(prog: &[u8]) -> Result { vm.set_max_instruction_count(36000)?; // 36000 is a wag, need to tune vm.set_elf(&prog)?; vm.register_helper_ex("sol_log", Some(helper_sol_log_verify), helper_sol_log)?; + vm.register_helper_ex("sol_log_", Some(helper_sol_log_verify), helper_sol_log)?; vm.register_helper_ex("sol_log_64", None, helper_sol_log_u64)?; + vm.register_helper_ex("sol_log_64_", None, helper_sol_log_u64)?; Ok(vm) } diff --git a/sdk/bpf/inc/solana_sdk.h b/sdk/bpf/inc/solana_sdk.h index 31f33a0387..74ed3048cd 100644 --- a/sdk/bpf/inc/solana_sdk.h +++ b/sdk/bpf/inc/solana_sdk.h @@ -320,14 +320,21 @@ SOL_FN_PREFIX void sol_log_params( const uint8_t *data, uint64_t data_len ) { + sol_log("- Number of KeyedAccounts"); sol_log_64(0, 0, 0, 0, ka_len); for (int i = 0; i < ka_len; i++) { + sol_log("- Is signer"); sol_log_64(0, 0, 0, 0, ka[i].is_signer); + sol_log("- Key"); sol_log_key(ka[i].key); + sol_log("- Tokens"); sol_log_64(0, 0, 0, 0, *ka[i].tokens); + sol_log("- Userdata"); sol_log_array(ka[i].userdata, ka[i].userdata_len); + sol_log("- Owner"); sol_log_key(ka[i].owner); } + sol_log("- Instruction data\0"); sol_log_array(data, data_len); } diff --git a/sdk/bpf/llvm-docker/bin/llvm-objcopy b/sdk/bpf/llvm-docker/bin/llvm-objcopy new file mode 100755 index 0000000000..03f69ca1aa --- /dev/null +++ b/sdk/bpf/llvm-docker/bin/llvm-objcopy @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e +PROGRAM=$(basename "$0") +SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)" +[[ -z $V ]] || set -x +exec docker run \ + --workdir "$PWD" \ + --volume "$PWD:$PWD" \ + --volume "$SDKROOT:$SDKROOT" \ + --rm solanalabs/llvm \ + "$PROGRAM" "$@" diff --git a/sdk/bpf/llvm-docker/generate.sh b/sdk/bpf/llvm-docker/generate.sh index 38acf1940e..0ec8023277 100755 --- a/sdk/bpf/llvm-docker/generate.sh +++ b/sdk/bpf/llvm-docker/generate.sh @@ -14,6 +14,6 @@ exec docker run \ "$PROGRAM" "$@" EOM -for program in clang clang++ llc ld.lld llvm-objdump; do +for program in clang clang++ llc ld.lld llvm-objdump llvm-objcopy; do echo "$SCRIPT" > bin/$program done diff --git a/sdk/bpf/scripts/install.sh b/sdk/bpf/scripts/install.sh index 5af11e2b53..529af95e11 100755 --- a/sdk/bpf/scripts/install.sh +++ b/sdk/bpf/scripts/install.sh @@ -32,7 +32,7 @@ if [[ ! -r criterion-$machine-$version.md ]]; then fi # Install LLVM -version=v0.0.7 +version=v0.0.8 if [[ ! -f llvm-native-$machine-$version.md ]]; then ( filename=solana-llvm-$machine.tar.bz2 diff --git a/tests/programs.rs b/tests/programs.rs index 3e8add11ed..09fec36bc5 100644 --- a/tests/programs.rs +++ b/tests/programs.rs @@ -11,20 +11,20 @@ use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::transaction::Transaction; -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] use std::env; -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] use std::fs::File; -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] use std::io::Read; -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] use std::path::PathBuf; /// BPF program file extension -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] const PLATFORM_FILE_EXTENSION_BPF: &str = "so"; /// Create a BPF program file name -#[cfg(feature = "bpf_c")] +#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))] fn create_bpf_path(name: &str) -> PathBuf { let mut pathbuf = { let current_exe = env::current_exe().unwrap(); @@ -331,3 +331,39 @@ fn test_program_bpf_c() { ); } } + +// Cannot currently build the Rust BPF program as part +// of the rest of the build due to recursive `cargo build` causing +// a build deadlock. Therefore you must build the Rust programs +// yourself first by calling `make all` in the Rust BPF program's directory +#[cfg(feature = "bpf_rust")] +#[test] +fn test_program_bpf_rust() { + solana_logger::setup(); + + let programs = ["solana_bpf_rust_noop"]; + for program in programs.iter() { + println!("Test program: {:?}", program); + let mut file = File::open(create_bpf_path(program)).expect("file open failed"); + let mut elf = Vec::new(); + file.read_to_end(&mut elf).unwrap(); + + let loader = Loader::new_dynamic("solana_bpf_loader"); + let program = Program::new(&loader, &elf); + + // Call user program + let tx = Transaction::new( + &loader.mint.keypair(), + &[], + program.program.pubkey(), + &vec![1u8], + loader.mint.last_id(), + 0, + ); + check_tx_results( + &loader.bank, + &tx, + loader.bank.process_transactions(&vec![tx.clone()]), + ); + } +}