Skip to content

Commit b9b059f

Browse files
committed
Update readme and crate docs.
1 parent cdd00a0 commit b9b059f

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

Readme.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
Framehop is a stack frame unwinder written in 100% Rust. It produces high quality stacks at high speed, on multiple platforms and architectures, without an expensive pre-processing step for unwind information. This makes it suitable for sampling profilers.
77

8-
It currently supports unwinding x86_64 and aarch64, with unwind information formats commonly used on macOS, Linux and Android.
8+
It currently supports unwinding x86_64 and aarch64, with unwind information formats commonly used on Windows, macOS, Linux and Android.
99

1010
You give framehop register values, stack memory and unwind data, and framehop produces a list of return addresses.
1111

@@ -29,6 +29,7 @@ In turn, framehop solves the following problems:
2929
- Apple's Compact Unwinding Format, in `__unwind_info` (macOS)
3030
- DWARF CFI in `.eh_frame` (using `.eh_frame_hdr` as an index, if available)
3131
- DWARF CFI in `.debug_frame`
32+
- PE unwind info in `.pdata`, `.rdata` and `.xdata` (for Windows x86_64)
3233
- It supports correct unwinding even when the program is interrupted inside a function prologue or epilogue. On macOS, it has to analyze assembly instructions in order to do this.
3334
- On x86_64 and aarch64, it falls back to frame pointer unwinding if it cannot find unwind information for an address.
3435
- It caches the unwind rule for each address in a fixed-size cache, so that repeated unwinding from the same address is even faster.
@@ -60,7 +61,7 @@ Framehop is still a work in progress. Its API is subject to change. The API chur
6061

6162
That said, framehop works remarkably well on the supported platforms, and is definitely worth a try if you can stomach the frequent API breakages. Please file issues if you run into any trouble or have suggestions.
6263

63-
Eventually I'd like to use framehop as a replacement for Lul in the Gecko profiler (Firefox's built-in profiler). For that we'll also want to add x86 support (for 32 bit Linux), EHABI / EXIDX support (for 32 bit ARM Android), and Windows support.
64+
Eventually I'd like to use framehop as a replacement for Lul in the Gecko profiler (Firefox's built-in profiler). For that we'll also want to add x86 support (for 32 bit Windows and Linux) and EHABI / EXIDX support (for 32 bit ARM Android).
6465

6566
## Example
6667

src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
//!
33
//! Framehop is a stack frame unwinder written in 100% Rust. It produces high quality stacks at high speed, on multiple platforms and architectures, without an expensive pre-processing step for unwind information. This makes it suitable for sampling profilers.
44
//!
5-
//! It currently supports unwinding x86_64 and aarch64, with unwind information formats commonly used on macOS, Linux and Android.
5+
//! It currently supports unwinding x86_64 and aarch64, with unwind information formats commonly used on Windows, macOS, Linux and Android.
66
//!
77
//! You give framehop register values, stack memory and unwind data, and framehop produces a list of return addresses.
88
//!
99
//! Framehop can be used in the following scenarios:
1010
//!
11-
//! - Live unwinding of a remote process. This is how [`perfrecord`](https://github.com/mstange/perfrecord/) uses it.
11+
//! - Live unwinding of a remote process. This is how [`samply`](https://github.com/mstange/samply/) uses it.
1212
//! - Offline unwinding from saved registers and stack bytes, even on a different machine, a different OS, or a different CPU architecture.
1313
//! - Live unwinding inside the same process. This is currently unproven, but should work as long as you can do heap allocation before sampling, in order to allocate a cache and to update the list of modules. The actual unwinding does not require any heap allocation and should work even inside a signal handler, as long as you use `MustNotAllocateDuringUnwind`.
1414
//!
@@ -26,6 +26,7 @@
2626
//! - Apple's Compact Unwinding Format, in `__unwind_info` (macOS)
2727
//! - DWARF CFI in `.eh_frame` (using `.eh_frame_hdr` as an index, if available)
2828
//! - DWARF CFI in `.debug_frame`
29+
//! - PE unwind info in `.pdata`, `.rdata` and `.xdata` (for Windows x86_64)
2930
//! - It supports correct unwinding even when the program is interrupted inside a function prologue or epilogue. On macOS, it has to analyze assembly instructions in order to do this.
3031
//! - On x86_64 and aarch64, it falls back to frame pointer unwinding if it cannot find unwind information for an address.
3132
//! - It caches the unwind rule for each address in a fixed-size cache, so that repeated unwinding from the same address is even faster.

0 commit comments

Comments
 (0)