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 <zhuyanl...@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 <zhuyanl...@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);