mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-26 16:33:45 +01:00 
			
		
		
		
	* SPARC: fixed g_intf_wrapper for non-virtual methods once again, my initial assumption was not correct: a wrapper does not necessarily reference methods from the class that implements the interface, it may be methods from parent classes, which can be located arbitrarily far away in address space.
Now using code from g_external_wrapper, which has no distance limit and is only one instruction longer. git-svn-id: trunk@26319 -
This commit is contained in:
		
							parent
							
								
									bf94257310
								
							
						
					
					
						commit
						05489d6e05
					
				| @ -1308,15 +1308,7 @@ implementation | ||||
|             list.Concat(TAiCpu.Op_none(A_NOP)); | ||||
|           end | ||||
|         else | ||||
|           begin | ||||
|             { Emit a branch, which is PIC-safe, but limited to 8 MByte range on SPARC. | ||||
|               Since interface wrappers are always located in the same unit with | ||||
|               their target methods, this limit applies (roughly) to code size of single | ||||
|               unit, not to entire program. It looks like a reasonable tradeoff. | ||||
|               If distance limit is ever exceeded, consider changing high-level compiler | ||||
|               logic to emit wrappers near target methods, not at the end of unit. } | ||||
|             a_jmp_name(list,procdef.mangledname); | ||||
|           end; | ||||
|           g_external_wrapper(list,procdef,procdef.mangledname); | ||||
|         List.concat(Tai_symbol_end.Createname(labelname)); | ||||
|       end; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 sergei
						sergei