From 8d0094f6c99a34d8f0f5f1b189e7c472a0ea825e Mon Sep 17 00:00:00 2001 From: ligd Date: Wed, 1 Feb 2023 18:37:14 +0800 Subject: [PATCH] sim: fix color running stack crash when use -Os Signed-off-by: ligd --- arch/sim/src/sim/sim_createstack.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/sim/src/sim/sim_createstack.c b/arch/sim/src/sim/sim_createstack.c index cbadcb0528..fc7557b382 100644 --- a/arch/sim/src/sim/sim_createstack.c +++ b/arch/sim/src/sim/sim_createstack.c @@ -35,6 +35,12 @@ #include "sim_internal.h" +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define STACK_MARGIN_WORDS 32 + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -171,7 +177,7 @@ void nostackprotect_function sim_stack_color(void *stackbase, if (nbytes == 0) /* 0: colorize the running stack */ { stkend = up_getsp(); - if (stkend > (uintptr_t)&sp) + if (stkend < (uintptr_t)&sp) { stkend = (uintptr_t)&sp; } @@ -183,6 +189,7 @@ void nostackprotect_function sim_stack_color(void *stackbase, stkend = STACK_ALIGN_DOWN(stkend); nwords = (stkend - (uintptr_t)stackbase) >> 2; + nwords = nwords > STACK_MARGIN_WORDS ? nwords - STACK_MARGIN_WORDS : 0; /* Set the entire stack to the coloration value */