mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2025-11-16 04:24:48 +00:00
Add random number stack filling option. (#257)
Co-authored-by: TiejunZhou <50469179+TiejunMS@users.noreply.github.com>
This commit is contained in:
@@ -26,7 +26,7 @@
|
|||||||
/* APPLICATION INTERFACE DEFINITION RELEASE */
|
/* APPLICATION INTERFACE DEFINITION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* tx_api.h PORTABLE C */
|
/* tx_api.h PORTABLE C */
|
||||||
/* 6.2.1 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -97,6 +97,10 @@
|
|||||||
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
|
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
|
||||||
/* update patch number, */
|
/* update patch number, */
|
||||||
/* resulting in version 6.2.1 */
|
/* 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 */
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
@@ -171,7 +175,11 @@ extern "C" {
|
|||||||
#define TX_NO_MESSAGES ((UINT) 0)
|
#define TX_NO_MESSAGES ((UINT) 0)
|
||||||
#define TX_EMPTY ((ULONG) 0)
|
#define TX_EMPTY ((ULONG) 0)
|
||||||
#define TX_CLEAR_ID ((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)
|
#define TX_STACK_FILL ((ULONG) 0xEFEFEFEFUL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Thread execution state values. */
|
/* Thread execution state values. */
|
||||||
@@ -618,6 +626,12 @@ typedef struct TX_THREAD_STRUCT
|
|||||||
cleanup routine executes. */
|
cleanup routine executes. */
|
||||||
ULONG tx_thread_suspension_sequence;
|
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
|
/* Define the user extension field. This typically is defined
|
||||||
to white space, but some ports of ThreadX may need to have
|
to white space, but some ports of ThreadX may need to have
|
||||||
additional fields in the thread control block. This is
|
additional fields in the thread control block. This is
|
||||||
@@ -1892,6 +1906,21 @@ UINT _tx_trace_interrupt_control(UINT new_posture);
|
|||||||
#endif
|
#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. */
|
/* Check for MISRA compliance requirements. */
|
||||||
|
|
||||||
#ifdef TX_MISRA_ENABLE
|
#ifdef TX_MISRA_ENABLE
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
/* PORT SPECIFIC C INFORMATION RELEASE */
|
/* PORT SPECIFIC C INFORMATION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* tx_user.h PORTABLE C */
|
/* tx_user.h PORTABLE C */
|
||||||
/* 6.1.11 */
|
/* 6.x */
|
||||||
/* */
|
/* */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
@@ -62,6 +62,10 @@
|
|||||||
/* optimized the definition of */
|
/* optimized the definition of */
|
||||||
/* TX_TIMER_TICKS_PER_SECOND, */
|
/* TX_TIMER_TICKS_PER_SECOND, */
|
||||||
/* resulting in version 6.1.11 */
|
/* 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 */
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
@@ -170,6 +174,14 @@
|
|||||||
#define TX_ENABLE_STACK_CHECKING
|
#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
|
/* 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
|
enabled. If the application does not use preemption-threshold, it may be disabled to reduce
|
||||||
code size and improve performance. */
|
code size and improve performance. */
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
|
|||||||
/* FUNCTION RELEASE */
|
/* FUNCTION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* _tx_initialize_kernel_enter PORTABLE C */
|
/* _tx_initialize_kernel_enter PORTABLE C */
|
||||||
/* 6.1.11 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -93,6 +93,10 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
|
|||||||
/* 04-25-2022 Scott Larson Modified comment(s), */
|
/* 04-25-2022 Scott Larson Modified comment(s), */
|
||||||
/* added EPK initialization, */
|
/* added EPK initialization, */
|
||||||
/* resulting in version 6.1.11 */
|
/* 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)
|
VOID _tx_initialize_kernel_enter(VOID)
|
||||||
@@ -133,6 +137,9 @@ VOID _tx_initialize_kernel_enter(VOID)
|
|||||||
later used to represent interrupt nesting. */
|
later used to represent interrupt nesting. */
|
||||||
_tx_thread_system_state = TX_INITIALIZE_IN_PROGRESS;
|
_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
|
/* Call the application provided initialization function. Pass the
|
||||||
first available memory address to it. */
|
first available memory address to it. */
|
||||||
tx_application_define(_tx_initialize_unused_memory);
|
tx_application_define(_tx_initialize_unused_memory);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
/* FUNCTION RELEASE */
|
/* FUNCTION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* _tx_thread_create PORTABLE C */
|
/* _tx_thread_create PORTABLE C */
|
||||||
/* 6.1.8 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -88,6 +88,10 @@
|
|||||||
/* supported TX_MISRA_ENABLE, */
|
/* supported TX_MISRA_ENABLE, */
|
||||||
/* 08-02-2021 Scott Larson Removed unneeded cast, */
|
/* 08-02-2021 Scott Larson Removed unneeded cast, */
|
||||||
/* resulting in version 6.1.8 */
|
/* 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,
|
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr, VOID (*entry_function)(ULONG id), ULONG entry_input,
|
||||||
@@ -109,6 +113,17 @@ ALIGN_TYPE updated_stack_start;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef TX_DISABLE_STACK_FILLING
|
#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
|
/* Set the thread stack to a pattern prior to creating the initial
|
||||||
stack frame. This pattern is used by the stack checking routines
|
stack frame. This pattern is used by the stack checking routines
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
/* FUNCTION RELEASE */
|
/* FUNCTION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* _txm_module_manager_thread_create PORTABLE C */
|
/* _txm_module_manager_thread_create PORTABLE C */
|
||||||
/* 6.2.1 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* Scott Larson, Microsoft Corporation */
|
/* Scott Larson, Microsoft Corporation */
|
||||||
@@ -94,6 +94,10 @@
|
|||||||
/* 03-08-2023 Scott Larson Check module stack for */
|
/* 03-08-2023 Scott Larson Check module stack for */
|
||||||
/* overlap, */
|
/* overlap, */
|
||||||
/* resulting in version 6.2.1 */
|
/* 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,
|
UINT _txm_module_manager_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
|
||||||
@@ -272,6 +276,17 @@ ULONG i;
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef TX_DISABLE_STACK_FILLING
|
#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
|
/* Set the thread stack to a pattern prior to creating the initial
|
||||||
stack frame. This pattern is used by the stack checking routines
|
stack frame. This pattern is used by the stack checking routines
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
/* APPLICATION INTERFACE DEFINITION RELEASE */
|
/* APPLICATION INTERFACE DEFINITION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* tx_api.h PORTABLE SMP */
|
/* tx_api.h PORTABLE SMP */
|
||||||
/* 6.2.1 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -85,6 +85,10 @@
|
|||||||
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
|
/* 03-08-2023 Tiejun Zhou Modified comment(s), */
|
||||||
/* update patch number, */
|
/* update patch number, */
|
||||||
/* resulting in version 6.2.1 */
|
/* 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 */
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
@@ -172,7 +176,11 @@ extern "C" {
|
|||||||
#define TX_NO_MESSAGES ((UINT) 0)
|
#define TX_NO_MESSAGES ((UINT) 0)
|
||||||
#define TX_EMPTY ((ULONG) 0)
|
#define TX_EMPTY ((ULONG) 0)
|
||||||
#define TX_CLEAR_ID ((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)
|
#define TX_STACK_FILL ((ULONG) 0xEFEFEFEFUL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Thread execution state values. */
|
/* Thread execution state values. */
|
||||||
@@ -639,6 +647,12 @@ typedef struct TX_THREAD_STRUCT
|
|||||||
cleanup routine executes. */
|
cleanup routine executes. */
|
||||||
ULONG tx_thread_suspension_sequence;
|
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
|
/* Define the user extension field. This typically is defined
|
||||||
to white space, but some ports of ThreadX may need to have
|
to white space, but some ports of ThreadX may need to have
|
||||||
additional fields in the thread control block. This is
|
additional fields in the thread control block. This is
|
||||||
@@ -1886,6 +1900,21 @@ UINT _tx_trace_interrupt_control(UINT new_posture);
|
|||||||
#endif
|
#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. */
|
/* Check for MISRA compliance requirements. */
|
||||||
|
|
||||||
#ifdef TX_MISRA_ENABLE
|
#ifdef TX_MISRA_ENABLE
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
/* PORT SPECIFIC C INFORMATION RELEASE */
|
/* PORT SPECIFIC C INFORMATION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* tx_user.h PORTABLE C */
|
/* tx_user.h PORTABLE C */
|
||||||
/* 6.1.11 */
|
/* 6.x */
|
||||||
/* */
|
/* */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
@@ -62,6 +62,10 @@
|
|||||||
/* optimized the definition of */
|
/* optimized the definition of */
|
||||||
/* TX_TIMER_TICKS_PER_SECOND, */
|
/* TX_TIMER_TICKS_PER_SECOND, */
|
||||||
/* resulting in version 6.1.11 */
|
/* 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 */
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
@@ -170,6 +174,14 @@
|
|||||||
#define TX_ENABLE_STACK_CHECKING
|
#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
|
/* 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
|
enabled. If the application does not use preemption-threshold, it may be disabled to reduce
|
||||||
code size and improve performance. */
|
code size and improve performance. */
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
|
|||||||
/* FUNCTION RELEASE */
|
/* FUNCTION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* _tx_initialize_kernel_enter PORTABLE SMP */
|
/* _tx_initialize_kernel_enter PORTABLE SMP */
|
||||||
/* 6.1 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -87,7 +87,11 @@ TX_SAFETY_CRITICAL_EXCEPTION_HANDLER
|
|||||||
/* */
|
/* */
|
||||||
/* DATE NAME DESCRIPTION */
|
/* 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)
|
VOID _tx_initialize_kernel_enter(VOID)
|
||||||
@@ -134,6 +138,9 @@ ULONG other_core_status, i;
|
|||||||
later used to represent interrupt nesting. */
|
later used to represent interrupt nesting. */
|
||||||
_tx_thread_system_state[0] = TX_INITIALIZE_IN_PROGRESS;
|
_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
|
/* Call the application provided initialization function. Pass the
|
||||||
first available memory address to it. */
|
first available memory address to it. */
|
||||||
tx_application_define(_tx_initialize_unused_memory);
|
tx_application_define(_tx_initialize_unused_memory);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
/* FUNCTION RELEASE */
|
/* FUNCTION RELEASE */
|
||||||
/* */
|
/* */
|
||||||
/* _tx_thread_create PORTABLE SMP */
|
/* _tx_thread_create PORTABLE SMP */
|
||||||
/* 6.2.0 */
|
/* 6.x */
|
||||||
/* AUTHOR */
|
/* AUTHOR */
|
||||||
/* */
|
/* */
|
||||||
/* William E. Lamie, Microsoft Corporation */
|
/* William E. Lamie, Microsoft Corporation */
|
||||||
@@ -89,6 +89,10 @@
|
|||||||
/* restore interrupts at end */
|
/* restore interrupts at end */
|
||||||
/* of if block, */
|
/* of if block, */
|
||||||
/* resulting in version 6.2.0 */
|
/* resulting in version 6.2.0 */
|
||||||
|
/* 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,
|
UINT _tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
|
||||||
@@ -110,6 +114,17 @@ ALIGN_TYPE updated_stack_start;
|
|||||||
|
|
||||||
|
|
||||||
#ifndef TX_DISABLE_STACK_FILLING
|
#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
|
/* Set the thread stack to a pattern prior to creating the initial
|
||||||
stack frame. This pattern is used by the stack checking routines
|
stack frame. This pattern is used by the stack checking routines
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ project(threadx_smp_test LANGUAGES C)
|
|||||||
|
|
||||||
# Set build configurations
|
# Set build configurations
|
||||||
set(BUILD_CONFIGURATIONS default_build_coverage
|
set(BUILD_CONFIGURATIONS default_build_coverage
|
||||||
disable_notify_callbacks_build stack_checking_build
|
disable_notify_callbacks_build stack_checking_build stack_checking_rand_fill_build
|
||||||
trace_build)
|
trace_build)
|
||||||
set(CMAKE_CONFIGURATION_TYPES
|
set(CMAKE_CONFIGURATION_TYPES
|
||||||
${BUILD_CONFIGURATIONS}
|
${BUILD_CONFIGURATIONS}
|
||||||
@@ -26,6 +26,7 @@ message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
|
|||||||
set(default_build_coverage "")
|
set(default_build_coverage "")
|
||||||
set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS)
|
set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS)
|
||||||
set(stack_checking_build -DTX_ENABLE_STACK_CHECKING)
|
set(stack_checking_build -DTX_ENABLE_STACK_CHECKING)
|
||||||
|
set(stack_checking_rand_fill_build -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING)
|
||||||
set(trace_build -DTX_ENABLE_EVENT_TRACE)
|
set(trace_build -DTX_ENABLE_EVENT_TRACE)
|
||||||
|
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
|
|||||||
@@ -519,6 +519,9 @@ UINT status;
|
|||||||
ULONG flags;
|
ULONG flags;
|
||||||
ULONG temp;
|
ULONG temp;
|
||||||
UINT i, j;
|
UINT i, j;
|
||||||
|
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
|
||||||
|
TX_THREAD *thread_ptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the test error/success counters. */
|
/* Initialize the test error/success counters. */
|
||||||
@@ -1072,6 +1075,15 @@ UINT i, j;
|
|||||||
|
|
||||||
/* Make a fake thread with a fake stack. */
|
/* Make a fake thread with a fake stack. */
|
||||||
test_thread2.tx_thread_id = TX_THREAD_ID;
|
test_thread2.tx_thread_id = TX_THREAD_ID;
|
||||||
|
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
|
||||||
|
|
||||||
|
/* Set the thread pointer. */
|
||||||
|
thread_ptr = &(test_thread2);
|
||||||
|
|
||||||
|
/* Initialize the stack fill value. */
|
||||||
|
thread_ptr -> tx_thread_stack_fill_value = (0xFEFEFEFEUL);
|
||||||
|
|
||||||
|
#endif
|
||||||
for (i = 0; i < (sizeof(test_thread2_stack)/sizeof(ULONG)); i++)
|
for (i = 0; i < (sizeof(test_thread2_stack)/sizeof(ULONG)); i++)
|
||||||
{
|
{
|
||||||
/* Set the fake thread stack to the fill pattern. */
|
/* Set the fake thread stack to the fill pattern. */
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ project(threadx_test LANGUAGES C)
|
|||||||
|
|
||||||
# Set build configurations
|
# Set build configurations
|
||||||
set(BUILD_CONFIGURATIONS default_build_coverage disable_notify_callbacks_build
|
set(BUILD_CONFIGURATIONS default_build_coverage disable_notify_callbacks_build
|
||||||
stack_checking_build trace_build)
|
stack_checking_build stack_checking_rand_fill_build trace_build)
|
||||||
set(CMAKE_CONFIGURATION_TYPES
|
set(CMAKE_CONFIGURATION_TYPES
|
||||||
${BUILD_CONFIGURATIONS}
|
${BUILD_CONFIGURATIONS}
|
||||||
CACHE STRING "list of supported configuration types" FORCE)
|
CACHE STRING "list of supported configuration types" FORCE)
|
||||||
@@ -25,6 +25,7 @@ message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.")
|
|||||||
set(default_build_coverage "")
|
set(default_build_coverage "")
|
||||||
set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS)
|
set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS)
|
||||||
set(stack_checking_build -DTX_ENABLE_STACK_CHECKING)
|
set(stack_checking_build -DTX_ENABLE_STACK_CHECKING)
|
||||||
|
set(stack_checking_rand_fill_build -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING)
|
||||||
set(trace_build -DTX_ENABLE_EVENT_TRACE)
|
set(trace_build -DTX_ENABLE_EVENT_TRACE)
|
||||||
|
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
|
|||||||
@@ -477,6 +477,9 @@ UINT status;
|
|||||||
ULONG flags;
|
ULONG flags;
|
||||||
ULONG temp;
|
ULONG temp;
|
||||||
UINT i, j;
|
UINT i, j;
|
||||||
|
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
|
||||||
|
TX_THREAD *thread_ptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the test error/success counters. */
|
/* Initialize the test error/success counters. */
|
||||||
@@ -946,6 +949,15 @@ UINT i, j;
|
|||||||
|
|
||||||
/* Make a fake thread with a fake stack. */
|
/* Make a fake thread with a fake stack. */
|
||||||
test_thread2.tx_thread_id = TX_THREAD_ID;
|
test_thread2.tx_thread_id = TX_THREAD_ID;
|
||||||
|
#if defined(TX_ENABLE_RANDOM_NUMBER_STACK_FILLING) && defined(TX_ENABLE_STACK_CHECKING)
|
||||||
|
|
||||||
|
/* Set the thread pointer. */
|
||||||
|
thread_ptr = &(test_thread2);
|
||||||
|
|
||||||
|
/* Initialize the stack fill value. */
|
||||||
|
thread_ptr -> tx_thread_stack_fill_value = (0xFEFEFEFEUL);
|
||||||
|
|
||||||
|
#endif
|
||||||
for (i = 0; i < (sizeof(test_thread2_stack)/sizeof(ULONG)); i++)
|
for (i = 0; i < (sizeof(test_thread2_stack)/sizeof(ULONG)); i++)
|
||||||
{
|
{
|
||||||
/* Set the fake thread stack to the fill pattern. */
|
/* Set the fake thread stack to the fill pattern. */
|
||||||
|
|||||||
Reference in New Issue
Block a user