* [PATCH v2 0/2] xtensa: support THREADPTR register
@ 2017-02-22 1:55 Max Filippov
2017-02-22 1:55 ` [PATCH v2 2/2] gdbserver: " Max Filippov
2017-02-22 1:55 ` [PATCH v2 1/2] gdb: xtensa-linux: " Max Filippov
0 siblings, 2 replies; 3+ messages in thread
From: Max Filippov @ 2017-02-22 1:55 UTC (permalink / raw)
To: gdb-patches; +Cc: Maxim Grigoriev, Woody LaRue, Marc Gauthier, Max Filippov
Hello,
this series makes THREADPTR register (used for TLS in xtensa linux)
available to native and remote gdb.
Changes v1->v2:
- add comment for XTENSA_DBREGN_UREG;
- add missing spaces to type casts;
- move directory name up in the commit message..
Max Filippov (2):
gdb: xtensa-linux: support THREADPTR register
gdbserver: xtensa: support THREADPTR register
gdb/gdbserver/linux-xtensa-low.c | 11 +++++++++++
gdb/xtensa-linux-nat.c | 8 ++++++++
gdb/xtensa-tdep.c | 4 ++++
gdb/xtensa-tdep.h | 1 +
4 files changed, 24 insertions(+)
--
2.1.4
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 1/2] gdb: xtensa-linux: support THREADPTR register
2017-02-22 1:55 [PATCH v2 0/2] xtensa: support THREADPTR register Max Filippov
2017-02-22 1:55 ` [PATCH v2 2/2] gdbserver: " Max Filippov
@ 2017-02-22 1:55 ` Max Filippov
1 sibling, 0 replies; 3+ messages in thread
From: Max Filippov @ 2017-02-22 1:55 UTC (permalink / raw)
To: gdb-patches; +Cc: Maxim Grigoriev, Woody LaRue, Marc Gauthier, Max Filippov
Make THREADPTR user register accessible.
gdb/
2017-01-18 Max Filippov <jcmvbkbc@gmail.com>
* xtensa-linux-nat.c (fill_gregset): Call regcache_raw_collect
for THREADPTR register.
(supply_gregset_reg): Call regcache_raw_supply for THREADPTR
register.
* xtensa-tdep.c (XTENSA_DBREGN_UREG): New definition.
(xtensa_derive_tdep): Initialize tdep->threadptr_regnum.
* xtensa-tdep.h (gdbarch_tdep::threadptr_regnum): New field.
---
Changes v1->v2:
- add comment for XTENSA_DBREGN_UREG;
- move directory name up in the commit message..
gdb/xtensa-linux-nat.c | 8 ++++++++
gdb/xtensa-tdep.c | 4 ++++
gdb/xtensa-tdep.h | 1 +
3 files changed, 13 insertions(+)
diff --git a/gdb/xtensa-linux-nat.c b/gdb/xtensa-linux-nat.c
index 35032ce..a80e429 100644
--- a/gdb/xtensa-linux-nat.c
+++ b/gdb/xtensa-linux-nat.c
@@ -82,6 +82,10 @@ fill_gregset (const struct regcache *regcache,
regcache_raw_collect (regcache,
gdbarch_tdep (gdbarch)->sar_regnum,
®s->sar);
+ if (regnum == gdbarch_tdep (gdbarch)->threadptr_regnum || regnum == -1)
+ regcache_raw_collect (regcache,
+ gdbarch_tdep (gdbarch)->threadptr_regnum,
+ ®s->threadptr);
if (regnum >=gdbarch_tdep (gdbarch)->ar_base
&& regnum < gdbarch_tdep (gdbarch)->ar_base
+ gdbarch_tdep (gdbarch)->num_aregs)
@@ -148,6 +152,10 @@ supply_gregset_reg (struct regcache *regcache,
regcache_raw_supply (regcache,
gdbarch_tdep (gdbarch)->sar_regnum,
®s->sar);
+ if (regnum == gdbarch_tdep (gdbarch)->threadptr_regnum || regnum == -1)
+ regcache_raw_supply (regcache,
+ gdbarch_tdep (gdbarch)->threadptr_regnum,
+ ®s->threadptr);
if (regnum >=gdbarch_tdep (gdbarch)->ar_base
&& regnum < gdbarch_tdep (gdbarch)->ar_base
+ gdbarch_tdep (gdbarch)->num_aregs)
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index 2338ac1..13f1514 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -3107,6 +3107,8 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep)
/* Special registers 0..255 (core). */
#define XTENSA_DBREGN_SREG(n) (0x0200+(n))
+/* User registers 0..255. */
+#define XTENSA_DBREGN_UREG(n) (0x0300+(n))
for (rmap = tdep->regmap, n = 0; rmap->target_number != -1; n++, rmap++)
{
@@ -3138,6 +3140,8 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep)
tdep->litbase_regnum = n;
else if (rmap->target_number == XTENSA_DBREGN_SREG(230))
tdep->ps_regnum = n;
+ else if (rmap->target_number == XTENSA_DBREGN_UREG(231))
+ tdep->threadptr_regnum = n;
#if 0
else if (rmap->target_number == XTENSA_DBREGN_SREG(226))
tdep->interrupt_regnum = n;
diff --git a/gdb/xtensa-tdep.h b/gdb/xtensa-tdep.h
index 46aeecb..986aa68 100644
--- a/gdb/xtensa-tdep.h
+++ b/gdb/xtensa-tdep.h
@@ -204,6 +204,7 @@ struct gdbarch_tdep
int lcount_regnum;
int sar_regnum; /* Register number of SAR. */
int litbase_regnum; /* Register number of LITBASE. */
+ int threadptr_regnum; /* Register number of THREADPTR. */
int interrupt_regnum; /* Register number for interrupt. */
int interrupt2_regnum; /* Register number for interrupt2. */
--
2.1.4
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 2/2] gdbserver: xtensa: support THREADPTR register
2017-02-22 1:55 [PATCH v2 0/2] xtensa: support THREADPTR register Max Filippov
@ 2017-02-22 1:55 ` Max Filippov
2017-02-22 1:55 ` [PATCH v2 1/2] gdb: xtensa-linux: " Max Filippov
1 sibling, 0 replies; 3+ messages in thread
From: Max Filippov @ 2017-02-22 1:55 UTC (permalink / raw)
To: gdb-patches; +Cc: Maxim Grigoriev, Woody LaRue, Marc Gauthier, Max Filippov
Provide aceess to the THREADPTR register to remote gdb.
gdb/gdbserver/
2017-01-18 Max Filippov <jcmvbkbc@gmail.com>
* linux-xtensa-low.c (regnum::R_THREADPTR): New enum member.
(xtensa_fill_gregset): Call collect_register_by_name for
threadptr register.
(xtensa_store_gregset): Call supply_register_by_name for
threadptr register.
---
Changes v1->v2:
- add missing spaces to type casts;
- move directory name up in the commit message..
gdb/gdbserver/linux-xtensa-low.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/gdb/gdbserver/linux-xtensa-low.c b/gdb/gdbserver/linux-xtensa-low.c
index 89efa05..d285233 100644
--- a/gdb/gdbserver/linux-xtensa-low.c
+++ b/gdb/gdbserver/linux-xtensa-low.c
@@ -36,6 +36,7 @@ enum regnum {
R_LBEG, R_LEND, R_LCOUNT,
R_SAR,
R_WS, R_WB,
+ R_THREADPTR,
R_A0 = 64
};
@@ -84,6 +85,11 @@ xtensa_fill_gregset (struct regcache *regcache, void *buf)
collect_register (regcache, i, ptr);
ptr += register_size (tdesc, i);
}
+
+#if XCHAL_HAVE_THREADPTR
+ collect_register_by_name (regcache, "threadptr",
+ (char *) &rset[R_THREADPTR]);
+#endif
}
static void
@@ -131,6 +137,11 @@ xtensa_store_gregset (struct regcache *regcache, const void *buf)
supply_register_by_name (regcache, "ps", (char*)&rset[R_PS]);
supply_register_by_name (regcache, "windowbase", (char*)&rset[R_WB]);
supply_register_by_name (regcache, "windowstart", (char*)&rset[R_WS]);
+
+#if XCHAL_HAVE_THREADPTR
+ supply_register_by_name (regcache, "threadptr",
+ (char *) &rset[R_THREADPTR]);
+#endif
}
/* Xtensa GNU/Linux PTRACE interface includes extended register set. */
--
2.1.4
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-02-22 1:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-22 1:55 [PATCH v2 0/2] xtensa: support THREADPTR register Max Filippov
2017-02-22 1:55 ` [PATCH v2 2/2] gdbserver: " Max Filippov
2017-02-22 1:55 ` [PATCH v2 1/2] gdb: xtensa-linux: " Max Filippov
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).