| #![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); | 
 |     } | 
 | } |