PATCH: PR target/63833: REAL_PIC_OFFSET_TABLE_REGNUM is wrong for x86-64
H.J. Lu
hjl.tools@gmail.com
Thu Nov 27 21:34:00 GMT 2014
On Wed, Nov 12, 2014 at 6:53 AM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> 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
Hi Uros,
The psABI
http://www.x86-64.org/svn/trunk/x86-64-ABI/
has been fixed. Is this OK for trunk?
Thanks.
--
H.J.
More information about the Gcc-patches
mailing list