From 54bfdd1040c08db57f361efbf97cf311b9fe2ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Hauspie?= <michael.hauspie@univ-lille.fr> Date: Fri, 7 Jun 2024 16:56:11 +0200 Subject: [PATCH] Add crt0 binary export --- src/link.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/link.rs b/src/link.rs index 93245e9..577ed3d 100644 --- a/src/link.rs +++ b/src/link.rs @@ -25,6 +25,7 @@ use std::io::Write; const PADDING_SIZE: usize = 32; const PADDING_BUFFER: [u8; PADDING_SIZE] = [0xff; PADDING_SIZE]; const PIP_EXPORT_SECTIONS: &'static [&str] = &[".vector_table", ".text", ".data"]; +const CRT0_EXPORT_SECTIONS: &'static [&str] = &[".text", ".rodata", ".ARM.exidx"]; /// Options for the link subcommand #[derive(Parser, Debug)] @@ -80,7 +81,7 @@ pub fn link(opts: Opts) -> Result<()> { let crt0_elf_file = std::fs::read(&opts.crt0_elf)?; let crt0_elf_data = crt0_elf_file.as_slice(); - let _crt0_elf = elf::ElfBytes::<AnyEndian>::minimal_parse(crt0_elf_data)?; + let crt0_elf = elf::ElfBytes::<AnyEndian>::minimal_parse(crt0_elf_data)?; let user_code_elf_file = std::fs::read(&opts.user_code_elf)?; let user_code_elf_data = user_code_elf_file.as_slice(); @@ -109,6 +110,10 @@ pub fn link(opts: Opts) -> Result<()> { output.write_all(&PADDING_BUFFER[0..pad_bytes])?; } } + // Then, dump crt0 + // no need for output size here, padding is not necessary for crt0 + dump_sections(&crt0_elf, CRT0_EXPORT_SECTIONS, &mut output)?; + Ok(()) } -- GitLab