address remaining notes

pull/715/head
Addison Crump 2 years ago
parent 601841f648
commit 17a8ccd388
No known key found for this signature in database
GPG Key ID: D495C2DF24C779B2

@ -1,7 +1,7 @@
//! A hash map of kernel or user space stack traces.
//!
//! See [`StackTraceMap`] for documentation and examples.
use std::{borrow::Borrow, collections::BTreeMap, fs, io, mem, path::Path, str::FromStr};
use std::{borrow::Borrow, fs, io, mem, path::Path, str::FromStr};
use crate::{
maps::{IterableMap, MapData, MapError, MapIter, MapKeys},
@ -162,16 +162,7 @@ impl<'a, T: Borrow<MapData>> IntoIterator for &'a StackTraceMap<T> {
/// 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_sym(&self, addr: u64) -> Option<String>;
}
/// The simplest resolver: a direct map from addresses to strings.
pub type SimpleSymbolResolver = BTreeMap<u64, String>;
impl SymbolResolver for SimpleSymbolResolver {
fn resolve_sym(&self, addr: u64) -> Option<String> {
self.range(..=addr).next_back().map(|(_, s)| s.clone())
}
fn resolve_sym(&self, addr: u64) -> Option<&str>;
}
/// A kernel or user space stack trace.
@ -191,7 +182,7 @@ impl StackTrace {
/// them from debug info.
pub fn resolve<R: SymbolResolver>(&mut self, symbols: &R) -> &StackTrace {
for frame in self.frames.iter_mut() {
frame.symbol_name = symbols.resolve_sym(frame.ip)
frame.symbol_name = symbols.resolve_sym(frame.ip).map(|s| s.to_string())
}
self

@ -14,8 +14,8 @@ use crate::{
Pod,
};
use crate::maps::stack_trace::SimpleSymbolResolver;
use libc::{if_nametoindex, sysconf, uname, utsname, _SC_PAGESIZE};
use crate::maps::stack_trace::SymbolResolver;
/// Represents a kernel version, in major.minor.release version.
// Adapted from https://docs.rs/procfs/latest/procfs/sys/kernel/struct.Version.html.
@ -202,6 +202,15 @@ fn parse_cpu_ranges(data: &str) -> Result<Vec<u32>, ()> {
Ok(cpus)
}
/// The simplest resolver: a direct map from addresses to strings.
pub type SimpleSymbolResolver = BTreeMap<u64, String>;
impl SymbolResolver for SimpleSymbolResolver {
fn resolve_sym(&self, addr: u64) -> Option<&str> {
self.range(..=addr).next_back().map(|(_, s)| s.as_str())
}
}
/// Loads kernel symbols from `/proc/kallsyms`.
///
/// The symbols can be passed to [`StackTrace::resolve`](crate::maps::stack_trace::StackTrace::resolve).
@ -210,8 +219,8 @@ pub fn kernel_symbols() -> Result<SimpleSymbolResolver, io::Error> {
parse_kernel_symbols(&mut reader)
}
fn parse_kernel_symbols(reader: impl BufRead) -> Result<BTreeMap<u64, String>, io::Error> {
let mut syms = BTreeMap::new();
fn parse_kernel_symbols(reader: impl BufRead) -> Result<SimpleSymbolResolver, io::Error> {
let mut syms = SimpleSymbolResolver::new();
for line in reader.lines() {
let line = line?;

@ -804,10 +804,9 @@ pub fn aya::maps::stack_trace::StackTraceMap<T>::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::maps::stack_trace::StackTraceMap<T>
pub fn aya::maps::stack_trace::StackTraceMap<T>::from(t: T) -> T
pub trait aya::maps::stack_trace::SymbolResolver
pub fn aya::maps::stack_trace::SymbolResolver::resolve_sym(&self, addr: u64) -> core::option::Option<alloc::string::String>
impl aya::maps::stack_trace::SymbolResolver for aya::maps::stack_trace::SimpleSymbolResolver
pub fn aya::maps::stack_trace::SimpleSymbolResolver::resolve_sym(&self, addr: u64) -> core::option::Option<alloc::string::String>
pub type aya::maps::stack_trace::SimpleSymbolResolver = alloc::collections::btree::map::BTreeMap<u64, alloc::string::String>
pub fn aya::maps::stack_trace::SymbolResolver::resolve_sym(&self, addr: u64) -> core::option::Option<&str>
impl aya::maps::stack_trace::SymbolResolver for aya::util::SimpleSymbolResolver
pub fn aya::util::SimpleSymbolResolver::resolve_sym(&self, addr: u64) -> core::option::Option<&str>
pub enum aya::maps::Map
pub aya::maps::Map::Array(aya::maps::MapData)
pub aya::maps::Map::BloomFilter(aya::maps::MapData)
@ -6976,10 +6975,11 @@ impl<T> core::borrow::BorrowMut<T> for aya::util::KernelVersion where T: core::m
pub fn aya::util::KernelVersion::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::util::KernelVersion
pub fn aya::util::KernelVersion::from(t: T) -> T
pub fn aya::util::kernel_symbols() -> core::result::Result<aya::maps::stack_trace::SimpleSymbolResolver, std::io::error::Error>
pub fn aya::util::kernel_symbols() -> core::result::Result<aya::util::SimpleSymbolResolver, std::io::error::Error>
pub fn aya::util::nr_cpus() -> core::result::Result<usize, std::io::error::Error>
pub fn aya::util::online_cpus() -> core::result::Result<alloc::vec::Vec<u32>, std::io::error::Error>
pub fn aya::util::syscall_prefix() -> core::result::Result<&'static str, std::io::error::Error>
pub type aya::util::SimpleSymbolResolver = alloc::collections::btree::map::BTreeMap<u64, alloc::string::String>
pub macro aya::include_bytes_aligned!
pub enum aya::BpfError
pub aya::BpfError::BtfError(aya_obj::btf::btf::BtfError)

Loading…
Cancel
Save