// Do not remove inline: will result in relocation failure
// For the same reason we use inline ASM here instead of an extern static to
// locate the base
+/// Returns address at which current enclave is loaded.
#[inline(always)]
-fn image_base() -> u64 {
+#[unstable(feature = "sgx_platform", issue = "56975")]
+pub fn image_base() -> u64 {
let base;
unsafe { asm!("lea IMAGE_BASE(%rip),$0":"=r"(base)) };
base
use libc;
use sys_common::backtrace::Frame;
use unwind as uw;
+use sys::sgx::abi::mem::image_base;
pub struct BacktraceContext;
uw::_URC_NO_REASON
}
-extern {
- static IMAGE_BASE: u8;
-}
-
-
// To reduce TCB size in Sgx enclave, we do not want to implement resolve_symname functionality.
// Rather, we print the offset of the address here, which could be later mapped to correct function.
pub fn resolve_symname<F>(frame: Frame,
where F: FnOnce(Option<&str>) -> io::Result<()>
{
callback(Some(&format!("0x{:x}",
- (unsafe {frame.symbol_addr.wrapping_offset_from(&IMAGE_BASE)}))))
+ (frame.symbol_addr.wrapping_offset_from(image_base() as _)))))
}
pub fn foreach_symbol_fileline<F>(_: Frame,