#[test] fn os_user_runtime_start_positive() { let (image, start) = stack(); assert_eq!(start.sp & 15, 0); let parsed = crt::Startup::parse(&image, start).unwrap(); assert_eq!(parsed.argc(), 2); assert_eq!(parsed.arguments().collect::>(), vec![b"runtime".as_slice(), b"two".as_slice()]); } #[test] fn os_user_runtime_start_negative() { let (image, start) = stack(); let mut bad = start; bad.sp += 8; // word aligned, but violates the AArch64 16-byte SP ABI. let backend = UserBackend::new(); let inventory = backend.primary_inventory(); let acquisitions = backend.runtime_hooks.borrow().acquisitions; assert!(matches!(crt::Startup::parse(&image, bad), Err(crt::Error::Alignment))); assert_eq!(backend.primary_inventory(), inventory); assert_eq!(backend.runtime_hooks.borrow().acquisitions, acquisitions); let healthy = crt::Startup::parse(&image, start).unwrap(); assert_eq!(healthy.arguments().collect::>(), vec![b"runtime".as_slice(), b"two".as_slice()]); }