Skip to content

Commit

Permalink
Adjust frame IP in backtraces relative to image base for SGX target
Browse files Browse the repository at this point in the history
  • Loading branch information
mzohreva committed Nov 14, 2023
1 parent 4bd2fd5 commit 6e7ea03
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
5 changes: 5 additions & 0 deletions library/std/src/backtrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,11 @@ impl Backtrace {
let _lock = lock();
let mut frames = Vec::new();
let mut actual_start = None;
#[cfg(all(target_vendor = "fortanix", target_env = "sgx"))]
{
let image_base = crate::os::fortanix_sgx::mem::image_base();
backtrace_rs::set_image_base(crate::ptr::from_exposed_addr_mut(image_base as _));
}
unsafe {
backtrace_rs::trace_unsynchronized(|frame| {
frames.push(BacktraceFrame {
Expand Down
5 changes: 5 additions & 0 deletions library/std/src/sys_common/backtrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ unsafe fn _print_fmt(fmt: &mut fmt::Formatter<'_>, print_fmt: PrintFmt) -> fmt::
let mut first_omit = true;
// Start immediately if we're not using a short backtrace.
let mut start = print_fmt != PrintFmt::Short;
#[cfg(all(target_vendor = "fortanix", target_env = "sgx"))]
{
let image_base = crate::os::fortanix_sgx::mem::image_base();
backtrace_rs::set_image_base(crate::ptr::from_exposed_addr_mut(image_base as _));
}
backtrace_rs::trace_unsynchronized(|frame| {
if print_fmt == PrintFmt::Short && idx > MAX_NB_FRAMES {
return false;
Expand Down

0 comments on commit 6e7ea03

Please sign in to comment.