aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2008-05-08 19:46:56 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2008-05-08 19:46:56 +0000
commitbb9c3d36f1a4279fec29a3dd54356fd4438f524b (patch)
tree56d856c261d60772acec472fb6ad7841c2c01837
parent75517b77b595b05bd37bf337c1fb23557efbf4bc (diff)
downloadbinutils-bb9c3d36f1a4279fec29a3dd54356fd4438f524b.zip
binutils-bb9c3d36f1a4279fec29a3dd54356fd4438f524b.tar.gz
binutils-bb9c3d36f1a4279fec29a3dd54356fd4438f524b.tar.bz2
* regcache.c (registers_length): Remove.
(set_register_cache): Verify that PBUFSIZ is large enough to hold a full register packet. * regcache.h (registers_length): Remove prototype. * server.h (PBUFSIZ): Define to 16384.
-rw-r--r--gdb/gdbserver/ChangeLog8
-rw-r--r--gdb/gdbserver/regcache.c10
-rw-r--r--gdb/gdbserver/regcache.h4
-rw-r--r--gdb/gdbserver/server.h9
4 files changed, 16 insertions, 15 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index da5402c..ab53964 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,11 @@
+2008-05-08 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * regcache.c (registers_length): Remove.
+ (set_register_cache): Verify that PBUFSIZ is large enough to hold a
+ full register packet.
+ * regcache.h (registers_length): Remove prototype.
+ * server.h (PBUFSIZ): Define to 16384.
+
2008-05-03 Ulrich Weigand <uweigand@de.ibm.com>
* configure.srv (powerpc*-*-linux*): Set srv_regobj to
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index a42d95b..a324d43 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -86,12 +86,6 @@ regcache_invalidate ()
for_each_inferior (&all_threads, regcache_invalidate_one);
}
-int
-registers_length (void)
-{
- return 2 * register_bytes;
-}
-
void *
new_register_cache (void)
{
@@ -147,6 +141,10 @@ set_register_cache (struct reg *regs, int n)
register_bytes = offset / 8;
+ /* Make sure PBUFSIZ is large enough to hold a full register packet. */
+ if (2 * register_bytes + 32 > PBUFSIZ)
+ fatal ("Register packet size exceeds PBUFSIZ.");
+
/* Re-allocate all pre-existing register caches. */
for_each_inferior (&all_threads, realloc_register_cache);
}
diff --git a/gdb/gdbserver/regcache.h b/gdb/gdbserver/regcache.h
index 641f928..48782ff 100644
--- a/gdb/gdbserver/regcache.h
+++ b/gdb/gdbserver/regcache.h
@@ -43,10 +43,6 @@ void registers_to_string (char *buf);
void registers_from_string (char *buf);
-/* Return the size in bytes of a string-encoded register packet. */
-
-int registers_length (void);
-
/* Return a pointer to the description of register ``n''. */
struct reg *find_register_by_number (int n);
diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h
index 9238766..9d6c751 100644
--- a/gdb/gdbserver/server.h
+++ b/gdb/gdbserver/server.h
@@ -225,11 +225,10 @@ void warning (const char *string,...) ATTR_FORMAT (printf, 1, 2);
is chosen to fill up a packet (the headers account for the 32). */
#define MAXBUFBYTES(N) (((N)-32)/2)
-/* Buffer sizes for transferring memory, registers, etc. Round up PBUFSIZ to
- hold all the registers, at least. */
-#define PBUFSIZ ((registers_length () + 32 > 2000) \
- ? (registers_length () + 32) \
- : 2000)
+/* Buffer sizes for transferring memory, registers, etc. Set to a constant
+ value to accomodate multiple register formats. This value must be at least
+ as large as the largest register set supported by gdbserver. */
+#define PBUFSIZ 16384
/* Version information, from version.c. */
extern const char version[];