···2828 let mut data_paddr = 0u32;
2929 let mut data_vaddr = 0u32;
3030 let mut data_len = 0u32;
3131+ let mut current_addr: Option<u32> = None;
31323233 for phdr in elf.segments().expect("Failed to parse ELF file") {
3334 if phdr.p_type == PT_LOAD {
3434- bin.extend_from_slice(elf.segment_data(&phdr).expect("Failed to parse ELF file"));
3535+ if current_addr.is_none() {
3636+ current_addr.replace(phdr.p_vaddr as u32);
3737+ }
3838+3939+ let current_addr = current_addr.as_mut().unwrap();
4040+4141+ if *current_addr < phdr.p_vaddr as u32 {
4242+ let diff = phdr.p_vaddr as u32 - *current_addr;
4343+ for _ in 0..diff {
4444+ bin.push(0);
4545+ }
4646+ }
4747+4848+ let segment_data = elf.segment_data(&phdr).expect("Failed to parse ELF file");
4949+ bin.extend_from_slice(segment_data);
5050+ *current_addr += segment_data.len() as u32;
3551 }
36523753 // Assume that there is at most one segment that needs to be copied from flash to RAM