tcbinfo:remove total_num form tcbinfo.

total_num is not required
test:

make -f tools/Makefile.host
cp tools/jlink-nuttx /opt/SEGGER/JLink_V786a/libnuttxplugin.so
JLinkGDBServer -if SWD -speed 5000 -device STM32F429ZI -NoGui 1 -rtos libnuttxplugin

can run normally

Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
anjiahao 2023-11-17 14:49:03 +08:00 committed by Xiang Xiao
parent 1a65f5ed88
commit 749655d785
18 changed files with 128 additions and 70 deletions

View File

@ -66,8 +66,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -51,13 +51,14 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R14), TCB_REG_OFF(REG_R14),
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_XPSR), TCB_REG_OFF(REG_XPSR),
#if 0
UINT16_MAX, /* msp */ UINT16_MAX, /* msp */
TCB_REG_OFF(REG_R13), TCB_REG_OFF(REG_R13),
TCB_REG_OFF(REG_PRIMASK), TCB_REG_OFF(REG_PRIMASK),
UINT16_MAX, /* basepri */ UINT16_MAX, /* basepri */
UINT16_MAX, /* faultmask */ UINT16_MAX, /* faultmask */
UINT16_MAX, /* control */ UINT16_MAX, /* control */
#endif
}; };
/**************************************************************************** /****************************************************************************
@ -73,8 +74,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -52,7 +52,8 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_CPSR), TCB_REG_OFF(REG_CPSR),
#ifdef CONFIG_ARCH_FPU #if 0
# ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_D0), TCB_REG_OFF(REG_D0),
TCB_REG_OFF(REG_D1), TCB_REG_OFF(REG_D1),
TCB_REG_OFF(REG_D2), TCB_REG_OFF(REG_D2),
@ -69,9 +70,9 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D13), TCB_REG_OFF(REG_D13),
TCB_REG_OFF(REG_D14), TCB_REG_OFF(REG_D14),
TCB_REG_OFF(REG_D15), TCB_REG_OFF(REG_D15),
#endif # endif
#ifdef CONFIG_ARM_DPFPU32 # ifdef CONFIG_ARM_DPFPU32
TCB_REG_OFF(REG_D16), TCB_REG_OFF(REG_D16),
TCB_REG_OFF(REG_D17), TCB_REG_OFF(REG_D17),
TCB_REG_OFF(REG_D18), TCB_REG_OFF(REG_D18),
@ -88,10 +89,11 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D29), TCB_REG_OFF(REG_D29),
TCB_REG_OFF(REG_D30), TCB_REG_OFF(REG_D30),
TCB_REG_OFF(REG_D31), TCB_REG_OFF(REG_D31),
#endif # endif
#ifdef CONFIG_ARCH_FPU # ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_FPSCR), TCB_REG_OFF(REG_FPSCR),
# endif
#endif #endif
}; };
@ -108,8 +110,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -52,19 +52,20 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_XPSR), TCB_REG_OFF(REG_XPSR),
#if 0
UINT16_MAX, /* msp */ UINT16_MAX, /* msp */
TCB_REG_OFF(REG_R13), TCB_REG_OFF(REG_R13),
#ifdef CONFIG_ARMV7M_USEBASEPRI # ifdef CONFIG_ARMV7M_USEBASEPRI
UINT16_MAX, /* primask */ UINT16_MAX, /* primask */
TCB_REG_OFF(REG_BASEPRI), TCB_REG_OFF(REG_BASEPRI),
#else # else
TCB_REG_OFF(REG_PRIMASK), TCB_REG_OFF(REG_PRIMASK),
UINT16_MAX, /* basepri */ UINT16_MAX, /* basepri */
#endif # endif
UINT16_MAX, /* faultmask */ UINT16_MAX, /* faultmask */
UINT16_MAX, /* control */ UINT16_MAX, /* control */
#ifdef CONFIG_ARCH_FPU # ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_S0), TCB_REG_OFF(REG_S0),
TCB_REG_OFF(REG_S1), TCB_REG_OFF(REG_S1),
TCB_REG_OFF(REG_S2), TCB_REG_OFF(REG_S2),
@ -98,6 +99,7 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_S30), TCB_REG_OFF(REG_S30),
TCB_REG_OFF(REG_S31), TCB_REG_OFF(REG_S31),
TCB_REG_OFF(REG_FPSCR), TCB_REG_OFF(REG_FPSCR),
# endif
#endif #endif
}; };
@ -114,8 +116,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -52,7 +52,8 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_CPSR), TCB_REG_OFF(REG_CPSR),
#ifdef CONFIG_ARCH_FPU #if 0
# ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_D0), TCB_REG_OFF(REG_D0),
TCB_REG_OFF(REG_D1), TCB_REG_OFF(REG_D1),
TCB_REG_OFF(REG_D2), TCB_REG_OFF(REG_D2),
@ -69,9 +70,9 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D13), TCB_REG_OFF(REG_D13),
TCB_REG_OFF(REG_D14), TCB_REG_OFF(REG_D14),
TCB_REG_OFF(REG_D15), TCB_REG_OFF(REG_D15),
#endif # endif
#ifdef CONFIG_ARM_DPFPU32 # ifdef CONFIG_ARM_DPFPU32
TCB_REG_OFF(REG_D16), TCB_REG_OFF(REG_D16),
TCB_REG_OFF(REG_D17), TCB_REG_OFF(REG_D17),
TCB_REG_OFF(REG_D18), TCB_REG_OFF(REG_D18),
@ -88,10 +89,11 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D29), TCB_REG_OFF(REG_D29),
TCB_REG_OFF(REG_D30), TCB_REG_OFF(REG_D30),
TCB_REG_OFF(REG_D31), TCB_REG_OFF(REG_D31),
#endif # endif
#ifdef CONFIG_ARCH_FPU # ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_FPSCR), TCB_REG_OFF(REG_FPSCR),
# endif
#endif #endif
}; };
@ -108,8 +110,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -52,19 +52,20 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_XPSR), TCB_REG_OFF(REG_XPSR),
#if 0
UINT16_MAX, /* msp */ UINT16_MAX, /* msp */
TCB_REG_OFF(REG_R13), TCB_REG_OFF(REG_R13),
#ifdef CONFIG_ARMV8M_USEBASEPRI # ifdef CONFIG_ARMV8M_USEBASEPRI
UINT16_MAX, /* primask */ UINT16_MAX, /* primask */
TCB_REG_OFF(REG_BASEPRI), TCB_REG_OFF(REG_BASEPRI),
#else # else
TCB_REG_OFF(REG_PRIMASK), TCB_REG_OFF(REG_PRIMASK),
UINT16_MAX, /* basepri */ UINT16_MAX, /* basepri */
#endif # endif
UINT16_MAX, /* faultmask */ UINT16_MAX, /* faultmask */
UINT16_MAX, /* control */ UINT16_MAX, /* control */
#ifdef CONFIG_ARCH_FPU # ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_S0), TCB_REG_OFF(REG_S0),
TCB_REG_OFF(REG_S1), TCB_REG_OFF(REG_S1),
TCB_REG_OFF(REG_S2), TCB_REG_OFF(REG_S2),
@ -98,6 +99,7 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_S30), TCB_REG_OFF(REG_S30),
TCB_REG_OFF(REG_S31), TCB_REG_OFF(REG_S31),
TCB_REG_OFF(REG_FPSCR), TCB_REG_OFF(REG_FPSCR),
# endif
#endif #endif
}; };
@ -114,8 +116,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -52,7 +52,8 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_R15), TCB_REG_OFF(REG_R15),
TCB_REG_OFF(REG_CPSR), TCB_REG_OFF(REG_CPSR),
#ifdef CONFIG_ARCH_FPU #if 0
# ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_D0), TCB_REG_OFF(REG_D0),
TCB_REG_OFF(REG_D1), TCB_REG_OFF(REG_D1),
TCB_REG_OFF(REG_D2), TCB_REG_OFF(REG_D2),
@ -69,9 +70,9 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D13), TCB_REG_OFF(REG_D13),
TCB_REG_OFF(REG_D14), TCB_REG_OFF(REG_D14),
TCB_REG_OFF(REG_D15), TCB_REG_OFF(REG_D15),
#endif # endif
#ifdef CONFIG_ARM_DPFPU32 # ifdef CONFIG_ARM_DPFPU32
TCB_REG_OFF(REG_D16), TCB_REG_OFF(REG_D16),
TCB_REG_OFF(REG_D17), TCB_REG_OFF(REG_D17),
TCB_REG_OFF(REG_D18), TCB_REG_OFF(REG_D18),
@ -88,10 +89,11 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_D29), TCB_REG_OFF(REG_D29),
TCB_REG_OFF(REG_D30), TCB_REG_OFF(REG_D30),
TCB_REG_OFF(REG_D31), TCB_REG_OFF(REG_D31),
#endif # endif
#ifdef CONFIG_ARCH_FPU # ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_FPSCR), TCB_REG_OFF(REG_FPSCR),
# endif
#endif #endif
}; };
@ -106,8 +108,7 @@ const struct tcbinfo_s g_tcbinfo =
.pri_off = TCB_PRI_OFF, .pri_off = TCB_PRI_OFF,
.name_off = TCB_NAME_OFF, .name_off = TCB_NAME_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 17, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -82,8 +82,7 @@ const struct tcbinfo_s g_tcbinfo =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = nitems(g_reg_offs), .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -68,7 +68,8 @@ static const uint16_t g_reg_offs[] =
TCB_REG_OFF(REG_X31_NDX), TCB_REG_OFF(REG_X31_NDX),
TCB_REG_OFF(REG_EPC_NDX), TCB_REG_OFF(REG_EPC_NDX),
#ifdef CONFIG_ARCH_FPU #if 0
# ifdef CONFIG_ARCH_FPU
TCB_REG_OFF(REG_F0_NDX), TCB_REG_OFF(REG_F0_NDX),
TCB_REG_OFF(REG_F1_NDX), TCB_REG_OFF(REG_F1_NDX),
TCB_REG_OFF(REG_F2_NDX), TCB_REG_OFF(REG_F2_NDX),
@ -104,6 +105,7 @@ static const uint16_t g_reg_offs[] =
UINT16_MAX, /* fflags */ UINT16_MAX, /* fflags */
UINT16_MAX, /* frm */ UINT16_MAX, /* frm */
TCB_REG_OFF(REG_FCSR_NDX), TCB_REG_OFF(REG_FCSR_NDX),
# endif
#endif #endif
}; };
@ -120,8 +122,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = 33, .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -78,6 +78,67 @@ static const uint16_t g_reg_offs[] =
UINT16_MAX, /* ES */ UINT16_MAX, /* ES */
UINT16_MAX, /* FS */ UINT16_MAX, /* FS */
}; };
#elif defined(CONFIG_HOST_ARM64)
static const uint16_t g_reg_offs[] =
{
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
TCB_REG_OFF(JB_SP),
TCB_REG_OFF(JB_PC),
UINT16_MAX,
UINT16_MAX,
};
#elif defined(CONFIG_HOST_ARM)
static const uint16_t g_reg_offs[] =
{
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
UINT16_MAX,
};
#endif #endif
/**************************************************************************** /****************************************************************************
@ -93,8 +154,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = nitems(g_reg_offs), .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -81,8 +81,7 @@ const struct tcbinfo_s g_tcbinfo =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = nitems(g_reg_offs), .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -64,8 +64,7 @@ const struct tcbinfo_s g_tcbinfo =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = nitems(g_reg_offs), .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -72,8 +72,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = nitems(g_reg_offs), .regs_num = nitems(g_reg_offs),
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -67,8 +67,7 @@ const struct tcbinfo_s g_tcbinfo used_data =
.stack_off = TCB_STACK_OFF, .stack_off = TCB_STACK_OFF,
.stack_size_off = TCB_STACK_SIZE_OFF, .stack_size_off = TCB_STACK_SIZE_OFF,
.regs_off = TCB_REGS_OFF, .regs_off = TCB_REGS_OFF,
.basic_num = COMMON_CTX_REGS, .regs_num = COMMON_CTX_REGS,
.total_num = nitems(g_reg_offs),
{ {
.p = g_reg_offs, .p = g_reg_offs,
}, },

View File

@ -715,8 +715,7 @@ begin_packed_struct struct tcbinfo_s
uint16_t stack_off; /* Offset of tcb.stack_alloc_ptr */ uint16_t stack_off; /* Offset of tcb.stack_alloc_ptr */
uint16_t stack_size_off; /* Offset of tcb.adj_stack_size */ uint16_t stack_size_off; /* Offset of tcb.adj_stack_size */
uint16_t regs_off; /* Offset of tcb.regs */ uint16_t regs_off; /* Offset of tcb.regs */
uint16_t basic_num; /* Num of genernal regs */ uint16_t regs_num; /* Num of general regs */
uint16_t total_num; /* Num of regs in tcbinfo.reg_offs */
/* Offset pointer of xcp.regs, order in GDB org.gnu.gdb.xxx feature. /* Offset pointer of xcp.regs, order in GDB org.gnu.gdb.xxx feature.
* Please refer: * Please refer:

View File

@ -1406,7 +1406,7 @@ FAR struct gdb_state_s *gdb_state_init(gdb_send_func_t send,
gdb_monitor_func_t monitor, gdb_monitor_func_t monitor,
FAR void *priv) FAR void *priv)
{ {
size_t size = g_tcbinfo.basic_num * sizeof(uintptr_t); size_t size = g_tcbinfo.regs_num * sizeof(uintptr_t);
FAR struct gdb_state_s *state = lib_zalloc(sizeof(*state) + size); FAR struct gdb_state_s *state = lib_zalloc(sizeof(*state) + size);
if (state == NULL) if (state == NULL)

View File

@ -36,7 +36,7 @@ def save_regs():
saved_regs = [] saved_regs = []
i = 0 i = 0
for reg in arch.registers(): for reg in arch.registers():
if i >= tcbinfo["basic_num"]: if i >= tcbinfo["regs_num"]:
break break
saved_regs.append(gdb.parse_and_eval("$%s" % reg.name)) saved_regs.append(gdb.parse_and_eval("$%s" % reg.name))
@ -53,7 +53,7 @@ def restore_regs():
arch = gdb.selected_frame().architecture() arch = gdb.selected_frame().architecture()
i = 0 i = 0
for reg in arch.registers(): for reg in arch.registers():
if i >= tcbinfo["basic_num"]: if i >= tcbinfo["regs_num"]:
break break
gdb.execute("set $%s=%d" % (reg.name, int(saved_regs[i]))) gdb.execute("set $%s=%d" % (reg.name, int(saved_regs[i])))
@ -108,7 +108,7 @@ class Nxsetregs(gdb.Command):
arch = gdb.selected_frame().architecture() arch = gdb.selected_frame().architecture()
i = 0 i = 0
for reg in arch.registers(): for reg in arch.registers():
if i >= tcbinfo["basic_num"]: if i >= tcbinfo["regs_num"]:
return return
if tcbinfo["reg_off"]["p"][i] != UINT16_MAX: if tcbinfo["reg_off"]["p"][i] != UINT16_MAX:

View File

@ -100,8 +100,7 @@ begin_packed_struct struct tcbinfo_s
uint16_t stack_off; uint16_t stack_off;
uint16_t stack_size_off; uint16_t stack_size_off;
uint16_t regs_off; uint16_t regs_off;
uint16_t basic_num; uint16_t regs_num;
uint16_t total_num;
begin_packed_struct begin_packed_struct
union union
{ {
@ -254,7 +253,7 @@ static int setget_reg(struct plugin_priv_s *priv, uint32_t idx,
{ {
uint32_t regaddr; uint32_t regaddr;
if (regidx >= priv->tcbinfo->total_num) if (regidx >= priv->tcbinfo->regs_num)
{ {
return -EINVAL; return -EINVAL;
} }
@ -292,19 +291,19 @@ static int update_tcbinfo(struct plugin_priv_s *priv)
{ {
if (!priv->tcbinfo) if (!priv->tcbinfo)
{ {
uint16_t total_num; uint16_t regs_num;
uint32_t reg_off; uint32_t reg_off;
int ret; int ret;
ret = READU16(g_symbols[TCBINFO].address + ret = READU16(g_symbols[TCBINFO].address +
offsetof(struct tcbinfo_s, total_num), &total_num); offsetof(struct tcbinfo_s, regs_num), &regs_num);
if (ret != 0) if (ret != 0)
{ {
PERROR("error reading regs ret %d\n", ret); PERROR("error reading regs ret %d\n", ret);
return ret; return ret;
} }
if (!total_num) if (!regs_num)
{ {
return -EIO; return -EIO;
} }
@ -318,7 +317,7 @@ static int update_tcbinfo(struct plugin_priv_s *priv)
} }
priv->tcbinfo = ALLOC(sizeof(struct tcbinfo_s) + priv->tcbinfo = ALLOC(sizeof(struct tcbinfo_s) +
total_num * sizeof(uint16_t)); regs_num * sizeof(uint16_t));
if (!priv->tcbinfo) if (!priv->tcbinfo)
{ {
@ -335,8 +334,8 @@ static int update_tcbinfo(struct plugin_priv_s *priv)
} }
ret = READMEM(reg_off, (char *)&priv->tcbinfo->reg_offs[0], ret = READMEM(reg_off, (char *)&priv->tcbinfo->reg_offs[0],
total_num * sizeof(uint16_t)); regs_num * sizeof(uint16_t));
if (ret != total_num * sizeof(uint16_t)) if (ret != regs_num * sizeof(uint16_t))
{ {
PERROR("error in read tcbinfo_s reg_offs ret %d\n", ret); PERROR("error in read tcbinfo_s reg_offs ret %d\n", ret);
return ret; return ret;
@ -643,7 +642,7 @@ int RTOS_GetThreadRegList(char *hexreglist, uint32_t threadid)
return idx; return idx;
} }
for (j = 0; j < g_plugin_priv.tcbinfo->basic_num; j++) for (j = 0; j < g_plugin_priv.tcbinfo->regs_num; j++)
{ {
regval = 0; regval = 0;
@ -704,7 +703,7 @@ int RTOS_SetThreadRegList(char *hexreglist, uint32_t threadid)
return idx; return idx;
} }
for (j = 0; j < g_plugin_priv.tcbinfo->basic_num; j++) for (j = 0; j < g_plugin_priv.tcbinfo->regs_num; j++)
{ {
regval = decode_hex(hexreglist); regval = decode_hex(hexreglist);