diff options
author | Tom Tromey <tromey@redhat.com> | 2014-01-18 14:32:47 -0700 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2014-02-12 09:59:14 -0700 |
commit | 9c3d65319a230a106392e4b67c8c89c8f5e2929f (patch) | |
tree | 857987f9c4847e816d518f3641ba091d07a768e4 /gdb/gdbserver | |
parent | 01fd3ea573324b8248efbb236d994420641e3d32 (diff) | |
download | gdb-9c3d65319a230a106392e4b67c8c89c8f5e2929f.zip gdb-9c3d65319a230a106392e4b67c8c89c8f5e2929f.tar.gz gdb-9c3d65319a230a106392e4b67c8c89c8f5e2929f.tar.bz2 |
move some rsp bits into rsp-low.h
This moves various low-level remote serial protocol bits into
common/rsp-low.[ch].
This is as close to a pure move as possible. There are some
redundancies remaining but those will be dealt with in a subsequent
patch.
Note that the two variants of remote_escape_output disagreed on the
treatment of "*". On the theory that quoting cannot hurt but the
absence possibly can, I chose the gdbserver variant to be the
canonical one.
2014-02-12 Tom Tromey <tromey@redhat.com>
* tracepoint.c: Include rsp-low.h.
* remote.h (hex2bin, bin2hex, unpack_varlen_hex): Don't declare.
* remote.c: Include rsp-low.h.
(hexchars, ishex, unpack_varlen_hex, pack_nibble, pack_hex_byte)
(fromhex, hex2bin, tohex, bin2hex, remote_escape_output)
(remote_unescape_input): Move to common/rsp-low.c.
* common/rsp-low.h: New file.
* common/rsp-low.c: New file.
* Makefile.in (SFILES): Add common/rsp-low.c.
(HFILES_NO_SRCDIR): Add common/rsp-low.h.
(COMMON_OBS): Add rsp-low.o.
(rsp-low.o): New target.
2014-02-12 Tom Tromey <tromey@redhat.com>
* tracepoint.c: Include rsp-low.h.
* server.c: Include rsp-low.h.
* remote-utils.h (convert_ascii_to_int, convert_int_to_ascii)
(unhexify, hexify, remote_escape_output, unpack_varlen_hex): Don't
declare.
* remote-utils.c: Include rsp-low.h.
(fromhex, hexchars, ishex, unhexify, tohex, hexify)
(remote_escape_output, remote_unescape_input, unpack_varlen_hex)
(convert_int_to_ascii, convert_ascii_to_int): Move to
common/rsp-low.c.
* regcache.c: Include rsp-low.h.
* ax.c: Include rsp-low.h.
* Makefile.in (SFILES): Add common/rsp-low.c.
(OBS): Add rsp-low.o.
(rsp-low.o): New target.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 18 | ||||
-rw-r--r-- | gdb/gdbserver/Makefile.in | 8 | ||||
-rw-r--r-- | gdb/gdbserver/ax.c | 1 | ||||
-rw-r--r-- | gdb/gdbserver/regcache.c | 1 | ||||
-rw-r--r-- | gdb/gdbserver/remote-utils.c | 212 | ||||
-rw-r--r-- | gdb/gdbserver/remote-utils.h | 9 | ||||
-rw-r--r-- | gdb/gdbserver/server.c | 1 | ||||
-rw-r--r-- | gdb/gdbserver/tracepoint.c | 1 |
8 files changed, 29 insertions, 222 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 9cbd5ee..7bf4a0f 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,5 +1,23 @@ 2014-02-12 Tom Tromey <tromey@redhat.com> + * tracepoint.c: Include rsp-low.h. + * server.c: Include rsp-low.h. + * remote-utils.h (convert_ascii_to_int, convert_int_to_ascii) + (unhexify, hexify, remote_escape_output, unpack_varlen_hex): Don't + declare. + * remote-utils.c: Include rsp-low.h. + (fromhex, hexchars, ishex, unhexify, tohex, hexify) + (remote_escape_output, remote_unescape_input, unpack_varlen_hex) + (convert_int_to_ascii, convert_ascii_to_int): Move to + common/rsp-low.c. + * regcache.c: Include rsp-low.h. + * ax.c: Include rsp-low.h. + * Makefile.in (SFILES): Add common/rsp-low.c. + (OBS): Add rsp-low.o. + (rsp-low.o): New target. + +2014-02-12 Tom Tromey <tromey@redhat.com> + * utils.h (pulongest, plongest, phex_nz): Don't declare. Include print-utils.h. * utils.c (NUMCELLS, CELLSIZE, get_cell, decimal2str, pulongest) diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 654dfca..5f69ddb 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -163,7 +163,8 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \ $(srcdir)/common/linux-osdata.c $(srcdir)/common/ptid.c \ $(srcdir)/common/buffer.c $(srcdir)/common/linux-btrace.c \ $(srcdir)/common/filestuff.c $(srcdir)/target/waitstatus.c \ - $(srcdir)/common/mips-linux-watch.c $(srcdir)/common/print-utils.c + $(srcdir)/common/mips-linux-watch.c $(srcdir)/common/print-utils.c \ + $(srcdir)/common/rsp-low.c DEPFILES = @GDBSERVER_DEPFILES@ @@ -176,7 +177,7 @@ OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o \ target.o waitstatus.o utils.o debug.o version.o vec.o gdb_vecs.o \ mem-break.o hostio.o event-loop.o tracepoint.o xml-utils.o \ common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.o \ - tdesc.o print-utils.o $(XML_BUILTIN) $(DEPFILES) $(LIBOBJS) + tdesc.o print-utils.o rsp-low.o $(XML_BUILTIN) $(DEPFILES) $(LIBOBJS) GDBREPLAY_OBS = gdbreplay.o version.o GDBSERVER_LIBS = @GDBSERVER_LIBS@ XM_CLIBS = @LIBS@ @@ -485,6 +486,9 @@ signals.o: ../common/signals.c print-utils.o: ../common/print-utils.c $(COMPILE) $< $(POSTCOMPILE) +rsp-low.o: ../common/rsp-low.c + $(COMPILE) $< + $(POSTCOMPILE) linux-procfs.o: ../common/linux-procfs.c $(COMPILE) $< $(POSTCOMPILE) diff --git a/gdb/gdbserver/ax.c b/gdb/gdbserver/ax.c index d0f5b30..f62a613 100644 --- a/gdb/gdbserver/ax.c +++ b/gdb/gdbserver/ax.c @@ -20,6 +20,7 @@ #include "ax.h" #include "format.h" #include "tracepoint.h" +#include "rsp-low.h" static void ax_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2); diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c index ee4e2a8..f51e498 100644 --- a/gdb/gdbserver/regcache.c +++ b/gdb/gdbserver/regcache.c @@ -20,6 +20,7 @@ #include "regdef.h" #include "gdbthread.h" #include "tdesc.h" +#include "rsp-low.h" #include <stdlib.h> #include <string.h> diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c index 3b88995..b835175 100644 --- a/gdb/gdbserver/remote-utils.c +++ b/gdb/gdbserver/remote-utils.c @@ -22,6 +22,7 @@ #include "gdbthread.h" #include "tdesc.h" #include "dll.h" +#include "rsp-low.h" #include <stdio.h> #include <string.h> @@ -417,66 +418,10 @@ remote_close (void) reset_readchar (); } -/* Convert hex digit A to a number. */ - -static int -fromhex (int a) -{ - if (a >= '0' && a <= '9') - return a - '0'; - else if (a >= 'a' && a <= 'f') - return a - 'a' + 10; - else - error ("Reply contains invalid hex digit"); - return 0; -} - #endif -static const char hexchars[] = "0123456789abcdef"; - -static int -ishex (int ch, int *val) -{ - if ((ch >= 'a') && (ch <= 'f')) - { - *val = ch - 'a' + 10; - return 1; - } - if ((ch >= 'A') && (ch <= 'F')) - { - *val = ch - 'A' + 10; - return 1; - } - if ((ch >= '0') && (ch <= '9')) - { - *val = ch - '0'; - return 1; - } - return 0; -} - #ifndef IN_PROCESS_AGENT -int -unhexify (char *bin, const char *hex, int count) -{ - int i; - - for (i = 0; i < count; i++) - { - if (hex[0] == 0 || hex[1] == 0) - { - /* Hex string is short, or of uneven length. - Return the count that has been converted so far. */ - return i; - } - *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]); - hex += 2; - } - return i; -} - void decode_address (CORE_ADDR *addrp, const char *start, int len) { @@ -512,118 +457,8 @@ decode_address_to_semicolon (CORE_ADDR *addrp, const char *start) #endif -/* Convert number NIB to a hex digit. */ - -static int -tohex (int nib) -{ - if (nib < 10) - return '0' + nib; - else - return 'a' + nib - 10; -} - #ifndef IN_PROCESS_AGENT -int -hexify (char *hex, const char *bin, int count) -{ - int i; - - /* May use a length, or a nul-terminated string as input. */ - if (count == 0) - count = strlen (bin); - - for (i = 0; i < count; i++) - { - *hex++ = tohex ((*bin >> 4) & 0xf); - *hex++ = tohex (*bin++ & 0xf); - } - *hex = 0; - return i; -} - -/* Convert BUFFER, binary data at least LEN bytes long, into escaped - binary data in OUT_BUF. Set *OUT_LEN to the length of the data - encoded in OUT_BUF, and return the number of bytes in OUT_BUF - (which may be more than *OUT_LEN due to escape characters). The - total number of bytes in the output buffer will be at most - OUT_MAXLEN. */ - -int -remote_escape_output (const gdb_byte *buffer, int len, - gdb_byte *out_buf, int *out_len, - int out_maxlen) -{ - int input_index, output_index; - - output_index = 0; - for (input_index = 0; input_index < len; input_index++) - { - gdb_byte b = buffer[input_index]; - - if (b == '$' || b == '#' || b == '}' || b == '*') - { - /* These must be escaped. */ - if (output_index + 2 > out_maxlen) - break; - out_buf[output_index++] = '}'; - out_buf[output_index++] = b ^ 0x20; - } - else - { - if (output_index + 1 > out_maxlen) - break; - out_buf[output_index++] = b; - } - } - - *out_len = input_index; - return output_index; -} - -/* Convert BUFFER, escaped data LEN bytes long, into binary data - in OUT_BUF. Return the number of bytes written to OUT_BUF. - Raise an error if the total number of bytes exceeds OUT_MAXLEN. - - This function reverses remote_escape_output. It allows more - escaped characters than that function does, in particular because - '*' must be escaped to avoid the run-length encoding processing - in reading packets. */ - -static int -remote_unescape_input (const gdb_byte *buffer, int len, - gdb_byte *out_buf, int out_maxlen) -{ - int input_index, output_index; - int escaped; - - output_index = 0; - escaped = 0; - for (input_index = 0; input_index < len; input_index++) - { - gdb_byte b = buffer[input_index]; - - if (output_index + 1 > out_maxlen) - error ("Received too much data from the target."); - - if (escaped) - { - out_buf[output_index++] = b ^ 0x20; - escaped = 0; - } - else if (b == '}') - escaped = 1; - else - out_buf[output_index++] = b; - } - - if (escaped) - error ("Unmatched escape character in target response."); - - return output_index; -} - /* Look for a sequence of characters which can be run-length encoded. If there are any, update *CSUM and *P. Otherwise, output the single character. Return the number of characters consumed. */ @@ -670,23 +505,6 @@ try_rle (char *buf, int remaining, unsigned char *csum, char **p) #endif -char * -unpack_varlen_hex (char *buff, /* packet to parse */ - ULONGEST *result) -{ - int nibble; - ULONGEST retval = 0; - - while (ishex (*buff, &nibble)) - { - buff++; - retval = retval << 4; - retval |= nibble & 0x0f; - } - *result = retval; - return buff; -} - #ifndef IN_PROCESS_AGENT /* Write a PTID to BUF. Returns BUF+CHARACTERS_WRITTEN. */ @@ -1230,36 +1048,8 @@ write_enn (char *buf) #endif -void -convert_int_to_ascii (const unsigned char *from, char *to, int n) -{ - int nib; - int ch; - while (n--) - { - ch = *from++; - nib = ((ch & 0xf0) >> 4) & 0x0f; - *to++ = tohex (nib); - nib = ch & 0x0f; - *to++ = tohex (nib); - } - *to++ = 0; -} - #ifndef IN_PROCESS_AGENT -void -convert_ascii_to_int (const char *from, unsigned char *to, int n) -{ - int nib1, nib2; - while (n--) - { - nib1 = fromhex (*from++); - nib2 = fromhex (*from++); - *to++ = (((nib1 & 0x0f) << 4) & 0xf0) | (nib2 & 0x0f); - } -} - static char * outreg (struct regcache *regcache, int regno, char *buf) { diff --git a/gdb/gdbserver/remote-utils.h b/gdb/gdbserver/remote-utils.h index f2f1aa3..a79a35f 100644 --- a/gdb/gdbserver/remote-utils.h +++ b/gdb/gdbserver/remote-utils.h @@ -44,8 +44,6 @@ void initialize_async_io (void); void enable_async_io (void); void disable_async_io (void); void check_remote_input_interrupt_request (void); -void convert_ascii_to_int (const char *from, unsigned char *to, int n); -void convert_int_to_ascii (const unsigned char *from, char *to, int n); void new_thread_notify (int id); void dead_thread_notify (int id); void prepare_resume_reply (char *buf, ptid_t ptid, @@ -68,13 +66,6 @@ int decode_search_memory_packet (const char *buf, int packet_len, gdb_byte *pattern, unsigned int *pattern_lenp); -int unhexify (char *bin, const char *hex, int count); -int hexify (char *hex, const char *bin, int count); -int remote_escape_output (const gdb_byte *buffer, int len, - gdb_byte *out_buf, int *out_len, - int out_maxlen); -char *unpack_varlen_hex (char *buff, ULONGEST *result); - void clear_symbol_cache (struct sym_cache **symcache_p); int look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb); diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 88354be..e09f2d5 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -21,6 +21,7 @@ #include "agent.h" #include "notif.h" #include "tdesc.h" +#include "rsp-low.h" #include <ctype.h> #include <unistd.h> diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c index 3706577..c61f1d5 100644 --- a/gdb/gdbserver/tracepoint.c +++ b/gdb/gdbserver/tracepoint.c @@ -20,6 +20,7 @@ #include "tracepoint.h" #include "gdbthread.h" #include "agent.h" +#include "rsp-low.h" #include <ctype.h> #include <fcntl.h> |