 Will Newton
		
	
	0d284dd0c1
	
	
	aarch64: Add support for GNU indirect functions.
			Will Newton
		
	
	0d284dd0c1
	
	
	aarch64: Add support for GNU indirect functions.
		
			
			Add support for STT_GNU_IFUNC symbols to the AArch64 bfd backend. The tests
are ported from the ld-ifunc tests but are enabled for cross builds so can
be run easily without hardware or a simulator.
bfd/ChangeLog:
2013-06-07  Will Newton  <will.newton@linaro.org>
	* configure: Regenerate.
	* configure.in: Build elf-ifunc.o for AArch64.
	* elf64-aarch64.c: Include objalloc.h.
	(elf64_aarch64_howto_dynrelocs): Add R_AARCH64_IRELATIVE howto.
	(struct elf64_aarch64_link_hash_table): Add members for handling
	R_AARCH64_IRELATIVE relocations.
	(elf_aarch64_local_htab_hash): New function.
	(elf_aarch64_local_htab_eq): New function.
	(elf_aarch64_get_local_sym_hash): New function.
	(elf64_aarch64_link_hash_table_create): Initialize local STT_GNU_IFUNC
	symbol hash.
	(elf64_aarch64_hash_table_free): Free local STT_GNU_IFUNC symbol hash.
	(elf64_aarch64_final_link_relocate): Add sym argument.  Add support
	for handling STT_GNU_IFUNC symbols.
	(elf64_aarch64_gc_sweep_hook): Add support for garbage collecting
	references to STT_GNU_IFUNC symbols.
	(elf64_aarch64_adjust_dynamic_symbol): Add support for handling
	STT_GNU_IFUNC symbols.
	(elf64_aarch64_check_relocs): Add support for handling STT_GNU_IFUNC
	symbols.  Ensure we don't increase plt.refcount from -1 to 0.
	(elf64_aarch64_post_process_headers): Call _bfd_elf_set_osabi.
	(elf64_aarch64_is_function_type): Remove function.
	(elf64_aarch64_allocate_dynrelocs): Call
	_bfd_elf_allocate_ifunc_dyn_relocs for STT_GNU_IFUNC symbols.
	(elf_aarch64_allocate_local_dynrelocs): New function.
	(elf64_aarch64_size_dynamic_sections): Call
	elf_aarch64_allocate_local_dynrelocs.  Initialize next_irelative_index.
	(elf64_aarch64_create_small_pltn_entry): Add info argument.
	Add support for creating .iplt entries for STT_GNU_IFUNC symbols.
	(elf64_aarch64_finish_dynamic_symbol): Add support for handling
	STT_GNU_IFUNC symbols and .iplt.
	(elf_aarch64_finish_local_dynamic_symbol): New function.
	(elf64_aarch64_finish_dynamic_sections): Call
	elf_aarch64_finish_local_dynamic_symbol.
	(elf64_aarch64_add_symbol_hook): New function.
include/elf/ChangeLog:
2013-06-07  Will Newton  <will.newton@linaro.org>
	* aarch64.h: Add R_AARCH64_IRELATIVE reloc.
ld/ChangeLog:
2013-06-07  Will Newton  <will.newton@linaro.org>
	* emulparams/aarch64elf.sh: Add IREL_IN_PLT.
ld/testsuite/ChangeLog:
2013-06-07  Will Newton  <will.newton@linaro.org>
	* ld-ifunc/ifunc.exp: Enable ifunc tests for AArch64.
	* ld-aarch64/aarch64-elf.exp: Add ifunc tests.
	* ld-aarch64/ifunc-1-local.d: New file.
	* ld-aarch64/ifunc-1-local.s: Likewise.
	* ld-aarch64/ifunc-1.d: Likewise.
	* ld-aarch64/ifunc-1.s: Likewise.
	* ld-aarch64/ifunc-10.d: Likewise.
	* ld-aarch64/ifunc-10.s: Likewise.
	* ld-aarch64/ifunc-11.d: Likewise.
	* ld-aarch64/ifunc-11.s: Likewise.
	* ld-aarch64/ifunc-12.d: Likewise.
	* ld-aarch64/ifunc-12.s: Likewise.
	* ld-aarch64/ifunc-13.d: Likewise.
	* ld-aarch64/ifunc-13a.s: Likewise.
	* ld-aarch64/ifunc-13b.s: Likewise.
	* ld-aarch64/ifunc-14a.d: Likewise.
	* ld-aarch64/ifunc-14a.s: Likewise.
	* ld-aarch64/ifunc-14b.d: Likewise.
	* ld-aarch64/ifunc-14b.s: Likewise.
	* ld-aarch64/ifunc-14c.d: Likewise.
	* ld-aarch64/ifunc-14c.s: Likewise.
	* ld-aarch64/ifunc-14d.d: Likewise.
	* ld-aarch64/ifunc-14e.d: Likewise.
	* ld-aarch64/ifunc-14f.d: Likewise.
	* ld-aarch64/ifunc-15.d: Likewise.
	* ld-aarch64/ifunc-15.s: Likewise.
	* ld-aarch64/ifunc-16.d: Likewise.
	* ld-aarch64/ifunc-16.s: Likewise.
	* ld-aarch64/ifunc-17a.d: Likewise.
	* ld-aarch64/ifunc-17a.s: Likewise.
	* ld-aarch64/ifunc-17b.d: Likewise.
	* ld-aarch64/ifunc-17b.s: Likewise.
	* ld-aarch64/ifunc-18a.d: Likewise.
	* ld-aarch64/ifunc-18a.s: Likewise.
	* ld-aarch64/ifunc-18b.d: Likewise.
	* ld-aarch64/ifunc-18b.s: Likewise.
	* ld-aarch64/ifunc-19a.d: Likewise.
	* ld-aarch64/ifunc-19a.s: Likewise.
	* ld-aarch64/ifunc-19b.d: Likewise.
	* ld-aarch64/ifunc-19b.s: Likewise.
	* ld-aarch64/ifunc-2-local.d: Likewise.
	* ld-aarch64/ifunc-2-local.s: Likewise.
	* ld-aarch64/ifunc-2.d: Likewise.
	* ld-aarch64/ifunc-2.s: Likewise.
	* ld-aarch64/ifunc-20.d: Likewise.
	* ld-aarch64/ifunc-20.s: Likewise.
	* ld-aarch64/ifunc-3.s: Likewise.
	* ld-aarch64/ifunc-3a.d: Likewise.
	* ld-aarch64/ifunc-3b.d: Likewise.
	* ld-aarch64/ifunc-4.d: Likewise.
	* ld-aarch64/ifunc-4.s: Likewise.
	* ld-aarch64/ifunc-4a.d: Likewise.
	* ld-aarch64/ifunc-5-local.s: Likewise.
	* ld-aarch64/ifunc-5.s: Likewise.
	* ld-aarch64/ifunc-5a-local.d: Likewise.
	* ld-aarch64/ifunc-5a.d: Likewise.
	* ld-aarch64/ifunc-5b-local.d: Likewise.
	* ld-aarch64/ifunc-5b.d: Likewise.
	* ld-aarch64/ifunc-5r-local.d: Likewise.
	* ld-aarch64/ifunc-6.s: Likewise.
	* ld-aarch64/ifunc-6a.d: Likewise.
	* ld-aarch64/ifunc-6b.d: Likewise.
	* ld-aarch64/ifunc-7.s: Likewise.
	* ld-aarch64/ifunc-7a.d: Likewise.
	* ld-aarch64/ifunc-7b.d: Likewise.
	* ld-aarch64/ifunc-8.d: Likewise.
	* ld-aarch64/ifunc-8a.s: Likewise.
	* ld-aarch64/ifunc-8b.s: Likewise.
	* ld-aarch64/ifunc-9.d: Likewise.
	* ld-aarch64/ifunc-9.s: Likewise.
		
	
 
		2013-06-07 18:57:00 +00:00
	 
	
	
	
		 ..
	
	
	
		
			
			
			
			
			
			2013-06-07 18:57:00 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2012-10-30 12:44:57 +00:00
		 
	
		
			
			
			
			
			
			2012-05-16 14:52:16 +00:00
		 
	
		
			
			
			
			
			
			2010-11-15 22:30:47 +00:00
		 
	
		
			
			
			
			
			
			2013-06-07 18:57:00 +00:00
		 
	
		
			
			
			
			
			
			2012-12-10 12:48:00 +00:00
		 
	
		
			
			
			
			
			
			2013-05-22 17:02:35 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2011-10-27 14:27:16 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2013-03-21 16:08:06 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-05-18 03:31:06 +00:00
		 
	
		
			
			
			
			
			
			2013-01-16 20:31:57 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2011-06-09 08:53:05 +00:00
		 
	
		
			
			
			
			
			
			2011-03-14 15:54:57 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2012-08-02 20:08:54 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2013-01-10 09:49:18 +00:00
		 
	
		
			
			
			
			
			
			2012-12-11 16:56:53 +00:00
		 
	
		
			
			
			
			
			
			2013-06-06 22:09:07 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2012-03-07 17:51:56 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2013-05-02 21:06:14 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2013-02-06 23:22:18 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-05-18 03:31:06 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2011-10-10 13:21:05 +00:00
		 
	
		
			
			
			
			
			
			2012-05-14 19:45:27 +00:00
		 
	
		
			
			
			
			
			
			2011-06-02 13:43:23 +00:00
		 
	
		
			
			
			
			
			
			2011-12-23 01:49:37 +00:00
		 
	
		
			
			
			
			
			
			2012-11-09 17:00:42 +00:00
		 
	
		
			
			
			
			
			
			2012-07-13 15:47:25 +00:00
		 
	
		
			
			
			
			
			
			2009-03-02 10:33:07 +00:00
		 
	
		
			
			
			
			
			
			2010-05-25 14:12:41 +00:00
		 
	
		
			
			
			
			
			
			2012-04-27 18:00:52 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-11-02 14:36:37 +00:00
		 
	
		
			
			
			
			
			
			2011-05-09 13:17:58 +00:00
		 
	
		
			
			
			
			
			
			2012-08-28 02:43:22 +00:00
		 
	
		
			
			
			
			
			
			2012-02-25 22:24:21 +00:00
		 
	
		
			
			
			
			
			
			2013-01-24 11:14:01 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2013-01-16 20:31:57 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2012-05-03 13:12:06 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00
		 
	
		
			
			
			
			
			
			2010-04-15 10:26:09 +00:00