From 9cb602e111d316e5c1f857fbd2f33f5dfbc275b3 Mon Sep 17 00:00:00 2001 From: John Gilmore Date: Fri, 25 Oct 1991 09:03:36 +0000 Subject: [PATCH] (value_fetch_lazy): Avoid 0-length fetches. --- gdb/ChangeLog | 4 ++++ gdb/valops.c | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f7ad1dda78..f999d4e221 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +Fri Oct 25 02:02:13 1991 John Gilmore (gnu at cygnus.com) + + * valops.c (value_fetch_lazy): Avoid 0-length fetches. + Thu Oct 24 23:06:40 1991 Fred Fish (fnf at cygnus.com) * dwarfread.c: Add casts to remove compiler warnings. diff --git a/gdb/valops.c b/gdb/valops.c index 614317f537..07c96af55b 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -163,6 +163,9 @@ value_at_lazy (type, addr) data from the user's process, and clears the lazy flag to indicate that the data in the buffer is valid. + If the value is zero-length, we avoid calling read_memory, which would + abort. We mark the value as fetched anyway -- all 0 bytes of it. + This function returns a value because it is used in the VALUE_CONTENTS macro as part of an expression, where a void would not work. The value is ignored. */ @@ -173,8 +176,9 @@ value_fetch_lazy (val) { CORE_ADDR addr = VALUE_ADDRESS (val) + VALUE_OFFSET (val); - read_memory (addr, VALUE_CONTENTS_RAW (val), - TYPE_LENGTH (VALUE_TYPE (val))); + if (TYPE_LENGTH (VALUE_TYPE (val))) + read_memory (addr, VALUE_CONTENTS_RAW (val), + TYPE_LENGTH (VALUE_TYPE (val))); VALUE_LAZY (val) = 0; return 0; }