target/register: use an array of uint8_t for register's value
The use of 'void *' makes the pointer arithmetic incompatible with standard C, even if this is allowed by GCC extensions. The use of 'void *' can also hide incorrect pointer assignments. Switch to 'uint8_t *' and add GCC warning flag to track any use of pointer arithmetic extension. Change-Id: Ic4d15a232834cd6b374330f70e2473a359b1607f Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5937 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
parent
b5e015357a
commit
1d3d87695c
|
@ -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"
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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++;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue