From b2ea3c95808feac5b9713b0fb0a9be02e1a9e7ec Mon Sep 17 00:00:00 2001 From: Alexandru Radovici Date: Sun, 18 Jul 2021 13:56:36 +0300 Subject: [PATCH 1/5] add kernel version header implementation --- Cargo.lock | 166 +++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 +- src/cmdline.rs | 15 +++++ src/header.rs | 49 ++++++++++++++- src/main.rs | 15 +++++ 5 files changed, 245 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1cfd673..52bf90a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "ansi_term" version = "0.11.0" @@ -17,6 +19,10 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", +checksum = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" +dependencies = [ + "libc", + "termion", "winapi", ] @@ -30,7 +36,11 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +======= +checksum = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" +>>>>>>> add kernel version header implementation [[package]] name = "byteorder" @@ -42,12 +52,17 @@ checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +======= +checksum = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" +>>>>>>> add kernel version header implementation [[package]] name = "chrono" version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ "libc", @@ -55,13 +70,24 @@ dependencies = [ "num-traits", "time", "winapi", +======= +checksum = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" +dependencies = [ + "num-integer", + "num-traits", + "time", +>>>>>>> add kernel version header implementation ] [[package]] name = "clap" version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +======= +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" +>>>>>>> add kernel version header implementation dependencies = [ "ansi_term", "atty", @@ -83,7 +109,11 @@ dependencies = [ [[package]] name = "elf2tab" +<<<<<<< HEAD version = "0.7.0-dev" +======= +version = "0.8.0-dev" +>>>>>>> add kernel version header implementation dependencies = [ "chrono", "elf", @@ -95,12 +125,19 @@ dependencies = [ name = "filetime" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "3ed85775dcc68644b5c950ac06a2b23768d3bc9390464151aaf27136998dcf9e" +======= +checksum = "da4b9849e77b13195302c174324b5ba73eec9b236b24c221a61000daefb95c5f" +>>>>>>> add kernel version header implementation dependencies = [ "cfg-if", "libc", "redox_syscall", +<<<<<<< HEAD "winapi", +======= +>>>>>>> add kernel version header implementation ] [[package]] @@ -108,6 +145,7 @@ name = "heck" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +<<<<<<< HEAD dependencies = [ "unicode-segmentation", ] @@ -119,6 +157,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" dependencies = [ "libc", +======= +dependencies = [ + "unicode-segmentation", +>>>>>>> add kernel version header implementation ] [[package]] @@ -131,15 +173,24 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" name = "libc" version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" +======= +checksum = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" +>>>>>>> add kernel version header implementation [[package]] name = "num-integer" version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ "autocfg", +======= +checksum = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe" +dependencies = [ +>>>>>>> add kernel version header implementation "num-traits", ] @@ -147,16 +198,24 @@ dependencies = [ name = "num-traits" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ "autocfg", ] +======= +checksum = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" +>>>>>>> add kernel version header implementation [[package]] name = "proc-macro-error" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +======= +checksum = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678" +>>>>>>> add kernel version header implementation dependencies = [ "proc-macro-error-attr", "proc-macro2", @@ -169,10 +228,19 @@ dependencies = [ name = "proc-macro-error-attr" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", +======= +checksum = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "syn-mid", +>>>>>>> add kernel version header implementation "version_check", ] @@ -180,7 +248,11 @@ dependencies = [ name = "proc-macro2" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +======= +checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" +>>>>>>> add kernel version header implementation dependencies = [ "unicode-xid", ] @@ -189,16 +261,35 @@ dependencies = [ name = "quote" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +======= +checksum = "42934bc9c8ab0d3b273a16d8551c8f0fcff46be73276ca083ec2414c15c4ba5e" +>>>>>>> add kernel version header implementation dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" +<<<<<<< HEAD version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +======= +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" + +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +dependencies = [ + "redox_syscall", +] +>>>>>>> add kernel version header implementation [[package]] name = "strsim" @@ -210,7 +301,11 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" name = "structopt" version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" +======= +checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" +>>>>>>> add kernel version header implementation dependencies = [ "clap", "lazy_static", @@ -221,7 +316,11 @@ dependencies = [ name = "structopt-derive" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" +======= +checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" +>>>>>>> add kernel version header implementation dependencies = [ "heck", "proc-macro-error", @@ -234,23 +333,59 @@ dependencies = [ name = "syn" version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "ea9c5432ff16d6152371f808fb5a871cd67368171b09bb21b43df8e4a47a3556" +======= +checksum = "4696caa4048ac7ce2bcd2e484b3cef88c1004e41b8e945a277e2c25dc0b72060" +>>>>>>> add kernel version header implementation dependencies = [ "proc-macro2", "quote", "unicode-xid", +<<<<<<< HEAD +======= +] + +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +>>>>>>> add kernel version header implementation ] [[package]] name = "tar" version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "489997b7557e9a43e192c527face4feacc78bfbe6eed67fd55c4c9e381cba290" +======= +checksum = "6af6b94659f9a571bf769a5b71f54079393585ee0bfdd71b691be22d7d6b1d18" +>>>>>>> add kernel version header implementation dependencies = [ "filetime", "libc", "redox_syscall", "xattr", +<<<<<<< HEAD +======= +] + +[[package]] +name = "termion" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" +dependencies = [ + "libc", + "redox_syscall", + "redox_termios", +>>>>>>> add kernel version header implementation ] [[package]] @@ -266,10 +401,17 @@ dependencies = [ name = "time" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi", +======= +checksum = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098" +dependencies = [ + "libc", + "redox_syscall", +>>>>>>> add kernel version header implementation "winapi", ] @@ -283,19 +425,31 @@ checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" name = "unicode-width" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +======= +checksum = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +>>>>>>> add kernel version header implementation [[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +======= +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +>>>>>>> add kernel version header implementation [[package]] name = "vec_map" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +======= +checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +>>>>>>> add kernel version header implementation [[package]] name = "version_check" @@ -307,13 +461,21 @@ checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" name = "wasi" version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +======= +checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" +>>>>>>> add kernel version header implementation [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +======= +checksum = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" +>>>>>>> add kernel version header implementation dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", @@ -335,7 +497,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" name = "xattr" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" +<<<<<<< HEAD checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +======= +checksum = "abb373b92de38a4301d66bec009929b4fb83120ea1c4a401be89dbe0b9777443" +>>>>>>> add kernel version header implementation dependencies = [ "libc", ] diff --git a/Cargo.toml b/Cargo.toml index 373eb9a..a42454f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "elf2tab" -version = "0.7.0-dev" +version = "0.8.0-dev" edition = "2018" description = "Compiles from ELF to TAB (a Tock Application Bundle using the Tock Binary Format)" authors = ["Tock Project Developers "] diff --git a/src/cmdline.rs b/src/cmdline.rs index 13201a5..cc3169b 100644 --- a/src/cmdline.rs +++ b/src/cmdline.rs @@ -109,6 +109,21 @@ pub struct Opt { parse(try_from_str = parse_perms), )] pub permissions: Vec<(u32, u32)>, + + #[structopt( + long = "kernel-major", + name = "kernel-major-version", + help = "The kernel version that the app requires" + )] + pub kernel_major: Option, + + #[structopt( + long = "kernel-minor", + name = "kernel-minor-version", + requires = "kernel-major-version", + help = "The minimum kernel minor version that the app requires" + )] + pub kernel_minor: Option, } mod test { diff --git a/src/header.rs b/src/header.rs index 5f7f4d9..21169a8 100644 --- a/src/header.rs +++ b/src/header.rs @@ -16,6 +16,7 @@ enum TbfHeaderTypes { PicOption1 = 4, FixedAddresses = 5, Permissions = 6, + KernelVersion = 7, } #[repr(C)] @@ -76,6 +77,14 @@ struct TbfHeaderPermissions { perms: Vec, } +#[repr(C)] +#[derive(Debug)] +struct TbfHeaderKernelVersion { + base: TbfHeaderTlv, + major: u16, + minor: u16, +} + impl fmt::Display for TbfHeaderBase { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { writeln!( @@ -149,6 +158,18 @@ impl fmt::Display for TbfHeaderPermissions { } } +impl fmt::Display for TbfHeaderKernelVersion { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + // ^x.y means >= x.y, < (x+1).0 + writeln!( + f, + " + kernel version: ^{}.{}", + self.major, self.minor + ) + } +} + pub struct TbfHeader { hdr_base: TbfHeaderBase, hdr_main: TbfHeaderMain, @@ -156,6 +177,7 @@ pub struct TbfHeader { hdr_wfr: Vec, hdr_fixed_addresses: Option, hdr_permissions: Option, + hdr_kernel_version: Option, package_name: String, package_name_pad: usize, } @@ -184,6 +206,7 @@ impl TbfHeader { hdr_wfr: Vec::new(), hdr_fixed_addresses: None, hdr_permissions: None, + hdr_kernel_version: None, package_name: String::new(), package_name_pad: 0, } @@ -204,6 +227,7 @@ impl TbfHeader { fixed_address_ram: Option, fixed_address_flash: Option, permissions: Vec<(u32, u32)>, + kernel_version: Option<(u16, u16)>, ) -> usize { // Need to calculate lengths ahead of time. // Need the base and the main section. @@ -232,6 +256,11 @@ impl TbfHeader { header_length += mem::size_of::(); } + // Check if we have to include a kernel version header. + if kernel_version.is_some() { + header_length += mem::size_of::(); + } + // Flags default to app is enabled. let flags = 0x0000_0001; @@ -303,6 +332,18 @@ impl TbfHeader { }, array_length: perms.len() as u16, perms, + } + } + + // If the kernel version is set, we have to include the header. + if let Some((kernel_major, kernel_minor)) = kernel_version { + self.hdr_kernel_version = Some(TbfHeaderKernelVersion { + base: TbfHeaderTlv { + tipe: TbfHeaderTypes::KernelVersion, + length: 4, + }, + major: kernel_major, + minor: kernel_minor, }); } @@ -365,6 +406,11 @@ impl TbfHeader { header_buf.write_all(unsafe { util::as_byte_slice(&self.hdr_fixed_addresses) })?; } + // If the kernel version is set, include that TLV + if self.hdr_kernel_version.is_some() { + header_buf.write_all(unsafe { util::as_byte_slice(&self.hdr_kernel_version) })?; + } + let current_length = header_buf.get_ref().len(); util::do_pad( &mut header_buf, @@ -423,7 +469,8 @@ impl fmt::Display for TbfHeader { self.hdr_fixed_addresses .map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; self.hdr_permissions - .as_ref() + .as_ref().map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; + self.hdr_kernel_version .map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; Ok(()) } diff --git a/src/main.rs b/src/main.rs index 7a3dccf..1f2c6a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,6 +81,13 @@ fn main() { opt.kernel_heap_size, opt.protected_region_size, opt.permissions.to_vec(), + // If kernel_major is set, the app requires kernel ^kernel_major.0 (>= kernel_major.0, < (kernel_major+1).0) + // Optionally, kernel_minor can be set, making the app require ^kernel_major.kernel_minor + // (>= kernel_major.kernel_minor, < (kernel_major+1).0) + match opt.kernel_major { + Some(major) => Some((major, opt.kernel_minor.unwrap_or(0))), + None => None, + }, ) .unwrap(); if opt.verbose { @@ -122,6 +129,7 @@ fn elf_to_tbf( kernel_heap_len: u32, protected_region_size_arg: Option, permissions: Vec<(u32, u32)>, + kernel_version: Option<(u16, u16)>, ) -> io::Result<()> { let package_name = package_name.unwrap_or_default(); @@ -310,6 +318,12 @@ fn elf_to_tbf( ); } + if verbose { + if let Some((major, minor)) = kernel_version { + println!("Kernel version: {}.{}", major, minor); + } + } + // Keep track of an index of where we are in creating the app binary. let mut binary_index = 0; @@ -323,6 +337,7 @@ fn elf_to_tbf( fixed_address_ram, fixed_address_flash, permissions, + kernel_version, ); // If a protected region size was passed, confirm the header will fit. // Otherwise, use the header size as the protected region size. From f733e8bc46362cf1e5f583f7365a942ac878d37a Mon Sep 17 00:00:00 2001 From: Alexandru Radovici Date: Sun, 18 Jul 2021 14:01:36 +0300 Subject: [PATCH 2/5] added arguments to readme --- README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ad74a38..5d77e3c 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,17 @@ FLAGS: -v, --verbose Be verbose OPTIONS: - --deterministic Produce a deterministic TAB file - -o, --output-file Output file name [default: TockApp.tab] - -n, --package-name Package name [default: empty] + --deterministic Produce a deterministic TAB file + -o, --output-file Output file name [default: TockApp.tab] + -n, --package-name Package name [default: empty] --protected-region-size - Size of the protected region (including headers) - --minimum-ram-size In bytes [default: from RAM sections in ELF] - --app-heap In bytes [default: 1024] - --kernel-heap In bytes [default: 1024] - --stack In bytes [default: 2048] + Size of the protected region (including headers) + --minimum-ram-size In bytes [default: from RAM sections in ELF] + --app-heap In bytes [default: 1024] + --kernel-heap In bytes [default: 1024] + --stack In bytes [default: 2048] + --kernel-major The kernel version that the app requires + --kernel-minor The minimum kernel minor version that the app requires ARGS: ... application file(s) to package From 8bfe161669a0fb9dd2e2c85c906b76dbbff95e29 Mon Sep 17 00:00:00 2001 From: Alexandru Radovici Date: Wed, 28 Jul 2021 19:36:58 +0300 Subject: [PATCH 3/5] Update header.rs --- src/header.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/header.rs b/src/header.rs index 21169a8..f425fec 100644 --- a/src/header.rs +++ b/src/header.rs @@ -16,7 +16,7 @@ enum TbfHeaderTypes { PicOption1 = 4, FixedAddresses = 5, Permissions = 6, - KernelVersion = 7, + KernelVersion = 8, } #[repr(C)] From b5c4b65c36a5b788c7d1054ac829f565d7305857 Mon Sep 17 00:00:00 2001 From: Alexandru Radovici Date: Thu, 29 Jul 2021 18:57:59 +0300 Subject: [PATCH 4/5] Update Cargo.toml Co-authored-by: Brad Campbell --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a42454f..373eb9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "elf2tab" -version = "0.8.0-dev" +version = "0.7.0-dev" edition = "2018" description = "Compiles from ELF to TAB (a Tock Application Bundle using the Tock Binary Format)" authors = ["Tock Project Developers "] From 15a061f14c4fbfb8bb2b9958a99e647a548415c8 Mon Sep 17 00:00:00 2001 From: Alexandru Radovici Date: Fri, 30 Jul 2021 10:39:29 +0300 Subject: [PATCH 5/5] format --- Cargo.lock | 234 ++++++++----------------------------------------- src/cmdline.rs | 2 +- src/header.rs | 7 +- 3 files changed, 40 insertions(+), 203 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 52bf90a..033713a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,7 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 - [[package]] name = "ansi_term" version = "0.11.0" @@ -19,10 +17,6 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", -checksum = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" -dependencies = [ - "libc", - "termion", "winapi", ] @@ -36,11 +30,7 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -======= -checksum = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" ->>>>>>> add kernel version header implementation [[package]] name = "byteorder" @@ -50,19 +40,14 @@ checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -======= -checksum = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" ->>>>>>> add kernel version header implementation +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ "libc", @@ -70,24 +55,13 @@ dependencies = [ "num-traits", "time", "winapi", -======= -checksum = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6" -dependencies = [ - "num-integer", - "num-traits", - "time", ->>>>>>> add kernel version header implementation ] [[package]] name = "clap" version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" -======= -checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" ->>>>>>> add kernel version header implementation dependencies = [ "ansi_term", "atty", @@ -109,11 +83,7 @@ dependencies = [ [[package]] name = "elf2tab" -<<<<<<< HEAD version = "0.7.0-dev" -======= -version = "0.8.0-dev" ->>>>>>> add kernel version header implementation dependencies = [ "chrono", "elf", @@ -123,44 +93,32 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "3ed85775dcc68644b5c950ac06a2b23768d3bc9390464151aaf27136998dcf9e" -======= -checksum = "da4b9849e77b13195302c174324b5ba73eec9b236b24c221a61000daefb95c5f" ->>>>>>> add kernel version header implementation +checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" dependencies = [ "cfg-if", "libc", "redox_syscall", -<<<<<<< HEAD "winapi", -======= ->>>>>>> add kernel version header implementation ] [[package]] name = "heck" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -<<<<<<< HEAD +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", -======= -dependencies = [ - "unicode-segmentation", ->>>>>>> add kernel version header implementation ] [[package]] @@ -171,51 +129,34 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.79" +version = "0.2.98" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743" -======= -checksum = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b" ->>>>>>> add kernel version header implementation +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" [[package]] name = "num-integer" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ "autocfg", -======= -checksum = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe" -dependencies = [ ->>>>>>> add kernel version header implementation "num-traits", ] [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ "autocfg", ] -======= -checksum = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364" ->>>>>>> add kernel version header implementation [[package]] name = "proc-macro-error" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -======= -checksum = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678" ->>>>>>> add kernel version header implementation dependencies = [ "proc-macro-error-attr", "proc-macro2", @@ -228,68 +169,39 @@ dependencies = [ name = "proc-macro-error-attr" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", -======= -checksum = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "syn-mid", ->>>>>>> add kernel version header implementation "version_check", ] [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" -======= -checksum = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" ->>>>>>> add kernel version header implementation +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -======= -checksum = "42934bc9c8ab0d3b273a16d8551c8f0fcff46be73276ca083ec2414c15c4ba5e" ->>>>>>> add kernel version header implementation +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" -<<<<<<< HEAD -version = "0.1.57" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" -======= -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd" - -[[package]] -name = "redox_termios" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" dependencies = [ - "redox_syscall", + "bitflags", ] ->>>>>>> add kernel version header implementation [[package]] name = "strsim" @@ -299,13 +211,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8" -======= -checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" ->>>>>>> add kernel version header implementation +checksum = "69b041cdcb67226aca307e6e7be44c8806423d83e018bd662360a93dabce4d71" dependencies = [ "clap", "lazy_static", @@ -314,13 +222,9 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8" -======= -checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" ->>>>>>> add kernel version header implementation +checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10" dependencies = [ "heck", "proc-macro-error", @@ -331,61 +235,24 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.45" +version = "1.0.74" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "ea9c5432ff16d6152371f808fb5a871cd67368171b09bb21b43df8e4a47a3556" -======= -checksum = "4696caa4048ac7ce2bcd2e484b3cef88c1004e41b8e945a277e2c25dc0b72060" ->>>>>>> add kernel version header implementation +checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" dependencies = [ "proc-macro2", "quote", "unicode-xid", -<<<<<<< HEAD -======= -] - -[[package]] -name = "syn-mid" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" -dependencies = [ - "proc-macro2", - "quote", - "syn", ->>>>>>> add kernel version header implementation ] [[package]] name = "tar" -version = "0.4.30" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "489997b7557e9a43e192c527face4feacc78bfbe6eed67fd55c4c9e381cba290" -======= -checksum = "6af6b94659f9a571bf769a5b71f54079393585ee0bfdd71b691be22d7d6b1d18" ->>>>>>> add kernel version header implementation +checksum = "7d779dc6aeff029314570f666ec83f19df7280bb36ef338442cfa8c604021b80" dependencies = [ "filetime", "libc", - "redox_syscall", "xattr", -<<<<<<< HEAD -======= -] - -[[package]] -name = "termion" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" -dependencies = [ - "libc", - "redox_syscall", - "redox_termios", ->>>>>>> add kernel version header implementation ] [[package]] @@ -401,81 +268,54 @@ dependencies = [ name = "time" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi", -======= -checksum = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098" -dependencies = [ - "libc", - "redox_syscall", ->>>>>>> add kernel version header implementation "winapi", ] [[package]] name = "unicode-segmentation" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" [[package]] name = "unicode-width" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" -======= -checksum = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" ->>>>>>> add kernel version header implementation [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" -======= -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" ->>>>>>> add kernel version header implementation +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "vec_map" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" -======= -checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" ->>>>>>> add kernel version header implementation [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" -======= -checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" ->>>>>>> add kernel version header implementation [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -======= -checksum = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" ->>>>>>> add kernel version header implementation dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", @@ -497,11 +337,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" name = "xattr" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -<<<<<<< HEAD checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" -======= -checksum = "abb373b92de38a4301d66bec009929b4fb83120ea1c4a401be89dbe0b9777443" ->>>>>>> add kernel version header implementation dependencies = [ "libc", ] diff --git a/src/cmdline.rs b/src/cmdline.rs index cc3169b..588b8a0 100644 --- a/src/cmdline.rs +++ b/src/cmdline.rs @@ -109,7 +109,7 @@ pub struct Opt { parse(try_from_str = parse_perms), )] pub permissions: Vec<(u32, u32)>, - + #[structopt( long = "kernel-major", name = "kernel-major-version", diff --git a/src/header.rs b/src/header.rs index f425fec..5205838 100644 --- a/src/header.rs +++ b/src/header.rs @@ -78,7 +78,7 @@ struct TbfHeaderPermissions { } #[repr(C)] -#[derive(Debug)] +#[derive(Clone, Copy, Debug)] struct TbfHeaderKernelVersion { base: TbfHeaderTlv, major: u16, @@ -332,7 +332,7 @@ impl TbfHeader { }, array_length: perms.len() as u16, perms, - } + }); } // If the kernel version is set, we have to include the header. @@ -469,7 +469,8 @@ impl fmt::Display for TbfHeader { self.hdr_fixed_addresses .map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; self.hdr_permissions - .as_ref().map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; + .as_ref() + .map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; self.hdr_kernel_version .map_or(Ok(()), |hdr| write!(f, "{}", hdr))?; Ok(())