Will Newton
1419bbe571
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-10-03 Will Newton <will.newton@linaro.org>
* configure: Regenerate.
* configure.in: Build elf-ifunc.o for AArch64.
* elfnn-aarch64.c: Include objalloc.h.
(elfNN_aarch64_local_htab_hash): New function.
(elfNN_aarch64_local_htab_eq): New function.
(elfNN_aarch64_get_local_sym_hash): New function.
(elfNN_aarch64_link_hash_table_create): Initialize local STT_GNU_IFUNC
symbol hash.
(elfNN_aarch64_hash_table_free): Free local STT_GNU_IFUNC symbol hash.
(elfNN_aarch64_final_link_relocate): Add sym argument. Add support
for handling STT_GNU_IFUNC symbols.
(elfNN_aarch64_gc_sweep_hook): Add support for garbage collecting
references to STT_GNU_IFUNC symbols.
(elfNN_aarch64_adjust_dynamic_symbol): Add support for handling
STT_GNU_IFUNC symbols.
(elfNN_aarch64_check_relocs): Add support for handling STT_GNU_IFUNC
symbols. Ensure we don't increase plt.refcount from -1 to 0.
(elfNN_aarch64_post_process_headers): Call _bfd_elf_set_osabi.
(elfNN_aarch64_is_function_type): Remove function.
(elfNN_aarch64_allocate_dynrelocs): Handle STT_GNU_IFUNC symbols.
(elfNN_aarch64_allocate_ifunc_dynrelocs): New function.
(elfNN_aarch64_allocate_local_dynrelocs): New function.
(elfNN_aarch64_allocate_local_ifunc_dynrelocs): New function.
(elfNN_aarch64_size_dynamic_sections): Call
elfNN_aarch64_allocate_local_dynrelocs.
(elfNN_aarch64_create_small_pltn_entry): Add info argument.
Add support for creating .iplt entries for STT_GNU_IFUNC symbols.
(elfNN_aarch64_finish_dynamic_symbol): Add support for handling
STT_GNU_IFUNC symbols and .iplt.
(elfNN_aarch64_finish_local_dynamic_symbol): New function.
(elfNN_aarch64_finish_dynamic_sections): Call
elfNN_aarch64_finish_local_dynamic_symbol.
ld/ChangeLog:
2013-10-03 Will Newton <will.newton@linaro.org>
* emulparams/aarch64elf.sh: Add IREL_IN_PLT.
* emulparams/aarch64elf32.sh: Likewise.
ld/testsuite/ChangeLog:
2013-10-03 Will Newton <will.newton@linaro.org>
* ld-ifunc/ifunc.exp: Enable ifunc tests for AArch64.
* ld-aarch64/aarch64-elf.exp: Run 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-7c.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-10-03 14:46:09 +00:00
..
2013-10-03 14:46:09 +00:00
2013-06-26 10:56:05 +00:00
2013-10-03 14:46:09 +00:00
2012-08-13 14:52:54 +00:00
2013-04-24 17:22:31 +00:00
2012-08-13 14:52:54 +00:00
2010-04-14 09:27:27 +00:00
2008-10-22 05:20:44 +00:00
2009-11-04 18:13:05 +00:00
2009-11-04 18:13:05 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2004-09-17 12:18:19 +00:00
2009-11-20 15:04:51 +00:00
2009-11-19 07:01:40 +00:00
2012-04-12 13:01:15 +00:00
2006-05-30 16:45:32 +00:00
2006-05-30 16:45:32 +00:00
2009-11-20 15:04:51 +00:00
2005-01-22 01:50:35 +00:00
2012-04-12 13:01:15 +00:00
2007-08-09 11:02:24 +00:00
2008-02-20 15:17:56 +00:00
2009-11-04 18:13:05 +00:00
2009-11-20 15:04:51 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2009-05-05 11:28:36 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2011-03-22 18:10:48 +00:00
2010-11-15 22:30:47 +00:00
2003-08-06 02:19:05 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2013-01-10 20:08:03 +00:00
2013-01-10 20:08:03 +00:00
2006-06-20 02:22:16 +00:00
2006-06-20 02:22:16 +00:00
2006-06-20 02:22:16 +00:00
2006-06-20 02:22:16 +00:00
2008-10-22 05:20:44 +00:00
2008-10-22 06:06:09 +00:00
2010-10-22 12:08:32 +00:00
2006-04-05 12:41:59 +00:00
2010-09-20 18:41:15 +00:00
2009-08-05 20:40:34 +00:00
2010-03-25 21:12:36 +00:00
2011-05-13 18:15:33 +00:00
2011-05-13 18:15:33 +00:00
2013-01-10 20:08:03 +00:00
2011-05-13 18:15:33 +00:00
2011-05-13 18:15:33 +00:00
2013-08-26 22:18:07 +00:00
2013-01-09 05:51:32 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2010-11-15 22:30:47 +00:00
2012-08-06 22:40:36 +00:00
2013-01-10 20:08:03 +00:00
2006-05-30 16:45:32 +00:00
2004-04-08 14:52:44 +00:00
2010-12-31 11:01:00 +00:00
2013-06-24 23:55:46 +00:00
2010-12-31 11:01:00 +00:00
2006-05-30 16:45:32 +00:00
2008-11-27 12:41:14 +00:00
2004-03-30 14:04:32 +00:00
2004-07-07 17:28:53 +00:00
2007-05-18 09:18:18 +00:00
2006-03-22 09:28:15 +00:00
2012-11-30 18:28:38 +00:00
2011-10-25 11:18:16 +00:00
2008-10-22 05:20:44 +00:00
2006-06-20 02:22:16 +00:00
2006-06-20 02:22:16 +00:00
2006-05-30 16:45:32 +00:00
2008-10-22 05:20:44 +00:00
2006-06-20 02:22:16 +00:00
2006-06-20 02:22:16 +00:00
2008-12-23 19:10:25 +00:00
2008-12-23 19:10:25 +00:00
2013-04-25 13:22:52 +00:00
2013-04-25 13:22:52 +00:00
2006-05-30 16:45:32 +00:00
2013-01-04 17:22:53 +00:00
2013-01-04 17:22:53 +00:00
2010-12-31 11:01:00 +00:00
2010-12-31 11:01:00 +00:00
2005-07-20 19:33:18 +00:00
2013-01-10 20:08:03 +00:00
2012-11-09 22:43:28 +00:00
2011-01-14 12:37:17 +00:00
2013-01-10 20:08:03 +00:00
2013-01-10 09:49:22 +00:00
2013-01-10 20:08:03 +00:00
2012-11-09 22:43:28 +00:00
2012-08-06 22:40:36 +00:00
2012-09-13 22:24:51 +00:00
2006-06-20 02:22:16 +00:00
2008-10-22 05:20:44 +00:00
2011-11-21 13:22:46 +00:00
2013-01-10 20:08:03 +00:00
2013-09-24 06:29:39 +00:00
2005-08-03 05:09:49 +00:00
2006-05-30 16:45:32 +00:00
2006-03-02 08:50:04 +00:00
2008-10-22 05:20:44 +00:00
2011-11-02 03:09:11 +00:00
2012-09-12 21:28:04 +00:00
2012-02-25 19:51:34 +00:00
2012-06-11 13:23:51 +00:00
2012-06-11 13:23:51 +00:00
2008-10-22 05:20:44 +00:00
2006-05-30 16:45:32 +00:00
2006-05-30 16:45:32 +00:00
2006-05-30 16:45:32 +00:00
2008-11-03 18:52:52 +00:00
2006-05-30 16:45:32 +00:00
2004-10-14 17:00:16 +00:00
2012-04-12 07:35:07 +00:00
2006-05-30 16:45:32 +00:00
2013-01-10 20:08:03 +00:00
2006-10-18 23:58:52 +00:00
2010-10-22 12:08:32 +00:00
2008-10-22 05:20:44 +00:00
2013-01-10 20:08:03 +00:00
2006-10-16 21:34:25 +00:00
2006-10-16 21:34:25 +00:00
2010-12-31 11:01:00 +00:00
2006-10-16 21:34:25 +00:00
2009-03-01 22:10:36 +00:00
2010-12-31 11:01:00 +00:00
2009-07-29 00:25:22 +00:00
2011-11-21 13:22:46 +00:00
2013-09-24 06:29:39 +00:00
2013-01-23 10:31:13 +00:00
2012-02-25 19:51:34 +00:00
2012-06-11 13:23:51 +00:00
2012-01-31 17:54:39 +00:00
2011-07-14 02:38:43 +00:00
2012-01-31 17:54:39 +00:00
2013-08-26 22:18:07 +00:00
2010-10-12 18:39:36 +00:00
2012-01-31 17:54:39 +00:00
2012-11-16 04:00:41 +00:00
2011-07-22 20:22:38 +00:00
2013-01-09 05:51:32 +00:00
2009-07-25 15:08:26 +00:00
2013-01-09 05:51:32 +00:00
2013-08-23 22:38:42 +00:00
2013-01-10 20:08:03 +00:00
2006-08-02 16:25:14 +00:00
2013-08-26 22:18:07 +00:00
2010-10-12 18:39:36 +00:00
2013-01-10 20:08:03 +00:00
2003-10-16 08:46:35 +00:00
2003-10-16 08:46:35 +00:00
2006-09-07 17:01:10 +00:00
2008-10-22 05:20:44 +00:00
2006-09-07 17:01:10 +00:00
2009-03-01 22:10:36 +00:00
2011-02-18 18:20:29 +00:00
2004-07-27 22:30:25 +00:00
2006-05-30 16:45:32 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2009-11-04 18:13:05 +00:00
2009-11-04 18:13:05 +00:00
2009-11-04 18:13:05 +00:00
2003-10-16 08:46:35 +00:00
2006-05-30 16:45:32 +00:00
2005-08-05 04:29:57 +00:00
2003-12-19 11:44:01 +00:00
2003-12-19 11:44:01 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2009-09-29 16:28:52 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2006-05-30 16:45:32 +00:00
2003-10-16 08:46:35 +00:00
2009-11-04 18:13:05 +00:00
2009-07-29 00:25:22 +00:00
2008-10-22 05:20:44 +00:00
2006-06-20 02:22:16 +00:00
2013-09-30 09:03:59 +00:00
2013-02-06 23:22:26 +00:00
2007-08-09 11:02:24 +00:00
2006-06-20 02:22:16 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2008-10-22 05:20:44 +00:00
2006-06-20 02:22:16 +00:00
2011-07-14 02:38:43 +00:00
2008-10-22 05:20:44 +00:00
2007-08-09 11:02:24 +00:00
2009-11-04 18:13:05 +00:00
2012-12-17 16:56:12 +00:00
2009-03-02 10:33:08 +00:00
2006-05-30 16:45:32 +00:00
2008-10-22 05:20:44 +00:00
2006-10-22 01:07:30 +00:00
2010-05-25 14:12:43 +00:00
2008-01-15 23:05:46 +00:00
2008-10-22 05:20:44 +00:00
2007-03-02 21:02:48 +00:00
2008-10-22 05:20:44 +00:00
2008-10-22 05:20:44 +00:00
2008-10-22 05:20:44 +00:00
2010-05-25 14:12:43 +00:00
2010-05-25 14:12:43 +00:00
2008-10-22 05:20:44 +00:00
2006-08-04 13:13:56 +00:00
2004-07-06 16:58:43 +00:00
2009-11-04 18:13:05 +00:00
2010-10-12 18:39:36 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2013-01-10 20:08:03 +00:00
2012-11-09 17:36:19 +00:00
2003-10-16 08:46:35 +00:00
2007-08-09 11:02:24 +00:00
2007-08-09 11:02:24 +00:00
2009-10-29 16:43:56 +00:00
2012-05-03 13:12:08 +00:00
2005-10-25 17:40:19 +00:00