From 9bba3b254ad702a3d8a6ac8e83b5d9a48df68382 Mon Sep 17 00:00:00 2001 From: Sandra Loosemore Date: Sat, 28 Oct 2017 22:55:32 -0400 Subject: [PATCH] nios2.h (FRAME_GROWS_DOWNWARD): Define to 1. 2017-10-28 Sandra Loosemore gcc/ * config/nios2/nios2.h (FRAME_GROWS_DOWNWARD): Define to 1. * config/nios2/nios2.c (nios2_initial_elimination_offset): Make FRAME_POINTER_REGNUM point at high end of local var area. From-SVN: r254204 --- gcc/ChangeLog | 6 ++++++ gcc/config/nios2/nios2.c | 4 +++- gcc/config/nios2/nios2.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b2e27831df8..baa24058a55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-10-28 Sandra Loosemore + + * config/nios2/nios2.h (FRAME_GROWS_DOWNWARD): Define to 1. + * config/nios2/nios2.c (nios2_initial_elimination_offset): Make + FRAME_POINTER_REGNUM point at high end of local var area. + 2017-10-27 Eric Botcazou * bb-reorder.c (find_traces_1_round): Fix off-by-one index. diff --git a/gcc/config/nios2/nios2.c b/gcc/config/nios2/nios2.c index cdd5e9aab65..5c70de7baf5 100644 --- a/gcc/config/nios2/nios2.c +++ b/gcc/config/nios2/nios2.c @@ -1114,7 +1114,9 @@ nios2_initial_elimination_offset (int from, int to) switch (from) { case FRAME_POINTER_REGNUM: - offset = cfun->machine->args_size; + /* This is the high end of the local variable storage, not the + hard frame pointer. */ + offset = cfun->machine->args_size + cfun->machine->var_size; break; case ARG_POINTER_REGNUM: diff --git a/gcc/config/nios2/nios2.h b/gcc/config/nios2/nios2.h index 420543e4f46..9fdff024cd8 100644 --- a/gcc/config/nios2/nios2.h +++ b/gcc/config/nios2/nios2.h @@ -252,6 +252,7 @@ enum reg_class /* Stack layout. */ #define STACK_GROWS_DOWNWARD 1 +#define FRAME_GROWS_DOWNWARD 1 #define FIRST_PARM_OFFSET(FUNDECL) 0 /* Before the prologue, RA lives in r31. */ -- 2.30.2