Skip to content

Commit 0b78a30

Browse files
committed
tests: add simple test case for ARM64 Image loader
The test_image.bin is a cut of the first 4096 bytes of a pre-compiled linux kernel ARM64 Image. You can generate by: make Image head -c 4096 arch/arm64/boot/Image > test_image.bin Signed-off-by: Qiu Wenbo <qiuwenbo@phytium.com.cn>
1 parent 49f0a84 commit 0b78a30

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/loader/mod.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,8 +655,6 @@ impl KernelLoader for PE {
655655
#[cfg(test)]
656656
mod test {
657657
use super::*;
658-
#[cfg(any(feature = "elf", feature = "bzimage"))]
659-
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
660658
use std::io::Cursor;
661659
use vm_memory::{Address, GuestAddress, GuestMemoryMmap};
662660

@@ -701,6 +699,15 @@ mod test {
701699
include_bytes!("test_badnote.bin").to_vec()
702700
}
703701

702+
// first 4096 bytes of a precompiled ARM64 kernel Image.
703+
#[cfg(feature = "pe")]
704+
#[cfg(target_arch = "aarch64")]
705+
fn make_image_bin() -> Vec<u8> {
706+
let mut v = Vec::new();
707+
v.extend_from_slice(include_bytes!("test_image.bin"));
708+
v
709+
}
710+
704711
#[allow(safe_packed_borrows)]
705712
#[allow(non_snake_case)]
706713
#[test]
@@ -859,6 +866,24 @@ mod test {
859866
);
860867
}
861868

869+
#[test]
870+
#[cfg(feature = "pe")]
871+
#[cfg(target_arch = "aarch64")]
872+
fn load_image() {
873+
let gm = create_guest_mem();
874+
let mut image = make_image_bin();
875+
let kernel_addr = GuestAddress(0x200000);
876+
877+
let loader_result =
878+
PE::load(&gm, Some(kernel_addr), &mut Cursor::new(&image), None).unwrap();
879+
assert_eq!(loader_result.kernel_load.raw_value(), 0x280000);
880+
assert_eq!(loader_result.kernel_end, 0x281000);
881+
882+
image[0x39] = 0x0;
883+
let loader_result = PE::load(&gm, Some(kernel_addr), &mut Cursor::new(&image), None);
884+
assert_eq!(loader_result, Err(Error::InvalidImageMagicNumber));
885+
}
886+
862887
#[test]
863888
fn cmdline_overflow() {
864889
let gm = create_guest_mem();

src/loader/test_image.bin

4 KB
Binary file not shown.

0 commit comments

Comments
 (0)