mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-07 17:18:32 +03:00
Exposing enclave image-base to the enclave application
image-base could be used by crates like backtrace to providing to make symbol resolution easier.
This commit is contained in:
@@ -17,8 +17,10 @@ pub(crate) unsafe fn rel_ptr_mut<T>(offset: u64) -> *mut T {
|
||||
// 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
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
use libc;
|
||||
use sys_common::backtrace::Frame;
|
||||
use unwind as uw;
|
||||
use sys::sgx::abi::mem::image_base;
|
||||
|
||||
pub struct BacktraceContext;
|
||||
|
||||
@@ -75,11 +76,6 @@ extern "C" fn trace_fn(
|
||||
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,
|
||||
@@ -88,7 +84,7 @@ 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,
|
||||
|
||||
Reference in New Issue
Block a user