aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/inspect_elf.rs63
1 files changed, 54 insertions, 9 deletions
diff --git a/tests/inspect_elf.rs b/tests/inspect_elf.rs
index 34da382..8df4b6a 100644
--- a/tests/inspect_elf.rs
+++ b/tests/inspect_elf.rs
@@ -10,8 +10,8 @@ use std::{fs, path::PathBuf, process::Command};
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
-/// Build an example, returning a path to the ELF.
-fn cargo_build(board: &str) -> Result<PathBuf> {
+/// Build an example with optional environment variables, returning a path to the ELF.
+fn cargo_build_with_envs(board: &str, envs: &[(&str, &str)]) -> Result<PathBuf> {
let status = Command::new("cargo")
.arg("build")
.arg("--example=blink-rtic")
@@ -19,6 +19,7 @@ fn cargo_build(board: &str) -> Result<PathBuf> {
.arg("--target=thumbv7em-none-eabihf")
.arg(format!("--target-dir=target/{}", board))
.arg("--quiet")
+ .envs(envs.iter().copied())
.spawn()?
.wait()?;
@@ -38,6 +39,11 @@ fn cargo_build(board: &str) -> Result<PathBuf> {
Ok(path)
}
+/// Build an example, returning a path to the ELF.
+fn cargo_build(board: &str) -> Result<PathBuf> {
+ cargo_build_with_envs(board, &[])
+}
+
struct ImxrtBinary<'a> {
elf: &'a Elf<'a>,
contents: &'a [u8],
@@ -294,7 +300,7 @@ fn imxrt1010evk() {
assert_eq!(binary.section_lma(".heap"), heap.address, "Heap is NOLOAD");
}
-fn baseline_teensy4(binary: &ImxrtBinary, dcd_at_runtime: u32) {
+fn baseline_teensy4(binary: &ImxrtBinary, dcd_at_runtime: u32, stack_size: u64, heap_size: u64) {
assert_eq!(
Fcb {
address: 0x6000_0000,
@@ -320,10 +326,10 @@ fn baseline_teensy4(binary: &ImxrtBinary, dcd_at_runtime: u32) {
assert_eq!(
Section {
address: DTCM,
- size: 8 * 1024
+ size: stack_size
},
stack,
- "stack not at ORIGIN(DTCM), or not 8 KiB large"
+ "stack not at ORIGIN(DTCM), or not {stack_size} bytes large"
);
assert_eq!(binary.section_lma(".stack"), stack.address);
@@ -402,10 +408,10 @@ fn baseline_teensy4(binary: &ImxrtBinary, dcd_at_runtime: u32) {
assert_eq!(
Section {
address: uninit.address + aligned(uninit.size, 4),
- size: 1024
+ size: heap_size
},
heap,
- "1 KiB heap in DTCM behind uninit"
+ "{heap_size} byte heap in DTCM behind uninit"
);
assert_eq!(binary.section_lma(".heap"), heap.address, "Heap is NOLOAD");
}
@@ -424,7 +430,7 @@ fn teensy4() {
binary.symbol_value("__dcd_end")
);
assert_eq!(binary.symbol_value("__dcd"), Some(0));
- baseline_teensy4(&binary, 0);
+ baseline_teensy4(&binary, 0, 8 * 1024, 1024);
}
#[test]
@@ -446,7 +452,7 @@ fn teensy4_fake_dcd() {
binary.symbol_value("__dcd_start"),
);
assert_eq!(dcd.st_size % 4, 0);
- baseline_teensy4(&binary, dcd_start as u32);
+ baseline_teensy4(&binary, dcd_start as u32, 8 * 1024, 1024);
}
#[test]
@@ -459,6 +465,45 @@ fn teensy4_fake_dcd_missize_fail() {
#[test]
#[ignore = "building an example can take time"]
+fn teensy4_env_overrides() {
+ let path = cargo_build_with_envs(
+ "teensy4",
+ &[
+ ("BOARD_STACK", "4096"),
+ ("THIS_WONT_BE_CONSIDERED", "12288"),
+ ("BOARD_HEAP", "8192"),
+ ],
+ )
+ .expect("Unable to build example");
+ let contents = fs::read(path).expect("Could not read ELF file");
+ let elf = Elf::parse(&contents).expect("Could not parse ELF");
+
+ let binary = ImxrtBinary::new(&elf, &contents);
+ baseline_teensy4(&binary, 0, 4 * 1024, 8 * 1024);
+}
+
+#[test]
+#[ignore = "building an example can take time"]
+fn teensy4_env_overrides_kib() {
+ let path = cargo_build_with_envs("teensy4", &[("BOARD_STACK", "5K"), ("BOARD_HEAP", "9k")])
+ .expect("Unable to build example");
+ let contents = fs::read(path).expect("Could not read ELF file");
+ let elf = Elf::parse(&contents).expect("Could not parse ELF");
+
+ let binary = ImxrtBinary::new(&elf, &contents);
+ baseline_teensy4(&binary, 0, 5 * 1024, 9 * 1024);
+}
+
+#[test]
+#[should_panic]
+#[ignore = "building an example can take time"]
+fn teensy4_env_override_fail() {
+ cargo_build_with_envs("teensy4", &[("BOARD_STACK", "1o24")])
+ .expect("Build should fail since BOARD_STACK can't be parsed");
+}
+
+#[test]
+#[ignore = "building an example can take time"]
fn imxrt1170evk_cm7() {
let path = cargo_build("imxrt1170evk-cm7").expect("Unable to build example");
let contents = fs::read(path).expect("Could not read ELF file");