From 0fad9ab91153a34b3a07d8defa76bf6fb72f9cae Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 29 Sep 2011 17:57:06 +0000 Subject: [PATCH] frvbegin.c: Fix location of unwind-dw2-fde.h header file. * config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header file. * config/frv/frvend.c: Likewise. * config/frv/frv.c (frv_function_prologue): Move misplaced CALL_ARG_LOCATION notes back to their proper locations. Co-Authored-By: Bernd Schmidt From-SVN: r179363 --- gcc/ChangeLog | 9 +++++++++ gcc/config/frv/frv.c | 28 ++++++++++++++++++++++++++++ gcc/config/frv/frvbegin.c | 2 +- gcc/config/frv/frvend.c | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a595e80ce75..c831d399b78 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-09-29 Nick Clifton + Bernd Schmidt + + * config/frv/frvbegin.c: Fix location of unwind-dw2-fde.h header + file. + * config/frv/frvend.c: Likewise. + * config/frv/frv.c (frv_function_prologue): Move misplaced + CALL_ARG_LOCATION notes back to their proper locations. + 2011-09-29 Georg-Johann Lay PR target/50566 diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index 7d8b47bb1dd..e7a3c7ae49d 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -1424,6 +1424,8 @@ frv_function_contains_far_jump (void) static void frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) { + rtx insn, next, last_call; + /* If no frame was created, check whether the function uses a call instruction to implement a far jump. If so, save the link in gr3 and replace all returns to LR with returns to GR3. GR3 is used because it @@ -1464,6 +1466,32 @@ frv_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) /* Allow the garbage collector to free the nops created by frv_reorg. */ memset (frv_nops, 0, sizeof (frv_nops)); + + /* Locate CALL_ARG_LOCATION notes that have been misplaced + and move them back to where they should be located. */ + last_call = NULL_RTX; + for (insn = get_insns (); insn; insn = next) + { + next = NEXT_INSN (insn); + if (CALL_P (insn) + || (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE + && CALL_P (XVECEXP (PATTERN (insn), 0, 0)))) + last_call = insn; + + if (!NOTE_P (insn) || NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION) + continue; + + if (NEXT_INSN (last_call) == insn) + continue; + + NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn); + PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn); + PREV_INSN (insn) = last_call; + NEXT_INSN (insn) = NEXT_INSN (last_call); + PREV_INSN (NEXT_INSN (insn)) = insn; + NEXT_INSN (PREV_INSN (insn)) = insn; + last_call = insn; + } } diff --git a/gcc/config/frv/frvbegin.c b/gcc/config/frv/frvbegin.c index 963ebd091cd..23cbf1ecc93 100644 --- a/gcc/config/frv/frvbegin.c +++ b/gcc/config/frv/frvbegin.c @@ -28,7 +28,7 @@ #include "defaults.h" #include -#include "unwind-dw2-fde.h" +#include "../libgcc/unwind-dw2-fde.h" #include "gbl-ctors.h" /* Declare a pointer to void function type. */ diff --git a/gcc/config/frv/frvend.c b/gcc/config/frv/frvend.c index 04b880df32a..0bb07b56b4a 100644 --- a/gcc/config/frv/frvend.c +++ b/gcc/config/frv/frvend.c @@ -25,7 +25,7 @@ #include "defaults.h" #include -#include "unwind-dw2-fde.h" +#include "../libgcc/unwind-dw2-fde.h" #ifdef __FRV_UNDERSCORE__ #define UNDERSCORE "_" -- 2.30.2