From: Yuanhui Zhang Date: Mon, 24 Feb 2014 07:22:10 +0000 (+0800) Subject: Fix a GDB assert failure on windows X-Git-Tag: gdb-7.8-release~1002 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0837c976950e347cc48a1c55c6c8d60fc710c168;p=external%2Fbinutils.git Fix a GDB assert failure on windows A GDB internal error is found on native mingw32 target. (gdb) run ../../binutils-gdb/gdb/target.c:1483: internal-error: target_xfer_partial: Assertion `*xfered_len > 0' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) This error was introduced by the following snippet in commit 9b409511d07fe375284701af34909fb539029caf > @@ -2536,27 +2538,30 @@ windows_xfer_shared_libraries (struct target_ops *ops, > } > > obstack_free (&obstack, NULL); > - return len; > + *xfered_len = (ULONGEST) len; > + return TARGET_XFER_OK; > } In the original code, len is returned, which could be 0, but after that commit, only TARGET_XFER_OK is returned, which is wrong. If len is 0, TARGET_XFER_EOF should be returned. (it is 0 in enum target_xfer_status declaration). gdb: 2014-02-24 Yuanhui Zhang * windows-nat.c (windows_xfer_shared_libraries): Return TARGET_XFER_EOF if LEN is zero to fix an assert failure when requested object is TARGET_OBJECT_LIBRARIES. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5fdbf4f..bc8573c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2014-02-24 Yuanhui Zhang + + * windows-nat.c (windows_xfer_shared_libraries): Return + TARGET_XFER_EOF if LEN is zero to fix an assert failure when + requested object is TARGET_OBJECT_LIBRARIES. + 2014-02-24 Yao Qi * target.h (enum target_xfer_status) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 4366aab..6c45d0a 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -2501,7 +2501,7 @@ windows_xfer_shared_libraries (struct target_ops *ops, obstack_free (&obstack, NULL); *xfered_len = (ULONGEST) len; - return TARGET_XFER_OK; + return len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF; } static enum target_xfer_status