Skip to content

Commit 841b178

Browse files
zhangyuan21xiaoxiang781216
authored andcommitted
assert: show stacks with the sp from regs
1. Get the value of sp from dump regs when an exception occurs, to avoid getting the value of fp from up_getsp and causing incomplete stack printing. 2. Determine which stack the value belongs to based on the value of SP to avoid false reports of stack overflow Signed-off-by: zhangyuan21 <[email protected]>
1 parent dec80be commit 841b178

File tree

25 files changed

+158
-97
lines changed

25 files changed

+158
-97
lines changed

arch/arm/src/common/arm_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@
4545
* Name: up_getusrsp
4646
****************************************************************************/
4747

48-
uintptr_t up_getusrsp(void)
48+
uintptr_t up_getusrsp(void *regs)
4949
{
50-
return CURRENT_REGS[REG_SP];
50+
uint32_t *ptr = regs;
51+
return ptr[REG_SP];
5152
}
5253

5354
/****************************************************************************

arch/arm64/src/common/arm64_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@
4747
* Name: up_getusrsp
4848
****************************************************************************/
4949

50-
uintptr_t up_getusrsp(void)
50+
uintptr_t up_getusrsp(void *regs)
5151
{
52-
return CURRENT_REGS[REG_X13];
52+
struct regs_context *ptr = regs;
53+
return ptr->regs[REG_X13];
5354
}
5455

5556
/****************************************************************************

arch/avr/src/avr/avr_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@
4242
* Name: up_getusrsp
4343
****************************************************************************/
4444

45-
uintptr_t up_getusrsp(void)
45+
uintptr_t up_getusrsp(void *regs)
4646
{
47-
return g_current_regs[REG_R13];
47+
uint8_t *ptr = regs;
48+
return ptr[REG_R13];
4849
}
4950

5051
/****************************************************************************

arch/avr/src/avr32/avr_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@
4242
* Name: up_getusrsp
4343
****************************************************************************/
4444

45-
uintptr_t up_getusrsp(void)
45+
uintptr_t up_getusrsp(void *regs)
4646
{
47-
return g_current_regs[REG_R13];
47+
uint8_t *ptr = regs;
48+
return ptr[REG_R13];
4849
}
4950

5051
/****************************************************************************

arch/ceva/src/common/ceva_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@
3939
* Name: up_getusrsp
4040
****************************************************************************/
4141

42-
uintptr_t up_getusrsp(void)
42+
uintptr_t up_getusrsp(void *regs)
4343
{
44-
return CURRENT_REGS[REG_SP];
44+
uint32_t *ptr = regs;
45+
return ptr[REG_SP];
4546
}
4647

4748
/****************************************************************************

arch/hc/src/m9s12/m9s12_registerdump.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@
4040
* Name: up_getusrsp
4141
****************************************************************************/
4242

43-
uintptr_t up_getusrsp(void)
43+
uintptr_t up_getusrsp(void *regs)
4444
{
45-
uint8_t *ptr = (uint8_t *)g_current_regs;
45+
uint8_t *ptr = regs;
4646
return (uintptr_t)(ptr[REG_SPH] << 8 | ptr[REG_SPL]);
4747
}
4848

arch/mips/src/mips32/mips_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@
4242
* Name: up_getusrsp
4343
****************************************************************************/
4444

45-
uintptr_t up_getusrsp(void)
45+
uintptr_t up_getusrsp(void *regs)
4646
{
47-
return CURRENT_REGS[REG_SP];
47+
uint32_t *ptr = regs;
48+
return ptr[REG_SP];
4849
}
4950

5051
/****************************************************************************

arch/misoc/src/lm32/lm32_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@
4141
* Name: up_getusrsp
4242
****************************************************************************/
4343

44-
uintptr_t up_getusrsp(void)
44+
uintptr_t up_getusrsp(void *regs)
4545
{
46-
return g_current_regs[REG_SP];
46+
uint32_t *ptr = regs;
47+
return ptr[REG_SP];
4748
}
4849

4950
/****************************************************************************

arch/misoc/src/minerva/minerva_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@
4141
* Name: up_getusrsp
4242
****************************************************************************/
4343

44-
uintptr_t up_getusrsp(void)
44+
uintptr_t up_getusrsp(void *regs)
4545
{
46-
return g_current_regs[REG_X2];
46+
uint32_t *ptr = regs;
47+
return ptr[REG_X2];
4748
}
4849

4950
/****************************************************************************

arch/or1k/src/common/or1k_registerdump.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@
4040
* Name: up_getusrsp
4141
****************************************************************************/
4242

43-
uintptr_t up_getusrsp(void)
43+
uintptr_t up_getusrsp(void *regs)
4444
{
45-
return CURRENT_REGS[REG_R13];
45+
uint32_t *ptr = regs;
46+
return ptr[REG_R13];
4647
}
4748

4849
/****************************************************************************

0 commit comments

Comments
 (0)