diff --git a/aya/src/maps/stack_trace.rs b/aya/src/maps/stack_trace.rs index 4ccb0ee1..37f38f3e 100644 --- a/aya/src/maps/stack_trace.rs +++ b/aya/src/maps/stack_trace.rs @@ -1,7 +1,12 @@ //! A hash map of kernel or user space stack traces. //! //! See [`StackTraceMap`] for documentation and examples. -use std::{borrow::Borrow, fs, io, mem, path::Path, str::FromStr}; +use std::{ + borrow::{Borrow, Cow}, + fs, io, mem, + path::Path, + str::FromStr, +}; use crate::{ maps::{IterableMap, MapData, MapError, MapIter, MapKeys}, @@ -162,7 +167,7 @@ impl<'a, T: Borrow> IntoIterator for &'a StackTraceMap { /// A resolver for symbols based on an address obtained from a stack trace. pub trait SymbolResolver { /// Resolve a symbol for a given address, if possible. - fn resolve_symbol(&self, addr: u64) -> Option<&str>; + fn resolve_symbol(&self, addr: u64) -> Option>; } /// A kernel or user space stack trace. diff --git a/aya/src/util.rs b/aya/src/util.rs index a7b8b876..67df7529 100644 --- a/aya/src/util.rs +++ b/aya/src/util.rs @@ -1,5 +1,6 @@ //! Utility functions. use std::{ + borrow::Cow, collections::BTreeMap, error::Error, ffi::{CStr, CString}, @@ -206,8 +207,8 @@ fn parse_cpu_ranges(data: &str) -> Result, ()> { pub type SimpleSymbolResolver = BTreeMap; impl SymbolResolver for SimpleSymbolResolver { - fn resolve_symbol(&self, addr: u64) -> Option<&str> { - self.range(..=addr).next_back().map(|(_, s)| s.as_str()) + fn resolve_symbol(&self, addr: u64) -> Option> { + self.range(..=addr).next_back().map(|(_, s)| Cow::from(s)) } } diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index a0475bb0..e081231d 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -804,9 +804,9 @@ pub fn aya::maps::stack_trace::StackTraceMap::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya::maps::stack_trace::StackTraceMap pub fn aya::maps::stack_trace::StackTraceMap::from(t: T) -> T pub trait aya::maps::stack_trace::SymbolResolver -pub fn aya::maps::stack_trace::SymbolResolver::resolve_symbol(&self, addr: u64) -> core::option::Option<&str> +pub fn aya::maps::stack_trace::SymbolResolver::resolve_symbol(&self, addr: u64) -> core::option::Option> impl aya::maps::stack_trace::SymbolResolver for aya::util::SimpleSymbolResolver -pub fn aya::util::SimpleSymbolResolver::resolve_symbol(&self, addr: u64) -> core::option::Option<&str> +pub fn aya::util::SimpleSymbolResolver::resolve_symbol(&self, addr: u64) -> core::option::Option> pub enum aya::maps::Map pub aya::maps::Map::Array(aya::maps::MapData) pub aya::maps::Map::BloomFilter(aya::maps::MapData)