commit | 332c4da9001b19df9f81fb4b32a9991ea59a2d3e | [log] [tgz] |
---|---|---|
author | Mark Rousskov <mark.simulacrum@gmail.com> | Sat Mar 18 22:00:55 2023 -0400 |
committer | Mark Rousskov <mark.simulacrum@gmail.com> | Sat Mar 18 22:33:54 2023 -0400 |
tree | 657de2ad92ae7885f60e87dbf8949d6418d06dd6 | |
parent | 2811a1ad6f7c8bead2ef3671e4fdc10de1553e96 [diff] |
Support searching for and demangling symbols This adds an API for demangling a stream of data which consists of a mix of mangled and non-mangled symbols. This is gated behind a new Cargo feature ("std") since the new API uses I/O traits and allocates memory. This API is broadly useful for any downstream users that are processing streams with interleaved symbols (e.g., perf script output) and don't want to filter down ahead of time. Previously the best option for this (to my knowledge) was either shelling out to the `rustfilt` binary or copying an implementation much like it. The implementation added in this commit is roughly 2x faster than that in the rustfilt binary today; if this is accepted moving rustfilt to use this will make sense.
Demangling for Rust symbols, written in Rust.
You can add this as a dependency via your Cargo.toml
[dependencies] rustc-demangle = "0.1"
and then be sure to check out the crate documentation for usage.
You can also use this crate from other languages via the C API wrapper in the crates/capi
directory. This can be build with:
$ cargo build -p rustc-demangle-capi --release
You'll then find target/release/librustc_demangle.a
and target/release/librustc_demangle.so
(or a different name depending on your platform). These objects implement the interface specified in crates/capi/include/rustc_demangle.h
.
This project is licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in rustc-demangle you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.