* go32-nat.c (read_memory_region): Make sure the segment limit was
authorEli Zaretskii <eliz@gnu.org>
Thu, 26 Jul 2001 14:41:16 +0000 (14:41 +0000)
committerEli Zaretskii <eliz@gnu.org>
Thu, 26 Jul 2001 14:41:16 +0000 (14:41 +0000)
indeed set, to work around a Windows 2000 bug.

gdb/ChangeLog
gdb/go32-nat.c

index 921fbdd..57ad491 100644 (file)
@@ -1,3 +1,8 @@
+2001-07-26  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * go32-nat.c (read_memory_region): Make sure the segment limit was
+       indeed set, to work around a Windows 2000 bug.
+
 2001-07-25  Daniel Jacobowitz  <drow@mvista.com>
 
        * infptrace.c (child_xfer_memory): Add cast to CORE_ADDR.
index fce7a0f..b2828eb 100644 (file)
@@ -1331,7 +1331,10 @@ read_memory_region (unsigned long addr, void *dest, size_t len)
 
          if (__dpmi_set_segment_base_address (sel, addr) != -1
              && __dpmi_set_descriptor_access_rights (sel, access_rights) != -1
-             && __dpmi_set_segment_limit (sel, segment_limit) != -1)
+             && __dpmi_set_segment_limit (sel, segment_limit) != -1
+             /* W2K silently fails to set the segment limit, leaving
+                it at zero; this test avoids the resulting crash.  */
+             && __dpmi_get_segment_limit (sel) >= segment_limit)
            movedata (sel, 0, _my_ds (), (unsigned)dest, len);
          else
            retval = 0;