This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: PR target/63833: REAL_PIC_OFFSET_TABLE_REGNUM is wrong for x86-64
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Uros Bizjak <ubizjak at gmail dot com>
- Date: Wed, 12 Nov 2014 06:53:28 -0800
- Subject: PATCH: PR target/63833: REAL_PIC_OFFSET_TABLE_REGNUM is wrong for x86-64
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
We have been using the wrong register to hold GOT in 64-bit large model,
which is used by the large model PLT. The only reason we haven't run into
any problem is linker doesn't support the large model PLT. I am looking
into linker issue. This patch corrects REAL_PIC_OFFSET_TABLE_REGNUM for
64-bit large model. OK to install?
Thanks.
H.J.
---
2014-11-12 H.J. Lu <hongjiu.lu@intel.com>
PR target/63833
* config/i386/i386.h (REAL_PIC_OFFSET_TABLE_REGNUM): Use
R15_REG for 64-bit.
* config/i386/rdos64.h (REAL_PIC_OFFSET_TABLE_REGNUM): Removed.
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 53dfd22..0ccfb21 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1244,7 +1244,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
the pic register when possible. The change is visible after the
prologue has been emitted. */
-#define REAL_PIC_OFFSET_TABLE_REGNUM BX_REG
+#define REAL_PIC_OFFSET_TABLE_REGNUM (TARGET_64BIT ? R15_REG : BX_REG)
#define PIC_OFFSET_TABLE_REGNUM \
((TARGET_64BIT && (ix86_cmodel == CM_SMALL_PIC \
diff --git a/gcc/config/i386/rdos64.h b/gcc/config/i386/rdos64.h
index e6f089a..f902651 100644
--- a/gcc/config/i386/rdos64.h
+++ b/gcc/config/i386/rdos64.h
@@ -17,8 +17,5 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-#undef REAL_PIC_OFFSET_TABLE_REGNUM
-#define REAL_PIC_OFFSET_TABLE_REGNUM R15_REG
-
#undef DEFAULT_LARGE_SECTION_THRESHOLD
#define DEFAULT_LARGE_SECTION_THRESHOLD 16