@@ -1623,27 +1623,45 @@ impl DebugSession {
16231623 }
16241624
16251625 fn make_module_detail ( & self , module : & SBModule ) -> Module {
1626- let mut msg = Module {
1626+ let mut mod_info = Module {
16271627 id : ModuleId :: String ( self . module_id ( & module) ) ,
16281628 name : module. file_spec ( ) . filename ( ) . display ( ) . to_string ( ) ,
16291629 path : Some ( module. file_spec ( ) . path ( ) . display ( ) . to_string ( ) ) ,
16301630 ..Default :: default ( )
16311631 } ;
16321632
1633- let header_addr = module. object_header_address ( ) ;
1634- if header_addr. is_valid ( ) {
1635- msg. address_range = Some ( format ! ( "{:X}" , header_addr. load_address( & self . target) ) ) ;
1633+ let version = module. version ( ) ;
1634+ if !version. is_empty ( ) {
1635+ let version_str = version. iter ( ) . map ( u32:: to_string) . collect :: < Vec < _ > > ( ) . join ( "." ) ;
1636+ mod_info. version = Some ( version_str) ;
16361637 }
16371638
1638- let symbols = module. symbol_file_spec ( ) ;
1639- if symbols. is_valid ( ) {
1640- msg. symbol_status = Some ( "Symbols loaded." . into ( ) ) ;
1641- msg. symbol_file_path = Some ( module. symbol_file_spec ( ) . path ( ) . display ( ) . to_string ( ) ) ;
1639+ let range_start = module. object_header_address ( ) . load_address ( & self . target ) ;
1640+ let mut range_end = range_start;
1641+ for section in module. sections ( ) {
1642+ let sec_start = section. load_address ( & self . target ) ;
1643+ if sec_start != INVALID_ADDRESS {
1644+ let sec_end = sec_start + section. byte_size ( ) as Address ;
1645+ range_end = cmp:: max ( range_end, sec_end) ;
1646+ }
1647+ }
1648+ mod_info. address_range = Some ( format ! ( "{:X} - {:X}" , range_start, range_end) ) ;
1649+
1650+ let symbol_status = if module. num_compile_units ( ) > 0 {
1651+ "Source debug info"
1652+ } else if module. num_symbols ( ) > 0 {
1653+ "Public symbols only"
16421654 } else {
1643- msg. symbol_status = Some ( "Symbols not found" . into ( ) )
1655+ "No symbols"
1656+ } ;
1657+ mod_info. symbol_status = Some ( symbol_status. into ( ) ) ;
1658+
1659+ let symbol_file = module. symbol_file_spec ( ) ;
1660+ if symbol_file. is_valid ( ) {
1661+ mod_info. symbol_file_path = Some ( module. symbol_file_spec ( ) . path ( ) . display ( ) . to_string ( ) ) ;
16441662 }
16451663
1646- msg
1664+ mod_info
16471665 }
16481666
16491667 fn handle_thread_event ( & mut self , event : & SBThreadEvent ) {
0 commit comments