Ensure vgdb.c is warningless with -Wpointer-sign
* use normal 'char' (when possible) rather than 'unsigned char'
* fix bug in case a character val >= 128 is given in a -c command
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13098 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c
index 34db3b9..ed183a6 100644
--- a/coregrind/vgdb.c
+++ b/coregrind/vgdb.c
@@ -305,12 +305,12 @@
#ifdef PTRACEINVOKER
/* ptrace_(read|write)_memory are modified extracts of linux-low.c
from gdb 6.6. Copyrighted FSF */
-/* Copy LEN bytes from inferior's memory starting at MEMADDR
- to debugger memory starting at MYADDR. */
+/* Copy LEN bytes from valgrind memory starting at MEMADDR
+ to vgdb memory starting at MYADDR. */
static
int ptrace_read_memory (pid_t inferior_pid, CORE_ADDR memaddr,
- unsigned char *myaddr, int len)
+ void *myaddr, int len)
{
register int i;
/* Round starting address down to longword boundary. */
@@ -339,14 +339,14 @@
return 0;
}
-/* Copy LEN bytes of data from debugger memory at MYADDR
- to inferior's memory at MEMADDR.
- On failure (cannot write the inferior)
+/* Copy LEN bytes of data from vgdb memory at MYADDR
+ to valgrind memory at MEMADDR.
+ On failure (cannot write the valgrind memory)
returns the value of errno. */
__attribute__((unused)) /* not used on all platforms */
static
int ptrace_write_memory (pid_t inferior_pid, CORE_ADDR memaddr,
- const unsigned char *myaddr, int len)
+ const void *myaddr, int len)
{
register int i;
/* Round starting address down to longword boundary. */
@@ -362,7 +362,7 @@
if (debuglevel >= 1) {
DEBUG (1, "Writing ");
for (i = 0; i < len; i++)
- PDEBUG (1, "%02x", (unsigned)myaddr[i]);
+ PDEBUG (1, "%02x", ((unsigned char*)myaddr)[i]);
PDEBUG(1, " to %p\n", (void *) memaddr);
}
@@ -584,7 +584,7 @@
for (i = 1; i < VG_N_THREADS; i++) {
vgt += sz_tst;
rw = ptrace_read_memory(pid, vgt+off_status,
- (unsigned char *)&(vgdb_threads[i].status),
+ &(vgdb_threads[i].status),
sizeof(ThreadStatus));
if (rw != 0) {
ERROR(rw, "status ptrace_read_memory\n");
@@ -592,7 +592,7 @@
}
rw = ptrace_read_memory(pid, vgt+off_lwpid,
- (unsigned char *)&(vgdb_threads[i].lwpid),
+ &(vgdb_threads[i].lwpid),
sizeof(Int));
if (rw != 0) {
ERROR(rw, "lwpid ptrace_read_memory\n");
@@ -943,7 +943,7 @@
DEBUG(1, "push check arg ptrace_write_memory\n");
assert(regsize == sizeof(check));
rw = ptrace_write_memory(pid, sp,
- (unsigned char *) &check,
+ &check,
regsize);
if (rw != 0) {
ERROR(rw, "push check arg ptrace_write_memory");
@@ -956,7 +956,7 @@
// Note that for a 64 bits vgdb, only 4 bytes of NULL bad_return
// are written.
rw = ptrace_write_memory(pid, sp,
- (unsigned char *) &bad_return,
+ &bad_return,
regsize);
if (rw != 0) {
ERROR(rw, "push bad_return return address ptrace_write_memory");
@@ -1031,7 +1031,7 @@
sp = sp - regsize;
DEBUG(1, "push bad_return return address ptrace_write_memory\n");
rw = ptrace_write_memory(pid, sp,
- (unsigned char *) &bad_return,
+ &bad_return,
sizeof(bad_return));
if (rw != 0) {
ERROR(rw, "push bad_return return address ptrace_write_memory");
@@ -1054,7 +1054,7 @@
Addr64 toc_addr;
int rw;
rw = ptrace_read_memory(pid, shared64->invoke_gdbserver,
- (unsigned char *)&func_addr,
+ &func_addr,
sizeof(Addr64));
if (rw != 0) {
ERROR(rw, "ppc64 read func_addr\n");
@@ -1062,7 +1062,7 @@
return False;
}
rw = ptrace_read_memory(pid, shared64->invoke_gdbserver+8,
- (unsigned char *)&toc_addr,
+ &toc_addr,
sizeof(Addr64));
if (rw != 0) {
ERROR(rw, "ppc64 read toc_addr\n");
@@ -1516,9 +1516,10 @@
static int
readchar (int fd)
{
- static unsigned char buf[PBUFSIZ+1]; // +1 for trailing \0
+ static char buf[PBUFSIZ+1]; // +1 for trailing \0
static int bufcnt = 0;
- static unsigned char *bufp;
+ static unsigned char *bufp;
+ // unsigned bufp to e.g. avoid having 255 converted to int -1
if (bufcnt-- > 0)
return *bufp++;
@@ -1535,7 +1536,7 @@
}
}
- bufp = buf;
+ bufp = (unsigned char *)buf;
bufcnt--;
return *bufp++;
}
@@ -1894,10 +1895,10 @@
int i;
int hi;
- unsigned char hex[3];
+ char hex[3];
unsigned char cksum;
- unsigned char *hexcommand;
- unsigned char buf[PBUFSIZ+1]; // +1 for trailing \0
+ char *hexcommand;
+ char buf[PBUFSIZ+1]; // +1 for trailing \0
int buflen;
int nc;
@@ -1927,7 +1928,8 @@
hexcommand[0] = 0;
strcat (hexcommand, "$qRcmd,");
for (i = 0; i < strlen(commands[nc]); i++) {
- sprintf(hex, "%02x", commands[nc][i]);
+ sprintf(hex, "%02x", (unsigned char) commands[nc][i]);
+ // Need to use unsigned char, to avoid sign extension.
strcat (hexcommand, hex);
}
/* checksum (but without the $) */