Skip to content

Commit

Permalink
examples: 32-bit TAs: Fix runtime abort
Browse files Browse the repository at this point in the history
Refactor TAs build script code to reuse 64K section alignment hook for
32-bit TAs. This would allow linker to separate executable code from
writable data and in turn fix following runtime abort with 32-bit TAs:

E/TC:? 0
E/TC:? 0 User mode prefetch-abort at address 0x400410e4 (read permission fault)
E/TC:? 0  esr 0x8200000f  ttbr0 0x200000e1b2020   ttbr1 0x00000000   cidr 0x0
E/TC:? 0  cpu #1          cpsr 0x00000110
E/TC:? 0  x0  0000000000000000 x1  000000000009e850
E/TC:? 0  x2  0000000040015f80 x3  0000000000000000
E/TC:? 0  x4  0000000000000000 x5  0000000000000000
E/TC:? 0  x6  0000000000000000 x7  0000000000000000
E/TC:? 0  x8  0000000000000000 x9  0000000000000000
E/TC:? 0  x10 0000000000000000 x11 0000000000000000
E/TC:? 0  x12 0000000000000000 x13 0000000040015f80
E/TC:? 0  x14 0000000000000000 x15 0000000000000000
E/TC:? 0  x16 0000000000000000 x17 0000000000000000
E/TC:? 0  x18 0000000000000000 x19 0000000000000000
E/TC:? 0  x20 0000000000000000 x21 0000000000000000
E/TC:? 0  x22 0000000000000000 x23 0000000000000000
E/TC:? 0  x24 0000000000000000 x25 0000000000000000
E/TC:? 0  x26 0000000000000000 x27 0000000000000000
E/TC:? 0  x28 0000000000000000 x29 0000000000000000
E/TC:? 0  x30 0000000000000000 elr 00000000400410e4
E/TC:? 0  sp_el0 0000000040015f80
E/LD:  Status of TA 133af0ca-bdab-11eb-9130-43bf7873bf67
E/LD:   arch: arm
E/LD:  region  0: va 0x40005000 pa 0x0e301000 size 0x002000 flags rw-s (ldelf)
E/LD:  region  1: va 0x40007000 pa 0x0e303000 size 0x008000 flags r-xs (ldelf)
E/LD:  region  2: va 0x4000f000 pa 0x0e30b000 size 0x001000 flags rw-s (ldelf)
E/LD:  region  3: va 0x40010000 pa 0x0e30c000 size 0x004000 flags rw-s (ldelf)
E/LD:  region  4: va 0x40014000 pa 0x0e310000 size 0x001000 flags r--s
E/LD:  region  5: va 0x40015000 pa 0x0e32f000 size 0x001000 flags rw-s (stack)
E/LD:  region  6: va 0x4003f000 pa 0x00010000 size 0x01e000 flags rwxs [0]
E/LD:   [0] 133af0ca-bdab-11eb-9130-43bf7873bf67 @ 0x4003f000

Tested-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
  • Loading branch information
b49020 authored and DemesneGH committed Jan 15, 2024
1 parent 3e58869 commit bc6ae89
Show file tree
Hide file tree
Showing 13 changed files with 377 additions and 377 deletions.
58 changes: 29 additions & 29 deletions examples/acipher-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ fn main() -> std::io::Result<()> {
time_low, time_mid, time_hi_and_version, clock_seq_and_node
)?;

let mut aarch64_flag = true;
match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
aarch64_flag = false;
},
_ => {}
};

let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
let search_path = Path::new(&optee_os_dir).join("lib");

Expand All @@ -51,39 +60,30 @@ fn main() -> std::io::Result<()> {
let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
let f = BufReader::new(f);

match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
for line in f.lines() {
let l = line?;
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}

write!(ta_lds, "{}\n", l)?;
if aarch64_flag {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}
},
_ => {
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
} else {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}
}
};

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
}

println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=ta.lds");

Expand Down
58 changes: 29 additions & 29 deletions examples/aes-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ fn main() -> std::io::Result<()> {
time_low, time_mid, time_hi_and_version, clock_seq_and_node
)?;

let mut aarch64_flag = true;
match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
aarch64_flag = false;
},
_ => {}
};

let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
let search_path = Path::new(&optee_os_dir).join("lib");

Expand All @@ -51,39 +60,30 @@ fn main() -> std::io::Result<()> {
let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
let f = BufReader::new(f);

match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
for line in f.lines() {
let l = line?;
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}

write!(ta_lds, "{}\n", l)?;
if aarch64_flag {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}
},
_ => {
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
} else {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}
}
};

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
}

println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=ta.lds");

Expand Down
58 changes: 29 additions & 29 deletions examples/authentication-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ fn main() -> std::io::Result<()> {
time_low, time_mid, time_hi_and_version, clock_seq_and_node
)?;

let mut aarch64_flag = true;
match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
aarch64_flag = false;
},
_ => {}
};

let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
let search_path = Path::new(&optee_os_dir).join("lib");

Expand All @@ -51,39 +60,30 @@ fn main() -> std::io::Result<()> {
let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
let f = BufReader::new(f);

match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
for line in f.lines() {
let l = line?;
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}

write!(ta_lds, "{}\n", l)?;
if aarch64_flag {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}
},
_ => {
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
} else {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}
}
};

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
}

println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=ta.lds");

Expand Down
58 changes: 29 additions & 29 deletions examples/big_int-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ fn main() -> std::io::Result<()> {
time_low, time_mid, time_hi_and_version, clock_seq_and_node
)?;

let mut aarch64_flag = true;
match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
aarch64_flag = false;
},
_ => {}
};

let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
let search_path = Path::new(&optee_os_dir).join("lib");

Expand All @@ -51,39 +60,30 @@ fn main() -> std::io::Result<()> {
let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
let f = BufReader::new(f);

match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
for line in f.lines() {
let l = line?;
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}

write!(ta_lds, "{}\n", l)?;
if aarch64_flag {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}
},
_ => {
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
} else {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}
}
};

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
}

println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=ta.lds");

Expand Down
58 changes: 29 additions & 29 deletions examples/diffie_hellman-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ fn main() -> std::io::Result<()> {
time_low, time_mid, time_hi_and_version, clock_seq_and_node
)?;

let mut aarch64_flag = true;
match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
aarch64_flag = false;
},
_ => {}
};

let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
let search_path = Path::new(&optee_os_dir).join("lib");

Expand All @@ -51,39 +60,30 @@ fn main() -> std::io::Result<()> {
let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
let f = BufReader::new(f);

match env::var("TARGET") {
Ok(ref v) if v == "arm-unknown-linux-gnueabihf" => {
println!("cargo:rustc-link-arg=--no-warn-mismatch");
for line in f.lines() {
let l = line?;
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}

write!(ta_lds, "{}\n", l)?;
if aarch64_flag {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}
},
_ => {
for line in f.lines() {
let l = line?;

if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
l == "OUTPUT_ARCH(arm)" {
continue;
}

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
} else {
if l.starts_with('#') ||
l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
l == "OUTPUT_ARCH(aarch64)" {
continue;
}
}
};

if l == "\t. = ALIGN(4096);" {
write!(ta_lds, "\t. = ALIGN(65536);\n")?;
} else {
write!(ta_lds, "{}\n", l)?;
}
}

println!("cargo:rustc-link-search={}", out.display());
println!("cargo:rerun-if-changed=ta.lds");

Expand Down
Loading

0 comments on commit bc6ae89

Please sign in to comment.