diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc55b5e8fd1..7b37f795a3a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Aug 5 00:56:30 1999 Geoffrey Keating + + * rs6000.c (rs6000_stack_info): For ABI_V4/ABI_SOLARIS -fpic, always + allocate space in the stack frame for the PIC register. + Thu Aug 5 00:20:47 1999 Jeffrey A Law (law@cygnus.com) * m68k.md (xordi3, anddi3): These patterns are not available on diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 865ec9254e6..2f49b37afb6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -3644,7 +3644,14 @@ rs6000_stack_info () /* Calculate which registers need to be saved & save area size */ info_ptr->first_gp_reg_save = first_reg_to_save (); - info_ptr->gp_size = reg_size * (32 - info_ptr->first_gp_reg_save); + /* Assume that we will have to save PIC_OFFSET_TABLE_REGNUM, + even if it currently looks like we won't. */ + if (flag_pic == 1 + && (abi == ABI_V4 || abi == ABI_SOLARIS) + && info_ptr->first_gp_reg_save > PIC_OFFSET_TABLE_REGNUM) + info_ptr->gp_size = reg_size * (32 - PIC_OFFSET_TABLE_REGNUM); + else + info_ptr->gp_size = reg_size * (32 - info_ptr->first_gp_reg_save); info_ptr->first_fp_reg_save = first_fp_reg_to_save (); info_ptr->fp_size = 8 * (64 - info_ptr->first_fp_reg_save);