Summary: | [4.1 Regression] -mminimal-toc miscompilation of __thread vars | ||
---|---|---|---|
Product: | gcc | Reporter: | Alan Modra <amodra> |
Component: | target | Assignee: | Alan Modra <amodra> |
Status: | RESOLVED FIXED | ||
Severity: | critical | CC: | gcc-bugs |
Priority: | P2 | Keywords: | wrong-code |
Version: | 4.1.0 | ||
Target Milestone: | 3.4.5 | ||
Host: | Target: | powerpc64-linux | |
Build: | Known to work: | 3.4.5 4.0.3 4.1.0 | |
Known to fail: | 4.0.0 3.4.4 4.0.2 | Last reconfirmed: | 2005-10-21 03:47:35 |
Description
Alan Modra
2005-10-21 03:40:46 UTC
Confirmed, This is a latent bug but shows up as testsuite regressions which is why I am marking it as a regression. 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) Subject: Bug 24465 CVSROOT: /cvs/gcc Module name: gcc Changes by: amodra@gcc.gnu.org 2005-10-21 07:33:30 Modified files: gcc : ChangeLog gcc/config/rs6000: rs6000.c Log message: PR target/24465 * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Always use r2 for 64-bit tls .got access. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.10197&r2=2.10198 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&r1=1.872&r2=1.873 Subject: Bug 24465 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-4_0-branch Changes by: amodra@gcc.gnu.org 2005-10-21 07:36:56 Modified files: gcc : ChangeLog gcc/config/rs6000: rs6000.c Log message: PR target/24465 * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Always use r2 for 64-bit tls .got access. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=2.7592.2.475&r2=2.7592.2.476 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.788.2.11&r2=1.788.2.12 Subject: Bug 24465 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: amodra@gcc.gnu.org 2005-10-21 07:48:26 Modified files: gcc : ChangeLog gcc/config/rs6000: rs6000.c Log message: PR target/24465 * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Always use r2 for 64-bit tls .got access. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.925&r2=2.2326.2.926 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.576.2.46&r2=1.576.2.47 Fixed on all active branches |