@@ -221,21 +221,28 @@ fn normalize(symbol: &str) -> String {
221
221
///
222
222
/// This asserts that the function at `fnptr` contains the instruction
223
223
/// `expected` provided.
224
- pub fn assert ( fnptr : usize , expected : & str ) {
224
+ pub fn assert ( fnptr : usize , fnname : & str , expected : & str ) {
225
225
// Translate this function pointer to a symbolic name that we'd have found
226
226
// in the disassembly.
227
227
let mut sym = None ;
228
228
backtrace:: resolve ( fnptr as * mut _ , |name| {
229
229
sym = name. name ( ) . and_then ( |s| s. as_str ( ) ) . map ( normalize) ;
230
230
} ) ;
231
- let sym = match sym {
231
+
232
+ let functions = match sym. as_ref ( ) . and_then ( |s| DISASSEMBLY . get ( s) ) {
232
233
Some ( s) => s,
233
- None => panic ! ( "failed to get symbol of function pointer: {}" , fnptr) ,
234
+ None => {
235
+ if let Some ( sym) = sym {
236
+ println ! ( "assumed symbol name: `{}`" , sym) ;
237
+ }
238
+ println ! ( "maybe related functions" ) ;
239
+ for f in DISASSEMBLY . keys ( ) . filter ( |k| k. contains ( fnname) ) {
240
+ println ! ( "\t - {}" , f) ;
241
+ }
242
+ panic ! ( "failed to find disassembly of {:#x} ({})" , fnptr, fnname) ;
243
+ }
234
244
} ;
235
245
236
- // Find our function in the list of all disassembled functions
237
- let functions = & DISASSEMBLY . get ( & sym)
238
- . expect ( & format ! ( "failed to find disassembly of {}" , sym) ) ;
239
246
assert_eq ! ( functions. len( ) , 1 ) ;
240
247
let function = & functions[ 0 ] ;
241
248
@@ -254,7 +261,7 @@ pub fn assert(fnptr: usize, expected: &str) {
254
261
255
262
// Help debug by printing out the found disassembly, and then panic as we
256
263
// didn't find the instruction.
257
- println ! ( "disassembly for {}: " , sym) ;
264
+ println ! ( "disassembly for {}: " , sym. as_ref ( ) . unwrap ( ) ) ;
258
265
for ( i, instr) in function. instrs . iter ( ) . enumerate ( ) {
259
266
print ! ( "\t {:2}: " , i) ;
260
267
for part in instr. parts . iter ( ) {
@@ -264,4 +271,3 @@ pub fn assert(fnptr: usize, expected: &str) {
264
271
}
265
272
panic ! ( "failed to find instruction `{}` in the disassembly" , expected) ;
266
273
}
267
-
0 commit comments