elfconvert: calculate crc32 for application & model sections Bug: 232811729 Change-Id: Ib8b69c972c90390dd2d3a631a991907c9626908d
diff --git a/misc/elfconvert/Cargo.toml b/misc/elfconvert/Cargo.toml index 37899c7..1598e82 100644 --- a/misc/elfconvert/Cargo.toml +++ b/misc/elfconvert/Cargo.toml
@@ -23,6 +23,7 @@ thread_local = "=1.1.4" clap = { version = "3.2", features = [ "derive" ] } +crc = { version = "1.4.0", default-features = false } log = { version = "0.4" } stderrlog = { version = "0.5" } xmas-elf = { path = "../../../../crates/xmas-elf" }
diff --git a/misc/elfconvert/src/convert.rs b/misc/elfconvert/src/convert.rs index da47e93..6d9f25a 100644 --- a/misc/elfconvert/src/convert.rs +++ b/misc/elfconvert/src/convert.rs
@@ -48,6 +48,8 @@ use core::mem::size_of; use core::ptr; use core::slice; +use crc::crc32; +use crc::Hasher32; use log::*; use std::fs::File; use std::io::Seek; @@ -251,12 +253,14 @@ msize ); + let mut digest = crc32::Digest::new(crc32::IEEE); + digest.write(bytes); let section = SectionHeader::new( seg.virtual_addr(), flags, entry, align, - /*crc=*/ 0, // TODO(sleffler) calculate + digest.sum32(), fsize, msize, ); @@ -302,13 +306,14 @@ } if let SegmentData::Undefined(bytes) = seg.get_data(elf)? { - // TODO(sleffler): calculate the CRC32 checksum for each section + let mut digest = crc32::Digest::new(crc32::IEEE); + digest.write(bytes); let header = SectionHeader::new( seg.virtual_addr(), flags, entry, align, - /*crc=*/ 0, + digest.sum32(), fsize, msize, );