mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2024-12-19 04:47:52 +00:00
Update gcc-linaro to 2017.08
Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
parent
8bf31117bc
commit
ff4485ad30
@ -61,6 +61,11 @@ while [ -n "${1}" ]; do
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "${download_pkgs}${verify_urls}" ]; then
|
||||
echo "No action selected" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CT_LIB_DIR=`pwd`
|
||||
CT_TOP_DIR=`pwd`
|
||||
CT_TARBALLS_DIR=`pwd`/temp.tarballs
|
||||
|
@ -1,188 +0,0 @@
|
||||
From d1f626c8f3c2c2c3aca3a67d4b66641d2d911dfa Mon Sep 17 00:00:00 2001
|
||||
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Tue, 4 Jul 2017 10:23:57 +0000
|
||||
Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
|
||||
|
||||
Current glibc no longer gives the ucontext_t type the tag struct
|
||||
ucontext, to conform with POSIX namespace rules. This requires
|
||||
various linux-unwind.h files in libgcc, that were previously using
|
||||
struct ucontext, to be fixed to use ucontext_t instead. This is
|
||||
similar to the removal of the struct siginfo tag from siginfo_t some
|
||||
years ago.
|
||||
|
||||
This patch changes those files to use ucontext_t instead. As the
|
||||
standard name that should be unconditionally safe, so this is not
|
||||
restricted to architectures supported by glibc, or conditioned on the
|
||||
glibc version.
|
||||
|
||||
Tested compilation together with current glibc with glibc's
|
||||
build-many-glibcs.py.
|
||||
|
||||
* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
|
||||
config/alpha/linux-unwind.h (alpha_fallback_frame_state),
|
||||
config/bfin/linux-unwind.h (bfin_fallback_frame_state),
|
||||
config/i386/linux-unwind.h (x86_64_fallback_frame_state,
|
||||
x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
|
||||
uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
|
||||
config/pa/linux-unwind.h (pa32_fallback_frame_state),
|
||||
config/sh/linux-unwind.h (sh_fallback_frame_state),
|
||||
config/tilepro/linux-unwind.h (tile_fallback_frame_state),
|
||||
config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
|
||||
ucontext_t instead of struct ucontext.
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@249957 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
---
|
||||
libgcc/config/aarch64/linux-unwind.h | 2 +-
|
||||
libgcc/config/alpha/linux-unwind.h | 2 +-
|
||||
libgcc/config/bfin/linux-unwind.h | 2 +-
|
||||
libgcc/config/i386/linux-unwind.h | 4 ++--
|
||||
libgcc/config/m68k/linux-unwind.h | 2 +-
|
||||
libgcc/config/nios2/linux-unwind.h | 2 +-
|
||||
libgcc/config/pa/linux-unwind.h | 2 +-
|
||||
libgcc/config/sh/linux-unwind.h | 2 +-
|
||||
libgcc/config/tilepro/linux-unwind.h | 2 +-
|
||||
libgcc/config/xtensa/linux-unwind.h | 2 +-
|
||||
10 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
|
||||
index 4512efbdcc8..06de45aa7ab 100644
|
||||
--- a/libgcc/config/aarch64/linux-unwind.h
|
||||
+++ b/libgcc/config/aarch64/linux-unwind.h
|
||||
@@ -52,7 +52,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct rt_sigframe
|
||||
{
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
};
|
||||
|
||||
struct rt_sigframe *rt_;
|
||||
diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
|
||||
index bdbba4a3c5d..e84812e33fd 100644
|
||||
--- a/libgcc/config/alpha/linux-unwind.h
|
||||
+++ b/libgcc/config/alpha/linux-unwind.h
|
||||
@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
|
||||
{
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
sc = &rt_->uc.uc_mcontext;
|
||||
}
|
||||
diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
|
||||
index 77b7c23c708..8bf5e82c55e 100644
|
||||
--- a/libgcc/config/bfin/linux-unwind.h
|
||||
+++ b/libgcc/config/bfin/linux-unwind.h
|
||||
@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
|
||||
void *puc;
|
||||
char retcode[8];
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
|
||||
index 540a0a25aca..29efbe31d61 100644
|
||||
--- a/libgcc/config/i386/linux-unwind.h
|
||||
+++ b/libgcc/config/i386/linux-unwind.h
|
||||
@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
if (*(unsigned char *)(pc+0) == 0x48
|
||||
&& *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
|
||||
{
|
||||
- struct ucontext *uc_ = context->cfa;
|
||||
+ ucontext_t *uc_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
because it does not alias anything. */
|
||||
@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
|
||||
siginfo_t *pinfo;
|
||||
void *puc;
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
|
||||
index 75b7cf723a0..f964e24c4ee 100644
|
||||
--- a/libgcc/config/m68k/linux-unwind.h
|
||||
+++ b/libgcc/config/m68k/linux-unwind.h
|
||||
@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
/* <sys/ucontext.h> is unfortunately broken right now. */
|
||||
struct uw_ucontext {
|
||||
unsigned long uc_flags;
|
||||
- struct ucontext *uc_link;
|
||||
+ ucontext_t *uc_link;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
unsigned long uc_filler[80];
|
||||
diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
|
||||
index 23041420525..30f25ea379e 100644
|
||||
--- a/libgcc/config/nios2/linux-unwind.h
|
||||
+++ b/libgcc/config/nios2/linux-unwind.h
|
||||
@@ -38,7 +38,7 @@ struct nios2_mcontext {
|
||||
|
||||
struct nios2_ucontext {
|
||||
unsigned long uc_flags;
|
||||
- struct ucontext *uc_link;
|
||||
+ ucontext_t *uc_link;
|
||||
stack_t uc_stack;
|
||||
struct nios2_mcontext uc_mcontext;
|
||||
sigset_t uc_sigmask; /* mask last for extensibility */
|
||||
diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
|
||||
index 9a2657f295d..e47493dde91 100644
|
||||
--- a/libgcc/config/pa/linux-unwind.h
|
||||
+++ b/libgcc/config/pa/linux-unwind.h
|
||||
@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct sigcontext *sc;
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *frame;
|
||||
|
||||
/* rt_sigreturn trampoline:
|
||||
diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
|
||||
index e389cacaab8..0bf43ba21c2 100644
|
||||
--- a/libgcc/config/sh/linux-unwind.h
|
||||
+++ b/libgcc/config/sh/linux-unwind.h
|
||||
@@ -180,7 +180,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
|
||||
{
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
|
||||
index 796e97620b8..75f8890ce07 100644
|
||||
--- a/libgcc/config/tilepro/linux-unwind.h
|
||||
+++ b/libgcc/config/tilepro/linux-unwind.h
|
||||
@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct rt_sigframe {
|
||||
unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_;
|
||||
|
||||
/* Return if this is not a signal handler. */
|
||||
diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
|
||||
index 9872492acc2..586a9d49e9c 100644
|
||||
--- a/libgcc/config/xtensa/linux-unwind.h
|
||||
+++ b/libgcc/config/xtensa/linux-unwind.h
|
||||
@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
|
||||
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_;
|
||||
|
||||
/* movi a2, __NR_rt_sigreturn; syscall */
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
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
|
||||
|
@ -1,318 +0,0 @@
|
||||
From bdda1689faf608ad7c83b5bd2e21a236b0047579 Mon Sep 17 00:00:00 2001
|
||||
From: Max Filippov <jcmvbkbc@gmail.com>
|
||||
Date: Wed, 26 Oct 2016 08:02:51 +0000
|
||||
Subject: [PATCH] xtensa: Fix PR target/78118
|
||||
|
||||
It started failing after the following commit: 32e90dc6a0cda45 ("PR
|
||||
rtl-optimization/61047").
|
||||
|
||||
The change that made xtensa backend go ICE looks completely unrelated,
|
||||
and indeed, the issue is caused by the side effect of
|
||||
compute_frame_size() function call hidden in the
|
||||
INITIAL_ELIMINATION_OFFSET macro. This call updates the value of the
|
||||
xtensa_current_frame_size static variable, used in "return" instruction
|
||||
predicate. Prior to the change the value of xtensa_current_frame_size was
|
||||
set to 0 after the end of epilogue generation, which enabled the "return"
|
||||
instruction for the CALL0 ABI, but after the change the additional
|
||||
INITIAL_ELIMINATION_OFFSET calls make xtensa_current_frame_size non-zero
|
||||
and "return" pattern unavailable.
|
||||
|
||||
Get rid of the global xtensa_current_frame_size and
|
||||
xtensa_callee_save_size variables by moving them into the
|
||||
machine_function structure. Implement predicate for the "return" pattern
|
||||
as a function. Don't communicate completion of epilogue generation
|
||||
through zeroing of xtensa_current_frame_size, add explicit epilogue_done
|
||||
variable to the machine_function structure. Don't update stack frame
|
||||
layout after the completion of reload.
|
||||
|
||||
2016-10-26 Max Filippov <jcmvbkbc@gmail.com>
|
||||
gcc/
|
||||
* config/xtensa/xtensa-protos.h
|
||||
(xtensa_use_return_instruction_p): New prototype.
|
||||
* config/xtensa/xtensa.c (xtensa_current_frame_size,
|
||||
xtensa_callee_save_size): Remove.
|
||||
(struct machine_function): Add new fields: current_frame_size,
|
||||
callee_save_size, frame_laid_out and epilogue_done.
|
||||
(compute_frame_size, xtensa_expand_prologue,
|
||||
xtensa_expand_epilogue): Replace xtensa_callee_save_size with
|
||||
cfun->machine->callee_save_size and xtensa_current_frame_size
|
||||
with cfun->machine->current_frame_size.
|
||||
(compute_frame_size): Update cfun->machine->frame_laid_out and
|
||||
don't update frame layout after reload completion.
|
||||
(xtensa_expand_epilogue): Set cfun->machine->epilogue_done
|
||||
instead of zeroing xtensa_current_frame_size.
|
||||
(xtensa_use_return_instruction_p): New function.
|
||||
* config/xtensa/xtensa.h (xtensa_current_frame_size): Remove
|
||||
declaration.
|
||||
(INITIAL_ELIMINATION_OFFSET): Use return value of
|
||||
compute_frame_size instead of xtensa_current_frame_size value.
|
||||
* config/xtensa/xtensa.md ("return" pattern): Use new predicate
|
||||
function xtensa_use_return_instruction_p instead of inline code.
|
||||
|
||||
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
||||
---
|
||||
gcc/config/xtensa/xtensa-protos.h | 1 +
|
||||
gcc/config/xtensa/xtensa.c | 82 ++++++++++++++++++++++++---------------
|
||||
gcc/config/xtensa/xtensa.h | 6 +--
|
||||
gcc/config/xtensa/xtensa.md | 2 +-
|
||||
4 files changed, 55 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h
|
||||
index f2ca526..873557f 100644
|
||||
--- a/gcc/config/xtensa/xtensa-protos.h
|
||||
+++ b/gcc/config/xtensa/xtensa-protos.h
|
||||
@@ -68,6 +68,7 @@ extern rtx xtensa_return_addr (int, rtx);
|
||||
extern void xtensa_setup_frame_addresses (void);
|
||||
extern int xtensa_dbx_register_number (int);
|
||||
extern long compute_frame_size (int);
|
||||
+extern bool xtensa_use_return_instruction_p (void);
|
||||
extern void xtensa_expand_prologue (void);
|
||||
extern void xtensa_expand_epilogue (void);
|
||||
extern void order_regs_for_local_alloc (void);
|
||||
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
|
||||
index 64d089b..e49f784 100644
|
||||
--- a/gcc/config/xtensa/xtensa.c
|
||||
+++ b/gcc/config/xtensa/xtensa.c
|
||||
@@ -78,11 +78,6 @@ enum internal_test
|
||||
can support a given mode. */
|
||||
char xtensa_hard_regno_mode_ok[(int) MAX_MACHINE_MODE][FIRST_PSEUDO_REGISTER];
|
||||
|
||||
-/* Current frame size calculated by compute_frame_size. */
|
||||
-unsigned xtensa_current_frame_size;
|
||||
-/* Callee-save area size in the current frame calculated by compute_frame_size. */
|
||||
-int xtensa_callee_save_size;
|
||||
-
|
||||
/* Largest block move to handle in-line. */
|
||||
#define LARGEST_MOVE_RATIO 15
|
||||
|
||||
@@ -94,6 +89,13 @@ struct GTY(()) machine_function
|
||||
bool vararg_a7;
|
||||
rtx vararg_a7_copy;
|
||||
rtx_insn *set_frame_ptr_insn;
|
||||
+ /* Current frame size calculated by compute_frame_size. */
|
||||
+ unsigned current_frame_size;
|
||||
+ /* Callee-save area size in the current frame calculated by
|
||||
+ compute_frame_size. */
|
||||
+ int callee_save_size;
|
||||
+ bool frame_laid_out;
|
||||
+ bool epilogue_done;
|
||||
};
|
||||
|
||||
/* Vector, indexed by hard register number, which contains 1 for a
|
||||
@@ -2628,24 +2630,29 @@ compute_frame_size (int size)
|
||||
{
|
||||
int regno;
|
||||
|
||||
+ if (reload_completed && cfun->machine->frame_laid_out)
|
||||
+ return cfun->machine->current_frame_size;
|
||||
+
|
||||
/* Add space for the incoming static chain value. */
|
||||
if (cfun->static_chain_decl != NULL)
|
||||
size += (1 * UNITS_PER_WORD);
|
||||
|
||||
- xtensa_callee_save_size = 0;
|
||||
+ cfun->machine->callee_save_size = 0;
|
||||
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno)
|
||||
{
|
||||
if (xtensa_call_save_reg(regno))
|
||||
- xtensa_callee_save_size += UNITS_PER_WORD;
|
||||
+ cfun->machine->callee_save_size += UNITS_PER_WORD;
|
||||
}
|
||||
|
||||
- xtensa_current_frame_size =
|
||||
+ cfun->machine->current_frame_size =
|
||||
XTENSA_STACK_ALIGN (size
|
||||
- + xtensa_callee_save_size
|
||||
+ + cfun->machine->callee_save_size
|
||||
+ crtl->outgoing_args_size
|
||||
+ (WINDOW_SIZE * UNITS_PER_WORD));
|
||||
- xtensa_callee_save_size = XTENSA_STACK_ALIGN (xtensa_callee_save_size);
|
||||
- return xtensa_current_frame_size;
|
||||
+ cfun->machine->callee_save_size =
|
||||
+ XTENSA_STACK_ALIGN (cfun->machine->callee_save_size);
|
||||
+ cfun->machine->frame_laid_out = true;
|
||||
+ return cfun->machine->current_frame_size;
|
||||
}
|
||||
|
||||
|
||||
@@ -2696,6 +2703,7 @@ xtensa_expand_prologue (void)
|
||||
{
|
||||
int regno;
|
||||
HOST_WIDE_INT offset = 0;
|
||||
+ int callee_save_size = cfun->machine->callee_save_size;
|
||||
|
||||
/* -128 is a limit of single addi instruction. */
|
||||
if (total_size > 0 && total_size <= 128)
|
||||
@@ -2709,7 +2717,7 @@ xtensa_expand_prologue (void)
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR, note_rtx);
|
||||
offset = total_size - UNITS_PER_WORD;
|
||||
}
|
||||
- else if (xtensa_callee_save_size)
|
||||
+ else if (callee_save_size)
|
||||
{
|
||||
/* 1020 is maximal s32i offset, if the frame is bigger than that
|
||||
* we move sp to the end of callee-saved save area, save and then
|
||||
@@ -2717,13 +2725,13 @@ xtensa_expand_prologue (void)
|
||||
if (total_size > 1024)
|
||||
{
|
||||
insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
|
||||
- GEN_INT (-xtensa_callee_save_size)));
|
||||
+ GEN_INT (-callee_save_size)));
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
note_rtx = gen_rtx_SET (stack_pointer_rtx,
|
||||
plus_constant (Pmode, stack_pointer_rtx,
|
||||
- -xtensa_callee_save_size));
|
||||
+ -callee_save_size));
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR, note_rtx);
|
||||
- offset = xtensa_callee_save_size - UNITS_PER_WORD;
|
||||
+ offset = callee_save_size - UNITS_PER_WORD;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2759,13 +2767,13 @@ xtensa_expand_prologue (void)
|
||||
{
|
||||
rtx tmp_reg = gen_rtx_REG (Pmode, A9_REG);
|
||||
emit_move_insn (tmp_reg, GEN_INT (total_size -
|
||||
- xtensa_callee_save_size));
|
||||
+ callee_save_size));
|
||||
insn = emit_insn (gen_subsi3 (stack_pointer_rtx,
|
||||
stack_pointer_rtx, tmp_reg));
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
note_rtx = gen_rtx_SET (stack_pointer_rtx,
|
||||
plus_constant (Pmode, stack_pointer_rtx,
|
||||
- xtensa_callee_save_size -
|
||||
+ callee_save_size -
|
||||
total_size));
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR, note_rtx);
|
||||
}
|
||||
@@ -2833,21 +2841,21 @@ xtensa_expand_epilogue (void)
|
||||
int regno;
|
||||
HOST_WIDE_INT offset;
|
||||
|
||||
- if (xtensa_current_frame_size > (frame_pointer_needed ? 127 : 1024))
|
||||
+ if (cfun->machine->current_frame_size > (frame_pointer_needed ? 127 : 1024))
|
||||
{
|
||||
rtx tmp_reg = gen_rtx_REG (Pmode, A9_REG);
|
||||
- emit_move_insn (tmp_reg, GEN_INT (xtensa_current_frame_size -
|
||||
- xtensa_callee_save_size));
|
||||
+ emit_move_insn (tmp_reg, GEN_INT (cfun->machine->current_frame_size -
|
||||
+ cfun->machine->callee_save_size));
|
||||
emit_insn (gen_addsi3 (stack_pointer_rtx, frame_pointer_needed ?
|
||||
hard_frame_pointer_rtx : stack_pointer_rtx,
|
||||
tmp_reg));
|
||||
- offset = xtensa_callee_save_size - UNITS_PER_WORD;
|
||||
+ offset = cfun->machine->callee_save_size - UNITS_PER_WORD;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (frame_pointer_needed)
|
||||
emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx);
|
||||
- offset = xtensa_current_frame_size - UNITS_PER_WORD;
|
||||
+ offset = cfun->machine->current_frame_size - UNITS_PER_WORD;
|
||||
}
|
||||
|
||||
/* Prevent reordering of saved a0 update and loading it back from
|
||||
@@ -2867,16 +2875,16 @@ xtensa_expand_epilogue (void)
|
||||
}
|
||||
}
|
||||
|
||||
- if (xtensa_current_frame_size > 0)
|
||||
+ if (cfun->machine->current_frame_size > 0)
|
||||
{
|
||||
if (frame_pointer_needed || /* always reachable with addi */
|
||||
- xtensa_current_frame_size > 1024 ||
|
||||
- xtensa_current_frame_size <= 127)
|
||||
+ cfun->machine->current_frame_size > 1024 ||
|
||||
+ cfun->machine->current_frame_size <= 127)
|
||||
{
|
||||
- if (xtensa_current_frame_size <= 127)
|
||||
- offset = xtensa_current_frame_size;
|
||||
+ if (cfun->machine->current_frame_size <= 127)
|
||||
+ offset = cfun->machine->current_frame_size;
|
||||
else
|
||||
- offset = xtensa_callee_save_size;
|
||||
+ offset = cfun->machine->callee_save_size;
|
||||
|
||||
emit_insn (gen_addsi3 (stack_pointer_rtx,
|
||||
stack_pointer_rtx,
|
||||
@@ -2885,7 +2893,8 @@ xtensa_expand_epilogue (void)
|
||||
else
|
||||
{
|
||||
rtx tmp_reg = gen_rtx_REG (Pmode, A9_REG);
|
||||
- emit_move_insn (tmp_reg, GEN_INT (xtensa_current_frame_size));
|
||||
+ emit_move_insn (tmp_reg,
|
||||
+ GEN_INT (cfun->machine->current_frame_size));
|
||||
emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
|
||||
tmp_reg));
|
||||
}
|
||||
@@ -2896,11 +2905,22 @@ xtensa_expand_epilogue (void)
|
||||
stack_pointer_rtx,
|
||||
EH_RETURN_STACKADJ_RTX));
|
||||
}
|
||||
- xtensa_current_frame_size = 0;
|
||||
- xtensa_callee_save_size = 0;
|
||||
+ cfun->machine->epilogue_done = true;
|
||||
emit_jump_insn (gen_return ());
|
||||
}
|
||||
|
||||
+bool
|
||||
+xtensa_use_return_instruction_p (void)
|
||||
+{
|
||||
+ if (!reload_completed)
|
||||
+ return false;
|
||||
+ if (TARGET_WINDOWED_ABI)
|
||||
+ return true;
|
||||
+ if (compute_frame_size (get_frame_size ()) == 0)
|
||||
+ return true;
|
||||
+ return cfun->machine->epilogue_done;
|
||||
+}
|
||||
+
|
||||
void
|
||||
xtensa_set_return_address (rtx address, rtx scratch)
|
||||
{
|
||||
diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h
|
||||
index 82e9900..58eb1b2 100644
|
||||
--- a/gcc/config/xtensa/xtensa.h
|
||||
+++ b/gcc/config/xtensa/xtensa.h
|
||||
@@ -23,8 +23,6 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
/* External variables defined in xtensa.c. */
|
||||
|
||||
-extern unsigned xtensa_current_frame_size;
|
||||
-
|
||||
/* Macros used in the machine description to select various Xtensa
|
||||
configuration options. */
|
||||
#ifndef XCHAL_HAVE_MUL32_HIGH
|
||||
@@ -477,14 +475,14 @@ enum reg_class
|
||||
/* Specify the initial difference between the specified pair of registers. */
|
||||
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
|
||||
do { \
|
||||
- compute_frame_size (get_frame_size ()); \
|
||||
+ long frame_size = compute_frame_size (get_frame_size ()); \
|
||||
switch (FROM) \
|
||||
{ \
|
||||
case FRAME_POINTER_REGNUM: \
|
||||
(OFFSET) = 0; \
|
||||
break; \
|
||||
case ARG_POINTER_REGNUM: \
|
||||
- (OFFSET) = xtensa_current_frame_size; \
|
||||
+ (OFFSET) = frame_size; \
|
||||
break; \
|
||||
default: \
|
||||
gcc_unreachable (); \
|
||||
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
|
||||
index db54a12..fcdb6c8 100644
|
||||
--- a/gcc/config/xtensa/xtensa.md
|
||||
+++ b/gcc/config/xtensa/xtensa.md
|
||||
@@ -1663,7 +1663,7 @@
|
||||
(define_insn "return"
|
||||
[(return)
|
||||
(use (reg:SI A0_REG))]
|
||||
- "(TARGET_WINDOWED_ABI || !xtensa_current_frame_size) && reload_completed"
|
||||
+ "xtensa_use_return_instruction_p ()"
|
||||
{
|
||||
return TARGET_WINDOWED_ABI ?
|
||||
(TARGET_DENSITY ? "retw.n" : "retw") :
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,35 +0,0 @@
|
||||
From a568f3a84ff41ca272301a5fcf31071143e97e0f 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 e49f784..70f698a 100644
|
||||
--- a/gcc/config/xtensa/xtensa.c
|
||||
+++ b/gcc/config/xtensa/xtensa.c
|
||||
@@ -4158,7 +4158,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
|
||||
|
@ -1,74 +0,0 @@
|
||||
From a3d07c8a2a9564b57ebcae8463c1541a37c97c34 Mon Sep 17 00:00:00 2001
|
||||
From: Max Filippov <jcmvbkbc@gmail.com>
|
||||
Date: Sun, 28 May 2017 19:56:56 -0700
|
||||
Subject: [PATCH] gcc: xtensa: fix fprintf format specifiers
|
||||
|
||||
HOST_WIDE_INT may not be long as assumed in print_operand and
|
||||
xtensa_emit_call. Use HOST_WIDE_INT_PRINT_DEC/HOST_WIDE_INT_PRINT_HEX
|
||||
format strings instead of %ld/0x%lx. This fixes incorrect assembly code
|
||||
generation by the compiler running on armhf host.
|
||||
|
||||
2017-05-28 Max Filippov <jcmvbkbc@gmail.com>
|
||||
gcc/
|
||||
* config/xtensa/xtensa.c (xtensa_emit_call): Use
|
||||
HOST_WIDE_INT_PRINT_HEX instead of 0x%lx format string.
|
||||
(print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of %ld
|
||||
format string.
|
||||
|
||||
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
||||
---
|
||||
gcc/config/xtensa/xtensa.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
|
||||
index 70f698a..2bdf5cc 100644
|
||||
--- a/gcc/config/xtensa/xtensa.c
|
||||
+++ b/gcc/config/xtensa/xtensa.c
|
||||
@@ -1776,7 +1776,8 @@ xtensa_emit_call (int callop, rtx *operands)
|
||||
rtx tgt = operands[callop];
|
||||
|
||||
if (GET_CODE (tgt) == CONST_INT)
|
||||
- sprintf (result, "call%d\t0x%lx", WINDOW_SIZE, INTVAL (tgt));
|
||||
+ sprintf (result, "call%d\t" HOST_WIDE_INT_PRINT_HEX,
|
||||
+ WINDOW_SIZE, INTVAL (tgt));
|
||||
else if (register_operand (tgt, VOIDmode))
|
||||
sprintf (result, "callx%d\t%%%d", WINDOW_SIZE, callop);
|
||||
else
|
||||
@@ -2347,14 +2348,14 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
|
||||
case 'L':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", (32 - INTVAL (x)) & 0x1f);
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (32 - INTVAL (x)) & 0x1f);
|
||||
else
|
||||
output_operand_lossage ("invalid %%L value");
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x) & 0x1f);
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) & 0x1f);
|
||||
else
|
||||
output_operand_lossage ("invalid %%R value");
|
||||
break;
|
||||
@@ -2368,7 +2369,7 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
|
||||
case 'd':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x));
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
|
||||
else
|
||||
output_operand_lossage ("invalid %%d value");
|
||||
break;
|
||||
@@ -2433,7 +2434,7 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
else if (GET_CODE (x) == MEM)
|
||||
output_address (GET_MODE (x), XEXP (x, 0));
|
||||
else if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x));
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
|
||||
else
|
||||
output_addr_const (file, x);
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
@ -158,8 +158,8 @@ index 47171b996..eb22d1181 100644
|
||||
(match_operand:SI 2 "const_int_operand" "") ; total range
|
||||
(match_operand:SI 3 "" "") ; table label
|
||||
(match_operand:SI 4 "" "")] ; Out of range label
|
||||
- "TARGET_32BIT || optimize_size || flag_pic"
|
||||
+ "TARGET_32BIT || ((optimize_size || flag_pic) && !inline_thumb1_jump_table)"
|
||||
- "(TARGET_32BIT || optimize_size || flag_pic) && !target_pure_code"
|
||||
+ "(TARGET_32BIT || ((optimize_size || flag_pic) && !inline_thumb1_jump_table)) && !target_pure_code"
|
||||
"
|
||||
{
|
||||
enum insn_code code;
|
||||
@ -202,13 +202,14 @@ index 77f30554d..32158ed65 100644
|
||||
#endif
|
||||
|
||||
/* The ARM uses @ are a comment character so we need to redefine
|
||||
@@ -104,7 +106,8 @@
|
||||
@@ -104,8 +106,8 @@
|
||||
the code more efficient, but for Thumb-1 it's better to put them out of
|
||||
band unless we are generating compressed tables. */
|
||||
#define JUMP_TABLES_IN_TEXT_SECTION \
|
||||
- (TARGET_32BIT || (TARGET_THUMB && (optimize_size || flag_pic)))
|
||||
+ (TARGET_32BIT || (TARGET_THUMB && !inline_thumb1_jump_table \
|
||||
+ && (optimize_size || flag_pic)))
|
||||
- ((TARGET_32BIT || (TARGET_THUMB && (optimize_size || flag_pic))) \
|
||||
- && !target_pure_code)
|
||||
+ ((TARGET_32BIT || (TARGET_THUMB && !inline_thumb1_jump_table \
|
||||
+ && (optimize_size || flag_pic))) && !target_pure_code)
|
||||
|
||||
#ifndef LINK_SPEC
|
||||
#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X"
|
@ -1,203 +0,0 @@
|
||||
From d720a7b5b2f72e3d2c7bacc7a0cb87018f21f35d Mon Sep 17 00:00:00 2001
|
||||
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Tue, 4 Jul 2017 10:22:56 +0000
|
||||
Subject: [PATCH] Use ucontext_t not struct ucontext in linux-unwind.h files.
|
||||
|
||||
Current glibc no longer gives the ucontext_t type the tag struct
|
||||
ucontext, to conform with POSIX namespace rules. This requires
|
||||
various linux-unwind.h files in libgcc, that were previously using
|
||||
struct ucontext, to be fixed to use ucontext_t instead. This is
|
||||
similar to the removal of the struct siginfo tag from siginfo_t some
|
||||
years ago.
|
||||
|
||||
This patch changes those files to use ucontext_t instead. As the
|
||||
standard name that should be unconditionally safe, so this is not
|
||||
restricted to architectures supported by glibc, or conditioned on the
|
||||
glibc version.
|
||||
|
||||
Tested compilation together with current glibc with glibc's
|
||||
build-many-glibcs.py.
|
||||
|
||||
* config/aarch64/linux-unwind.h (aarch64_fallback_frame_state),
|
||||
config/alpha/linux-unwind.h (alpha_fallback_frame_state),
|
||||
config/bfin/linux-unwind.h (bfin_fallback_frame_state),
|
||||
config/i386/linux-unwind.h (x86_64_fallback_frame_state,
|
||||
x86_fallback_frame_state), config/m68k/linux-unwind.h (struct
|
||||
uw_ucontext), config/nios2/linux-unwind.h (struct nios2_ucontext),
|
||||
config/pa/linux-unwind.h (pa32_fallback_frame_state),
|
||||
config/riscv/linux-unwind.h (riscv_fallback_frame_state),
|
||||
config/sh/linux-unwind.h (sh_fallback_frame_state),
|
||||
config/tilepro/linux-unwind.h (tile_fallback_frame_state),
|
||||
config/xtensa/linux-unwind.h (xtensa_fallback_frame_state): Use
|
||||
ucontext_t instead of struct ucontext.
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@249956 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
---
|
||||
libgcc/config/aarch64/linux-unwind.h | 2 +-
|
||||
libgcc/config/alpha/linux-unwind.h | 2 +-
|
||||
libgcc/config/bfin/linux-unwind.h | 2 +-
|
||||
libgcc/config/i386/linux-unwind.h | 4 ++--
|
||||
libgcc/config/m68k/linux-unwind.h | 2 +-
|
||||
libgcc/config/nios2/linux-unwind.h | 2 +-
|
||||
libgcc/config/pa/linux-unwind.h | 2 +-
|
||||
libgcc/config/riscv/linux-unwind.h | 2 +-
|
||||
libgcc/config/sh/linux-unwind.h | 2 +-
|
||||
libgcc/config/tilepro/linux-unwind.h | 2 +-
|
||||
libgcc/config/xtensa/linux-unwind.h | 2 +-
|
||||
11 files changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/libgcc/config/aarch64/linux-unwind.h b/libgcc/config/aarch64/linux-unwind.h
|
||||
index d5d6980442f..d46d5f53be3 100644
|
||||
--- a/libgcc/config/aarch64/linux-unwind.h
|
||||
+++ b/libgcc/config/aarch64/linux-unwind.h
|
||||
@@ -55,7 +55,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct rt_sigframe
|
||||
{
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
};
|
||||
|
||||
struct rt_sigframe *rt_;
|
||||
diff --git a/libgcc/config/alpha/linux-unwind.h b/libgcc/config/alpha/linux-unwind.h
|
||||
index a91a5f4fe26..7202516581d 100644
|
||||
--- a/libgcc/config/alpha/linux-unwind.h
|
||||
+++ b/libgcc/config/alpha/linux-unwind.h
|
||||
@@ -51,7 +51,7 @@ alpha_fallback_frame_state (struct _Unwind_Context *context,
|
||||
{
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
sc = &rt_->uc.uc_mcontext;
|
||||
}
|
||||
diff --git a/libgcc/config/bfin/linux-unwind.h b/libgcc/config/bfin/linux-unwind.h
|
||||
index 9412c7652b8..37e9feb6965 100644
|
||||
--- a/libgcc/config/bfin/linux-unwind.h
|
||||
+++ b/libgcc/config/bfin/linux-unwind.h
|
||||
@@ -52,7 +52,7 @@ bfin_fallback_frame_state (struct _Unwind_Context *context,
|
||||
void *puc;
|
||||
char retcode[8];
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
|
||||
index b1d5040a687..2009ad72260 100644
|
||||
--- a/libgcc/config/i386/linux-unwind.h
|
||||
+++ b/libgcc/config/i386/linux-unwind.h
|
||||
@@ -58,7 +58,7 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
|
||||
if (*(unsigned char *)(pc+0) == 0x48
|
||||
&& *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
|
||||
{
|
||||
- struct ucontext *uc_ = context->cfa;
|
||||
+ ucontext_t *uc_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
because it does not alias anything. */
|
||||
@@ -138,7 +138,7 @@ x86_fallback_frame_state (struct _Unwind_Context *context,
|
||||
siginfo_t *pinfo;
|
||||
void *puc;
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
diff --git a/libgcc/config/m68k/linux-unwind.h b/libgcc/config/m68k/linux-unwind.h
|
||||
index 82c7a297a6d..9ea39d454aa 100644
|
||||
--- a/libgcc/config/m68k/linux-unwind.h
|
||||
+++ b/libgcc/config/m68k/linux-unwind.h
|
||||
@@ -33,7 +33,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
/* <sys/ucontext.h> is unfortunately broken right now. */
|
||||
struct uw_ucontext {
|
||||
unsigned long uc_flags;
|
||||
- struct ucontext *uc_link;
|
||||
+ ucontext_t *uc_link;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
unsigned long uc_filler[80];
|
||||
diff --git a/libgcc/config/nios2/linux-unwind.h b/libgcc/config/nios2/linux-unwind.h
|
||||
index ae82efd6de6..204359d7b92 100644
|
||||
--- a/libgcc/config/nios2/linux-unwind.h
|
||||
+++ b/libgcc/config/nios2/linux-unwind.h
|
||||
@@ -38,7 +38,7 @@ struct nios2_mcontext {
|
||||
|
||||
struct nios2_ucontext {
|
||||
unsigned long uc_flags;
|
||||
- struct ucontext *uc_link;
|
||||
+ ucontext_t *uc_link;
|
||||
stack_t uc_stack;
|
||||
struct nios2_mcontext uc_mcontext;
|
||||
sigset_t uc_sigmask; /* mask last for extensibility */
|
||||
diff --git a/libgcc/config/pa/linux-unwind.h b/libgcc/config/pa/linux-unwind.h
|
||||
index 580c18dad69..c2c3409bcc1 100644
|
||||
--- a/libgcc/config/pa/linux-unwind.h
|
||||
+++ b/libgcc/config/pa/linux-unwind.h
|
||||
@@ -80,7 +80,7 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct sigcontext *sc;
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *frame;
|
||||
|
||||
/* rt_sigreturn trampoline:
|
||||
diff --git a/libgcc/config/riscv/linux-unwind.h b/libgcc/config/riscv/linux-unwind.h
|
||||
index a051a2869d4..1c8aeff7ef0 100644
|
||||
--- a/libgcc/config/riscv/linux-unwind.h
|
||||
+++ b/libgcc/config/riscv/linux-unwind.h
|
||||
@@ -42,7 +42,7 @@ riscv_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct rt_sigframe
|
||||
{
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
};
|
||||
|
||||
struct rt_sigframe *rt_;
|
||||
diff --git a/libgcc/config/sh/linux-unwind.h b/libgcc/config/sh/linux-unwind.h
|
||||
index 1038caeb5c3..a8c98220282 100644
|
||||
--- a/libgcc/config/sh/linux-unwind.h
|
||||
+++ b/libgcc/config/sh/linux-unwind.h
|
||||
@@ -82,7 +82,7 @@ sh_fallback_frame_state (struct _Unwind_Context *context,
|
||||
{
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_ = context->cfa;
|
||||
/* The void * cast is necessary to avoid an aliasing warning.
|
||||
The aliasing warning is correct, but should not be a problem
|
||||
diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
|
||||
index a8dc4405715..dba3b410279 100644
|
||||
--- a/libgcc/config/tilepro/linux-unwind.h
|
||||
+++ b/libgcc/config/tilepro/linux-unwind.h
|
||||
@@ -61,7 +61,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
|
||||
struct rt_sigframe {
|
||||
unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_;
|
||||
|
||||
/* Return if this is not a signal handler. */
|
||||
diff --git a/libgcc/config/xtensa/linux-unwind.h b/libgcc/config/xtensa/linux-unwind.h
|
||||
index 67c272820d0..2cb9eb1f739 100644
|
||||
--- a/libgcc/config/xtensa/linux-unwind.h
|
||||
+++ b/libgcc/config/xtensa/linux-unwind.h
|
||||
@@ -67,7 +67,7 @@ xtensa_fallback_frame_state (struct _Unwind_Context *context,
|
||||
|
||||
struct rt_sigframe {
|
||||
siginfo_t info;
|
||||
- struct ucontext uc;
|
||||
+ ucontext_t uc;
|
||||
} *rt_;
|
||||
|
||||
/* movi a2, __NR_rt_sigreturn; syscall */
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,13 +0,0 @@
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80037
|
||||
|
||||
diff --git a/libgcc/config/alpha/t-alpha b/libgcc/config/alpha/t-alpha
|
||||
index 0b6ffb1..0c2f840 100644
|
||||
--- a/libgcc/config/alpha/t-alpha
|
||||
+++ b/libgcc/config/alpha/t-alpha
|
||||
@@ -1,2 +1,6 @@
|
||||
# This is a support routine for longlong.h, used by libgcc2.c.
|
||||
LIB2ADD += $(srcdir)/config/alpha/qrnnd.S
|
||||
+
|
||||
+# When GAS-generated unwind tables are created, they get created
|
||||
+# after the __FRAME_END__ terminator, which causes an ld error.
|
||||
+CRTSTUFF_T_CFLAGS = -fno-unwind-tables
|
@ -1,74 +0,0 @@
|
||||
From 06689e5973647f5c65d1984b164f2531f5418d7a Mon Sep 17 00:00:00 2001
|
||||
From: Max Filippov <jcmvbkbc@gmail.com>
|
||||
Date: Sun, 28 May 2017 19:56:56 -0700
|
||||
Subject: [PATCH] gcc: xtensa: fix fprintf format specifiers
|
||||
|
||||
HOST_WIDE_INT may not be long as assumed in print_operand and
|
||||
xtensa_emit_call. Use HOST_WIDE_INT_PRINT_DEC/HOST_WIDE_INT_PRINT_HEX
|
||||
format strings instead of %ld/0x%lx. This fixes incorrect assembly code
|
||||
generation by the compiler running on armhf host.
|
||||
|
||||
2017-05-28 Max Filippov <jcmvbkbc@gmail.com>
|
||||
gcc/
|
||||
* config/xtensa/xtensa.c (xtensa_emit_call): Use
|
||||
HOST_WIDE_INT_PRINT_HEX instead of 0x%lx format string.
|
||||
(print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of %ld
|
||||
format string.
|
||||
|
||||
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
||||
---
|
||||
gcc/config/xtensa/xtensa.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
|
||||
index 0181dde..25e4a28 100644
|
||||
--- a/gcc/config/xtensa/xtensa.c
|
||||
+++ b/gcc/config/xtensa/xtensa.c
|
||||
@@ -1780,7 +1780,8 @@ xtensa_emit_call (int callop, rtx *operands)
|
||||
rtx tgt = operands[callop];
|
||||
|
||||
if (GET_CODE (tgt) == CONST_INT)
|
||||
- sprintf (result, "call%d\t0x%lx", WINDOW_SIZE, INTVAL (tgt));
|
||||
+ sprintf (result, "call%d\t" HOST_WIDE_INT_PRINT_HEX,
|
||||
+ WINDOW_SIZE, INTVAL (tgt));
|
||||
else if (register_operand (tgt, VOIDmode))
|
||||
sprintf (result, "callx%d\t%%%d", WINDOW_SIZE, callop);
|
||||
else
|
||||
@@ -2351,14 +2352,14 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
|
||||
case 'L':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", (32 - INTVAL (x)) & 0x1f);
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (32 - INTVAL (x)) & 0x1f);
|
||||
else
|
||||
output_operand_lossage ("invalid %%L value");
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x) & 0x1f);
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) & 0x1f);
|
||||
else
|
||||
output_operand_lossage ("invalid %%R value");
|
||||
break;
|
||||
@@ -2372,7 +2373,7 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
|
||||
case 'd':
|
||||
if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x));
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
|
||||
else
|
||||
output_operand_lossage ("invalid %%d value");
|
||||
break;
|
||||
@@ -2437,7 +2438,7 @@ print_operand (FILE *file, rtx x, int letter)
|
||||
else if (GET_CODE (x) == MEM)
|
||||
output_address (GET_MODE (x), XEXP (x, 0));
|
||||
else if (GET_CODE (x) == CONST_INT)
|
||||
- fprintf (file, "%ld", INTVAL (x));
|
||||
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
|
||||
else
|
||||
output_addr_const (file, x);
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
Loading…
Reference in New Issue
Block a user