aboutsummaryrefslogtreecommitdiff
path: root/src/target/smp.c
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2015-01-17 15:15:11 +0300
committerPaul Fertser <fercerpav@gmail.com>2015-01-30 08:56:54 +0000
commit355f4cadbbf10c75cf05fb1a82bf918b3ab65c55 (patch)
treef874ce4af77346c82220be72f217b2b311cff380 /src/target/smp.c
parent9d745a0690f6f5c24d914ebfa3c1d6b824a19a5e (diff)
downloadriscv-openocd-355f4cadbbf10c75cf05fb1a82bf918b3ab65c55.zip
riscv-openocd-355f4cadbbf10c75cf05fb1a82bf918b3ab65c55.tar.gz
riscv-openocd-355f4cadbbf10c75cf05fb1a82bf918b3ab65c55.tar.bz2
Use (uint8_t *) for buf_(set|get)_u(32|64) instead of (void *)
This helps to uncover incorrect usage when a pointer to uint32_t is passed to those functions which leads to subtle bugs on BE systems. The reason is that it's normally assumed that any uint32_t variable holds its value in host byte order, but using but_set_u32 on it silently does implicit pointer conversion to (void *) and the assumption ends up broken without any indication. Change-Id: I48ffd190583d8aa32ec1fef8f1cdc0b4184e4546 Signed-off-by: Paul Fertser <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2467 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/target/smp.c')
-rw-r--r--src/target/smp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/target/smp.c b/src/target/smp.c
index e688304..da9ee8b 100644
--- a/src/target/smp.c
+++ b/src/target/smp.c
@@ -64,9 +64,9 @@ int gdb_read_smp_packet(struct connection *connection,
if (strncmp(packet, "jc", 2) == 0) {
const uint32_t len = sizeof(target->gdb_service->core[0]);
char hex_buffer[len * 2 + 1];
- char buffer[len];
+ uint8_t buffer[len];
buf_set_u32(buffer, 0, len * 8, target->gdb_service->core[0]);
- int pkt_len = hexify(hex_buffer, buffer, sizeof(buffer), sizeof(hex_buffer));
+ int pkt_len = hexify(hex_buffer, (char *)buffer, sizeof(buffer), sizeof(hex_buffer));
retval = gdb_put_packet(connection, hex_buffer, pkt_len);
}