You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2021/11/10 17:31:16 UTC
[incubator-nuttx] 01/03: arch:debug: add struct for task aware
debug.
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 012bd1494c59d21486e2554ea5d83503027aebe8
Author: zhuyanlin <zh...@xiaomi.com>
AuthorDate: Wed Oct 13 21:15:04 2021 +0800
arch:debug: add struct for task aware debug.
When enable DEBUG_TCBINFO config, a global struct will
provide, then debuggers can aware nuttx task infomation.
Signed-off-by: zhuyanlin <zh...@xiaomi.com>
---
Kconfig | 8 +++
arch/arm/src/arm/arm_tcbinfo.c | 64 ++++++++++++++++++
arch/arm/src/armv6-m/arm_tcbinfo.c | 71 ++++++++++++++++++++
arch/arm/src/armv7-a/arm_tcbinfo.c | 108 ++++++++++++++++++++++++++++++
arch/arm/src/armv7-m/arm_tcbinfo.c | 114 +++++++++++++++++++++++++++++++
arch/arm/src/armv7-r/arm_tcbinfo.c | 108 ++++++++++++++++++++++++++++++
arch/arm/src/armv8-m/arm_tcbinfo.c | 114 +++++++++++++++++++++++++++++++
arch/risc-v/src/common/riscv_tcbinfo.c | 118 +++++++++++++++++++++++++++++++++
include/nuttx/sched.h | 35 ++++++++++
9 files changed, 740 insertions(+)
diff --git a/Kconfig b/Kconfig
index 126139e..1772e71 100644
--- a/Kconfig
+++ b/Kconfig
@@ -546,6 +546,14 @@ endmenu # Customize Header Files
menu "Debug Options"
+config DEBUG_TCBINFO
+ bool "Enable TCBinfo struct for debug"
+ default n
+ ---help---
+ Enables tcbinfo struct for debugger infomation.
+ Selecting this option will enable g_tcbinfo in arch and
+ procfs.
+
config DEBUG_ALERT
bool
default n
diff --git a/arch/arm/src/arm/arm_tcbinfo.c b/arch/arm/src/arm/arm_tcbinfo.c
new file mode 100644
index 0000000..f2e9745
--- /dev/null
+++ b/arch/arm/src/arm/arm_tcbinfo.c
@@ -0,0 +1,64 @@
+/****************************************************************************
+ * arch/arm/src/arm/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_CPSR),
+};
+
+#endif
diff --git a/arch/arm/src/armv6-m/arm_tcbinfo.c b/arch/arm/src/armv6-m/arm_tcbinfo.c
new file mode 100644
index 0000000..45be317
--- /dev/null
+++ b/arch/arm/src/armv6-m/arm_tcbinfo.c
@@ -0,0 +1,71 @@
+/****************************************************************************
+ * arch/arm/src/armv6-m/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_XPSR),
+
+ 0,
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_PRIMASK),
+ 0,
+ 0,
+ 0,
+};
+
+#endif
diff --git a/arch/arm/src/armv7-a/arm_tcbinfo.c b/arch/arm/src/armv7-a/arm_tcbinfo.c
new file mode 100644
index 0000000..814ce32
--- /dev/null
+++ b/arch/arm/src/armv7-a/arm_tcbinfo.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * arch/arm/src/armv7-a/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_CPSR),
+
+#ifdef CONFIG_ARCH_FPU
+ TCB_REG_OFF(REG_D0),
+ TCB_REG_OFF(REG_D1),
+ TCB_REG_OFF(REG_D2),
+ TCB_REG_OFF(REG_D3),
+ TCB_REG_OFF(REG_D4),
+ TCB_REG_OFF(REG_D5),
+ TCB_REG_OFF(REG_D6),
+ TCB_REG_OFF(REG_D7),
+ TCB_REG_OFF(REG_D8),
+ TCB_REG_OFF(REG_D9),
+ TCB_REG_OFF(REG_D10),
+ TCB_REG_OFF(REG_D11),
+ TCB_REG_OFF(REG_D12),
+ TCB_REG_OFF(REG_D13),
+ TCB_REG_OFF(REG_D14),
+ TCB_REG_OFF(REG_D15),
+#endif
+
+#ifdef CONFIG_ARM_HAVE_FPU_D32
+ TCB_REG_OFF(REG_D16),
+ TCB_REG_OFF(REG_D17),
+ TCB_REG_OFF(REG_D18),
+ TCB_REG_OFF(REG_D19),
+ TCB_REG_OFF(REG_D20),
+ TCB_REG_OFF(REG_D21),
+ TCB_REG_OFF(REG_D22),
+ TCB_REG_OFF(REG_D23),
+ TCB_REG_OFF(REG_D24),
+ TCB_REG_OFF(REG_D25),
+ TCB_REG_OFF(REG_D26),
+ TCB_REG_OFF(REG_D27),
+ TCB_REG_OFF(REG_D28),
+ TCB_REG_OFF(REG_D29),
+ TCB_REG_OFF(REG_D30),
+ TCB_REG_OFF(REG_D31),
+#endif
+
+#ifdef CONFIG_ARCH_FPU
+ 0,
+ TCB_REG_OFF(REG_FPSCR),
+ 0,
+#endif
+};
+
+#endif
diff --git a/arch/arm/src/armv7-m/arm_tcbinfo.c b/arch/arm/src/armv7-m/arm_tcbinfo.c
new file mode 100644
index 0000000..c679e5a
--- /dev/null
+++ b/arch/arm/src/armv7-m/arm_tcbinfo.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * arch/arm/src/armv7-m/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_XPSR),
+
+ 0,
+ TCB_REG_OFF(REG_R13),
+#ifdef CONFIG_ARMV7M_USEBASEPRI
+ 0,
+ TCB_REG_OFF(REG_BASEPRI),
+#else
+ TCB_REG_OFF(REG_PRIMASK),
+ 0,
+#endif
+ 0,
+ 0,
+
+#ifdef CONFIG_ARCH_FPU
+ TCB_REG_OFF(REG_S0),
+ TCB_REG_OFF(REG_S1),
+ TCB_REG_OFF(REG_S2),
+ TCB_REG_OFF(REG_S3),
+ TCB_REG_OFF(REG_S4),
+ TCB_REG_OFF(REG_S5),
+ TCB_REG_OFF(REG_S6),
+ TCB_REG_OFF(REG_S7),
+ TCB_REG_OFF(REG_S8),
+ TCB_REG_OFF(REG_S9),
+ TCB_REG_OFF(REG_S10),
+ TCB_REG_OFF(REG_S11),
+ TCB_REG_OFF(REG_S12),
+ TCB_REG_OFF(REG_S13),
+ TCB_REG_OFF(REG_S14),
+ TCB_REG_OFF(REG_S15),
+ TCB_REG_OFF(REG_S16),
+ TCB_REG_OFF(REG_S17),
+ TCB_REG_OFF(REG_S18),
+ TCB_REG_OFF(REG_S19),
+ TCB_REG_OFF(REG_S20),
+ TCB_REG_OFF(REG_S21),
+ TCB_REG_OFF(REG_S22),
+ TCB_REG_OFF(REG_S23),
+ TCB_REG_OFF(REG_S24),
+ TCB_REG_OFF(REG_S25),
+ TCB_REG_OFF(REG_S26),
+ TCB_REG_OFF(REG_S27),
+ TCB_REG_OFF(REG_S28),
+ TCB_REG_OFF(REG_S29),
+ TCB_REG_OFF(REG_S30),
+ TCB_REG_OFF(REG_S31),
+ 0,
+ TCB_REG_OFF(REG_FPSCR),
+ 0,
+#endif
+};
+
+#endif
diff --git a/arch/arm/src/armv7-r/arm_tcbinfo.c b/arch/arm/src/armv7-r/arm_tcbinfo.c
new file mode 100644
index 0000000..4f732e3
--- /dev/null
+++ b/arch/arm/src/armv7-r/arm_tcbinfo.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * arch/arm/src/armv7-r/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_CPSR),
+
+#ifdef CONFIG_ARCH_FPU
+ TCB_REG_OFF(REG_D0),
+ TCB_REG_OFF(REG_D1),
+ TCB_REG_OFF(REG_D2),
+ TCB_REG_OFF(REG_D3),
+ TCB_REG_OFF(REG_D4),
+ TCB_REG_OFF(REG_D5),
+ TCB_REG_OFF(REG_D6),
+ TCB_REG_OFF(REG_D7),
+ TCB_REG_OFF(REG_D8),
+ TCB_REG_OFF(REG_D9),
+ TCB_REG_OFF(REG_D10),
+ TCB_REG_OFF(REG_D11),
+ TCB_REG_OFF(REG_D12),
+ TCB_REG_OFF(REG_D13),
+ TCB_REG_OFF(REG_D14),
+ TCB_REG_OFF(REG_D15),
+#endif
+
+#ifdef CONFIG_ARM_HAVE_FPU_D32
+ TCB_REG_OFF(REG_D16),
+ TCB_REG_OFF(REG_D17),
+ TCB_REG_OFF(REG_D18),
+ TCB_REG_OFF(REG_D19),
+ TCB_REG_OFF(REG_D20),
+ TCB_REG_OFF(REG_D21),
+ TCB_REG_OFF(REG_D22),
+ TCB_REG_OFF(REG_D23),
+ TCB_REG_OFF(REG_D24),
+ TCB_REG_OFF(REG_D25),
+ TCB_REG_OFF(REG_D26),
+ TCB_REG_OFF(REG_D27),
+ TCB_REG_OFF(REG_D28),
+ TCB_REG_OFF(REG_D29),
+ TCB_REG_OFF(REG_D30),
+ TCB_REG_OFF(REG_D31),
+#endif
+
+#ifdef CONFIG_ARCH_FPU
+ 0,
+ TCB_REG_OFF(REG_FPSCR),
+ 0,
+#endif
+};
+
+#endif
diff --git a/arch/arm/src/armv8-m/arm_tcbinfo.c b/arch/arm/src/armv8-m/arm_tcbinfo.c
new file mode 100644
index 0000000..96637da
--- /dev/null
+++ b/arch/arm/src/armv8-m/arm_tcbinfo.c
@@ -0,0 +1,114 @@
+/****************************************************************************
+ * arch/arm/src/armv8-m/arm_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ TCB_REG_OFF(REG_R0),
+ TCB_REG_OFF(REG_R1),
+ TCB_REG_OFF(REG_R2),
+ TCB_REG_OFF(REG_R3),
+ TCB_REG_OFF(REG_R4),
+ TCB_REG_OFF(REG_R5),
+ TCB_REG_OFF(REG_R6),
+ TCB_REG_OFF(REG_R7),
+ TCB_REG_OFF(REG_R8),
+ TCB_REG_OFF(REG_R9),
+ TCB_REG_OFF(REG_R10),
+ TCB_REG_OFF(REG_R11),
+ TCB_REG_OFF(REG_R12),
+ TCB_REG_OFF(REG_R13),
+ TCB_REG_OFF(REG_R14),
+ TCB_REG_OFF(REG_R15),
+ TCB_REG_OFF(REG_XPSR),
+
+ 0,
+ TCB_REG_OFF(REG_R13),
+#ifdef CONFIG_ARMV8M_USEBASEPRI
+ 0,
+ TCB_REG_OFF(REG_BASEPRI),
+#else
+ TCB_REG_OFF(REG_PRIMASK),
+ 0,
+#endif
+ 0,
+ 0,
+
+#ifdef CONFIG_ARCH_FPU
+ TCB_REG_OFF(REG_S0),
+ TCB_REG_OFF(REG_S1),
+ TCB_REG_OFF(REG_S2),
+ TCB_REG_OFF(REG_S3),
+ TCB_REG_OFF(REG_S4),
+ TCB_REG_OFF(REG_S5),
+ TCB_REG_OFF(REG_S6),
+ TCB_REG_OFF(REG_S7),
+ TCB_REG_OFF(REG_S8),
+ TCB_REG_OFF(REG_S9),
+ TCB_REG_OFF(REG_S10),
+ TCB_REG_OFF(REG_S11),
+ TCB_REG_OFF(REG_S12),
+ TCB_REG_OFF(REG_S13),
+ TCB_REG_OFF(REG_S14),
+ TCB_REG_OFF(REG_S15),
+ TCB_REG_OFF(REG_S16),
+ TCB_REG_OFF(REG_S17),
+ TCB_REG_OFF(REG_S18),
+ TCB_REG_OFF(REG_S19),
+ TCB_REG_OFF(REG_S20),
+ TCB_REG_OFF(REG_S21),
+ TCB_REG_OFF(REG_S22),
+ TCB_REG_OFF(REG_S23),
+ TCB_REG_OFF(REG_S24),
+ TCB_REG_OFF(REG_S25),
+ TCB_REG_OFF(REG_S26),
+ TCB_REG_OFF(REG_S27),
+ TCB_REG_OFF(REG_S28),
+ TCB_REG_OFF(REG_S29),
+ TCB_REG_OFF(REG_S30),
+ TCB_REG_OFF(REG_S31),
+ 0,
+ TCB_REG_OFF(REG_FPSCR),
+ 0,
+#endif
+};
+
+#endif
diff --git a/arch/risc-v/src/common/riscv_tcbinfo.c b/arch/risc-v/src/common/riscv_tcbinfo.c
new file mode 100644
index 0000000..530378b
--- /dev/null
+++ b/arch/risc-v/src/common/riscv_tcbinfo.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * arch/risc-v/src/common/riscv_tcbinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_DEBUG_TCBINFO
+
+#include <nuttx/sched.h>
+#include <arch/irq.h>
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+const struct tcbinfo_s g_tcbinfo =
+{
+ TCB_PID_OFF,
+ TCB_STATE_OFF,
+ TCB_PRI_OFF,
+ TCB_NAME_OFF,
+
+ XCPTCONTEXT_REGS,
+
+ 0,
+ TCB_REG_OFF(REG_X1_NDX),
+ TCB_REG_OFF(REG_X2_NDX),
+ TCB_REG_OFF(REG_X3_NDX),
+ TCB_REG_OFF(REG_X4_NDX),
+ TCB_REG_OFF(REG_X5_NDX),
+ TCB_REG_OFF(REG_X6_NDX),
+ TCB_REG_OFF(REG_X7_NDX),
+ TCB_REG_OFF(REG_X8_NDX),
+ TCB_REG_OFF(REG_X9_NDX),
+ TCB_REG_OFF(REG_X10_NDX),
+ TCB_REG_OFF(REG_X11_NDX),
+ TCB_REG_OFF(REG_X12_NDX),
+ TCB_REG_OFF(REG_X13_NDX),
+ TCB_REG_OFF(REG_X14_NDX),
+ TCB_REG_OFF(REG_X15_NDX),
+ TCB_REG_OFF(REG_X16_NDX),
+ TCB_REG_OFF(REG_X17_NDX),
+ TCB_REG_OFF(REG_X18_NDX),
+ TCB_REG_OFF(REG_X19_NDX),
+ TCB_REG_OFF(REG_X20_NDX),
+ TCB_REG_OFF(REG_X21_NDX),
+ TCB_REG_OFF(REG_X22_NDX),
+ TCB_REG_OFF(REG_X23_NDX),
+ TCB_REG_OFF(REG_X24_NDX),
+ TCB_REG_OFF(REG_X25_NDX),
+ TCB_REG_OFF(REG_X26_NDX),
+ TCB_REG_OFF(REG_X27_NDX),
+ TCB_REG_OFF(REG_X28_NDX),
+ TCB_REG_OFF(REG_X29_NDX),
+ TCB_REG_OFF(REG_X30_NDX),
+ TCB_REG_OFF(REG_X31_NDX),
+ TCB_REG_OFF(REG_EPC_NDX),
+
+#ifdef CONFIG_ARCH_FPU
+ TCB_REG_OFF(REG_F0_NDX),
+ TCB_REG_OFF(REG_F1_NDX),
+ TCB_REG_OFF(REG_F2_NDX),
+ TCB_REG_OFF(REG_F3_NDX),
+ TCB_REG_OFF(REG_F4_NDX),
+ TCB_REG_OFF(REG_F5_NDX),
+ TCB_REG_OFF(REG_F6_NDX),
+ TCB_REG_OFF(REG_F7_NDX),
+ TCB_REG_OFF(REG_F8_NDX),
+ TCB_REG_OFF(REG_F9_NDX),
+ TCB_REG_OFF(REG_F10_NDX),
+ TCB_REG_OFF(REG_F11_NDX),
+ TCB_REG_OFF(REG_F12_NDX),
+ TCB_REG_OFF(REG_F13_NDX),
+ TCB_REG_OFF(REG_F14_NDX),
+ TCB_REG_OFF(REG_F15_NDX),
+ TCB_REG_OFF(REG_F16_NDX),
+ TCB_REG_OFF(REG_F17_NDX),
+ TCB_REG_OFF(REG_F18_NDX),
+ TCB_REG_OFF(REG_F19_NDX),
+ TCB_REG_OFF(REG_F20_NDX),
+ TCB_REG_OFF(REG_F21_NDX),
+ TCB_REG_OFF(REG_F22_NDX),
+ TCB_REG_OFF(REG_F23_NDX),
+ TCB_REG_OFF(REG_F24_NDX),
+ TCB_REG_OFF(REG_F25_NDX),
+ TCB_REG_OFF(REG_F26_NDX),
+ TCB_REG_OFF(REG_F27_NDX),
+ TCB_REG_OFF(REG_F28_NDX),
+ TCB_REG_OFF(REG_F29_NDX),
+ TCB_REG_OFF(REG_F30_NDX),
+ TCB_REG_OFF(REG_F31_NDX),
+ 0,
+ 0,
+ TCB_REG_OFF(REG_FCSR_NDX),
+#endif
+};
+
+#endif
diff --git a/include/nuttx/sched.h b/include/nuttx/sched.h
index 6458afa..caec634 100644
--- a/include/nuttx/sched.h
+++ b/include/nuttx/sched.h
@@ -184,6 +184,14 @@
# error "CONFIG_SCHED_EXIT_MAX < 1"
#endif
+#ifdef CONFIG_DEBUG_TCBINFO
+# define TCB_PID_OFF (offsetof(struct tcb_s, pid))
+# define TCB_STATE_OFF (offsetof(struct tcb_s, task_state))
+# define TCB_PRI_OFF (offsetof(struct tcb_s, sched_priority))
+# define TCB_NAME_OFF (offsetof(struct tcb_s, name))
+# define TCB_REG_OFF(reg) (offsetof(struct tcb_s, xcp.regs[reg]))
+#endif
+
/****************************************************************************
* Public Type Definitions
****************************************************************************/
@@ -764,6 +772,33 @@ struct pthread_tcb_s
};
#endif /* !CONFIG_DISABLE_PTHREAD */
+/* struct tcbinfo_s *********************************************************/
+
+/* The structure save key filed offset of tcb_s while can be used by
+ * debuggers to parse the tcb information
+ */
+
+#ifdef CONFIG_DEBUG_TCBINFO
+struct tcbinfo_s
+{
+ uint16_t pid_off; /* Offset of tcb.pid */
+ uint16_t state_off; /* Offset of tcb.task_state */
+ uint16_t pri_off; /* Offset of tcb.sched_priority */
+ uint16_t name_off; /* Offset of tcb.name */
+ uint16_t reg_num; /* Num of regs in tcbinfo.reg_offs */
+
+ /* Offsets of xcp.regs, order in GDB org.gnu.gdb.xxx feature.
+ * Please refer:
+ * https://sourceware.org/gdb/current/onlinedocs/gdb/ARM-Features.html
+ * https://sourceware.org/gdb/current/onlinedocs/gdb/RISC_002dV-Features
+ * -.html
+ * value 0: This regsiter was not priovided by NuttX
+ */
+
+ uint16_t reg_offs[XCPTCONTEXT_REGS];
+};
+#endif
+
/* This is the callback type used by nxsched_foreach() */
typedef CODE void (*nxsched_foreach_t)(FAR struct tcb_s *tcb, FAR void *arg);