Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion common/inc/tx_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* tx_api.h PORTABLE C */
/* 6.2.1 */
/* 6.x */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
Expand Down Expand Up @@ -97,6 +97,10 @@
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
/* update patch number, */
/* resulting in version 6.2.1 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/

Expand Down Expand Up @@ -171,7 +175,11 @@ extern "C" {
#define TX_NO_MESSAGES ((UINT) 0)
#define TX_EMPTY ((ULONG) 0)
#define TX_CLEAR_ID ((ULONG) 0)
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
#define TX_STACK_FILL (thread_ptr -> tx_thread_stack_fill_value)
#else
#define TX_STACK_FILL ((ULONG) 0xEFEFEFEFUL)
#endif


/* Thread execution state values. */
Expand Down Expand Up @@ -618,6 +626,12 @@ typedef struct TX_THREAD_STRUCT
cleanup routine executes. */
ULONG tx_thread_suspension_sequence;

#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)

/* Define the random stack fill number. This can be used to detect stack overflow. */
ULONG tx_thread_stack_fill_value;
#endif

/* Define the user extension field. This typically is defined
to white space, but some ports of ThreadX may need to have
additional fields in the thread control block. This is
Expand Down Expand Up @@ -1892,6 +1906,21 @@ UINT _tx_trace_interrupt_control(UINT new_posture);
#endif


/* Add a default macro that can be re-defined in tx_port.h to add processing to the initialize random number generator.
By default, this is simply defined as whitespace. */

#ifndef TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION
#define TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION
#endif


/* Define the TX_RAND macro to the standard library function, if not already defined. */

#ifndef TX_RAND
#define TX_RAND() rand()
#endif


/* Check for MISRA compliance requirements. */

#ifdef TX_MISRA_ENABLE
Expand Down
14 changes: 13 additions & 1 deletion common/inc/tx_user_sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
/* PORT SPECIFIC C INFORMATION RELEASE */
/* */
/* tx_user.h PORTABLE C */
/* 6.1.11 */
/* 6.x */
/* */
/* AUTHOR */
/* */
Expand Down Expand Up @@ -62,6 +62,10 @@
/* optimized the definition of */
/* TX_TIMER_TICKS_PER_SECOND, */
/* resulting in version 6.1.11 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/

Expand Down Expand Up @@ -170,6 +174,14 @@
#define TX_ENABLE_STACK_CHECKING
*/

/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
pattern for stack filling. When the following is defined, ThreadX uses a random number
for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */

/*
#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
*/

/* Determine if preemption-threshold should be disabled. By default, preemption-threshold is
enabled. If the application does not use preemption-threshold, it may be disabled to reduce
code size and improve performance. */
Expand Down
9 changes: 8 additions & 1 deletion common/src/tx_initialize_kernel_enter.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* FUNCTION RELEASE */
/* */
/* _tx_initialize_kernel_enter PORTABLE C */
/* 6.1.11 */
/* 6.x */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
Expand Down Expand Up @@ -93,6 +93,10 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* 04-25-2022 Scott Larson Modified comment(s), */
/* added EPK initialization, */
/* resulting in version 6.1.11 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added random generator */
/* initialization, */
/* resulting in version 6.x */
/* */
/**************************************************************************/
VOID _tx_initialize_kernel_enter(VOID)
Expand Down Expand Up @@ -133,6 +137,9 @@ VOID _tx_initialize_kernel_enter(VOID)
later used to represent interrupt nesting. */
_tx_thread_system_state = TX_INITIALIZE_IN_PROGRESS;

/* Optional random number generator initialization. */
TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION

/* Call the application provided initialization function. Pass the
first available memory address to it. */
tx_application_define(_tx_initialize_unused_memory);
Expand Down
17 changes: 16 additions & 1 deletion common/src/tx_thread_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
/* FUNCTION RELEASE */
/* */
/* _tx_thread_create PORTABLE C */
/* 6.1.8 */
/* 6.x */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
Expand Down Expand Up @@ -88,6 +88,10 @@
/* supported TX_MISRA_ENABLE, */
/* 08-02-2021 Scott Larson Removed unneeded cast, */
/* resulting in version 6.1.8 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr, VOID (*entry_function)(ULONG id), ULONG entry_input,
Expand All @@ -109,6 +113,17 @@ ALIGN_TYPE updated_stack_start;
#endif

#ifndef TX_DISABLE_STACK_FILLING
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)

/* Initialize the stack fill value to a 8-bit random value. */
thread_ptr -> tx_thread_stack_fill_value = ((ULONG) TX_RAND()) & 0xFFUL;

/* Duplicate the random value in each of the 4 bytes of the stack fill value. */
thread_ptr -> tx_thread_stack_fill_value = thread_ptr -> tx_thread_stack_fill_value |
(thread_ptr -> tx_thread_stack_fill_value << 8) |
(thread_ptr -> tx_thread_stack_fill_value << 16) |
(thread_ptr -> tx_thread_stack_fill_value << 24);
#endif

/* Set the thread stack to a pattern prior to creating the initial
stack frame. This pattern is used by the stack checking routines
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_thread_create PORTABLE C */
/* 6.2.1 */
/* 6.x */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
Expand Down Expand Up @@ -94,6 +94,10 @@
/* 03-08-2023 Scott Larson Check module stack for */
/* overlap, */
/* resulting in version 6.2.1 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/
UINT _txm_module_manager_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
Expand Down Expand Up @@ -272,6 +276,17 @@ ULONG i;
}

#ifndef TX_DISABLE_STACK_FILLING
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)

/* Initialize the stack fill value to a 8-bit random value. */
thread_ptr -> tx_thread_stack_fill_value = ((ULONG) TX_RAND()) & 0xFFUL;

/* Duplicate the random value in each of the 4 bytes of the stack fill value. */
thread_ptr -> tx_thread_stack_fill_value = thread_ptr -> tx_thread_stack_fill_value |
(thread_ptr -> tx_thread_stack_fill_value << 8) |
(thread_ptr -> tx_thread_stack_fill_value << 16) |
(thread_ptr -> tx_thread_stack_fill_value << 24);
#endif

/* Set the thread stack to a pattern prior to creating the initial
stack frame. This pattern is used by the stack checking routines
Expand Down
31 changes: 30 additions & 1 deletion common_smp/inc/tx_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
/* APPLICATION INTERFACE DEFINITION RELEASE */
/* */
/* tx_api.h PORTABLE SMP */
/* 6.2.1 */
/* 6.x */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
Expand Down Expand Up @@ -85,6 +85,10 @@
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
/* update patch number, */
/* resulting in version 6.2.1 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/

Expand Down Expand Up @@ -172,7 +176,11 @@ extern "C" {
#define TX_NO_MESSAGES ((UINT) 0)
#define TX_EMPTY ((ULONG) 0)
#define TX_CLEAR_ID ((ULONG) 0)
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
#define TX_STACK_FILL (thread_ptr -> tx_thread_stack_fill_value)
#else
#define TX_STACK_FILL ((ULONG) 0xEFEFEFEFUL)
#endif


/* Thread execution state values. */
Expand Down Expand Up @@ -639,6 +647,12 @@ typedef struct TX_THREAD_STRUCT
cleanup routine executes. */
ULONG tx_thread_suspension_sequence;

#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)

/* Define the random stack fill number. This can be used to detect stack overflow. */
ULONG tx_thread_stack_fill_value;
#endif

/* Define the user extension field. This typically is defined
to white space, but some ports of ThreadX may need to have
additional fields in the thread control block. This is
Expand Down Expand Up @@ -1886,6 +1900,21 @@ UINT _tx_trace_interrupt_control(UINT new_posture);
#endif


/* Add a default macro that can be re-defined in tx_port.h to add processing to the initialize random number generator.
By default, this is simply defined as whitespace. */

#ifndef TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION
#define TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION
#endif


/* Define the TX_RAND macro to the standard library function, if not already defined. */

#ifndef TX_RAND
#define TX_RAND() rand()
#endif


/* Check for MISRA compliance requirements. */

#ifdef TX_MISRA_ENABLE
Expand Down
14 changes: 13 additions & 1 deletion common_smp/inc/tx_user_sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
/* PORT SPECIFIC C INFORMATION RELEASE */
/* */
/* tx_user.h PORTABLE C */
/* 6.1.11 */
/* 6.x */
/* */
/* AUTHOR */
/* */
Expand Down Expand Up @@ -62,6 +62,10 @@
/* optimized the definition of */
/* TX_TIMER_TICKS_PER_SECOND, */
/* resulting in version 6.1.11 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added option for random */
/* number stack filling, */
/* resulting in version 6.x */
/* */
/**************************************************************************/

Expand Down Expand Up @@ -170,6 +174,14 @@
#define TX_ENABLE_STACK_CHECKING
*/

/* Determine if random number is used for stack filling. By default, ThreadX uses a fixed
pattern for stack filling. When the following is defined, ThreadX uses a random number
for stack filling. This is effective only when TX_ENABLE_STACK_CHECKING is defined. */

/*
#define TX_ENABLE_RANDOM_NUMBER_STACK_FILLING
*/

/* Determine if preemption-threshold should be disabled. By default, preemption-threshold is
enabled. If the application does not use preemption-threshold, it may be disabled to reduce
code size and improve performance. */
Expand Down
11 changes: 9 additions & 2 deletions common_smp/src/tx_initialize_kernel_enter.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* FUNCTION RELEASE */
/* */
/* _tx_initialize_kernel_enter PORTABLE SMP */
/* 6.1 */
/* 6.x */
/* AUTHOR */
/* */
/* William E. Lamie, Microsoft Corporation */
Expand Down Expand Up @@ -87,7 +87,11 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
/* */
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* 09-30-2020 William E. Lamie Initial Version 6.1 */
/* xx-xx-xxxx Xiuwen Cai Modified comment(s), */
/* added random generator */
/* initialization, */
/* resulting in version 6.x */
/* */
/**************************************************************************/
VOID _tx_initialize_kernel_enter(VOID)
Expand Down Expand Up @@ -134,6 +138,9 @@ ULONG other_core_status, i;
later used to represent interrupt nesting. */
_tx_thread_system_state[0] = TX_INITIALIZE_IN_PROGRESS;

/* Optional random number generator initialization. */
TX_INITIALIZE_RANDOM_GENERATOR_INITIALIZATION

/* Call the application provided initialization function. Pass the
first available memory address to it. */
tx_application_define(_tx_initialize_unused_memory);
Expand Down
Loading