aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2020-11-15 22:10:58 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2020-12-05 23:18:37 +0000
commit1d3d87695c62be88d4a87c7d57de6084d654396b (patch)
tree9fd1f38c73a7ade3540d3226dc941612912f2d3a /src/target
parentb5e015357ad4ae1fbb286f9bf6c22a563ab93eb7 (diff)
downloadriscv-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.c2
-rw-r--r--src/target/arm7_9_common.c2
-rw-r--r--src/target/etm.c2
-rw-r--r--src/target/register.h2
-rw-r--r--src/target/riscv/riscv.c2
-rw-r--r--src/target/riscv/riscv.h4
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 = &reg_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. */