Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

log_instance.h

  • Katsuhiro Suzuki's avatar
    82781138
    logging: (tentative) add padding for RISC-V 64bits environment · 82781138
    Katsuhiro Suzuki authored
    
    This patch add padding in filter structure of log system.
    In RISCV && 64BIT environment. Log system is facing alignment bug.
    
    struct log_source_dynamic_data {
    	uint32_t filters;
    };
    
    static inline uint32_t *log_dynamic_filters_get(uint32_t source_id)
    {
    	return &__log_dynamic_start[source_id].filters;
    }
    
    A sizeof(log_source_dynamic_data) = 4, address offset of
    &__log_dynamic_start[] are:
      - &__log_dynamic_start[0]: +0
      - &__log_dynamic_start[1]: +4
      - &__log_dynamic_start[2]: +8
    
    But RISCV 64bit gcc/ld places each log_dynamic_log, log_dynamic_os
    and log_dynamic_test per 8bytes alignment. So address offset of
    log_dynamic_* are:
      - &log_dynamic_log : +0
      - &log_dynamic_os  : +8
      - &log_dynamic_test: +16
    
    tests/subsys/logging/log_core cannot set correct log filters in
    RISCV && 64BIT environment, so test is always going to fail.
    
    Signed-off-by: default avatarKatsuhiro Suzuki <katsuhiro@katsuster.net>
    82781138
    History
    logging: (tentative) add padding for RISC-V 64bits environment
    Katsuhiro Suzuki authored
    
    This patch add padding in filter structure of log system.
    In RISCV && 64BIT environment. Log system is facing alignment bug.
    
    struct log_source_dynamic_data {
    	uint32_t filters;
    };
    
    static inline uint32_t *log_dynamic_filters_get(uint32_t source_id)
    {
    	return &__log_dynamic_start[source_id].filters;
    }
    
    A sizeof(log_source_dynamic_data) = 4, address offset of
    &__log_dynamic_start[] are:
      - &__log_dynamic_start[0]: +0
      - &__log_dynamic_start[1]: +4
      - &__log_dynamic_start[2]: +8
    
    But RISCV 64bit gcc/ld places each log_dynamic_log, log_dynamic_os
    and log_dynamic_test per 8bytes alignment. So address offset of
    log_dynamic_* are:
      - &log_dynamic_log : +0
      - &log_dynamic_os  : +8
      - &log_dynamic_test: +16
    
    tests/subsys/logging/log_core cannot set correct log filters in
    RISCV && 64BIT environment, so test is always going to fail.
    
    Signed-off-by: default avatarKatsuhiro Suzuki <katsuhiro@katsuster.net>