From 8f0ee2eb7cf9df1a173b72f1542a9b555d7b5cb8 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 2 Oct 2012 15:05:42 +0000 Subject: [PATCH] gdb_bfd_unref failed assertion on AIX. Trying to run any program on AIX triggers a failed assertion: (gdb) run Starting program: /[...]/simple_main /[...]/gdb_bfd.c:288: internal-error: gdb_bfd_unref: Assertion `gdata->refc >= 1' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) What happens is that we have a loop where we forgot to update the value of "last", resulting in the loop unref'ing the same BFD over and over again. We bomb the second time around, when triggering an assertion on the ref counter. gdb/ChangeLog: * rs6000-nat.c (add_vmap): Set "last" to "next" after having unref'ed it. --- gdb/ChangeLog | 5 +++++ gdb/rs6000-nat.c | 1 + 2 files changed, 6 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 20631b5..0333167 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-10-02 Joel Brobecker + + * rs6000-nat.c (add_vmap): Set "last" to "next" after having + unref'ed it. + 2012-10-01 Andrew Burgess * target.c (simple_search_memory): Include access length in diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 3eb2cd7..2d2df5b 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -771,6 +771,7 @@ add_vmap (LdInfo *ldi) next = gdb_bfd_openr_next_archived_file (abfd, last); gdb_bfd_unref (last); + last = next; } if (!last) -- 2.7.4