@@ -239,7 +239,13 @@ impl MapFile {
239239 prev_line = line;
240240 }
241241
242- for ( i, segment) in temp_segment_list. iter_mut ( ) . enumerate ( ) {
242+ self . segments_list = Self :: post_process_segments_gnu ( temp_segment_list) ;
243+ }
244+
245+ fn post_process_segments_gnu ( temp_segment_list : Vec < segment:: Segment > ) -> Vec < segment:: Segment > {
246+ let mut segments_list = Vec :: with_capacity ( temp_segment_list. len ( ) ) ;
247+
248+ for ( i, segment) in temp_segment_list. into_iter ( ) . enumerate ( ) {
243249 if i == 0 && segment. is_placeholder ( ) {
244250 // skip the dummy segment if it has no size, files or symbols
245251 continue ;
@@ -248,7 +254,7 @@ impl MapFile {
248254 let mut new_segment = segment. clone_no_filelist ( ) ;
249255
250256 let mut vrom_offset = segment. vrom ;
251- for file in segment. files_list . iter_mut ( ) {
257+ for mut file in segment. files_list . into_iter ( ) {
252258 let mut acummulated_size = 0 ;
253259 let symbols_count = file. symbols . len ( ) ;
254260 let is_noload_section = file. is_noload_section ( ) ;
@@ -308,11 +314,14 @@ impl MapFile {
308314 vrom_offset += file. size ;
309315 }
310316
311- new_segment. files_list . push ( file. clone ( ) ) ;
317+ new_segment. files_list . push ( file) ;
312318 }
313319
314- self . segments_list . push ( new_segment) ;
320+ segments_list. push ( new_segment) ;
315321 }
322+
323+ segments_list. shrink_to_fit ( ) ;
324+ segments_list
316325 }
317326
318327 /**
@@ -414,15 +423,21 @@ impl MapFile {
414423 }
415424 }
416425
417- for ( i, segment) in temp_segment_list. iter_mut ( ) . enumerate ( ) {
426+ self . segments_list = Self :: post_process_segments_lld ( temp_segment_list) ;
427+ }
428+
429+ fn post_process_segments_lld ( temp_segment_list : Vec < segment:: Segment > ) -> Vec < segment:: Segment > {
430+ let mut segments_list = Vec :: with_capacity ( temp_segment_list. len ( ) ) ;
431+
432+ for ( i, segment) in temp_segment_list. into_iter ( ) . enumerate ( ) {
418433 if i == 0 && segment. is_placeholder ( ) {
419434 // skip the dummy segment if it has no size, files or symbols
420435 continue ;
421436 }
422437
423438 let mut new_segment = segment. clone_no_filelist ( ) ;
424439
425- for file in segment. files_list . iter_mut ( ) {
440+ for mut file in segment. files_list . into_iter ( ) {
426441 if file. is_placeholder ( ) {
427442 // drop placeholders
428443 continue ;
@@ -455,11 +470,14 @@ impl MapFile {
455470 }
456471 }
457472
458- new_segment. files_list . push ( file. clone ( ) ) ;
473+ new_segment. files_list . push ( file) ;
459474 }
460475
461- self . segments_list . push ( new_segment) ;
476+ segments_list. push ( new_segment) ;
462477 }
478+
479+ segments_list. shrink_to_fit ( ) ;
480+ segments_list
463481 }
464482
465483 pub fn filter_by_section_type ( & self , section_type : & str ) -> Self {
0 commit comments