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