@@ -11,13 +11,13 @@ use std::{
1111} ;
1212
1313use lending_iterator:: { windows_mut, LendingIterator } ;
14- use simics:: { debug, get_object, info, ConfObject } ;
14+ use simics:: { debug, get_object, info, warn , ConfObject } ;
1515use windows:: Win32 :: System :: {
1616 Diagnostics :: Debug :: {
1717 IMAGE_DEBUG_DIRECTORY , IMAGE_DEBUG_TYPE_CODEVIEW , IMAGE_DIRECTORY_ENTRY_DEBUG ,
1818 IMAGE_NT_HEADERS64 ,
1919 } ,
20- SystemServices :: IMAGE_DOS_HEADER ,
20+ SystemServices :: { FILE_NOTIFY_FULL_INFORMATION , IMAGE_DOS_HEADER } ,
2121} ;
2222
2323use crate :: { os:: DebugInfoConfig , source_cov:: SourceCache } ;
@@ -448,14 +448,18 @@ impl ProcessModule {
448448 )
449449 } )
450450 . collect :: < Vec < _ > > ( ) ;
451- Some ( SymbolInfo :: new (
451+ let info = SymbolInfo :: new (
452452 procedure_rva. 0 as u64 ,
453453 self . base ,
454454 procedure_symbol. len as u64 ,
455455 symbol_name. to_string ( ) . to_string ( ) ,
456456 self . full_name . clone ( ) ,
457457 lines,
458- ) )
458+ ) ;
459+ if let Ok ( o) = get_object ( "tsffs" ) {
460+ debug ! ( o, "Got symbol: {:?}" , info) ;
461+ }
462+ Some ( info)
459463 } )
460464 . collect :: < Vec < _ > > ( )
461465 } )
@@ -604,49 +608,67 @@ impl Module {
604608 . iterator ( )
605609 . filter_map ( |line| line. ok ( ) )
606610 . filter_map ( |line_info| {
607- line_program
608- . get_file_info ( line_info. file_index )
609- . ok ( )
610- . and_then ( |line_file_info| {
611- string_table
612- . get ( line_file_info. name )
613- . map ( |line_file_name| ( line_file_info, line_file_name) )
614- . ok ( )
615- } )
616- . and_then ( |( line_file_info, line_file_name) | {
617- line_info. offset . to_rva ( & address_map) . map ( |line_rva| {
618- ( line_file_info, line_file_name, line_rva, line_info)
619- } )
620- } )
621- . and_then (
622- |( line_file_info, line_file_name, line_rva, line_info) | {
623- source_cache
624- . lookup_pdb (
625- & line_file_info,
626- & line_file_name. to_string ( ) ,
627- )
628- . ok ( )
629- . flatten ( )
630- . map ( |p| p. to_path_buf ( ) )
631- . map ( |file_path| LineInfo {
632- rva : line_rva. 0 as u64 ,
633- size : line_info. length . unwrap_or ( 1 ) ,
634- file_path,
635- start_line : line_info. line_start ,
636- end_line : line_info. line_end ,
637- } )
638- } ,
639- )
611+ let Ok ( line_file_info) =
612+ line_program. get_file_info ( line_info. file_index )
613+ else {
614+ if let Ok ( o) = get_object ( "tsffs" ) {
615+ debug ! ( o, "No file info for line {:?}" , line_info) ;
616+ }
617+ return None ;
618+ } ;
619+
620+ let Ok ( line_file_name) = string_table. get ( line_file_info. name )
621+ else {
622+ if let Ok ( o) = get_object ( "tsffs" ) {
623+ debug ! ( o, "No file name for line {:?}" , line_file_info) ;
624+ }
625+ return None ;
626+ } ;
627+
628+ let Some ( line_rva) = line_info. offset . to_rva ( & address_map) else {
629+ if let Ok ( o) = get_object ( "tsffs" ) {
630+ debug ! ( o, "No RVA for line {:?}" , line_info) ;
631+ }
632+ return None ;
633+ } ;
634+
635+ let Ok ( Some ( source_file) ) = source_cache
636+ . lookup_pdb ( & line_file_info, & line_file_name. to_string ( ) )
637+ else {
638+ if let Ok ( o) = get_object ( "tsffs" ) {
639+ debug ! ( o, "No source file path for line {:?}" , line_info) ;
640+ }
641+ return None ;
642+ } ;
643+
644+ let info = LineInfo {
645+ rva : line_rva. 0 as u64 ,
646+ size : line_info. length . unwrap_or ( 1 ) ,
647+ file_path : source_file. to_path_buf ( ) ,
648+ start_line : line_info. line_start ,
649+ end_line : line_info. line_end ,
650+ } ;
651+ if let Ok ( o) = get_object ( "tsffs" ) {
652+ debug ! ( o, "Got line info {:?}" , line_info) ;
653+ }
654+
655+ Some ( info)
640656 } )
641657 . collect :: < Vec < _ > > ( ) ;
642- Some ( SymbolInfo :: new (
658+
659+ let info = SymbolInfo :: new (
643660 procedure_rva. 0 as u64 ,
644661 self . base ,
645662 procedure_symbol. len as u64 ,
646663 symbol_name. to_string ( ) . to_string ( ) ,
647664 self . full_name . clone ( ) ,
648665 lines,
649- ) )
666+ ) ;
667+
668+ if let Ok ( o) = get_object ( "tsffs" ) {
669+ debug ! ( o, "Got symbol: {:?}" , info) ;
670+ }
671+ Some ( info)
650672 } )
651673 . collect :: < Vec < _ > > ( )
652674 } )
0 commit comments