This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/24465] [4.1 Regression] -mminimal-toc miscompilation of __thread vars
- From: "amodra at bigpond dot net dot au" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Oct 2005 05:05:52 -0000
- Subject: [Bug target/24465] [4.1 Regression] -mminimal-toc miscompilation of __thread vars
- References: <bug-24465-1057@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from amodra at bigpond dot net dot au 2005-10-21 05:05 -------
Actually, it's not that RS6000_PIC_OFFSET_TABLE_REGNUM isn't being set up, it's
that RS6000_PIC_OFFSET_TABLE_REGNUM is wrongly being using for tls accesses.
As currently implemented by gcc, powerpc tls uses x@got@tlsgd and similar. ie.
we are expecting the linker to manage allocation of tls entries in the got
rather than having gcc allocate them itself in toc sections. This means that
powerpc64 should use r2 for tls always, even when -mminimal-toc.
Testing the following fix.
Index: gcc/config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.872
diff -u -p -r1.872 rs6000.c
--- gcc/config/rs6000/rs6000.c 6 Oct 2005 22:58:59 -0000 1.872
+++ gcc/config/rs6000/rs6000.c 21 Oct 2005 05:02:57 -0000
@@ -2979,7 +2979,7 @@ rs6000_legitimize_tls_address (rtx addr,
rtx r3, got, tga, tmp1, tmp2, eqv;
if (TARGET_64BIT)
- got = gen_rtx_REG (Pmode, TOC_REGISTER);
+ got = gen_rtx_REG (Pmode, 2);
else
{
if (flag_pic == 1)
--
amodra at bigpond dot net dot au changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.0 |---
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24465