From "nrf_section.h" (__GNUC__):
#define NRF_SECTION_DEF(section_name, data_type) \
extern data_type * CONCAT_2(__start_, section_name); \
extern void * CONCAT_2(__stop_, section_name)
...
#define NRF_SECTION_START_ADDR(section_name) &CONCAT_2(__start_, section_name)
Example for the section name "log_const_data":
NRF_SECTION_DEF(log_const_data, nrf_log_module_const_data_t)//: extern nrf_log_module_const_data_t *__start_log_const_data;
NRF_SECTION_START_ADDR(log_const_data)//: (nrf_log_module_const_data_t *) &(__start_log_const_data)// _________________________________^// "&" is not needed here! ("__start_log_const_data" is a pointer!)
As a result, a warning occurs when compiling "nrf_log_frontend.c" : "nrf_log_module_name_get()" :
... nrf_log_module_const_data_t * p_module_data = NRF_LOG_CONST_SECTION_VARS_GET(module_id); return p_module_data->p_module_name; //WARNING: array subscript 'nrf_log_module_const_data_t[0]' is partly outside array bounds of 'nrf_log_module_const_data_t[0]' [-Warray-bounds=] ...
Workaround:
... nrf_log_module_const_data_t * p_module_data = __start_log_const_data + module_id; return p_module_data->p_module_name; ...