mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-19 22:03:57 +08:00
serial_write: change prototype to take a void-pointer buffer.
While remote.c works with "char *" buffers most of the time, other remote targets have binary-ish-er protocols, and choose to use "unsigned char" throughout, like e.g., remote-mips.c or remote-m32r-sdi.c. That results in -Wpointer-sign warnings in those targets, unless we add casts in calls to serial_write. Since serial_write is only concerned about sending raw host bytes out, and serial_ops->write_prim already works with "void *"/"size_t", a similar interface to the "write" or "send" system calls, I find it natural to change serial_write's prototype accordingly, avoiding the need for casts. Tested on x86_64 Fedora 17, and also by building x86_64-mingw32 and DJGPP/go32 -hosted gdbs. gdb/ 2013-04-19 Pedro Alves <palves@redhat.com> * ser-base.c (ser_base_write): Change prototype -- take 'void *' buffer and size_t size. Adjust. * ser-base.h (ser_base_write): Adjust. * ser-go32.c (cnts): Change type to size_t. (dos_write): Change prototype -- take 'void *' buffer and size_t size. Adjust. (dos_info): Print elements of 'cnts' as unsigned long. * serial.c (serial_write): Likewise. * serial.h (serial_write): Adjust. (struct serial_ops) <write>: Change prototype -- take 'void *' buffer and size_t size. Adjust.
This commit is contained in:
@ -1,3 +1,17 @@
|
|||||||
|
2013-04-19 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* ser-base.c (ser_base_write): Change prototype -- take 'void *'
|
||||||
|
buffer and size_t size. Adjust.
|
||||||
|
* ser-base.h (ser_base_write): Adjust.
|
||||||
|
* ser-go32.c (cnts): Change type to size_t.
|
||||||
|
(dos_write): Change prototype -- take 'void *'
|
||||||
|
buffer and size_t size. Adjust.
|
||||||
|
(dos_info): Print elements of 'cnts' as unsigned long.
|
||||||
|
* serial.c (serial_write): Likewise.
|
||||||
|
* serial.h (serial_write): Adjust.
|
||||||
|
(struct serial_ops) <write>: Change prototype -- take 'void *'
|
||||||
|
buffer and size_t size. Adjust.
|
||||||
|
|
||||||
2013-04-19 Pedro Alves <palves@redhat.com>
|
2013-04-19 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* c-lang.c (evaluate_subexp_c): Cast result of obstack_base to
|
* c-lang.c (evaluate_subexp_c): Cast result of obstack_base to
|
||||||
|
@ -440,17 +440,18 @@ ser_base_readchar (struct serial *scb, int timeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ser_base_write (struct serial *scb, const char *str, int len)
|
ser_base_write (struct serial *scb, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
|
const char *str = buf;
|
||||||
int cc;
|
int cc;
|
||||||
|
|
||||||
while (len > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
cc = scb->ops->write_prim (scb, str, len);
|
cc = scb->ops->write_prim (scb, str, count);
|
||||||
|
|
||||||
if (cc < 0)
|
if (cc < 0)
|
||||||
return 1;
|
return 1;
|
||||||
len -= cc;
|
count -= cc;
|
||||||
str += cc;
|
str += cc;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -45,7 +45,7 @@ extern int ser_base_setbaudrate (struct serial *scb, int rate);
|
|||||||
extern int ser_base_setstopbits (struct serial *scb, int rate);
|
extern int ser_base_setstopbits (struct serial *scb, int rate);
|
||||||
extern int ser_base_drain_output (struct serial *scb);
|
extern int ser_base_drain_output (struct serial *scb);
|
||||||
|
|
||||||
extern int ser_base_write (struct serial *scb, const char *str, int len);
|
extern int ser_base_write (struct serial *scb, const void *buf, size_t count);
|
||||||
|
|
||||||
extern void ser_base_async (struct serial *scb, int async_p);
|
extern void ser_base_async (struct serial *scb, int async_p);
|
||||||
extern int ser_base_readchar (struct serial *scb, int timeout);
|
extern int ser_base_readchar (struct serial *scb, int timeout);
|
||||||
|
@ -148,7 +148,7 @@ typedef unsigned long u_long;
|
|||||||
#define NCNT 20
|
#define NCNT 20
|
||||||
|
|
||||||
static int intrcnt;
|
static int intrcnt;
|
||||||
static int cnts[NCNT];
|
static size_t cnts[NCNT];
|
||||||
static char *cntnames[NCNT] =
|
static char *cntnames[NCNT] =
|
||||||
{
|
{
|
||||||
/* h/w interrupt counts. */
|
/* h/w interrupt counts. */
|
||||||
@ -230,7 +230,7 @@ static int dos_open (struct serial *scb, const char *name);
|
|||||||
static void dos_raw (struct serial *scb);
|
static void dos_raw (struct serial *scb);
|
||||||
static int dos_readchar (struct serial *scb, int timeout);
|
static int dos_readchar (struct serial *scb, int timeout);
|
||||||
static int dos_setbaudrate (struct serial *scb, int rate);
|
static int dos_setbaudrate (struct serial *scb, int rate);
|
||||||
static int dos_write (struct serial *scb, const char *str, int len);
|
static int dos_write (struct serial *scb, const void *buf, size_t count);
|
||||||
static void dos_close (struct serial *scb);
|
static void dos_close (struct serial *scb);
|
||||||
static serial_ttystate dos_get_tty_state (struct serial *scb);
|
static serial_ttystate dos_get_tty_state (struct serial *scb);
|
||||||
static int dos_set_tty_state (struct serial *scb, serial_ttystate state);
|
static int dos_set_tty_state (struct serial *scb, serial_ttystate state);
|
||||||
@ -787,26 +787,27 @@ dos_setstopbits (struct serial *scb, int num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dos_write (struct serial *scb, const char *str, int len)
|
dos_write (struct serial *scb, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
volatile struct dos_ttystate *port = &ports[scb->fd];
|
volatile struct dos_ttystate *port = &ports[scb->fd];
|
||||||
int fifosize = port->fifo ? 16 : 1;
|
size_t fifosize = port->fifo ? 16 : 1;
|
||||||
long then;
|
long then;
|
||||||
int cnt;
|
size_t cnt;
|
||||||
|
const char *str = buf;
|
||||||
|
|
||||||
while (len > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
/* Send the data, fifosize bytes at a time. */
|
/* Send the data, fifosize bytes at a time. */
|
||||||
cnt = fifosize > len ? len : fifosize;
|
cnt = fifosize > count ? count : fifosize;
|
||||||
port->txbusy = 1;
|
port->txbusy = 1;
|
||||||
/* Francisco Pastor <fpastor.etra-id@etra.es> says OUTSB messes
|
/* Francisco Pastor <fpastor.etra-id@etra.es> says OUTSB messes
|
||||||
up the communications with UARTs with FIFOs. */
|
up the communications with UARTs with FIFOs. */
|
||||||
#ifdef UART_FIFO_WORKS
|
#ifdef UART_FIFO_WORKS
|
||||||
outportsb (port->base + com_data, str, cnt);
|
outportsb (port->base + com_data, str, cnt);
|
||||||
str += cnt;
|
str += cnt;
|
||||||
len -= cnt;
|
count -= cnt;
|
||||||
#else
|
#else
|
||||||
for ( ; cnt > 0; cnt--, len--)
|
for ( ; cnt > 0; cnt--, count--)
|
||||||
outportb (port->base + com_data, *str++);
|
outportb (port->base + com_data, *str++);
|
||||||
#endif
|
#endif
|
||||||
#ifdef DOS_STATS
|
#ifdef DOS_STATS
|
||||||
@ -904,7 +905,7 @@ dos_info (char *arg, int from_tty)
|
|||||||
printf_filtered ("\nTotal interrupts: %d\n", intrcnt);
|
printf_filtered ("\nTotal interrupts: %d\n", intrcnt);
|
||||||
for (i = 0; i < NCNT; i++)
|
for (i = 0; i < NCNT; i++)
|
||||||
if (cnts[i])
|
if (cnts[i])
|
||||||
printf_filtered ("%s:\t%d\n", cntnames[i], cnts[i]);
|
printf_filtered ("%s:\t%lu\n", cntnames[i], (unsigned long) cnts[i]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
gdb/serial.c
16
gdb/serial.c
@ -398,14 +398,15 @@ serial_readchar (struct serial *scb, int timeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
serial_write (struct serial *scb, const char *str, int len)
|
serial_write (struct serial *scb, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
if (serial_logfp != NULL)
|
if (serial_logfp != NULL)
|
||||||
{
|
{
|
||||||
int count;
|
const char *str = buf;
|
||||||
|
size_t c;
|
||||||
|
|
||||||
for (count = 0; count < len; count++)
|
for (c = 0; c < count; c++)
|
||||||
serial_logchar (serial_logfp, 'w', str[count] & 0xff, 0);
|
serial_logchar (serial_logfp, 'w', str[c] & 0xff, 0);
|
||||||
|
|
||||||
/* Make sure that the log file is as up-to-date as possible,
|
/* Make sure that the log file is as up-to-date as possible,
|
||||||
in case we are getting ready to dump core or something. */
|
in case we are getting ready to dump core or something. */
|
||||||
@ -413,9 +414,10 @@ serial_write (struct serial *scb, const char *str, int len)
|
|||||||
}
|
}
|
||||||
if (serial_debug_p (scb))
|
if (serial_debug_p (scb))
|
||||||
{
|
{
|
||||||
int count;
|
const char *str = buf;
|
||||||
|
size_t c;
|
||||||
|
|
||||||
for (count = 0; count < len; count++)
|
for (c = 0; c < count; c++)
|
||||||
{
|
{
|
||||||
fprintf_unfiltered (gdb_stdlog, "[");
|
fprintf_unfiltered (gdb_stdlog, "[");
|
||||||
serial_logchar (gdb_stdlog, 'w', str[count] & 0xff, 0);
|
serial_logchar (gdb_stdlog, 'w', str[count] & 0xff, 0);
|
||||||
@ -424,7 +426,7 @@ serial_write (struct serial *scb, const char *str, int len)
|
|||||||
gdb_flush (gdb_stdlog);
|
gdb_flush (gdb_stdlog);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (scb->ops->write (scb, str, len));
|
return (scb->ops->write (scb, buf, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -104,10 +104,10 @@ enum serial_rc {
|
|||||||
|
|
||||||
extern int serial_readchar (struct serial *scb, int timeout);
|
extern int serial_readchar (struct serial *scb, int timeout);
|
||||||
|
|
||||||
/* Write LEN chars from STRING to the port SCB. Returns 0 for
|
/* Write COUNT bytes from BUF to the port SCB. Returns 0 for
|
||||||
success, non-zero for failure. */
|
success, non-zero for failure. */
|
||||||
|
|
||||||
extern int serial_write (struct serial *scb, const char *str, int len);
|
extern int serial_write (struct serial *scb, const void *buf, size_t count);
|
||||||
|
|
||||||
/* Write a printf style string onto the serial port. */
|
/* Write a printf style string onto the serial port. */
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ struct serial_ops
|
|||||||
void (*close) (struct serial *);
|
void (*close) (struct serial *);
|
||||||
int (*fdopen) (struct serial *, int fd);
|
int (*fdopen) (struct serial *, int fd);
|
||||||
int (*readchar) (struct serial *, int timeout);
|
int (*readchar) (struct serial *, int timeout);
|
||||||
int (*write) (struct serial *, const char *str, int len);
|
int (*write) (struct serial *, const void *buf, size_t count);
|
||||||
/* Discard pending output */
|
/* Discard pending output */
|
||||||
int (*flush_output) (struct serial *);
|
int (*flush_output) (struct serial *);
|
||||||
/* Discard pending input */
|
/* Discard pending input */
|
||||||
|
Reference in New Issue
Block a user