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.
5 files changed
tree: 657de2ad92ae7885f60e87dbf8949d6418d06dd6
  1. .github/
  2. crates/
  3. fuzz/
  4. src/
  5. .gitignore
  6. Cargo.toml
  7. LICENSE-APACHE
  8. LICENSE-MIT
  9. README.md
README.md

rustc-demangle

Demangling for Rust symbols, written in Rust.

Documentation

Usage

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.

Usage from non-Rust languages

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.

License

This project is licensed under either of

at your option.

Contribution

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.