From a6a6a034d6ac226c8f25bd349c1818dbe956d625 Mon Sep 17 00:00:00 2001 From: Eyck-Alexander Jentzsch Date: Thu, 2 Apr 2026 11:16:02 +0200 Subject: [PATCH] removes convoluted generation of offsets Ass ULONG is now 8 bytes on RV64, the SMP offset is the only one left, harcoding it as a magic number is simpler --- port/threadx_smp/CMakeLists.txt | 19 ------ .../threadx_smp/cmake/ThreadXSmpOffsets.cmake | 67 ------------------- port/threadx_smp/inc/tx_port.h | 32 ++++----- port/threadx_smp/src/tx_asm_offsets.c | 12 ---- 4 files changed, 16 insertions(+), 114 deletions(-) delete mode 100644 port/threadx_smp/cmake/ThreadXSmpOffsets.cmake delete mode 100644 port/threadx_smp/src/tx_asm_offsets.c diff --git a/port/threadx_smp/CMakeLists.txt b/port/threadx_smp/CMakeLists.txt index 1f2c4bd..6095b7e 100644 --- a/port/threadx_smp/CMakeLists.txt +++ b/port/threadx_smp/CMakeLists.txt @@ -1,8 +1,6 @@ cmake_minimum_required(VERSION 3.24) project(smp_demo LANGUAGES C ASM) -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ThreadXSmpOffsets.cmake) - set(THREADX_COMMON_SMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../third-party/threadx/common_smp) if(NOT EXISTS "${THREADX_COMMON_SMP_DIR}") message(FATAL_ERROR "could not find ThreadX SMP sources, is the submodule checked out?") @@ -31,19 +29,6 @@ set(THREADX_SMP_CUSTOM_SRC src/tx_timer_interrupt.c ) -threadx_smp_add_offsets( - TARGET threadx_smp_offsets - OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated - SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/tx_asm_offsets.c - INCLUDE_DIRS - ${THREADX_COMMON_SMP_DIR}/inc - ${THREADX_SMP_CUSTOM_INC} - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/inc/tx_port.h - ${THREADX_COMMON_SMP_DIR}/inc/tx_api.h - OUT_INCLUDE_DIR THREADX_SMP_GENERATED_INC_DIR -) - set(THREADX_SMP_SOURCES ${THREADX_COMMON_SMP_DIR}/src/tx_block_allocate.c ${THREADX_COMMON_SMP_DIR}/src/tx_block_pool_cleanup.c @@ -250,8 +235,4 @@ target_include_directories(threadx_smp PUBLIC ${THREADX_COMMON_SMP_DIR}/inc ${THREADX_SMP_CUSTOM_INC} ) -target_include_directories(threadx_smp PRIVATE - ${THREADX_SMP_GENERATED_INC_DIR} -) target_compile_definitions(threadx_smp PRIVATE TX_QUEUE_MESSAGE_MAX_SIZE=16) #This is addressed in PR #503 -add_dependencies(threadx_smp threadx_smp_offsets) diff --git a/port/threadx_smp/cmake/ThreadXSmpOffsets.cmake b/port/threadx_smp/cmake/ThreadXSmpOffsets.cmake deleted file mode 100644 index 1de4447..0000000 --- a/port/threadx_smp/cmake/ThreadXSmpOffsets.cmake +++ /dev/null @@ -1,67 +0,0 @@ -function(threadx_smp_add_offsets) - set(options) - set(oneValueArgs TARGET OUTPUT_DIR SOURCE OUT_INCLUDE_DIR) - set(multiValueArgs INCLUDE_DIRS COMPILE_DEFINITIONS DEPENDS) - cmake_parse_arguments(THREADX_SMP_OFFSETS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT THREADX_SMP_OFFSETS_TARGET) - message(FATAL_ERROR "threadx_smp_add_offsets requires TARGET") - endif() - - if(NOT THREADX_SMP_OFFSETS_OUTPUT_DIR) - message(FATAL_ERROR "threadx_smp_add_offsets requires OUTPUT_DIR") - endif() - - if(NOT THREADX_SMP_OFFSETS_SOURCE) - message(FATAL_ERROR "threadx_smp_add_offsets requires SOURCE") - endif() - - if(NOT THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR) - message(FATAL_ERROR "threadx_smp_add_offsets requires OUT_INCLUDE_DIR") - endif() - - set(threadx_smp_generate_script "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/GenerateAsmOffsets.cmake") - set(threadx_smp_offset_asm "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.s") - set(threadx_smp_offset_inc "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.inc") - - set(threadx_smp_offset_include_args ${THREADX_SMP_OFFSETS_INCLUDE_DIRS}) - list(TRANSFORM threadx_smp_offset_include_args PREPEND -I) - - set(threadx_smp_offset_define_args ${THREADX_SMP_OFFSETS_COMPILE_DEFINITIONS}) - list(TRANSFORM threadx_smp_offset_define_args PREPEND -D) - - set(threadx_smp_offset_cflags ${CMAKE_C_FLAGS}) - if(CMAKE_BUILD_TYPE) - string(TOUPPER "${CMAKE_BUILD_TYPE}" threadx_smp_build_type_upper) - list(APPEND threadx_smp_offset_cflags ${CMAKE_C_FLAGS_${threadx_smp_build_type_upper}}) - endif() - separate_arguments(threadx_smp_offset_cflags) - - add_custom_command( - OUTPUT ${threadx_smp_offset_inc} - BYPRODUCTS ${threadx_smp_offset_asm} - COMMAND ${CMAKE_COMMAND} -E make_directory ${THREADX_SMP_OFFSETS_OUTPUT_DIR} - COMMAND ${CMAKE_C_COMPILER} - ${CMAKE_C_COMPILER_ARG1} - ${threadx_smp_offset_cflags} - ${threadx_smp_offset_include_args} - ${threadx_smp_offset_define_args} - -S - -o ${threadx_smp_offset_asm} - ${THREADX_SMP_OFFSETS_SOURCE} - COMMAND ${CMAKE_COMMAND} - -DINPUT=${threadx_smp_offset_asm} - -DOUTPUT=${threadx_smp_offset_inc} - -P ${threadx_smp_generate_script} - DEPENDS - ${THREADX_SMP_OFFSETS_SOURCE} - ${threadx_smp_generate_script} - ${THREADX_SMP_OFFSETS_DEPENDS} - COMMAND_EXPAND_LISTS - VERBATIM - ) - - add_custom_target(${THREADX_SMP_OFFSETS_TARGET} DEPENDS ${threadx_smp_offset_inc}) - - set(${THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR} ${THREADX_SMP_OFFSETS_OUTPUT_DIR} PARENT_SCOPE) -endfunction() diff --git a/port/threadx_smp/inc/tx_port.h b/port/threadx_smp/inc/tx_port.h index 00587fb..1b0f0c2 100644 --- a/port/threadx_smp/inc/tx_port.h +++ b/port/threadx_smp/inc/tx_port.h @@ -57,26 +57,26 @@ #ifdef __ASSEMBLER__ #if __riscv_xlen == 64 -#define SLL32 sllw -#define STORE sd -#define LOAD ld -#define LWU lwu -#define AMOSWAP_AQ amoswap.d.aq -#define AMOSWAP_RL amoswap.d.rl -#define LOG_REGBYTES 3 +#define SLL32 sllw +#define STORE sd +#define LOAD ld +#define LWU lwu +#define AMOSWAP_AQ amoswap.d.aq +#define AMOSWAP_RL amoswap.d.rl +#define LOG_REGBYTES 3 +#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 312 // This changes if thread or timer internal extensions are used #else -#define SLL32 sll -#define STORE sw -#define LOAD lw -#define LWU lw -#define AMOSWAP_AQ amoswap.w.aq -#define AMOSWAP_RL amoswap.w.rl -#define LOG_REGBYTES 2 +#define SLL32 sll +#define STORE sw +#define LOAD lw +#define LWU lw +#define AMOSWAP_AQ amoswap.w.aq +#define AMOSWAP_RL amoswap.w.rl +#define LOG_REGBYTES 2 +#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 168 // This changes if thread or timer internal extensions are used #endif #define REGBYTES (1 << LOG_REGBYTES) -#include "tx_asm_offsets.inc" - #else /*not __ASSEMBLER__ */ /************* Define ThreadX SMP constants. *************/ diff --git a/port/threadx_smp/src/tx_asm_offsets.c b/port/threadx_smp/src/tx_asm_offsets.c deleted file mode 100644 index 50324d1..0000000 --- a/port/threadx_smp/src/tx_asm_offsets.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "tx_api.h" - -#define TX_ASM_OFFSET(symbol, value) __asm__ volatile("\n.ascii \"-->" #symbol " %c0\\n\"" : : "i"(value)) - -void tx_asm_offsets_generate(void) -{ - TX_ASM_OFFSET(TX_THREAD_STACK_END_OFFSET, offsetof(TX_THREAD, tx_thread_stack_end)); - TX_ASM_OFFSET(TX_THREAD_TIME_SLICE_OFFSET, offsetof(TX_THREAD, tx_thread_time_slice)); - TX_ASM_OFFSET(TX_THREAD_SMP_LOCK_READY_BIT_OFFSET, offsetof(TX_THREAD, tx_thread_smp_lock_ready_bit)); -}