diff --git a/configure.ac b/configure.ac index 9cb20ad89..c8978b94d 100644 --- a/configure.ac +++ b/configure.ac @@ -833,6 +833,7 @@ AS_IF([test "x${gcc_wextra}" = "xyes"], [ GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast" GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align" GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls" + GCC_WARNINGS="${GCC_WARNINGS} -Wpointer-arith" ]) AS_IF([test "x${gcc_werror}" = "xyes"], [ GCC_WARNINGS="${GCC_WARNINGS} -Werror" diff --git a/src/target/arc.c b/src/target/arc.c index cec6441a5..ffe974532 100644 --- a/src/target/arc.c +++ b/src/target/arc.c @@ -305,7 +305,7 @@ static int arc_init_reg(struct target *target, struct reg *reg, /* Initialize struct reg */ reg->name = reg_desc->name; reg->size = 32; /* All register in ARC are 32-bit */ - reg->value = ®_desc->reg_value; + reg->value = reg_desc->reg_value; reg->type = &arc_reg_type; reg->arch_info = reg_desc; reg->caller_save = true; /* @todo should be configurable. */ diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c index d992aa78b..797f61c93 100644 --- a/src/target/arm7_9_common.c +++ b/src/target/arm7_9_common.c @@ -1393,7 +1393,7 @@ static int arm7_9_full_context(struct target *target) struct arm *arm = &arm7_9->arm; struct { uint32_t value; - void *reg_p; + uint8_t *reg_p; } read_cache[6 * (16 + 1)]; int read_cache_idx = 0; diff --git a/src/target/etm.c b/src/target/etm.c index 93dbd2948..faa941fed 100644 --- a/src/target/etm.c +++ b/src/target/etm.c @@ -279,7 +279,7 @@ static void etm_reg_add(unsigned bcd_vers, struct arm_jtag *jtag_info, reg->name = r->name; reg->size = r->size; - reg->value = &ereg->value; + reg->value = ereg->value; reg->arch_info = ereg; reg->type = &etm_scan6_type; reg++; diff --git a/src/target/register.h b/src/target/register.h index 1bae81183..5f1c25fb4 100644 --- a/src/target/register.h +++ b/src/target/register.h @@ -127,7 +127,7 @@ struct reg { bool caller_save; /* Pointer to place where the value is stored, in the format understood by * the binarybuffer.h functions. */ - void *value; + uint8_t *value; /* The stored value needs to be written to the target. */ bool dirty; /* When true, value is valid. */ diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index 53af07ec3..0d1cee1bf 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -4128,7 +4128,7 @@ int riscv_init_registers(struct target *target) reg_name += strlen(reg_name) + 1; assert(reg_name < info->reg_names + target->reg_cache->num_regs * max_reg_name_len); - r->value = &info->reg_cache_values[number]; + r->value = info->reg_cache_values[number]; } return ERROR_OK; diff --git a/src/target/riscv/riscv.h b/src/target/riscv/riscv.h index 7e74cf730..d943134e2 100644 --- a/src/target/riscv/riscv.h +++ b/src/target/riscv/riscv.h @@ -68,8 +68,8 @@ typedef struct { /* OpenOCD's register cache points into here. This is not per-hart because * we just invalidate the entire cache when we change which hart is - * selected. */ - uint64_t reg_cache_values[RISCV_MAX_REGISTERS]; + * selected. Use an array of 8 uint8_t per register. */ + uint8_t reg_cache_values[RISCV_MAX_REGISTERS][8]; /* Single buffer that contains all register names, instead of calling * malloc for each register. Needs to be freed when reg_list is freed. */