diff --git a/tests/subsys/llext/simple/CMakeLists.txt b/tests/subsys/llext/simple/CMakeLists.txt index 5eae7b846fd..2bea2e9b7bf 100644 --- a/tests/subsys/llext/simple/CMakeLists.txt +++ b/tests/subsys/llext/simple/CMakeLists.txt @@ -16,25 +16,33 @@ target_include_directories(app PRIVATE ) if(NOT LOADER_BUILD_ONLY) -# generate extension targets foreach extension given by name -foreach(ext_name hello_world logging relative_jump object syscalls threads_kernel_objects) - set(ext_src ${PROJECT_SOURCE_DIR}/src/${ext_name}_ext.c) - set(ext_bin ${ZEPHYR_BINARY_DIR}/${ext_name}.llext) - set(ext_inc ${ZEPHYR_BINARY_DIR}/include/generated/${ext_name}.inc) - add_llext_target(${ext_name}_ext - OUTPUT ${ext_bin} - SOURCES ${ext_src} - ) - generate_inc_file_for_target(app ${ext_bin} ${ext_inc}) -endforeach() + set(ext_names hello_world logging relative_jump object syscalls threads_kernel_objects) -# Add a dummy custom processing command to test add_llext_command -get_target_property(proc_in_file hello_world_ext lib_output) -get_target_property(proc_out_file hello_world_ext pkg_input) -add_llext_command( - TARGET hello_world_ext - POST_BUILD - COMMAND echo "dummy patching ${proc_in_file} to create ${proc_out_file}" - COMMAND ${CMAKE_COMMAND} -E copy ${proc_in_file} ${proc_out_file} -) + if(CONFIG_ARM) + if(NOT CONFIG_CPU_CORTEX_M0 AND NOT CONFIG_CPU_CORTEX_M0PLUS AND NOT CONFIG_CPU_CORTEX_M1) + list(APPEND ext_names movwmovt) + endif() + endif() + + # generate extension targets foreach extension given by 'ext_names' + foreach(ext_name ${ext_names}) + set(ext_src ${PROJECT_SOURCE_DIR}/src/${ext_name}_ext.c) + set(ext_bin ${ZEPHYR_BINARY_DIR}/${ext_name}.llext) + set(ext_inc ${ZEPHYR_BINARY_DIR}/include/generated/${ext_name}.inc) + add_llext_target(${ext_name}_ext + OUTPUT ${ext_bin} + SOURCES ${ext_src} + ) + generate_inc_file_for_target(app ${ext_bin} ${ext_inc}) + endforeach() + + # Add a dummy custom processing command to test add_llext_command + get_target_property(proc_in_file hello_world_ext lib_output) + get_target_property(proc_out_file hello_world_ext pkg_input) + add_llext_command( + TARGET hello_world_ext + POST_BUILD + COMMAND echo "dummy patching ${proc_in_file} to create ${proc_out_file}" + COMMAND ${CMAKE_COMMAND} -E copy ${proc_in_file} ${proc_out_file} + ) endif() diff --git a/tests/subsys/llext/simple/src/movwmovt_ext.c b/tests/subsys/llext/simple/src/movwmovt_ext.c new file mode 100644 index 00000000000..5400385623a --- /dev/null +++ b/tests/subsys/llext/simple/src/movwmovt_ext.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 Schneider Electric. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * This test is designed to test MOV.W and MOV.T instructions on ARM architectures. + * (except Cortex-M0, M0+ and M1, that don't support them) + */ + +#include +#include +#include + + +static void test_func(void) +{ + printk("%s\n", __func__); +} + +void test_entry(void) +{ + test_func(); + + printk("test movwmovt\n"); + __asm volatile ("movw r0, #:lower16:test_func"); + __asm volatile ("movt r0, #:upper16:test_func"); + __asm volatile ("blx r0"); +} +LL_EXTENSION_SYMBOL(test_entry);