You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Readme.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
6
6
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.
7
7
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.
9
9
10
10
You give framehop register values, stack memory and unwind data, and framehop produces a list of return addresses.
11
11
@@ -29,6 +29,7 @@ In turn, framehop solves the following problems:
29
29
- Apple's Compact Unwinding Format, in `__unwind_info` (macOS)
30
30
- DWARF CFI in `.eh_frame` (using `.eh_frame_hdr` as an index, if available)
31
31
- DWARF CFI in `.debug_frame`
32
+
- PE unwind info in `.pdata`, `.rdata` and `.xdata` (for Windows x86_64)
32
33
- 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.
33
34
- On x86_64 and aarch64, it falls back to frame pointer unwinding if it cannot find unwind information for an address.
34
35
- 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
60
61
61
62
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.
62
63
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).
Copy file name to clipboardExpand all lines: src/lib.rs
+3-2Lines changed: 3 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -2,13 +2,13 @@
2
2
//!
3
3
//! 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.
4
4
//!
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.
6
6
//!
7
7
//! You give framehop register values, stack memory and unwind data, and framehop produces a list of return addresses.
8
8
//!
9
9
//! Framehop can be used in the following scenarios:
10
10
//!
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.
12
12
//! - Offline unwinding from saved registers and stack bytes, even on a different machine, a different OS, or a different CPU architecture.
13
13
//! - 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`.
14
14
//!
@@ -26,6 +26,7 @@
26
26
//! - Apple's Compact Unwinding Format, in `__unwind_info` (macOS)
27
27
//! - DWARF CFI in `.eh_frame` (using `.eh_frame_hdr` as an index, if available)
28
28
//! - DWARF CFI in `.debug_frame`
29
+
//! - PE unwind info in `.pdata`, `.rdata` and `.xdata` (for Windows x86_64)
29
30
//! - 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.
30
31
//! - On x86_64 and aarch64, it falls back to frame pointer unwinding if it cannot find unwind information for an address.
31
32
//! - 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