diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2020-11-15 22:10:58 +0100 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2020-12-05 23:18:37 +0000 |
commit | 1d3d87695c62be88d4a87c7d57de6084d654396b (patch) | |
tree | 9fd1f38c73a7ade3540d3226dc941612912f2d3a /src/target | |
parent | b5e015357ad4ae1fbb286f9bf6c22a563ab93eb7 (diff) | |
download | riscv-openocd-1d3d87695c62be88d4a87c7d57de6084d654396b.zip riscv-openocd-1d3d87695c62be88d4a87c7d57de6084d654396b.tar.gz riscv-openocd-1d3d87695c62be88d4a87c7d57de6084d654396b.tar.bz2 |
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>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/arc.c | 2 | ||||
-rw-r--r-- | src/target/arm7_9_common.c | 2 | ||||
-rw-r--r-- | src/target/etm.c | 2 | ||||
-rw-r--r-- | src/target/register.h | 2 | ||||
-rw-r--r-- | src/target/riscv/riscv.c | 2 | ||||
-rw-r--r-- | src/target/riscv/riscv.h | 4 |
6 files changed, 7 insertions, 7 deletions
diff --git a/src/target/arc.c b/src/target/arc.c index cec6441..ffe9745 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 d992aa7..797f61c 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 93dbd29..faa941f 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 1bae811..5f1c25f 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 53af07e..0d1cee1 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 7e74cf7..d943134 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. */ |