blob: c29a8b67a080551e3f9214be798fc97afe4da365 [file] [log] [blame]
#![cfg(all(target_env = "sgx", target_vendor = "fortanix"))]
#![feature(sgx_platform)]
#[cfg(feature = "std")]
#[test]
fn sgx_image_base_with_std() {
use backtrace::trace;
let image_base = std::os::fortanix_sgx::mem::image_base();
let mut frame_ips = Vec::new();
trace(|frame| {
frame_ips.push(frame.ip());
true
});
assert!(frame_ips.len() > 0);
for ip in frame_ips {
let ip: u64 = ip as _;
assert!(ip < image_base);
}
}
#[cfg(not(feature = "std"))]
#[test]
fn sgx_image_base_no_std() {
use backtrace::trace_unsynchronized;
fn guess_image_base() -> u64 {
let mut top_frame_ip = None;
unsafe {
trace_unsynchronized(|frame| {
top_frame_ip = Some(frame.ip());
false
});
}
top_frame_ip.unwrap() as u64 & 0xFFFFFF000000
}
let image_base = guess_image_base();
backtrace::set_image_base(image_base as _);
let mut frame_ips = Vec::new();
unsafe {
trace_unsynchronized(|frame| {
frame_ips.push(frame.ip());
true
});
}
assert!(frame_ips.len() > 0);
for ip in frame_ips {
let ip: u64 = ip as _;
assert!(ip < image_base);
}
}