On 01/16/2018 01:35 PM, H.J. Lu wrote: > On Tue, Jan 16, 2018 at 3:40 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> This patch has been used with my Spectre backport for GCC 7 for many >> weeks and has been checked into GCC 7 branch. Should I revert it on >> GCC 7 branch or check it into trunk? > > Ada build failed with this on trunk: > > raised STORAGE_ERROR : stack overflow or erroneous memory access > make[5]: *** [/export/gnu/import/git/sources/gcc/gcc/ada/Make-generated.in:45: > ada/sinfo.h] Error 1
Hello. I know that you've already reverted the change, but it's possible to replace struct ix86_frame &frame = cfun->machine->frame; with: struct ix86_frame *frame = &cfun->machine->frame; And replace usages with point access operator (->). That would also avoid copying. One another question. After you switched to references, isn't the behavior of function ix86_expand_epilogue as it also contains write to frame struct like: 14799 /* Special care must be taken for the normal return case of a function 14800 using eh_return: the eax and edx registers are marked as saved, but 14801 not restored along this path. Adjust the save location to match. */ 14802 if (crtl->calls_eh_return && style != 2) 14803 frame.reg_save_offset -= 2 * UNITS_PER_WORD; Thanks for clarification. Martin > > Let me revert it on gcc-7-branch. > > H.J. >> H.J. >> --- >> When there is no need to make a copy of ix86_frame, we can use reference >> of struct ix86_frame to avoid copy. >> >> * config/i386/i386.c (ix86_expand_prologue): Use reference of >> struct ix86_frame. >> (ix86_expand_epilogue): Likewise. >> --- >> gcc/config/i386/i386.c | 6 ++---- >> 1 file changed, 2 insertions(+), 4 deletions(-) >> >> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c >> index bfb31db8752..9eba3ffd5d6 100644 >> --- a/gcc/config/i386/i386.c >> +++ b/gcc/config/i386/i386.c >> @@ -13385,7 +13385,6 @@ ix86_expand_prologue (void) >> { >> struct machine_function *m = cfun->machine; >> rtx insn, t; >> - struct ix86_frame frame; >> HOST_WIDE_INT allocate; >> bool int_registers_saved; >> bool sse_registers_saved; >> @@ -13413,7 +13412,7 @@ ix86_expand_prologue (void) >> m->fs.sp_valid = true; >> m->fs.sp_realigned = false; >> >> - frame = m->frame; >> + struct ix86_frame &frame = cfun->machine->frame; >> >> if (!TARGET_64BIT && ix86_function_ms_hook_prologue >> (current_function_decl)) >> { >> @@ -14291,7 +14290,6 @@ ix86_expand_epilogue (int style) >> { >> struct machine_function *m = cfun->machine; >> struct machine_frame_state frame_state_save = m->fs; >> - struct ix86_frame frame; >> bool restore_regs_via_mov; >> bool using_drap; >> bool restore_stub_is_tail = false; >> @@ -14304,7 +14302,7 @@ ix86_expand_epilogue (int style) >> } >> >> ix86_finalize_stack_frame_flags (); >> - frame = m->frame; >> + struct ix86_frame &frame = cfun->machine->frame; >> >> m->fs.sp_realigned = stack_realign_fp; >> m->fs.sp_valid = stack_realign_fp >> -- >> 2.14.3 >> > > >