diff options
Diffstat (limited to 'patches/gcc/5.4.0')
4 files changed, 272 insertions, 0 deletions
diff --git a/patches/gcc/5.4.0/875-xtensa-fix-xtensa_fallback_frame_state-for-call0-ABI.patch b/patches/gcc/5.4.0/875-xtensa-fix-xtensa_fallback_frame_state-for-call0-ABI.patch new file mode 100644 index 0000000..d128596 --- /dev/null +++ b/patches/gcc/5.4.0/875-xtensa-fix-xtensa_fallback_frame_state-for-call0-ABI.patch @@ -0,0 +1,108 @@ +From 7d3692c6933f7ff87bf110dede8e33e922b164c6 Mon Sep 17 00:00:00 2001 +From: jcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Tue, 15 Sep 2015 19:30:32 +0000 +Subject: [PATCH] xtensa: fix xtensa_fallback_frame_state for call0 ABI + +2015-09-15 Max Filippov <jcmvbkbc@gmail.com> +gcc/ + * config/xtensa/xtensa.h (DWARF_ALT_FRAME_RETURN_COLUMN): New + definition. + (DWARF_FRAME_REGISTERS): Reserve space for one extra register in + call0 ABI. + +libgcc/ + * config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): + Add support for call0 ABI. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@227809 138bc75d-0d04-0410-961f-82ee72b054a4 + +Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> +--- + gcc/config/xtensa/xtensa.h | 4 +++- + libgcc/config/xtensa/linux-unwind.h | 30 ++++++++++++++++++++++++++++-- + 2 files changed, 31 insertions(+), 3 deletions(-) + +diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h +index 584080b..e165def 100644 +--- a/gcc/config/xtensa/xtensa.h ++++ b/gcc/config/xtensa/xtensa.h +@@ -813,7 +813,9 @@ typedef struct xtensa_args + for debugging. */ + #define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, 0) + #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (0) +-#define DWARF_FRAME_REGISTERS 16 ++#define DWARF_ALT_FRAME_RETURN_COLUMN 16 ++#define DWARF_FRAME_REGISTERS (DWARF_ALT_FRAME_RETURN_COLUMN \ ++ + (TARGET_WINDOWED_ABI ? 0 : 1)) + #define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) + 2 : INVALID_REGNUM) + #define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ + (flag_pic \ +diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h +index 9daf738..9a67b5d 100644 +--- a/libgcc/config/xtensa/linux-unwind.h ++++ b/libgcc/config/xtensa/linux-unwind.h +@@ -52,7 +52,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + #define ENTRY_BYTE 0x36 + #endif + +-#ifdef __XTENSA_WINDOWED_ABI__ + #define MD_FALLBACK_FRAME_STATE_FOR xtensa_fallback_frame_state + + static _Unwind_Reason_Code +@@ -61,6 +60,10 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context, + { + unsigned char *pc = context->ra; + struct sigcontext *sc; ++#if defined(__XTENSA_CALL0_ABI__) ++ _Unwind_Ptr new_cfa; ++ int i; ++#endif + + struct rt_sigframe { + siginfo_t info; +@@ -76,6 +79,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context, + || pc[5] != SYSC_BYTE2) + return _URC_END_OF_STACK; + ++#if defined(__XTENSA_WINDOWED_ABI__) + rt_ = context->sp; + sc = &rt_->uc.uc_mcontext; + fs->signal_regs = (_Unwind_Word *) sc->sc_a; +@@ -90,11 +94,33 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context, + } + else + fs->signal_ra = sc->sc_pc; ++#elif defined(__XTENSA_CALL0_ABI__) ++ rt_ = context->cfa; ++ sc = &rt_->uc.uc_mcontext; ++ ++ new_cfa = (_Unwind_Ptr) sc; ++ fs->regs.cfa_how = CFA_REG_OFFSET; ++ fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__; ++ fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa; ++ ++ for (i = 0; i < 16; i++) ++ { ++ fs->regs.reg[i].how = REG_SAVED_OFFSET; ++ fs->regs.reg[i].loc.offset = (_Unwind_Ptr) &(sc->sc_a[i]) - new_cfa; ++ } ++ ++ fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].how = ++ REG_SAVED_VAL_OFFSET; ++ fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].loc.offset = ++ (_Unwind_Ptr) (sc->sc_pc) - new_cfa; ++ fs->retaddr_column = __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__; ++#else ++#error Unsupported Xtensa ABI ++#endif + + fs->signal_frame = 1; + return _URC_NO_REASON; + } + +-#endif /* __XTENSA_WINDOWED_ABI__ */ + + #endif /* ifdef inhibit_libc */ +-- +2.1.4 + diff --git a/patches/gcc/5.4.0/876-xtensa-fix-libgcc-build-with-text-section-literals.patch b/patches/gcc/5.4.0/876-xtensa-fix-libgcc-build-with-text-section-literals.patch new file mode 100644 index 0000000..4b2334a --- /dev/null +++ b/patches/gcc/5.4.0/876-xtensa-fix-libgcc-build-with-text-section-literals.patch @@ -0,0 +1,67 @@ +From 44fbad9f8bed55f690f251b530ab38df1e696d95 Mon Sep 17 00:00:00 2001 +From: jcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Wed, 17 Feb 2016 20:21:48 +0000 +Subject: [PATCH] xtensa: fix libgcc build with --text-section-literals + +Functions __muldf3_aux, __divdf3_aux, __mulsf3_aux and __divsf3_aux +don't start with leaf_entry, so they need explicit .literal_position, +otherwise libgcc build fails in the presence of --text-section-literals. + +2016-02-17 Max Filippov <jcmvbkbc@gmail.com> +libgcc/ + * config/xtensa/ieee754-df.S (__muldf3_aux, __divdf3_aux): Add + .literal_position before the function. + * config/xtensa/ieee754-sf.S (__mulsf3_aux, __divsf3_aux): + Likewise. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233505 138bc75d-0d04-0410-961f-82ee72b054a4 + +Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> +--- + libgcc/config/xtensa/ieee754-df.S | 2 ++ + libgcc/config/xtensa/ieee754-sf.S | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/libgcc/config/xtensa/ieee754-df.S b/libgcc/config/xtensa/ieee754-df.S +index a7ae209..26f2abd 100644 +--- a/libgcc/config/xtensa/ieee754-df.S ++++ b/libgcc/config/xtensa/ieee754-df.S +@@ -606,6 +606,7 @@ __subdf3: + #define XCHAL_NO_MUL 1 + #endif + ++ .literal_position + __muldf3_aux: + + /* Handle unusual cases (zeros, subnormals, NaNs and Infinities). +@@ -1216,6 +1217,7 @@ __muldf3: + + #ifdef L_divdf3 + ++ .literal_position + /* Division */ + __divdf3_aux: + +diff --git a/libgcc/config/xtensa/ieee754-sf.S b/libgcc/config/xtensa/ieee754-sf.S +index 7e397dc..a5e6e3c 100644 +--- a/libgcc/config/xtensa/ieee754-sf.S ++++ b/libgcc/config/xtensa/ieee754-sf.S +@@ -487,6 +487,7 @@ __subsf3: + #define XCHAL_NO_MUL 1 + #endif + ++ .literal_position + __mulsf3_aux: + + /* Handle unusual cases (zeros, subnormals, NaNs and Infinities). +@@ -884,6 +885,7 @@ __mulsf3: + + #ifdef L_divsf3 + ++ .literal_position + /* Division */ + __divsf3_aux: + +-- +2.1.4 + diff --git a/patches/gcc/5.4.0/877-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch b/patches/gcc/5.4.0/877-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch new file mode 100644 index 0000000..6e0ce6e --- /dev/null +++ b/patches/gcc/5.4.0/877-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch @@ -0,0 +1,62 @@ +From d28554ee61a1ab1263274d66386e4051bca0ce05 Mon Sep 17 00:00:00 2001 +From: jcmvbkbc <jcmvbkbc@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Tue, 18 Oct 2016 19:12:19 +0000 +Subject: [PATCH] xtensa: don't use unwind-dw2-fde-dip with elf targets + +Define LIB2ADDEH_XTENSA_UNWIND_DW2_FDE to unwind-dw2-fde.c in +xtensa/t-elf and to unwind-dw2-fde-dip.c in xtensa/t-linux and use +LIB2ADDEH_XTENSA_UNWIND_DW2_FDE in LIB2ADDEH definition. + +This fixes build for elf target with windowed xtensa core that currently +breaks with the following error message: + + unwind-dw2-fde-dip.c:36:40: fatal error: elf.h: No such file or directory + +2016-10-18 Max Filippov <jcmvbkbc@gmail.com> +libgcc/ + * config/xtensa/t-elf (LIB2ADDEH_XTENSA_UNWIND_DW2_FDE): New + definition. + * config/xtensa/t-linux (LIB2ADDEH_XTENSA_UNWIND_DW2_FDE): New + definition. + * config/xtensa/t-windowed (LIB2ADDEH): Use + LIB2ADDEH_XTENSA_UNWIND_DW2_FDE defined by either xtensa/t-elf + or xtensa/t-linux. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241313 138bc75d-0d04-0410-961f-82ee72b054a4 + +Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> +--- + libgcc/config/xtensa/t-elf | 2 ++ + libgcc/config/xtensa/t-linux | 2 ++ + libgcc/config/xtensa/t-windowed | 2 +- + 3 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/libgcc/config/xtensa/t-elf b/libgcc/config/xtensa/t-elf +index 59d5121..967cf9b 100644 +--- a/libgcc/config/xtensa/t-elf ++++ b/libgcc/config/xtensa/t-elf +@@ -3,3 +3,5 @@ CRTSTUFF_T_CFLAGS += -mlongcalls + CRTSTUFF_T_CFLAGS_S += -mlongcalls + + HOST_LIBGCC2_CFLAGS += -mlongcalls ++ ++LIB2ADDEH_XTENSA_UNWIND_DW2_FDE = $(srcdir)/unwind-dw2-fde.c +diff --git a/libgcc/config/xtensa/t-linux b/libgcc/config/xtensa/t-linux +index 6f4ae89..412ecca 100644 +--- a/libgcc/config/xtensa/t-linux ++++ b/libgcc/config/xtensa/t-linux +@@ -1 +1,3 @@ + SHLIB_MAPFILES += $(srcdir)/config/xtensa/libgcc-glibc.ver ++ ++LIB2ADDEH_XTENSA_UNWIND_DW2_FDE = $(srcdir)/unwind-dw2-fde-dip.c +diff --git a/libgcc/config/xtensa/t-windowed b/libgcc/config/xtensa/t-windowed +index a99156c..f140136 100644 +--- a/libgcc/config/xtensa/t-windowed ++++ b/libgcc/config/xtensa/t-windowed +@@ -1,2 +1,2 @@ + LIB2ADDEH = $(srcdir)/config/xtensa/unwind-dw2-xtensa.c \ +- $(srcdir)/unwind-dw2-fde-dip.c $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c ++ $(LIB2ADDEH_XTENSA_UNWIND_DW2_FDE) $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c +-- +2.1.4 + diff --git a/patches/gcc/5.4.0/878-xtensa-Fix-PR-target-78603.patch b/patches/gcc/5.4.0/878-xtensa-Fix-PR-target-78603.patch new file mode 100644 index 0000000..4646d3c --- /dev/null +++ b/patches/gcc/5.4.0/878-xtensa-Fix-PR-target-78603.patch @@ -0,0 +1,35 @@ +From b18fe564ed233ee0965b3a980edc5dbe069b80ea Mon Sep 17 00:00:00 2001 +From: Max Filippov <jcmvbkbc@gmail.com> +Date: Tue, 29 Nov 2016 13:09:17 -0800 +Subject: [PATCH] xtensa: Fix PR target/78603 + +2016-11-29 Max Filippov <jcmvbkbc@gmail.com> +gcc/ + * config/xtensa/xtensa.c (hwloop_optimize): Don't emit zero + overhead loop start between a call and its CALL_ARG_LOCATION + note. + +Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> +--- + gcc/config/xtensa/xtensa.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c +index 206ff80..36ab1e3 100644 +--- a/gcc/config/xtensa/xtensa.c ++++ b/gcc/config/xtensa/xtensa.c +@@ -4182,7 +4182,10 @@ hwloop_optimize (hwloop_info loop) + entry_after = BB_END (entry_bb); + while (DEBUG_INSN_P (entry_after) + || (NOTE_P (entry_after) +- && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK)) ++ && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK ++ /* Make sure we don't split a call and its corresponding ++ CALL_ARG_LOCATION note. */ ++ && NOTE_KIND (entry_after) != NOTE_INSN_CALL_ARG_LOCATION)) + entry_after = PREV_INSN (entry_after); + + emit_insn_after (seq, entry_after); +-- +2.1.4 + |