Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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
214 changes: 214 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion common/inc/tx_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,9 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
#define THREADX_MINOR_VERSION 4
#define THREADX_PATCH_VERSION 2
#define THREADX_PATCH_VERSION 3
#define THREADX_BUILD_VERSION 202503
#define THREADX_HOTFIX_VERSION ''

/* Define the following symbol for backward compatibility */
#define EL_PRODUCT_THREADX
Expand Down Expand Up @@ -328,6 +330,12 @@ extern "C" {
#define TX_TIMER_TICKS_PER_SECOND (100UL)
#endif

/* Define the default maximum message size in a queue. The default value is TX_16_ULONG, but may
be customized in tx_user.h or as a compilation option. */

#ifndef TX_QUEUE_MESSAGE_MAX_SIZE
#define TX_QUEUE_MESSAGE_MAX_SIZE TX_16_ULONG
#endif

/* Event numbers 0 through 4095 are reserved by Azure RTOS. Specific event assignments are:

Expand Down
2 changes: 1 addition & 1 deletion common/inc/tx_thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@
_tx_thread_stack_error_handler((thread_ptr)); \
TX_DISABLE \
} \
if (*(((ULONG *) (thread_ptr) -> tx_thread_stack_highest_ptr) - 1) != TX_STACK_FILL) \
else if (*(((ULONG *) (thread_ptr) -> tx_thread_stack_highest_ptr) - 1) != TX_STACK_FILL) \
{ \
TX_RESTORE \
_tx_thread_stack_analyze((thread_ptr)); \
Expand Down
7 changes: 7 additions & 0 deletions common/inc/tx_user_sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@
#define TX_TIMER_THREAD_PRIORITY ????
*/

/* Define the maximum size of a message in the a queue. the Default value is TX_ULONG_16.
the new value must be a multiple of ULONG. */

/*
#define TX_QUEUE_MESSAGE_MAX_SIZE TX_ULONG_16
*/

/* Define the common timer tick reference for use by other middleware components. The default
value is 10ms (i.e. 100 ticks, defined in tx_api.h), but may be replaced by a port-specific
version in tx_port.h or here.
Expand Down
4 changes: 2 additions & 2 deletions common/src/txe_queue_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ TX_THREAD *thread_ptr;
status = TX_SIZE_ERROR;
}

/* Check for an invalid message size - greater than 16. */
else if (message_size > TX_16_ULONG)
/* Check for an invalid message size - greater than TX_QUEUE_MESSAGE_MAX_SIZE 16 by default. */
else if (message_size > TX_QUEUE_MESSAGE_MAX_SIZE)
{

/* Invalid message size specified. */
Expand Down
13 changes: 12 additions & 1 deletion common_modules/module_manager/inc/txm_module_manager_dispatch.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2025 Eclipse ThreadX Contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
Expand Down Expand Up @@ -2389,6 +2390,11 @@ static ALIGN_TYPE _txm_module_manager_tx_thread_preemption_change_dispatch(TXM_M

ALIGN_TYPE return_value;

if (param_1 < module_instance -> txm_module_instance_maximum_priority)
{
return(TX_THRESH_ERROR);
}

if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
Expand Down Expand Up @@ -2418,6 +2424,11 @@ static ALIGN_TYPE _txm_module_manager_tx_thread_priority_change_dispatch(TXM_MOD

ALIGN_TYPE return_value;

if (param_1 < module_instance -> txm_module_instance_maximum_priority)
{
return(TX_PRIORITY_ERROR);
}

if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION)
{
if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD)))
Expand Down
17 changes: 9 additions & 8 deletions common_modules/module_manager/inc/txm_module_manager_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
/* COMPONENT DEFINITION RELEASE */
/* */
/* txm_module_manager_util.h PORTABLE C */
/* 6.3.0 */
/* 6.4.3 */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
Expand All @@ -46,6 +46,10 @@
/* 10-31-2023 Tiejun Zhou Modified comment(s) and */
/* improved object check, */
/* resulting in version 6.3.0 */
/* xx-xx-2025 William E. Lamie Modified comment(s) and */
/* improved object pointer use */
/* and creation checking, */
/* resulting in version 6.4.3 */
/* */
/**************************************************************************/

Expand Down Expand Up @@ -102,16 +106,11 @@

/* Kernel objects should be outside the module at the very least. */
#define TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, obj_ptr, obj_size) \
(TXM_MODULE_MANAGER_ENSURE_OUTSIDE_MODULE(module_instance, obj_ptr, obj_size) || \
(_txm_module_manager_created_object_check(module_instance, (void *)obj_ptr) == TX_FALSE) || \
((void *) (obj_ptr) == TX_NULL))
(_txm_module_manager_param_check_object_for_use(module_instance, obj_ptr, obj_size))

/* When creating an object, the object must be inside the object pool. */
#define TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_CREATION(module_instance, obj_ptr, obj_size) \
((TXM_MODULE_MANAGER_ENSURE_INSIDE_OBJ_POOL(module_instance, obj_ptr, obj_size) && \
(_txm_module_manager_object_size_check(obj_ptr, obj_size) == TX_SUCCESS)) || \
(_txm_module_manager_created_object_check(module_instance, (void *)obj_ptr) == TX_FALSE) || \
((void *) (obj_ptr) == TX_NULL))
(_txm_module_manager_param_check_object_for_creation(module_instance, obj_ptr, obj_size))

/* Strings we dereference can be in RW/RO/Shared areas. */
#define TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING(module_instance, string_ptr) \
Expand All @@ -136,6 +135,8 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_inst
UINT _txm_module_manager_object_size_check(ALIGN_TYPE object_ptr, ULONG object_size);
UINT _txm_module_manager_object_name_compare(CHAR *object_name1, UINT object_name1_length, CHAR *object_name2);
UCHAR _txm_module_manager_created_object_check(TXM_MODULE_INSTANCE *module_instance, void *object_ptr);
UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size);
UINT _txm_module_manager_param_check_object_for_use(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size);
UINT _txm_module_manager_util_code_allocation_size_and_alignment_get(TXM_MODULE_PREAMBLE *module_preamble, ULONG *code_alignment_dest, ULONG *code_allocation_size_dest);

#endif
170 changes: 161 additions & 9 deletions common_modules/module_manager/src/txm_module_manager_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_instan
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_created_object_check PORTABLE C */
/* 6.1 */
/* 6.1x */
/* AUTHOR */
/* */
/* Scott Larson, Microsoft Corporation */
Expand Down Expand Up @@ -137,22 +137,20 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_instan
/* DATE NAME DESCRIPTION */
/* */
/* 09-30-2020 Scott Larson Initial Version 6.1 */
/* xx-xx-2025 William E. Lamie Modified comment(s), and */
/* removed module local memory */
/* check, resulting in */
/* version 6.1x */
/* */
/**************************************************************************/
UCHAR _txm_module_manager_created_object_check(TXM_MODULE_INSTANCE *module_instance, VOID *object_ptr)
{

TXM_MODULE_ALLOCATED_OBJECT *allocated_object_ptr;

/* Determine if the socket control block is inside the module. */
if ( (((CHAR *) object_ptr) >= ((CHAR *) module_instance -> txm_module_instance_data_start)) &&
(((CHAR *) object_ptr) < ((CHAR *) module_instance -> txm_module_instance_data_end)))
{
return TX_TRUE;
}

/* Determine if this object control block was allocated by this module instance. */
else if (_txm_module_manager_object_pool_created)
/* Determine if the object pool has been created. */
if (_txm_module_manager_object_pool_created)
{

/* Determine if the current object is from the pool of dynamically allocated objects. */
Expand Down Expand Up @@ -336,6 +334,158 @@ CHAR object_name_char;
}


/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_param_check_object_for_creation PORTABLE C */
/* 6.4.3 */
/* AUTHOR */
/* */
/* William E. Lamie, RTOSX */
/* */
/* DESCRIPTION */
/* */
/* This function checks to make sure the object pointer for one of the */
/* creation APIs is valid. */
/* */
/* INPUT */
/* */
/* module_instance Requesting module instance pointer*/
/* object_ptr Address of object memory area */
/* ojbect_size Size of object memory area */
/* */
/* OUTPUT */
/* */
/* TX_TRUE Valid object pointer */
/* TX_FALSE Invalid object pointer */
/* */
/* CALLS */
/* */
/* None */
/* */
/* CALLED BY */
/* */
/* txm_module_manager_* Module manager functions */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* xx-xx-2025 William E. Lamie Initial Version 6.4.3 */
/* */
/**************************************************************************/
UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size)
{

/* Determine if the object pointer is NULL. */
if ((void *) object_ptr == TX_NULL)
{

/* Object pointer is NULL, which is invalid. */
return(TX_FALSE);
}

/* Determine if the object pointer is inside the module object pool. */
if (TXM_MODULE_MANAGER_ENSURE_INSIDE_OBJ_POOL(module_instance, object_ptr, object_size) == TX_FALSE)
{

/* Object pointer is not inside the object pool, which is invalid. */
return(TX_FALSE);
}

/* Determine if the object size is correct. */
if (_txm_module_manager_object_size_check(object_ptr, object_size) != TX_SUCCESS)
{

/* Object size is invalid. */
return(TX_FALSE);
}

/* Determine if the ojbect has already been created. */
if (_txm_module_manager_created_object_check(module_instance, (void *) object_ptr) == TX_FALSE)
{

/* Object has already been created, which is invalid. */
return(TX_FALSE);
}

/* Everything is okay with the object, return TX_TRUE. */
return(TX_TRUE);
}


/**************************************************************************/
/* */
/* FUNCTION RELEASE */
/* */
/* _txm_module_manager_param_check_object_for_use PORTABLE C */
/* 6.4.3 */
/* AUTHOR */
/* */
/* William E. Lamie, RTOSX */
/* */
/* DESCRIPTION */
/* */
/* This function checks to make sure the object pointer is valid. */
/* */
/* INPUT */
/* */
/* module_instance Requesting module instance pointer*/
/* object_ptr Address of object memory area */
/* ojbect_size Size of object memory area */
/* */
/* OUTPUT */
/* */
/* TX_TRUE Valid object pointer */
/* TX_FALSE Invalid object pointer */
/* */
/* CALLS */
/* */
/* None */
/* */
/* CALLED BY */
/* */
/* txm_module_manager_* Module manager functions */
/* */
/* RELEASE HISTORY */
/* */
/* DATE NAME DESCRIPTION */
/* */
/* xx-xx-2025 William E. Lamie Initial Version 6.4.3 */
/* */
/**************************************************************************/
UINT _txm_module_manager_param_check_object_for_use(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size)
{

/* Determine if the object pointer is NULL. */
if ((void *) object_ptr == TX_NULL)
{

/* Object pointer is NULL, which is invalid. */
return(TX_FALSE);
}

/* Determine if the object pointer is inside the module object pool. */
if (TXM_MODULE_MANAGER_ENSURE_OUTSIDE_MODULE(module_instance, object_ptr, object_size) == TX_FALSE)
{

/* Object pointer is not inside the object pool, which is invalid. */
return(TX_FALSE);
}

/* Define application-specific object memory check. */
#ifdef TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_CHECK

/* Bring in the application-spefic objeft memory check, defined by the user. */
TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_CHECK
#endif /* TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_ENABLE */

/* Everything is okay with the object, return TX_TRUE. */
return(TX_TRUE);
}


/**************************************************************************/
/* */
/* FUNCTION RELEASE */
Expand Down Expand Up @@ -414,3 +564,5 @@ ULONG data_alignment_ignored;
/* Return success. */
return(TX_SUCCESS);
}


5 changes: 4 additions & 1 deletion common_smp/inc/tx_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,10 @@ extern "C" {
#define AZURE_RTOS_THREADX
#define THREADX_MAJOR_VERSION 6
#define THREADX_MINOR_VERSION 4
#define THREADX_PATCH_VERSION 2
#define THREADX_PATCH_VERSION 3
#define THREADX_BUILD_VERSION 202503
#define THREADX_HOTFIX_VERSION ''


/* Define the following symbol for backward compatibility */
#define EL_PRODUCT_THREADX
Expand Down
4 changes: 2 additions & 2 deletions common_smp/src/txe_queue_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ TX_THREAD *thread_ptr;
status = TX_SIZE_ERROR;
}

/* Check for an invalid message size - greater than 16. */
else if (message_size > TX_16_ULONG)
/* Check for an invalid message sizegreater than TX_QUEUE_MESSAGE_MAX_SIZE 16 by default. */
else if (message_size > TX_QUEUE_MESSAGE_MAX_SIZE)
{

/* Invalid message size specified. */
Expand Down
2 changes: 1 addition & 1 deletion ports/arm11/iar/src/tx_iar.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ void __iar_Initlocks(void);

#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT

#include <DLib_threads.h>
#include <DLib_Threads.h>


void * __aeabi_read_tp();
Expand Down
2 changes: 1 addition & 1 deletion ports/arm9/iar/src/tx_iar.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ void __iar_Initlocks(void);

#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT

#include <DLib_threads.h>
#include <DLib_Threads.h>


void * __aeabi_read_tp();
Expand Down
Loading
Loading