Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supporting backtrace for x86_64-fortanix-unknown-sgx. #57441

Conversation

VardhanThigle
Copy link

@VardhanThigle VardhanThigle commented Jan 8, 2019

Overview

Implementing following functions required by libstd/sys_common to support backtrace:

1. unwind_backtrace
2. trace_fn
3. resolve_symname

Description:

The changes here are quite similar to the Cloudabi target src/libstd/sys/cloudabi/backtrace.rs
The first 2 functions are implemented via calls to libunwind.a that is linked to the x86_64-fortanix-unknown-sgx (#56979), we have not implemented functionality needed by resolve_symname (or dladdr) to reduce SGX TCB. Rather, we print the function address (relative to enclave image base) in resolve_symname which can be later translated to correct symbol name (say, via addr2line).

Note:

For x86_64-fortanix-unknown-sgx, the RUST_BACKTRACE environment has to be set from within the program running in an enclave.
cc: @jethrogb
r? @alexcrichton

@rust-highfive
Copy link
Collaborator

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @alexcrichton (or someone else) soon.

If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes.

Please see the contribution instructions for more information.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jan 8, 2019
@VardhanThigle VardhanThigle force-pushed the Vardhan/x86_64-fortanix-unknown-sgx-backtrace-support branch from 4d3d7e6 to 306ba49 Compare January 8, 2019 14:32
@alexcrichton
Copy link
Member

@bors: r+

@bors
Copy link
Contributor

bors commented Jan 8, 2019

📌 Commit 306ba49c13898ac69ea561395ef4d0c21893cca0 has been approved by alexcrichton

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 8, 2019
@jethrogb
Copy link
Contributor

jethrogb commented Jan 8, 2019

[00:03:48] tidy error: /checkout/src/libstd/sys/sgx/backtrace.rs:90: line longer than 100 chars

@VardhanThigle VardhanThigle force-pushed the Vardhan/x86_64-fortanix-unknown-sgx-backtrace-support branch from 306ba49 to 4166a4e Compare January 8, 2019 16:41
@VardhanThigle
Copy link
Author

@alexcrichton,
After approval, I had to push a small change to fix tidy line length failure.
Please have a look.

@alexcrichton
Copy link
Member

@bors: r+ rollup

@bors
Copy link
Contributor

bors commented Jan 8, 2019

📌 Commit 4166a4e has been approved by alexcrichton

image-base could be used by crates like backtrace to providing to make
symbol resolution easier.
@VardhanThigle
Copy link
Author

@alexcrichton
Additional changes were made to expose image_base function, this was done so that we can add support for backtrace crate as well in coming days.

@alexcrichton
Copy link
Member

@bors: r+ rollup

@bors
Copy link
Contributor

bors commented Jan 9, 2019

📌 Commit 2e4766c has been approved by alexcrichton

@bors
Copy link
Contributor

bors commented Jan 10, 2019

⌛ Testing commit 2e4766c with merge 72b74a98fcef290b03dd1cea83b5448ddf3b5394...

@bors
Copy link
Contributor

bors commented Jan 10, 2019

💔 Test failed - status-appveyor

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jan 10, 2019
@pietroalbini
Copy link
Member

@bors retry
AppVeyor... what's wrong with you today?

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 10, 2019
Centril added a commit to Centril/rust that referenced this pull request Jan 12, 2019
…ix-unknown-sgx-backtrace-support, r=alexcrichton

Supporting backtrace for x86_64-fortanix-unknown-sgx.

# Overview
Implementing following functions required by `libstd/sys_common` to support `backtrace`:
```
1. unwind_backtrace
2. trace_fn
3. resolve_symname
```
# Description:
The changes here are quite similar to the Cloudabi target `src/libstd/sys/cloudabi/backtrace.rs`
The first 2 functions are implemented via calls to libunwind.a that is linked to the `x86_64-fortanix-unknown-sgx` (rust-lang#56979),  we have not implemented functionality needed by `resolve_symname`  (or `dladdr`) to reduce SGX TCB. Rather, we print the function address (relative to enclave image base) in `resolve_symname` which can be later translated to correct symbol name (say, via `addr2line`).

# Note:
For `x86_64-fortanix-unknown-sgx`, the `RUST_BACKTRACE` environment has to be set from within the program running in an enclave.
cc: @jethrogb
r? @alexcrichton
bors added a commit that referenced this pull request Jan 12, 2019
Rollup of 26 pull requests

Successful merges:

 - #56425 (Redo the docs for Vec::set_len)
 - #56906 (Issue #56905)
 - #57042 (Don't call `FieldPlacement::count` when count is too large)
 - #57175 (Stabilize `let` bindings and destructuring in constants and const fn)
 - #57192 (Change std::error::Error trait documentation to talk about `source` instead of `cause`)
 - #57296 (Fixed the link to the ? operator)
 - #57368 (Use CMAKE_{C,CXX}_COMPILER_LAUNCHER for ccache)
 - #57400 (Rustdoc: update Source Serif Pro and replace Heuristica italic)
 - #57417 (rustdoc: use text-based doctest parsing if a macro is wrapping main)
 - #57433 (Add link destination for `read-ownership`)
 - #57434 (Remove `CrateNum::Invalid`.)
 - #57441 (Supporting backtrace for x86_64-fortanix-unknown-sgx.)
 - #57450 (actually take a slice in this example)
 - #57459 (Reference tracking issue for inherent associated types in diagnostic)
 - #57463 (docs: Fix some 'second-edition' links)
 - #57466 (Remove outdated comment)
 - #57493 (use structured suggestion when casting a reference)
 - #57498 (make note of one more normalization that Paths do)
 - #57499 (note that FromStr does not work for borrowed types)
 - #57505 (Remove submodule step from README)
 - #57510 (Add a profiles section to the manifest)
 - #57511 (Fix undefined behavior)
 - #57519 (Correct RELEASES.md for 1.32.0)
 - #57522 (don't unwrap unexpected tokens in `format!`)
 - #57530 (Fixing a typographical error.)
 - #57535 (Stabilise irrefutable if-let and while-let patterns)

Failed merges:

r? @ghost
@bors bors merged commit 2e4766c into rust-lang:master Jan 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants