From b07be57875c5da26446a3c401b2fc7f0cd25fc39 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 18 Apr 2023 11:31:38 -0500 Subject: [PATCH] logging: Use TYPE_SECTION macros for log dynamic Clean up log_dynamic to utilize macros for handling sections. Signed-off-by: Kumar Gala --- cmake/linker_script/common/common-ram.cmake | 3 +-- include/zephyr/linker/common-ram.ld | 8 +------- include/zephyr/logging/log.h | 9 +++------ include/zephyr/logging/log_core.h | 6 +++--- include/zephyr/logging/log_instance.h | 7 ++----- include/zephyr/logging/log_internal.h | 2 +- subsys/logging/log_mgmt.c | 2 +- 7 files changed, 12 insertions(+), 25 deletions(-) diff --git a/cmake/linker_script/common/common-ram.cmake b/cmake/linker_script/common/common-ram.cmake index 5adb5bf5d9d..27461cc1c5c 100644 --- a/cmake/linker_script/common/common-ram.cmake +++ b/cmake/linker_script/common/common-ram.cmake @@ -21,8 +21,7 @@ if(CONFIG_PM_DEVICE) zephyr_iterable_section(NAME pm_device_slots GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4) endif() -zephyr_linker_section(NAME log_dynamic GROUP DATA_REGION NOINPUT) -zephyr_linker_section_configure(SECTION log_dynamic KEEP INPUT ".log_dynamic_*") +zephyr_iterable_section(NAME log_dynamic GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4) if(CONFIG_USERSPACE) # All kernel objects within are assumed to be either completely diff --git a/include/zephyr/linker/common-ram.ld b/include/zephyr/linker/common-ram.ld index a49288eeed7..e8fecd6ea81 100644 --- a/include/zephyr/linker/common-ram.ld +++ b/include/zephyr/linker/common-ram.ld @@ -49,13 +49,7 @@ ITERABLE_SECTION_RAM_GC_ALLOWED(log_mpsc_pbuf, 4) ITERABLE_SECTION_RAM(log_msg_ptr, 4) - - SECTION_DATA_PROLOGUE(log_dynamic_sections,,) - { - __log_dynamic_start = .; - KEEP(*(SORT(.log_dynamic_*))); - __log_dynamic_end = .; - } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + ITERABLE_SECTION_RAM(log_dynamic, 4) #ifdef CONFIG_USERSPACE /* All kernel objects within are assumed to be either completely diff --git a/include/zephyr/logging/log.h b/include/zephyr/logging/log.h index 52ce839a779..ba31c9fa01a 100644 --- a/include/zephyr/logging/log.h +++ b/include/zephyr/logging/log.h @@ -306,12 +306,9 @@ void z_log_vprintk(const char *fmt, va_list ap); .level = _level \ } -#define _LOG_MODULE_DYNAMIC_DATA_CREATE(_name) \ - struct log_source_dynamic_data LOG_ITEM_DYNAMIC_DATA(_name) \ - __attribute__ ((section("." STRINGIFY( \ - LOG_ITEM_DYNAMIC_DATA(_name)))) \ - ) \ - __attribute__((used)) +#define _LOG_MODULE_DYNAMIC_DATA_CREATE(_name) \ + STRUCT_SECTION_ITERABLE_ALTERNATE(log_dynamic, log_source_dynamic_data, \ + LOG_ITEM_DYNAMIC_DATA(_name)) #define _LOG_MODULE_DYNAMIC_DATA_COND_CREATE(_name) \ IF_ENABLED(CONFIG_LOG_RUNTIME_FILTERING, \ diff --git a/include/zephyr/logging/log_core.h b/include/zephyr/logging/log_core.h index ab0d0e90f8c..6461183cdcc 100644 --- a/include/zephyr/logging/log_core.h +++ b/include/zephyr/logging/log_core.h @@ -433,8 +433,8 @@ static inline uint32_t log_const_source_id( sizeof(struct log_source_const_data); } -extern struct log_source_dynamic_data __log_dynamic_start[]; -extern struct log_source_dynamic_data __log_dynamic_end[]; +TYPE_SECTION_START_EXTERN(struct log_source_dynamic_data, log_dynamic); +TYPE_SECTION_END_EXTERN(struct log_source_dynamic_data, log_dynamic); /** @brief Creates name of variable and section for runtime log data. * @@ -454,7 +454,7 @@ extern struct log_source_dynamic_data __log_dynamic_end[]; */ static inline uint32_t log_dynamic_source_id(struct log_source_dynamic_data *data) { - return ((uint8_t *)data - (uint8_t *)__log_dynamic_start)/ + return ((uint8_t *)data - (uint8_t *)TYPE_SECTION_START(log_dynamic))/ sizeof(struct log_source_dynamic_data); } diff --git a/include/zephyr/logging/log_instance.h b/include/zephyr/logging/log_instance.h index 2cf12670b77..6636c88923f 100644 --- a/include/zephyr/logging/log_instance.h +++ b/include/zephyr/logging/log_instance.h @@ -143,11 +143,8 @@ struct log_source_dynamic_data { IF_ENABLED(CONFIG_LOG, (Z_LOG_INSTANCE_STRUCT * _name)) #define Z_LOG_RUNTIME_INSTANCE_REGISTER(_module_name, _inst_name) \ - struct log_source_dynamic_data LOG_INSTANCE_DYNAMIC_DATA(_module_name, _inst_name) \ - __attribute__ ((section("." STRINGIFY( \ - LOG_INSTANCE_DYNAMIC_DATA(_module_name, _inst_name) \ - ) \ - ))) __attribute__((used)) + STRUCT_SECTION_ITERABLE_ALTERNATE(log_dynamic, log_source_dynamic_data, \ + LOG_INSTANCE_DYNAMIC_DATA(_module_name, _inst_name)) #define Z_LOG_INSTANCE_REGISTER(_module_name, _inst_name, _level) \ Z_LOG_CONST_ITEM_REGISTER( \ diff --git a/include/zephyr/logging/log_internal.h b/include/zephyr/logging/log_internal.h index e562086b801..94ea12a248f 100644 --- a/include/zephyr/logging/log_internal.h +++ b/include/zephyr/logging/log_internal.h @@ -86,7 +86,7 @@ void z_log_notify_backend_enabled(void); */ static inline uint32_t *z_log_dynamic_filters_get(uint32_t source_id) { - return &__log_dynamic_start[source_id].filters; + return &TYPE_SECTION_START(log_dynamic)[source_id].filters; } /** @brief Get number of registered sources. */ diff --git a/subsys/logging/log_mgmt.c b/subsys/logging/log_mgmt.c index 4d97848bd79..75eed38c474 100644 --- a/subsys/logging/log_mgmt.c +++ b/subsys/logging/log_mgmt.c @@ -330,7 +330,7 @@ int z_log_link_set_runtime_level(uint8_t domain_id, uint16_t source_id, uint8_t static uint32_t *get_dynamic_filter(uint8_t domain_id, uint32_t source_id) { if (z_log_is_local_domain(domain_id)) { - return &__log_dynamic_start[source_id].filters; + return &TYPE_SECTION_START(log_dynamic)[source_id].filters; } return z_log_link_get_dynamic_filter(domain_id, source_id);