Alan Modra afcd9480fe powerpc __tls_get_addr call optimization
This patch is glibc support for a PowerPC TLS optimization, inspired
by Alexandre Oliva's TLS optimization for other processors,
http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt

In essence, this optimization uses a zero module id in the tls_index
GOT entry to indicate that a TLS variable is allocated space in the
static TLS area.  A special plt call linker stub for __tls_get_addr
checks for such a tls_index and if found, returns the offset
immediately.  The linker communicates the fact that the special
__tls_get_addr stub is used by setting a bit in the dynamic tag
DT_PPC64_OPT/DT_PPC_OPT.  glibc communicates to the linker that this
optimization is available by the presence of __tls_get_addr_opt.

tst-tlsmod2.so is built with -Wl,--no-tls-get-addr-optimize for
tst-tls-dlinfo, which otherwise would fail since it tests that no
static tls is allocated.  The ld option --no-tls-get-addr-optimize has
been available since binutils-2.20 so doesn't need a configure test.

	* NEWS: Advertise TLS optimization.
	* elf/elf.h (R_PPC_TLSGD, R_PPC_TLSLD, DT_PPC_OPT, PPC_OPT_TLS): Define.
	(DT_PPC_NUM): Increment.
	* elf/dynamic-link.h (HAVE_STATIC_TLS): Define.
	(CHECK_STATIC_TLS): Use here.
	* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Optimize
	TLS descriptors.
	* sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/powerpc/dl-tls.c: New file.
	* sysdeps/powerpc/Versions: Add __tls_get_addr_opt.
	* sysdeps/powerpc/tst-tlsopt-powerpc.c: New tls test.
	* sysdeps/unix/sysv/linux/powerpc/Makefile: Add new test.
	Build tst-tlsmod2.so with --no-tls-get-addr-optimize.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist: Update.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist: Likewise.
2015-03-25 15:53:47 +10:30
..
2002-07-17 00:34:35 +00:00
2002-06-30 07:17:02 +00:00
2002-07-17 00:34:35 +00:00
2002-07-17 00:34:35 +00:00
2002-07-17 00:34:35 +00:00
2002-06-30 07:17:02 +00:00
2001-09-06 01:03:05 +00:00
2001-09-06 01:03:05 +00:00
2015-01-21 01:51:10 -05:00
2015-03-25 15:53:47 +10:30
2009-06-03 16:21:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2013-06-05 20:44:03 +00:00
2009-06-22 15:07:40 -07:00
2013-06-05 20:44:03 +00:00
2009-10-30 00:48:54 -07:00
2009-06-03 16:21:40 -07:00
2009-10-30 00:48:54 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-10-30 00:48:54 -07:00
2009-10-30 00:48:54 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-06-22 15:07:40 -07:00
2009-10-30 00:48:54 -07:00
2009-06-22 15:07:40 -07:00
2004-04-21 18:58:31 +00:00
2006-03-01 06:18:49 +00:00
2015-03-04 14:11:39 -08:00
2012-01-07 23:57:22 -05:00
2006-03-01 06:18:49 +00:00
2003-01-12 10:11:16 +00:00
2002-02-10 22:40:17 +00:00
2002-03-03 19:43:30 +00:00
2001-09-08 17:45:32 +00:00
2013-08-21 19:48:48 +02:00
2001-09-22 15:44:07 +00:00
2001-09-22 15:44:35 +00:00
2003-01-12 10:11:16 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2001-10-01 00:14:14 +00:00
2002-04-15 17:10:22 +00:00
2002-04-15 17:10:22 +00:00
2002-04-15 17:10:22 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2002-12-30 20:25:40 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2003-01-12 10:11:16 +00:00
2013-08-21 19:48:48 +02:00
2013-06-05 20:44:03 +00:00
2003-01-27 21:03:22 +00:00
2003-01-27 21:03:22 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2005-07-07 23:00:02 +00:00
2004-09-23 07:45:38 +00:00
2004-09-23 07:45:38 +00:00
2004-09-23 07:45:38 +00:00
2004-09-23 07:45:38 +00:00
2004-10-14 02:08:23 +00:00
2004-10-27 20:27:40 +00:00
2004-10-14 02:08:23 +00:00
2004-10-28 06:53:20 +00:00
2004-07-16 17:56:45 +00:00
2012-05-17 22:00:57 +02:00
.
2007-07-31 13:33:18 +00:00
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2013-10-18 19:45:36 +05:30
2005-03-20 22:25:59 +00:00
2011-09-10 14:34:15 -04:00
2011-09-10 14:34:15 -04:00
2011-09-10 14:34:15 -04:00
2003-04-17 19:19:29 +00:00
2003-07-24 20:07:00 +00:00
2005-03-20 22:25:59 +00:00
2006-03-01 06:18:49 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-03 08:28:23 +00:00
2005-03-18 10:54:53 +00:00
2005-03-18 10:54:53 +00:00
2005-04-27 01:39:11 +00:00
2011-08-24 09:32:13 +02:00
2006-03-01 06:18:49 +00:00
2003-03-29 03:46:03 +00:00