* [PATCH 0/2] xtensa: call0 ABI fixes
@ 2015-09-15 10:01 Max Filippov
2015-09-15 10:01 ` [PATCH 1/2] xtensa: fix TLS calls for call0 ABI Max Filippov
2015-09-15 10:05 ` [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state " Max Filippov
0 siblings, 2 replies; 6+ messages in thread
From: Max Filippov @ 2015-09-15 10:01 UTC (permalink / raw)
To: gcc-patches; +Cc: linux-xtensa, Sterling Augustine, Max Filippov
Hi Sterling,
this series fixes two bugs in Xtensa call0 ABI support: callx8
unconditionally used for TLS calls and missing signal frame unwinding code
for xtensa_fallback_frame_state.
With these fixes uClibc testsuite results for windowed and call0 ABIs become
identical.
Max Filippov (2):
xtensa: fix TLS calls for call0 ABI
xtensa: fix xtensa_fallback_frame_state for call0 ABI
gcc/config/xtensa/xtensa.c | 12 ++++++------
gcc/config/xtensa/xtensa.h | 4 +++-
gcc/config/xtensa/xtensa.md | 7 ++++++-
libgcc/config/xtensa/linux-unwind.h | 30 ++++++++++++++++++++++++++++--
4 files changed, 43 insertions(+), 10 deletions(-)
--
1.8.1.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] xtensa: fix TLS calls for call0 ABI
2015-09-15 10:01 [PATCH 0/2] xtensa: call0 ABI fixes Max Filippov
@ 2015-09-15 10:01 ` Max Filippov
2015-09-15 18:23 ` augustine.sterling
2015-09-15 10:05 ` [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state " Max Filippov
1 sibling, 1 reply; 6+ messages in thread
From: Max Filippov @ 2015-09-15 10:01 UTC (permalink / raw)
To: gcc-patches; +Cc: linux-xtensa, Sterling Augustine, Max Filippov
2015-09-15 Max Filippov <jcmvbkbc@gmail.com>
gcc/
* config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
to pass TLS call argument, according to current ABI.
* config/xtensa/xtensa.md (tls_call pattern): Use callx8 or
callx0 for TLS call, according to current ABI.
---
gcc/config/xtensa/xtensa.c | 12 ++++++------
gcc/config/xtensa/xtensa.md | 7 ++++++-
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index eb039ba..0aa6a0a 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -1891,23 +1891,23 @@ xtensa_tls_module_base (void)
static rtx_insn *
xtensa_call_tls_desc (rtx sym, rtx *retp)
{
- rtx fn, arg, a10;
+ rtx fn, arg, a_io;
rtx_insn *call_insn, *insns;
start_sequence ();
fn = gen_reg_rtx (Pmode);
arg = gen_reg_rtx (Pmode);
- a10 = gen_rtx_REG (Pmode, 10);
+ a_io = gen_rtx_REG (Pmode, WINDOW_SIZE + 2);
emit_insn (gen_tls_func (fn, sym));
emit_insn (gen_tls_arg (arg, sym));
- emit_move_insn (a10, arg);
- call_insn = emit_call_insn (gen_tls_call (a10, fn, sym, const1_rtx));
- use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), a10);
+ emit_move_insn (a_io, arg);
+ call_insn = emit_call_insn (gen_tls_call (a_io, fn, sym, const1_rtx));
+ use_reg (&CALL_INSN_FUNCTION_USAGE (call_insn), a_io);
insns = get_insns ();
end_sequence ();
- *retp = a10;
+ *retp = a_io;
return insns;
}
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index 6d84384..e3c517d 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -1867,7 +1867,12 @@
UNSPEC_TLS_CALL))
(match_operand 3 "" "i")))]
"TARGET_THREADPTR && HAVE_AS_TLS"
- "callx8.tls %1, %2@TLSCALL"
+{
+ if (TARGET_WINDOWED_ABI)
+ return "callx8.tls %1, %2@TLSCALL";
+ else
+ return "callx0.tls %1, %2@TLSCALL";
+}
[(set_attr "type" "call")
(set_attr "mode" "none")
(set_attr "length" "3")])
--
1.8.1.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state for call0 ABI
2015-09-15 10:01 [PATCH 0/2] xtensa: call0 ABI fixes Max Filippov
2015-09-15 10:01 ` [PATCH 1/2] xtensa: fix TLS calls for call0 ABI Max Filippov
@ 2015-09-15 10:05 ` Max Filippov
2015-09-15 18:25 ` augustine.sterling
1 sibling, 1 reply; 6+ messages in thread
From: Max Filippov @ 2015-09-15 10:05 UTC (permalink / raw)
To: gcc-patches; +Cc: linux-xtensa, Sterling Augustine, Max Filippov
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.
---
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 011411c..4970acd 100644
--- a/gcc/config/xtensa/xtensa.h
+++ b/gcc/config/xtensa/xtensa.h
@@ -812,7 +812,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 */
--
1.8.1.4
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] xtensa: fix TLS calls for call0 ABI
2015-09-15 10:01 ` [PATCH 1/2] xtensa: fix TLS calls for call0 ABI Max Filippov
@ 2015-09-15 18:23 ` augustine.sterling
2015-09-15 21:57 ` Max Filippov
0 siblings, 1 reply; 6+ messages in thread
From: augustine.sterling @ 2015-09-15 18:23 UTC (permalink / raw)
To: Max Filippov; +Cc: gcc-patches, linux-xtensa
On Tue, Sep 15, 2015 at 3:00 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
> 2015-09-15 Max Filippov <jcmvbkbc@gmail.com>
> gcc/
> * config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
> to pass TLS call argument, according to current ABI.
> * config/xtensa/xtensa.md (tls_call pattern): Use callx8 or
Approved, please apply.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state for call0 ABI
2015-09-15 10:05 ` [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state " Max Filippov
@ 2015-09-15 18:25 ` augustine.sterling
0 siblings, 0 replies; 6+ messages in thread
From: augustine.sterling @ 2015-09-15 18:25 UTC (permalink / raw)
To: Max Filippov; +Cc: gcc-patches, linux-xtensa
On Tue, Sep 15, 2015 at 3:00 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
> 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.
Approved. Please apply.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] xtensa: fix TLS calls for call0 ABI
2015-09-15 18:23 ` augustine.sterling
@ 2015-09-15 21:57 ` Max Filippov
0 siblings, 0 replies; 6+ messages in thread
From: Max Filippov @ 2015-09-15 21:57 UTC (permalink / raw)
To: augustine.sterling; +Cc: gcc-patches, linux-xtensa
On Tue, Sep 15, 2015 at 9:21 PM, augustine.sterling@gmail.com
<augustine.sterling@gmail.com> wrote:
> On Tue, Sep 15, 2015 at 3:00 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
>> 2015-09-15 Max Filippov <jcmvbkbc@gmail.com>
>> gcc/
>> * config/xtensa/xtensa.c (xtensa_call_tls_desc): Use a10 or a2
>> to pass TLS call argument, according to current ABI.
>> * config/xtensa/xtensa.md (tls_call pattern): Use callx8 or
>
> Approved, please apply.
Applied both patches to trunk. Thank you!
-- Max
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-09-15 21:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-15 10:01 [PATCH 0/2] xtensa: call0 ABI fixes Max Filippov
2015-09-15 10:01 ` [PATCH 1/2] xtensa: fix TLS calls for call0 ABI Max Filippov
2015-09-15 18:23 ` augustine.sterling
2015-09-15 21:57 ` Max Filippov
2015-09-15 10:05 ` [PATCH 2/2] xtensa: fix xtensa_fallback_frame_state " Max Filippov
2015-09-15 18:25 ` augustine.sterling
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).