@@ -107,18 +107,19 @@ impl ModuleDebugInfoExt for ModuleDebugInfo {
107107/// Compute debug info once per unique ELF path from deduplicated symbols.
108108/// Returns a map of path -> ModuleDebugInfo with `load_bias: 0` (load bias is per-pid).
109109pub fn debug_info_by_path (
110- symbols_by_path : & std:: collections:: HashMap <
110+ mounted_modules_by_path : & std:: collections:: HashMap <
111111 std:: path:: PathBuf ,
112- crate :: executor:: wall_time:: perf:: perf_map :: ModuleSymbols ,
112+ crate :: executor:: wall_time:: perf:: parse_perf_file :: MountedModule ,
113113 > ,
114114) -> std:: collections:: HashMap < std:: path:: PathBuf , ModuleDebugInfo > {
115- symbols_by_path
115+ mounted_modules_by_path
116116 . par_iter ( )
117- . filter_map ( |( path, module_symbols) | {
117+ . filter_map ( |( path, mounted_module) | {
118+ let module_symbols = mounted_module. module_symbols . as_ref ( ) ?;
118119 match ModuleDebugInfo :: from_symbols ( path, module_symbols, 0 ) {
119120 Ok ( module_debug_info) => Some ( ( path. clone ( ) , module_debug_info) ) ,
120121 Err ( error) => {
121- trace ! ( "Failed to load debug info for module {path:?}: {error}" , ) ;
122+ trace ! ( "Failed to load debug info for module {path:?}: {error}" ) ;
122123 None
123124 }
124125 }
@@ -134,7 +135,8 @@ mod tests {
134135 fn test_golang_debug_info ( ) {
135136 let ( start_addr, end_addr, file_offset) =
136137 ( 0x0000000000402000_u64 , 0x000000000050f000_u64 , 0x2000 ) ;
137- let module_symbols = ModuleSymbols :: new (
138+ let module_symbols = ModuleSymbols :: from_elf ( "testdata/perf_map/go_fib.bin" ) . unwrap ( ) ;
139+ let load_bias = ModuleSymbols :: compute_load_bias (
138140 "testdata/perf_map/go_fib.bin" ,
139141 start_addr,
140142 end_addr,
@@ -144,7 +146,7 @@ mod tests {
144146 let module_debug_info = ModuleDebugInfo :: from_symbols (
145147 "testdata/perf_map/go_fib.bin" ,
146148 & module_symbols,
147- module_symbols . load_bias ( ) ,
149+ load_bias,
148150 )
149151 . unwrap ( ) ;
150152 insta:: assert_debug_snapshot!( module_debug_info. debug_infos) ;
@@ -154,7 +156,9 @@ mod tests {
154156 fn test_cpp_debug_info ( ) {
155157 let ( start_addr, end_addr, file_offset) =
156158 ( 0x0000000000400000_u64 , 0x0000000000459000_u64 , 0x0 ) ;
157- let module_symbols = ModuleSymbols :: new (
159+ let module_symbols =
160+ ModuleSymbols :: from_elf ( "testdata/perf_map/cpp_my_benchmark.bin" ) . unwrap ( ) ;
161+ let load_bias = ModuleSymbols :: compute_load_bias (
158162 "testdata/perf_map/cpp_my_benchmark.bin" ,
159163 start_addr,
160164 end_addr,
@@ -164,7 +168,7 @@ mod tests {
164168 let mut module_debug_info = ModuleDebugInfo :: from_symbols (
165169 "testdata/perf_map/cpp_my_benchmark.bin" ,
166170 & module_symbols,
167- module_symbols . load_bias ( ) ,
171+ load_bias,
168172 )
169173 . unwrap ( ) ;
170174
@@ -177,29 +181,33 @@ mod tests {
177181 fn test_rust_divan_debug_info ( ) {
178182 const MODULE_PATH : & str = "testdata/perf_map/divan_sleep_benches.bin" ;
179183
180- let module_symbols =
181- ModuleSymbols :: new ( MODULE_PATH , 0x00005555555a2000 , 0x0000555555692000 , 0x4d000 )
182- . unwrap ( ) ;
184+ let module_symbols = ModuleSymbols :: from_elf ( MODULE_PATH ) . unwrap ( ) ;
185+ let load_bias = ModuleSymbols :: compute_load_bias (
186+ MODULE_PATH ,
187+ 0x00005555555a2000 ,
188+ 0x0000555555692000 ,
189+ 0x4d000 ,
190+ )
191+ . unwrap ( ) ;
183192 let module_debug_info =
184- ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, module_symbols. load_bias ( ) )
185- . unwrap ( ) ;
193+ ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, load_bias) . unwrap ( ) ;
186194 insta:: assert_debug_snapshot!( module_debug_info. debug_infos) ;
187195 }
188196
189197 #[ test]
190198 fn test_the_algorithms_debug_info ( ) {
191199 const MODULE_PATH : & str = "testdata/perf_map/the_algorithms.bin" ;
192200
193- let module_symbols = ModuleSymbols :: new (
201+ let module_symbols = ModuleSymbols :: from_elf ( MODULE_PATH ) . unwrap ( ) ;
202+ let load_bias = ModuleSymbols :: compute_load_bias (
194203 MODULE_PATH ,
195204 0x00005573e59fe000 ,
196205 0x00005573e5b07000 ,
197206 0x00052000 ,
198207 )
199208 . unwrap ( ) ;
200209 let module_debug_info =
201- ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, module_symbols. load_bias ( ) )
202- . unwrap ( ) ;
210+ ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, load_bias) . unwrap ( ) ;
203211 insta:: assert_debug_snapshot!( module_debug_info. debug_infos) ;
204212 }
205213
@@ -209,11 +217,12 @@ mod tests {
209217
210218 let ( start_addr, end_addr, file_offset) =
211219 ( 0x0000555555e6d000_u64 , 0x0000555556813000_u64 , 0x918000 ) ;
212- let module_symbols =
213- ModuleSymbols :: new ( MODULE_PATH , start_addr, end_addr, file_offset) . unwrap ( ) ;
214- let module_debug_info =
215- ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, module_symbols. load_bias ( ) )
220+ let module_symbols = ModuleSymbols :: from_elf ( MODULE_PATH ) . unwrap ( ) ;
221+ let load_bias =
222+ ModuleSymbols :: compute_load_bias ( MODULE_PATH , start_addr, end_addr, file_offset)
216223 . unwrap ( ) ;
224+ let module_debug_info =
225+ ModuleDebugInfo :: from_symbols ( MODULE_PATH , & module_symbols, load_bias) . unwrap ( ) ;
217226 insta:: assert_debug_snapshot!( module_debug_info. debug_infos) ;
218227 }
219228}
0 commit comments