22// SPDX-License-Identifier: Apache-2.0
33
44use anyhow:: { anyhow, bail, Error , Result } ;
5+ use cpp_demangle:: { DemangleOptions , Symbol } ;
56use ffi:: ffi;
67use libafl:: prelude:: CmpValues ;
78use libafl_bolts:: { AsMutSlice , AsSlice } ;
89use libafl_targets:: { AFLppCmpLogOperands , AFL_CMP_TYPE_INS , CMPLOG_MAP_H } ;
10+ use rustc_demangle:: try_demangle;
911use serde:: { Deserialize , Serialize } ;
1012use simics:: {
1113 api:: {
@@ -18,7 +20,6 @@ use std::{
1820 collections:: HashMap , ffi:: c_void, fmt:: Display , hash:: Hash , num:: Wrapping ,
1921 slice:: from_raw_parts, str:: FromStr ,
2022} ;
21- use symbolic:: demangle:: Demangle ;
2223use typed_builder:: TypedBuilder ;
2324
2425use crate :: { arch:: ArchitectureOperations , Tsffs } ;
@@ -397,9 +398,15 @@ impl Tsffs {
397398 . get ( & processor_number)
398399 . and_then ( |lookup_tree| {
399400 lookup_tree. query ( pc..pc + 1 ) . next ( ) . map ( |q| {
400- let offset = pc - q. range . start ;
401- let symbol_demangled = symbolic:: common:: Name :: from ( & q. value . name )
402- . demangle ( symbolic:: demangle:: DemangleOptions :: complete ( ) ) ;
401+ let offset = pc - q. value . base + q. value . rva ;
402+ let symbol_demangled = try_demangle ( & q. value . name )
403+ . map ( |d| d. to_string ( ) )
404+ . ok ( )
405+ . or_else ( || {
406+ Symbol :: new ( & q. value . name )
407+ . ok ( )
408+ . and_then ( |s| s. demangle ( & DemangleOptions :: new ( ) ) . ok ( ) )
409+ } ) ;
403410 ExecutionTraceSymbol {
404411 symbol : q. value . name . clone ( ) ,
405412 symbol_demangled,
0 commit comments