|  |  |  | @ -360,24 +360,30 @@ impl<'a> FunctionLinker<'a> { | 
		
	
		
			
				|  |  |  |  |         fun: &Function, | 
		
	
		
			
				|  |  |  |  |         start: usize, | 
		
	
		
			
				|  |  |  |  |     ) -> Result<(), RelocationError> { | 
		
	
		
			
				|  |  |  |  |         let off_adj = start - (fun.section_offset as usize / INS_SIZE); | 
		
	
		
			
				|  |  |  |  |         let func_info = &fun.func_info.func_info; | 
		
	
		
			
				|  |  |  |  |         let func_info = func_info.iter().map(|f| { | 
		
	
		
			
				|  |  |  |  |             let mut new = *f; | 
		
	
		
			
				|  |  |  |  |             new.insn_off = f.insn_off + off_adj as u32; | 
		
	
		
			
				|  |  |  |  |             new | 
		
	
		
			
				|  |  |  |  |         let func_info = func_info.iter().cloned().map(|mut info| { | 
		
	
		
			
				|  |  |  |  |             // `start` is the new instruction offset of `fun` within `program`
 | 
		
	
		
			
				|  |  |  |  |             info.insn_off = start as u32; | 
		
	
		
			
				|  |  |  |  |             info | 
		
	
		
			
				|  |  |  |  |         }); | 
		
	
		
			
				|  |  |  |  |         program.func_info.func_info.extend(func_info); | 
		
	
		
			
				|  |  |  |  |         program.func_info.num_info = program.func_info.func_info.len() as u32; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         let line_info = &fun.line_info.line_info; | 
		
	
		
			
				|  |  |  |  |         let line_info = line_info.iter().map(|l| { | 
		
	
		
			
				|  |  |  |  |             let mut new = *l; | 
		
	
		
			
				|  |  |  |  |             new.insn_off = start as u32 + l.insn_off; | 
		
	
		
			
				|  |  |  |  |             new | 
		
	
		
			
				|  |  |  |  |         if !line_info.is_empty() { | 
		
	
		
			
				|  |  |  |  |             // this is the original offset
 | 
		
	
		
			
				|  |  |  |  |             let original_start_off = line_info[0].insn_off; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             let line_info = line_info.iter().cloned().map(|mut info| { | 
		
	
		
			
				|  |  |  |  |                 // rebase offsets on top of start, which is the offset of the
 | 
		
	
		
			
				|  |  |  |  |                 // function in the program being linked
 | 
		
	
		
			
				|  |  |  |  |                 info.insn_off = start as u32 + (info.insn_off - original_start_off); | 
		
	
		
			
				|  |  |  |  |                 info | 
		
	
		
			
				|  |  |  |  |             }); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |             program.line_info.line_info.extend(line_info); | 
		
	
		
			
				|  |  |  |  |             program.line_info.num_info = program.func_info.func_info.len() as u32; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         Ok(()) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | 
 |