sim: Increase jmpbuf size

Increase the size of the jmpbuf to accomodate other architectures.
Unfortunately, the size of this is not available in the libc crate.
Increase this so encompass any platforms we wish to support, including
aarch64 on both Linux and MacOS.

Increasing an array beyond 32 means there is no default offered, so
implement this manually.

Signed-off-by: David Brown <david.brown@linaro.org>
This commit is contained in:
David Brown 2024-06-25 10:00:31 -06:00 committed by David Brown
parent d6a5a7344f
commit a706317769
2 changed files with 15 additions and 5 deletions

View File

@ -90,7 +90,7 @@ impl Default for FlashContext {
} }
#[repr(C)] #[repr(C)]
#[derive(Debug, Default)] #[derive(Debug)]
pub struct CSimContext { pub struct CSimContext {
pub flash_counter: libc::c_int, pub flash_counter: libc::c_int,
pub jumped: libc::c_int, pub jumped: libc::c_int,
@ -99,7 +99,19 @@ pub struct CSimContext {
// NOTE: Always leave boot_jmpbuf declaration at the end; this should // NOTE: Always leave boot_jmpbuf declaration at the end; this should
// store a "jmp_buf" which is arch specific and not defined by libc crate. // store a "jmp_buf" which is arch specific and not defined by libc crate.
// The size below is enough to store data on a x86_64 machine. // The size below is enough to store data on a x86_64 machine.
pub boot_jmpbuf: [u64; 16], pub boot_jmpbuf: [u64; 48],
}
impl Default for CSimContext {
fn default() -> Self {
CSimContext {
flash_counter: 0,
jumped: 0,
c_asserts: 0,
c_catch_asserts: 0,
boot_jmpbuf: [0; 48],
}
}
} }
pub struct CSimContextPtr { pub struct CSimContextPtr {

View File

@ -81,10 +81,8 @@ pub fn boot_go(multiflash: &mut SimMultiFlash, areadesc: &AreaDesc,
None => 0, None => 0,
Some(ref c) => **c as libc::c_int Some(ref c) => **c as libc::c_int
}, },
jumped: 0,
c_asserts: 0,
c_catch_asserts: if catch_asserts { 1 } else { 0 }, c_catch_asserts: if catch_asserts { 1 } else { 0 },
boot_jmpbuf: [0; 16], .. Default::default()
}; };
let mut rsp = api::BootRsp { let mut rsp = api::BootRsp {
br_hdr: std::ptr::null(), br_hdr: std::ptr::null(),